You've already forked gitified_old_clb_svn
347 lines
11 KiB
Makefile
347 lines
11 KiB
Makefile
####################################################################
|
|
# Makefile #
|
|
####################################################################
|
|
|
|
.SUFFIXES: # ignore builtin rules
|
|
.PHONY: all debug release
|
|
|
|
####################################################################
|
|
# Definitions #
|
|
####################################################################
|
|
|
|
PROJECTNAME :=clbv2app
|
|
|
|
|
|
# Possbile targets:
|
|
# TARGET=CLBV2_PROTO - CLB v2 proto
|
|
# TARGET=CLBV2_2 - CLB v2.2 proto
|
|
# TARGET=CLBV2_PRES1 - CLB v2.2.1 proto
|
|
# TARGET=KC705_SFP - KC705 with ethernet over SPF (no white rabbit)
|
|
# TARGET=KC705_SPLL - KC705 with ethernet over softPLL
|
|
# TARGET=KC705_UART - KC705 with UART ethernet bridge (no white rabbit)
|
|
|
|
|
|
|
|
OBJ_DIR := obj
|
|
EXE_DIR := exe
|
|
LST_DIR := lst
|
|
|
|
UNAME := $(shell uname)
|
|
|
|
|
|
####################################################################
|
|
# Definitions of toolchain. #
|
|
# You might need to do changes to match your system setup #
|
|
# For now, there is configuration for Linux and Other is Windows #
|
|
####################################################################
|
|
|
|
UPLOAD_IMP = upload.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
|
|
|
|
# This generates the new Java MSG Types when a new command is added
|
|
H_MSGTYPES_FILE := ../cfg/cfg_msg.h
|
|
J_MSGTYPES_SRC_DIR := ../../../standard/CLBv2_Remote/src
|
|
J_MSGTPYES_FILE := $(J_MSGTYPES_SRC_DIR)/org/km3net/clbv2/remote/MsgTypes.java
|
|
|
|
|
|
ifeq ($(TARGET),KC705_SPLL)
|
|
FW_SYN_PATH := ../../../../fw/CLBv2_Design/clb/syn/kc705
|
|
WR_ELFFILE := wrc_mac.elf
|
|
CFLAGS += -DKC705 -DWHITERABBIT
|
|
else
|
|
ifeq ($(TARGET),KC705_SFP)
|
|
FW_SYN_PATH := ../../../../fw/CLBv2_Design/clb/syn/kc705_without_softpll
|
|
WR_ELFFILE := sfp_mac.elf
|
|
CFLAGS += -DKC705
|
|
else
|
|
ifeq ($(TARGET),CLBV2_PROTO)
|
|
FW_SYN_PATH := ../../../../fw/TestDesigns/clb_test/syn/proto
|
|
WR_ELFFILE := ../../../../../tags/workshop_demo_jan2014/sw/embedded/wrc_kintex_Mieke131213.elf
|
|
CFLAGS += -DCLBV2
|
|
else
|
|
ifeq ($(TARGET),CLBV2_2)
|
|
FW_SYN_PATH := ../../../../fw/TestDesigns/clb_test/syn/v2_2
|
|
WR_ELFFILE := ../../../../../tags/workshop_demo_jan2014/sw/embedded/wrc_kintex_Mieke131213.elf
|
|
CFLAGS += -DCLBV2
|
|
else
|
|
ifeq ($(TARGET),CLBV2_PRES1)
|
|
FW_SYN_PATH := ../../../../fw/TestDesigns/clb_test/syn/preserie1
|
|
WR_ELFFILE := ../../../../../tags/workshop_demo_jan2014/sw/embedded/wrc_kintex_Mieke131213.elf
|
|
CFLAGS += -DCLBV2
|
|
else
|
|
ifeq ($(TARGET),KC705_UART)
|
|
FW_SYN_PATH := ../../../../fw/CLBv2_Design/lm32_2nd/syn/syn_top
|
|
CFLAGS += -DKC705 -DUARTBRIDGE
|
|
else
|
|
$(error Must select target 'TARGET=[KC705_UART|KC705_SPLL|KC705_SPF|CLBV2_PROTO|CLBV2_2|CLBV2_PRES1]', was $(TARGET))
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
|
|
# For creating the resulting bit file
|
|
|
|
FW_BITFILE := $(FW_SYN_PATH)/fpga.bit
|
|
FW_BMMFILE := $(FW_SYN_PATH)/fpga_bd.bmm
|
|
|
|
# Integration of the white-rabbit LM32 ELF-file
|
|
BMM_TAG_WRPC := lm32_wrpc_memory
|
|
BMM_TAG_2LM := lm32_2nd_memory
|
|
|
|
|
|
|
|
RM = rm -rf
|
|
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)
|
|
PYTHON = python
|
|
|
|
|
|
PYTHON_VERSION := $(shell $(QUOTE)$(PYTHON) --version$(QUOTE) 2>&1)
|
|
|
|
GCCVERSION = $(shell $(CC) -dumpversion)
|
|
|
|
####################################################################
|
|
# Flags #
|
|
####################################################################
|
|
|
|
# -MMD : Don't generate dependencies on system header files.
|
|
# -MP : Add phony targets, useful when a h-file is removed from a project.
|
|
# -MF : Specify a file to write the dependencies to.
|
|
DEPFLAGS = -MMD -MP -MF $(@:.o=.d)
|
|
|
|
# Add -Wa,-ahld=$(LST_DIR)/$(@F:.o=.lst) to CFLAGS to produce assembly list files
|
|
CFLAGS += -Wall -fno-builtin -nodefaultlibs -nostdinc -nodefaultlibs -nostdlib $(DEPFLAGS)
|
|
|
|
|
|
ASMFLAGS += -Wall
|
|
|
|
LDFLAGS += -Tromram.ld -nostartfiles -nodefaultlibs -nostdlib -Wl,-Map=$(LST_DIR)/$(PROJECTNAME).map -Wl,--gc-sections
|
|
|
|
LIBS = -Wl,--start-group -lgcc -Wl,--end-group
|
|
|
|
INCLUDEPATHS += \
|
|
-I../cfg \
|
|
-I../src/common \
|
|
-I../src/platform \
|
|
-I../src/app \
|
|
-I../src/ministack
|
|
|
|
|
|
####################################################################
|
|
# Files #
|
|
####################################################################
|
|
|
|
C_SRC += \
|
|
../src/common/stdio.c \
|
|
../src/common/stdlib.c \
|
|
../src/common/string.c \
|
|
../src/common/coll/queue.c \
|
|
../src/common/coll/varqueue.c \
|
|
../src/common/util/convert.c \
|
|
../src/common/util/databuffer.c \
|
|
../src/common/util/shell.c \
|
|
../src/common/util/log.c \
|
|
../src/platform/lm32soc/lm32.c \
|
|
../src/platform/kernel/sys.c \
|
|
../src/platform/kernel/err.c \
|
|
../src/platform/kernel/scheduler.c \
|
|
../src/platform/kernel/tm.c \
|
|
../src/platform/kernel/timer.c \
|
|
../src/platform/drv/wb/sdb.c \
|
|
../src/platform/drv/wb/suart.c \
|
|
../src/platform/drv/wb/hydro.c \
|
|
../src/platform/drv/wb/susm.c \
|
|
../src/platform/drv/wb/gpio.c \
|
|
../src/platform/drv/wb/i2c.c \
|
|
../src/platform/drv/wb/spi.c \
|
|
../src/platform/drv/wb/ipmux.c \
|
|
../src/platform/drv/wb/wrx.c \
|
|
../src/platform/drv/i2c/ahrs.c \
|
|
../src/platform/drv/i2c/sht21.c \
|
|
../src/platform/drv/i2c/ltc2499.c \
|
|
../src/platform/drv/i2c/ltc2631.c \
|
|
../src/platform/drv/i2c/dpbasic.c \
|
|
../src/platform/drv/i2c/octocpld.c \
|
|
../src/platform/drv/i2c/promis.c \
|
|
../src/platform/modules/octopus.c \
|
|
../src/platform/modules/nestor.c \
|
|
../src/platform/net/srp.c \
|
|
../src/platform/net/mcf.c \
|
|
../src/platform/net/msg.c \
|
|
../src/platform/net/network.c \
|
|
../src/ministack/ms.c \
|
|
../src/ministack/ms_eth.c \
|
|
../src/ministack/ms_arp.c \
|
|
../src/ministack/ms_ip.c \
|
|
../src/ministack/ms_icmp.c \
|
|
../src/ministack/ms_udp.c \
|
|
../src/ministack/ms_bootp.c \
|
|
../src/app/remote/msg_dbg.c \
|
|
../src/app/remote/msg_sys.c \
|
|
../src/app/remote/msg_clb.c \
|
|
../src/app/subsys/sub_sys.c \
|
|
../src/app/subsys/sub_net.c \
|
|
../src/app/subsys/sub_opt.c \
|
|
../src/app/subsys/sub_ins.c \
|
|
../src/app/subsys/sub_acs.c \
|
|
../src/app/shell/shell_soc.c \
|
|
../src/app/shell/shell_hydro.c \
|
|
../src/app/shell/shell_susm.c \
|
|
../src/app/shell/shell_sht21.c \
|
|
../src/app/shell/shell_ahrs.c \
|
|
../src/app/shell/shell_dbg.c \
|
|
../src/app/shell/shell_ipmux.c \
|
|
../src/app/shell/shell_net.c \
|
|
../src/app/app.c \
|
|
../src/app/reset.c \
|
|
../src/app/conn_test.c \
|
|
../src/app/clbstate.c \
|
|
../src/app/susm/app_susm.c \
|
|
../src/app/susm/duart.c
|
|
|
|
ifndef WR_ELFFILE
|
|
C_SRC += \
|
|
../src/platform/net/uartbridge.c
|
|
endif
|
|
|
|
S_SRC += \
|
|
../src/platform/lm32soc/crt0rom.S
|
|
|
|
####################################################################
|
|
# Rules #
|
|
####################################################################
|
|
|
|
C_FILES = $(notdir $(C_SRC) )
|
|
CPP_FILES = $(notdir $(CPP_SRC) )
|
|
S_FILES = $(notdir $(S_SRC) )
|
|
#make list of source paths, sort also removes duplicates
|
|
C_PATHS = $(sort $(dir $(C_SRC) ) )
|
|
CPP_PATHS = $(sort $(dir $(CPP_SRC) ) )
|
|
S_PATHS = $(sort $(dir $(S_SRC) ) )
|
|
|
|
C_OBJS = $(addprefix $(OBJ_DIR)/, $(C_FILES:.c=.o))
|
|
CPP_OBJS = $(addprefix $(OBJ_DIR)/, $(CPP_FILES:.cpp=.o))
|
|
S_OBJS = $(addprefix $(OBJ_DIR)/, $(S_FILES:.S=.o))
|
|
C_DEPS = $(addprefix $(OBJ_DIR)/, $(C_FILES:.c=.d))
|
|
CPP_DEPS = $(addprefix $(OBJ_DIR)/, $(CPP_FILES:.cpp=.d))
|
|
|
|
vpath %.c $(C_PATHS)
|
|
vpath %.cpp $(CPP_PATHS)
|
|
vpath %.S $(S_PATHS)
|
|
|
|
# Default build is debug build
|
|
all: release
|
|
|
|
debug: CFLAGS += -DDEBUG -O0 -g3
|
|
debug: $(OBJ_DIR) $(LST_DIR) $(EXE_DIR) $(EXE_DIR)/$(PROJECTNAME).bit
|
|
|
|
release: CFLAGS += -DNDEBUG -Os
|
|
release: $(OBJ_DIR) $(LST_DIR) $(EXE_DIR) $(EXE_DIR)/$(PROJECTNAME).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."
|
|
|
|
|
|
|
|
# Create objects from C SRC files
|
|
$(OBJ_DIR)/%.o: %.c
|
|
@echo "Building file: $<"
|
|
$(CC) $(CFLAGS) $(INCLUDEPATHS) -c -o $@ "$<"
|
|
|
|
$(OBJ_DIR)/%.o: %.cpp
|
|
@echo "Building file: $<"
|
|
$(CC) $(CFLAGS) $(INCLUDEPATHS) -fexceptions -c -o $@ "$<"
|
|
|
|
|
|
# Assemble .s files
|
|
$(OBJ_DIR)/%.o: %.S
|
|
@echo "Assembling $<"
|
|
$(CC) $(ASMFLAGS) $(INCLUDEPATHS) -c -o $@ "$<"
|
|
|
|
# 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) ../tools/msg2java.py $(H_MSGTYPES_FILE) $(J_MSGTYPES_SRC_DIR)
|
|
else
|
|
@echo "Warning, Python is not found, Java Message Types not generated"
|
|
endif
|
|
|
|
# Link
|
|
$(EXE_DIR)/$(PROJECTNAME).elf: $(C_OBJS) $(CPP_OBJS) $(S_OBJS) $(J_MSGTPYES_FILE)
|
|
@echo "Linking target: $@"
|
|
ifdef PYTHON_VERSION
|
|
$(PYTHON) ../tools/buildno.py build.txt clbv2
|
|
else
|
|
@echo "Warning, Python is not found, build number not modified"
|
|
endif
|
|
$(CC) $(LDFLAGS) build.txt.ld $(S_OBJS) $(C_OBJS) $(CPP_OBJS) $(LIBS) -o $(EXE_DIR)/$(PROJECTNAME).elf
|
|
$(DUMP) --disassemble -S $(EXE_DIR)/$(PROJECTNAME).elf >$(LST_DIR)/$(PROJECTNAME).s
|
|
$(DUMP) -t -h $(EXE_DIR)/$(PROJECTNAME).elf > $(LST_DIR)/$(PROJECTNAME).dump
|
|
ifdef PYTHON_VERSION
|
|
python parseobjdump.py $(LST_DIR)/$(PROJECTNAME).dump
|
|
endif
|
|
|
|
# Create binary file
|
|
$(EXE_DIR)/$(PROJECTNAME).bit: $(EXE_DIR)/$(PROJECTNAME).elf $(FW_BITFILE) $(FW_BMMFILE)
|
|
@echo "Creating binary file"
|
|
ifdef WR_ELFFILE
|
|
$(D2M) -bm $(FW_BMMFILE) \
|
|
-bd $(WR_ELFFILE) tag $(BMM_TAG_WRPC) \
|
|
-bd $(EXE_DIR)/$(PROJECTNAME).elf tag $(BMM_TAG_2LM) \
|
|
-bt $(FW_BITFILE) -o b $(EXE_DIR)/$(PROJECTNAME).bit
|
|
else
|
|
$(D2M) -bm $(FW_BMMFILE) -bd $(EXE_DIR)/$(PROJECTNAME).elf -bt $(FW_BITFILE) -o b $(EXE_DIR)/$(PROJECTNAME).bit
|
|
endif
|
|
|
|
upload: $(EXE_DIR)/$(PROJECTNAME).bit
|
|
@echo "Uploading"
|
|
$(IMPACT) -batch $(UPLOAD_IMP)
|
|
|
|
clean:
|
|
$(RM) $(OBJ_DIR) $(LST_DIR) $(EXE_DIR)
|
|
|
|
test:
|
|
@echo "OSTYPE = $(UNAME) $(CC) $(UPLOAD_IMP)"
|
|
|
|
|
|
# include auto-generated dependency files (explicit rules)
|
|
ifneq (clean,$(findstring clean, $(MAKECMDGOALS)))
|
|
-include $(C_DEPS)
|
|
endif
|