new lib adapted to folder structure
This commit is contained in:
183
Makefile
Executable file → Normal file
183
Makefile
Executable file → Normal file
@@ -1,106 +1,105 @@
|
||||
include config/make/rules.mk
|
||||
###############################################################################
|
||||
# ARM Section
|
||||
CROSS_COMPILE ?= arm-none-eabi-
|
||||
GEN_FLAGS := \
|
||||
-mcpu=cortex-m4 \
|
||||
-mthumb \
|
||||
-mfloat-abi=hard \
|
||||
-mfpu=fpv4-sp-d16 \
|
||||
-Og \
|
||||
-fmessage-length=0 \
|
||||
-fsigned-char \
|
||||
-ffunction-sections \
|
||||
-fdata-sections \
|
||||
-ffreestanding \
|
||||
-flto \
|
||||
-fno-move-loop-invariants \
|
||||
-Werror \
|
||||
-Wunused \
|
||||
-Wuninitialized \
|
||||
-Wall \
|
||||
-Wextra \
|
||||
-Wmissing-declarations \
|
||||
-Wconversion \
|
||||
-Wpointer-arith \
|
||||
-Wpadded \
|
||||
-Wshadow \
|
||||
-Wlogical-op \
|
||||
-Waggregate-return \
|
||||
-Wfloat-equal \
|
||||
-g3
|
||||
|
||||
OS_NAME = kosmos
|
||||
C_FLAGS = \
|
||||
-DDEBUG \
|
||||
-DUSE_FULL_ASSERT \
|
||||
-DTRACE \
|
||||
-DOS_USE_TRACE_SEMIHOSTING_DEBUG \
|
||||
-DSTM32F407xx \
|
||||
-DUSE_HAL_DRIVER \
|
||||
-DHSE_VALUE=8000000 \
|
||||
$(addprefix -I, $(INCLUDES)) \
|
||||
-std=gnu11 \
|
||||
-Wmissing-prototypes \
|
||||
-Wstrict-prototypes \
|
||||
-Wbad-function-cast \
|
||||
-Wno-bad-function-cast \
|
||||
-Wno-conversion \
|
||||
-Wno-sign-conversion \
|
||||
-Wno-unused-parameter \
|
||||
-Wno-sign-compare \
|
||||
-Wno-missing-prototypes \
|
||||
-Wno-missing-declarations
|
||||
|
||||
# version numbering deployed by ci deploy script - no necessary for local build
|
||||
ifdef SW_KERNEL
|
||||
VERSION := -$(SW_KERNEL).$(SW_MAJOR).$(SW_MINOR)
|
||||
else
|
||||
VERSION :=
|
||||
endif
|
||||
L_FLAGS := \
|
||||
-T mem.ld \
|
||||
-T libs.ld \
|
||||
-T sections.ld \
|
||||
-nostartfiles \
|
||||
-Xlinker --gc-sections \
|
||||
-L"config/linker" \
|
||||
-Wl,-Map,"template.map" \
|
||||
--specs=nano.specs \
|
||||
|
||||
MAINFILE = $(EXE_DIR)/lib$(OS_NAME)-$(ARCH)-$(BOARD)$(VERSION)$(DBG_EXT)$(LIB_EXT)
|
||||
DEPLOY_PACKET = lib$(OS_NAME)-$(ARCH)-$(BOARD)$(VERSION)$(DBG_EXT).tar.xz
|
||||
INCLUDES += \
|
||||
/opt/arm-2011.09/arm-none-eabi/include \
|
||||
/opt/arm-2011.09/lib/gcc/arm-none-eabi/4.6.1/include
|
||||
|
||||
TEST_FILE = $(EXE_DIR)/$(TEST_APP)$(ELF_EXT)
|
||||
BIN_FILE = $(EXE_DIR)/$(TEST_APP)$(BIN_EXT)
|
||||
HEX_FILE = $(EXE_DIR)/$(TEST_APP)$(HEX_EXT)
|
||||
SIZE_FILE = $(SIZE_DIR)/$(TEST_APP)$(SIZE_EXT)
|
||||
###############################################################################
|
||||
# TOOLS Section
|
||||
CC = $(CROSS_COMPILE)gcc
|
||||
CXX = $(CROSS_COMPILE)g++
|
||||
OBJCOPY = $(CROSS_COMPILE)objcopy
|
||||
|
||||
SUB_FOLDER :=
|
||||
CHECK_FOLDER :=
|
||||
SOURCES := $(wildcard $(SRC_DIR)/*.c)
|
||||
ASM_SOURCES := $(wildcard $(SRC_DIR)/*.s)
|
||||
OBJ_DIR = release/object/debug
|
||||
EXE_DIR = release/execute/debug
|
||||
|
||||
OBJECTS = $(SOURCES:$(ROOT_DIR)/%.c=$(OBJ_DIR)/%.o)
|
||||
ASM_OBJECTS = $(ASMSOURCES:$(ROOT_DIR)/%.s=$(OBJ_DIR)/%.o)
|
||||
DEPS = $(SOURCES:$(ROOT_DIR)/%.c=$(OBJ_DIR)/%.d)
|
||||
|
||||
#include subfolders
|
||||
include source/firmware/firmware.mk
|
||||
ifdef TEST_APP
|
||||
include source/test/test.mk
|
||||
CFLAGS += -DTEST_APP
|
||||
endif
|
||||
include source/test/src/src.mk
|
||||
|
||||
SOURCES += $(foreach folder, $(SUB_FOLDER), $(wildcard $(ROOT_DIR)/$(folder)/*.c))
|
||||
CHECKSOURCES += $(foreach folder, $(CHECK_FOLDER), $(wildcard $(ROOT_DIR)/$(folder)/*.c))
|
||||
ASMSOURCES += $(foreach folder, $(SUB_FOLDER), $(wildcard $(ROOT_DIR)/$(folder)/*.s))
|
||||
###############################################################################
|
||||
C_SOURCES := $(foreach folder, $(SRC_DIR), $(wildcard $(folder)/*.c))
|
||||
C_OBJECTS := $(C_SOURCES:%.c=$(OBJ_DIR)/%.o)
|
||||
MAIN_FILE := $(EXE_DIR)/template.elf
|
||||
BIN_FILE := $(EXE_DIR)/template.bin
|
||||
OOCD_CFG_FILE := $(EXE_DIR)/openocd.cfg
|
||||
|
||||
all: check $(MAINFILE)
|
||||
|
||||
deploy: all
|
||||
@$(MKDIR) $(EXE_DIR)/include
|
||||
$(SRC_DIR)/scripts/board_interface.py -b "$(SRC_DIR)/firmware/arch/$(CPU)/board/$(BOARD)/include/$(BOARD).h" -o "$(EXE_DIR)/include/board_devices.h"
|
||||
$(SRC_DIR)/scripts/stack_interface.py -i "$(SRC_DIR)/firmware/arch/$(CPU)/include/$(CPU)_stack.h" -o "$(EXE_DIR)/include/stack.h"
|
||||
cp $(SRC_DIR)/firmware/kernel/interface/*.* $(EXE_DIR)/include/
|
||||
tar cvJf $(DEPLOY_PACKET) -C $(EXE_DIR) .
|
||||
|
||||
check:
|
||||
$(CPPCHECK) $(CPPCHECK_FLAGS) $(CHECKSOURCES)
|
||||
|
||||
|
||||
$(MAINFILE): $(OBJECTS) $(ASM_OBJECTS)
|
||||
@$(MKDIR) $(EXE_DIR)
|
||||
$(AR) rcs $(MAINFILE) $(OBJECTS) $(ASM_OBJECTS)
|
||||
|
||||
$(OBJ_DIR)/%.o: $(ROOT_DIR)/%.c
|
||||
@rm -rf $(LIB)
|
||||
@$(MKDIR) $(OBJ_DIR)
|
||||
@$(foreach folder, $(SUB_FOLDER), $(shell mkdir -p $(OBJ_DIR)/$(folder)))
|
||||
$(call makedep,$<,$@,$(subst .o,.d,$@))
|
||||
$(CC) $(CFLAGS) -c $< -o $@
|
||||
|
||||
$(OBJ_DIR)/%.o: $(ROOT_DIR)/%.s
|
||||
@$(MKDIR) $(OBJ_DIR)
|
||||
@$(foreach folder, $(SUB_FOLDER), $(shell mkdir -p $(OBJ_DIR)/$(folder)))
|
||||
$(CC) $(CFLAGS) -c $< -o $@
|
||||
all: $(C_OBJECTS)
|
||||
@mkdir -p $(EXE_DIR)
|
||||
$(CXX) $(GEN_FLAGS) $(L_FLAGS)-o "$(MAIN_FILE)" $(C_OBJECTS)
|
||||
$(OBJCOPY) $(MAIN_FILE) -O binary $(BIN_FILE)
|
||||
$(OBJ_DIR)/%.o: %.c
|
||||
@mkdir -p $(OBJ_DIR)
|
||||
@$(foreach folder, $(SRC_DIR), $(shell mkdir -p $(OBJ_DIR)/$(folder)))
|
||||
$(CC) $(GEN_FLAGS) $(C_FLAGS) -MMD -MP -MF"$(subst .o,.d,$@)" -MT"$@" -c -o "$@" "$<"
|
||||
|
||||
clean:
|
||||
$(foreach folder, $(SUB_FOLDER), $(shell rm -f $(OBJ_DIR)/$(folder)/*.o))
|
||||
$(foreach folder, $(SUB_FOLDER), $(shell rm -f $(OBJ_DIR)/$(folder)/*.d))
|
||||
$(foreach folder, $(SRC_DIR), $(shell rm -f $(OBJ_DIR)/$(folder)/*.o))
|
||||
$(foreach folder, $(SRC_DIR), $(shell rm -f $(OBJ_DIR)/$(folder)/*.d))
|
||||
-rm -f $(OBJ_DIR)/*.o \
|
||||
$(EXE_DIR)/include/* \
|
||||
$(OBJ_DIR)/*.d \
|
||||
$(MAINFILE)
|
||||
$(MAIN_FILE) \
|
||||
$(BIN_FILE)
|
||||
|
||||
distclean:
|
||||
-rm -rf $(ROOT_DIR)/release
|
||||
|
||||
doc:
|
||||
@$(MKDIR) $(DOC_DIR)
|
||||
(cat $(DOXYFILE) ; echo "INPUT=$(DOC_SRC)" ; echo "OUTPUT_DIRECTORY=$(DOC_DIR)") | doxygen -
|
||||
|
||||
test: $(OBJECTS) $(ASM_OBJECTS)
|
||||
@$(MKDIR) $(EXE_DIR)
|
||||
@$(MKDIR) $(MAP_DIR)
|
||||
@$(MKDIR) $(SIZE_DIR)
|
||||
$(CC) $(CFLAGS) $(LDFLAGS) $(OBJECTS) $(ASM_OBJECTS) -o $(TEST_FILE)
|
||||
$(OBJCOPY) $(TEST_FILE) -O binary $(BIN_FILE)
|
||||
$(OBJCOPY) $(TEST_FILE) -O ihex $(HEX_FILE)
|
||||
$(NM) --size-sort --print-size $(TEST_FILE) > $(SIZE_FILE)
|
||||
@echo
|
||||
@$(SIZE) --format=berkeley -x $(TEST_FILE)
|
||||
@echo
|
||||
|
||||
install: test
|
||||
$(PRE_PROGRAM)
|
||||
$(PROGRAM)
|
||||
|
||||
ifneq "$(MAKECMDGOALS)" "clean"
|
||||
-include $(DEPS)
|
||||
else
|
||||
ifneq "$(MAKECMDGOALS)" "distclean"
|
||||
-include $(DEPS)
|
||||
endif
|
||||
endif
|
||||
install: all
|
||||
echo "telnet_port 4444\ninit\nreset halt\nflash write_image erase $(BIN_FILE) 0x08000000 bin\nreset run\n shutdown\n" > $(OOCD_CFG_FILE)
|
||||
openocd -f /usr/share/openocd/scripts/board/stm32f4discovery.cfg -f $(OOCD_CFG_FILE)
|
||||
|
Reference in New Issue
Block a user