You've already forked gitified_old_clb_svn
333 lines
9.8 KiB
Makefile
333 lines
9.8 KiB
Makefile
# Path setup
|
|
|
|
OBJ_DIR := obj
|
|
EXE_DIR := exe
|
|
DEP_DIR := dep
|
|
LST_DIR := lst
|
|
|
|
QUOTE := "
|
|
|
|
ROOT_PATH := ../..
|
|
|
|
EMB_PATH := $(ROOT_PATH)/..
|
|
|
|
SW_PATH := $(ROOT_PATH)/../..
|
|
|
|
PRJ_PATH := $(ROOT_PATH)/../../..
|
|
|
|
SRC_DIR := $(ROOT_PATH)/src
|
|
TOOL_DIR := $(ROOT_PATH)/tools
|
|
|
|
FW_DIR := $(PRJ_PATH)/fw
|
|
|
|
UNAME := $(shell uname)
|
|
|
|
UPLOAD_IMP := upload.imp
|
|
UPDATE_IMP := update.imp
|
|
|
|
ifneq ($(UNAME), Linux)
|
|
GCC_LM32_SUFFIX := .exe
|
|
endif
|
|
|
|
ifndef GCC_LM32_PREFIX
|
|
GCC_LM32_PREFIX := lm32-elf-
|
|
endif
|
|
|
|
ifdef GCC_LM32_BIN
|
|
GCC_LM32_BIN_P := $(subst \,/,$(GCC_LM32_BIN))/
|
|
endif
|
|
|
|
ifdef ISE_BIN_DIR
|
|
ISE_BIN_DIR_P := $(ISE_BIN_DIR)/
|
|
endif
|
|
|
|
ifdef MAC_BROADCAST
|
|
WRC_MAC := $(EMB_PATH)/WRPC/wrc_broadcast.elf
|
|
else
|
|
WRC_MAC := $(EMB_PATH)/WRPC/wrc_mac.elf
|
|
endif
|
|
|
|
|
|
# These defines are used for generating the new Java MSG Types when a new command is added
|
|
H_MSGTYPES_FILE := $(ROOT_PATH)/cfg/cfg_msg.h
|
|
J_MSGTYPES_SRC_DIR := $(SW_PATH)/standard/CLBv2_Remote/src
|
|
J_MSGTPYES_FILE := $(J_MSGTYPES_SRC_DIR)/org/km3net/clbv2/remote/MsgTypes.java
|
|
|
|
|
|
# These defines are used for generating the process variables
|
|
VARS_FILE := $(ROOT_PATH)/vars/variables.csv
|
|
C_VARS_ROOT_DIR := $(SRC_DIR)/app
|
|
C_VARS_SRC_DIR := pv
|
|
C_VARS_SRC_BASE_NAME := vars
|
|
J_VARS_ROOT_DIR := $(SW_PATH)/standard/CLBv2_Remote/src
|
|
J_VARS_CLASS := org.km3net.clbv2.remote.pv.ProcVar
|
|
|
|
ifneq ($(MAKECMDGOALS),clean)
|
|
ifeq ($(TARGET),KC705_SPLL)
|
|
FW_SYN_PATH := $(FW_DIR)/CLBv2_Design/clb/syn/kc705
|
|
WR_ELFFILE := $(WRC_MAC).elf
|
|
CFLAGS := -DKC705 -DWHITERABBIT
|
|
BIN_SUFFIX := kc705spll
|
|
else
|
|
ifeq ($(TARGET),KC705_SFP)
|
|
FW_SYN_PATH := $(FW_DIR)/CLBv2_Design/clb/syn/kc705_without_softpll
|
|
WR_ELFFILE := sfp_mac.elf
|
|
BIN_SUFFIX := kc705sfp
|
|
CFLAGS += -DKC705
|
|
else
|
|
ifeq ($(TARGET),CLBV2_PROTO)
|
|
FW_SYN_PATH := $(FW_DIR)/CLBv2_Design/clb/syn/proto
|
|
WR_ELFFILE := $(WRC_MAC)
|
|
BIN_SUFFIX := proto
|
|
CFLAGS := -DCLBV2 -DWHITERABBIT
|
|
else
|
|
ifeq ($(TARGET),CLBV2_2)
|
|
FW_SYN_PATH := $(FW_DIR)/CLBv2_Design/clb/syn/v2_2
|
|
WR_ELFFILE := $(WRC_MAC)
|
|
BIN_SUFFIX := v22
|
|
CFLAGS := -DCLBV2 -DWHITERABBIT
|
|
else
|
|
ifeq ($(TARGET),CLBV2_2_1)
|
|
FW_SYN_PATH := $(FW_DIR)/CLBv2_Design/clb/syn/v2_2_1
|
|
WR_ELFFILE := $(WRC_MAC)
|
|
BIN_SUFFIX := v221
|
|
CFLAGS := -DCLBV2 -DWHITERABBIT
|
|
else
|
|
ifeq ($(TARGET),CLBV2_PRES1)
|
|
FW_SYN_PATH := $(FW_DIR)/CLBv2_Design/clb/syn/preserie1
|
|
WR_ELFFILE := $(WRC_MAC)
|
|
CFLAGS := -DCLBV2 -DWHITERABBIT
|
|
BIN_SUFFIX := v2pre1
|
|
else
|
|
ifeq ($(TARGET),CLBV2X_PROTO)
|
|
# Nikhef internal. will not work outside my environment (Vincent)
|
|
FW_SYN_PATH := $(FW_DIR)/CLBv2_Design/clb/syn/proto_xc325t
|
|
#FW_SYN_PATH := ../../../../../proto_xc325t
|
|
WR_ELFFILE := $(WRC_MAC)
|
|
CFLAGS := -DCLBV2 -DCLBV2X -DWHITERABBIT
|
|
else
|
|
ifeq ($(TARGET),CLBV2_2_1_CUSTOM)
|
|
FW_SYN_PATH := $(FW_DIR)/CLBv2_Design/clb/syn/custom
|
|
WR_ELFFILE := $(WRC_MAC)
|
|
BIN_SUFFIX := v221
|
|
CFLAGS := -DCLBV2 -DWHITERABBIT
|
|
else
|
|
$(error Must select target 'TARGET=[KC705_UART|KC705_SPLL|KC705_SFP|CLBV2_PROTO|CLBV2_2|CLBV2_2_1|CLBV2_PRES1]', was $(TARGET))
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
ifdef MAC_BROADCAST
|
|
BIN_NAME := $(PROJECTNAME)_$(BIN_SUFFIX)_bc
|
|
else
|
|
BIN_NAME := $(PROJECTNAME)_$(BIN_SUFFIX)
|
|
endif
|
|
|
|
|
|
# For creating the resulting bit file
|
|
ifdef JENKINS
|
|
FW_BITFILE := $(FW_SYN_PATH)/bash/fpga.bit
|
|
FW_BMMFILE := $(FW_SYN_PATH)/bash/fpga_bd.bmm
|
|
else
|
|
FW_BITFILE := $(FW_SYN_PATH)/fpga.bit
|
|
FW_BMMFILE := $(FW_SYN_PATH)/fpga_bd.bmm
|
|
endif
|
|
|
|
# Integration of the white-rabbit LM32 ELF-file
|
|
BMM_TAG_WRPC := lm32_wrpc_memory
|
|
BMM_TAG_2LM := lm32_2nd_memory
|
|
|
|
RM := rm -rf
|
|
MV := mv
|
|
CP := cp
|
|
CC := $(QUOTE)$(GCC_LM32_BIN_P)$(GCC_LM32_PREFIX)gcc$(GCC_LM32_SUFFIX)$(QUOTE)
|
|
LD := $(QUOTE)$(GCC_LM32_BIN_P)$(GCC_LM32_PREFIX)ld$(QUOTE)
|
|
AR := $(QUOTE)$(GCC_LM32_BIN_P)$(GCC_LM32_PREFIX)ar$(QUOTE)
|
|
OBJCOPY := $(QUOTE)$(GCC_LM32_BIN_P)$(GCC_LM32_PREFIX)objcopy$(QUOTE)
|
|
DUMP := $(QUOTE)$(GCC_LM32_BIN_P)$(GCC_LM32_PREFIX)objdump$(QUOTE)
|
|
|
|
D2M := $(QUOTE)$(ISE_BIN_DIR_P)data2mem$(QUOTE)
|
|
IMPACT := $(QUOTE)$(ISE_BIN_DIR_P)impact$(QUOTE)
|
|
ifneq ($(UNAME), Linux)
|
|
PYTHON := python
|
|
else
|
|
PYTHON := python2.7
|
|
endif
|
|
|
|
PYTHON_VERSION := $(shell $(QUOTE)$(PYTHON)$(QUOTE) --version 2>&1)
|
|
|
|
GCCVERSION := $(shell $(CC) -dumpversion)
|
|
|
|
CFLAGS := $(CFLAGS) -DIMAGETYPE=$(IMAGETYPE) $(DEFINES) -c -std=gnu99 -mbarrel-shift-enabled -mmultiply-enabled -msign-extend-enabled \
|
|
-Os -g3 -ffunction-sections -Wall -fno-builtin -nostdlib -nostdinc
|
|
|
|
DEPFLAGS = -MT $@ -MMD -MP -MF $(DEP_DIR)/$*.d
|
|
|
|
ifdef DEBUG
|
|
CFLAGS := -DDEBUG $(CFLAGS)
|
|
endif
|
|
|
|
|
|
ASMFLAGS := -Wall -c
|
|
|
|
LDFLAGS := -T../romram.ld -Wl,-Map=$(LST_DIR)/$(PROJECTNAME).map -Wl,--gc-sections -nostartfiles -nostdinc
|
|
|
|
LIBS := -Wl,--start-group -lc -Wl,--end-group
|
|
|
|
INC_ARGS:= $(addprefix -I$(SRC_DIR)/,$(INCLUDE))
|
|
|
|
C_PATHS := $(addprefix $(SRC_DIR)/,$(C_SRC))
|
|
S_PATHS := $(addprefix $(SRC_DIR)/,$(S_SRC))
|
|
|
|
C_FILES := $(notdir $(C_PATHS) )
|
|
S_FILES := $(notdir $(S_PATHS) )
|
|
|
|
C_OBJS := $(addprefix $(OBJ_DIR)/, $(C_FILES:.c=.o))
|
|
S_OBJS := $(addprefix $(OBJ_DIR)/, $(S_FILES:.S=.o))
|
|
C_DEPS := $(addprefix $(DEP_DIR)/, $(C_FILES:.c=.d))
|
|
|
|
SECTIONS :=-j .boot -j .text -j .rodata -j .data -j .crc32
|
|
|
|
vpath %.c $(sort $(dir $(C_PATHS) ) )
|
|
vpath %.S $(sort $(dir $(S_PATHS) ) )
|
|
|
|
# Default build is debug build
|
|
all: $(DEP_DIR) $(OBJ_DIR) $(LST_DIR) $(EXE_DIR) $(EXE_DIR)/$(BIN_NAME).bit
|
|
|
|
# Create directories
|
|
$(OBJ_DIR):
|
|
mkdir $(OBJ_DIR)
|
|
@echo "Created build directory."
|
|
|
|
$(EXE_DIR):
|
|
mkdir $(EXE_DIR)
|
|
@echo "Created executable directory."
|
|
|
|
$(LST_DIR):
|
|
mkdir $(LST_DIR)
|
|
@echo "Created list directory."
|
|
|
|
$(DEP_DIR):
|
|
mkdir $(DEP_DIR)
|
|
@echo "Created dependency directory."
|
|
|
|
|
|
# Create objects from C SRC files
|
|
$(OBJ_DIR)/%.o: %.c
|
|
$(OBJ_DIR)/%.o: %.c $(DEP_DIR)/%.d | $(DEP_DIR)
|
|
@echo "Building file: $<"
|
|
$(CC) $(DEPFLAGS) $(INC_ARGS) $(CFLAGS) "$<" -o $@
|
|
|
|
# Assemble .s files
|
|
$(OBJ_DIR)/%.o: %.S
|
|
@echo "Assembling $<"
|
|
$(CC) $(DEPFLAGS) $(INC_ARGS) $(ASMFLAGS) "$<" -o $@
|
|
|
|
$(C_DEPS):
|
|
|
|
|
|
# Extract all message types in MCF from the C header file,
|
|
# and generate a Java class with these constants
|
|
$(J_MSGTPYES_FILE): $(H_MSGTYPES_FILE)
|
|
@echo "Exporting message types to Remote Control API"
|
|
ifdef PYTHON_VERSION
|
|
$(PYTHON) $(TOOL_DIR)/msg2java.py $(H_MSGTYPES_FILE) $(J_MSGTYPES_SRC_DIR)
|
|
else
|
|
@echo "Warning, Python is not found, Java Message Types not generated"
|
|
endif
|
|
|
|
|
|
# Generate a Python and Java variable definitons.
|
|
../../src/app/pv/vars.c ../../src/app/pv/vars.h: $(VARS_FILE)
|
|
@echo "Exporting variables "
|
|
ifdef PYTHON_VERSION
|
|
$(PYTHON) $(TOOL_DIR)/makevars.py $(VARS_FILE) \
|
|
$(C_VARS_ROOT_DIR) $(C_VARS_SRC_DIR) $(C_VARS_SRC_BASE_NAME) \
|
|
$(J_VARS_ROOT_DIR) $(J_VARS_CLASS) \
|
|
$(ROOT_PATH)/doc/variables.html
|
|
else
|
|
@echo "Warning, Python is not found, Java variables not generated"
|
|
endif
|
|
|
|
|
|
# Link
|
|
$(EXE_DIR)/$(BIN_NAME).elf: $(C_OBJS) $(CPP_OBJS) $(S_OBJS) $(J_MSGTPYES_FILE) ../romram.ld
|
|
@echo "Linking target: $@"
|
|
ifdef PYTHON_VERSION
|
|
$(PYTHON) $(TOOL_DIR)/buildno.py build.txt clbv2
|
|
else
|
|
@echo "Warning, Python is not found, build number not modified"
|
|
endif
|
|
$(CC) $(LDFLAGS) build.txt.ld -Wl,--defsym=CRC_VALUE=0 $(S_OBJS) $(C_OBJS) $(CPP_OBJS) $(LIBS) -o $(EXE_DIR)/tmp.elf
|
|
$(OBJCOPY) $(EXE_DIR)/tmp.elf $(SECTIONS) -O binary $(EXE_DIR)/tmp.bin
|
|
$(CC) $(LDFLAGS) build.txt.ld -Wl,--defsym=CRC_VALUE=`python ../../tools/crc32.py $(EXE_DIR)/tmp.bin 0:-4` $(S_OBJS) $(C_OBJS) $(CPP_OBJS) $(LIBS) -o $(EXE_DIR)/$(BIN_NAME).elf
|
|
$(OBJCOPY) $(EXE_DIR)/$(BIN_NAME).elf $(SECTIONS) -O binary $(EXE_DIR)/$(BIN_NAME).elf.bin
|
|
$(DUMP) -S --disassemble $(EXE_DIR)/$(BIN_NAME).elf >$(LST_DIR)/$(BIN_NAME).s
|
|
$(DUMP) -t -h $(EXE_DIR)/$(BIN_NAME).elf > $(LST_DIR)/$(BIN_NAME).dump
|
|
|
|
|
|
ifdef PYTHON_VERSION
|
|
python $(TOOL_DIR)/parseobjdump.py $(LST_DIR)/$(BIN_NAME).dump ROM=0x1CA00 RAM=0x3580
|
|
endif
|
|
|
|
# Create binary file
|
|
$(EXE_DIR)/$(BIN_NAME).bit: $(EXE_DIR)/$(BIN_NAME).elf $(FW_BITFILE) $(FW_BMMFILE) $(WRC_MAC)
|
|
@echo "Creating binary file"
|
|
@echo "Using MAC: $(WRC_MAC)"
|
|
ifdef WR_ELFFILE
|
|
$(D2M) -bm $(FW_BMMFILE) \
|
|
-bd $(WR_ELFFILE) tag $(BMM_TAG_WRPC) \
|
|
-bd $(EXE_DIR)/$(BIN_NAME).elf tag $(BMM_TAG_2LM) \
|
|
-bt $(FW_BITFILE) -o b $(EXE_DIR)/$(BIN_NAME).bit
|
|
else
|
|
$(D2M) -bm $(FW_BMMFILE) -bd $(EXE_DIR)/$(BIN_NAME).elf -bt $(FW_BITFILE) -o b $(EXE_DIR)/$(BIN_NAME).bit
|
|
endif
|
|
|
|
upload: $(EXE_DIR)/$(BIN_NAME).bit
|
|
@echo "Uploading"
|
|
$(CP) -u $(EXE_DIR)/$(BIN_NAME).bit $(EXE_DIR)/tmp.bit
|
|
$(IMPACT) -batch ../$(UPLOAD_IMP)
|
|
$(RM) $(EXE_DIR)/tmp.bit
|
|
|
|
update: $(EXE_DIR)/$(BIN_NAME).bit
|
|
@echo "Generating update images"
|
|
|
|
ifdef PYTHON_VERSION
|
|
$(CP) -u $(EXE_DIR)/$(BIN_NAME).bit $(EXE_DIR)/tmp.bit
|
|
$(IMPACT) -batch ../bin_$(UPDATE_IMP)
|
|
$(IMPACT) -batch ../mcs_$(UPDATE_IMP)
|
|
$(RM) $(EXE_DIR)/tmp.bit
|
|
$(MV) $(EXE_DIR)/tmp.bin $(EXE_DIR)/$(BIN_NAME).bin
|
|
$(MV) $(EXE_DIR)/tmp.mcs $(EXE_DIR)/$(BIN_NAME).mcs
|
|
|
|
python $(TOOL_DIR)/buildtoimg.py build.txt $(EXE_DIR)/$(BIN_NAME).bit $(IMAGETYPE) $(EXE_DIR)/$(BIN_NAME).bin
|
|
|
|
else
|
|
@echo "Warning, Python not found. Can not make runtime image
|
|
endif
|
|
|
|
|
|
clean:
|
|
$(RM) $(OBJ_DIR) $(LST_DIR) $(EXE_DIR)
|
|
$(RM) $(C_VARS_ROOT_DIR)/$(C_VARS_SRC_DIR)/$(C_VARS_SRC_BASE_NAME).c
|
|
$(RM) $(C_VARS_ROOT_DIR)/$(C_VARS_SRC_DIR)/$(C_VARS_SRC_BASE_NAME).h
|
|
|
|
test:
|
|
@echo $(GCC_LM32_PREFIX)
|
|
|
|
|
|
include $(wildcard $(C_DEPS))
|
|
|
|
|
|
# include auto-generated dependency files (explicit rules)
|
|
ifneq (clean,$(findstring clean, $(MAKECMDGOALS)))
|
|
-include $(C_DEPS)
|
|
endif
|
|
|