84 lines
2.5 KiB
Makefile
84 lines
2.5 KiB
Makefile
include config/make/rules.mk
|
|
OS_NAME := kosmos
|
|
|
|
# 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
|
|
|
|
MAIN_FILE = $(EXE_DIR)/lib$(OS_NAME)-$(ARCH)-$(BOARD)$(VERSION)$(DBG_EXT)$(LIB_EXT)
|
|
DEPLOY_PACKET = lib$(OS_NAME)-$(ARCH)-$(BOARD)$(VERSION)$(DBG_EXT).tar.xz
|
|
|
|
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)
|
|
MAP_FILE = $(MAP_DIR)/$(TEST_APP)$(MAP_EXT)
|
|
|
|
#include subfolders
|
|
include source/firmware/firmware.mk
|
|
ifdef TEST_APP
|
|
include source/test/test.mk
|
|
C_FLAGS += -DTEST_APP
|
|
endif
|
|
|
|
C_SOURCES := $(foreach folder, $(SRC_DIR), $(wildcard $(folder)/*.c))
|
|
C_OBJECTS := $(C_SOURCES:%.c=$(OBJ_DIR)/%.o)
|
|
C_DEPS := $(SOURCES:%.c=$(OBJ_DIR)/%.d)
|
|
|
|
all: $(MAIN_FILE)
|
|
|
|
deploy: all
|
|
@$(MKDIR) $(EXE_DIR)/include
|
|
$(ROOT_DIR)/source/scripts/board_interface.py -b "$(ROOT_DIR)/source/firmware/arch/$(CPU)/board/$(BOARD)/include/$(BOARD).h" -o "$(EXE_DIR)/include/board_devices.h"
|
|
$(ROOT_DIR)/source/scripts/stack_interface.py -i "$(ROOT_DIR)/source/firmware/arch/$(CPU)/include/$(CPU)_stack.h" -o "$(EXE_DIR)/include/stack.h"
|
|
cp $(ROOT_DIR)/source/firmware/kernel/interface/*.* $(EXE_DIR)/include/
|
|
tar cvJf $(DEPLOY_PACKET) -C $(EXE_DIR) .
|
|
|
|
|
|
$(MAIN_FILE): $(C_OBJECTS)
|
|
@$(MKDIR) $(EXE_DIR)
|
|
$(AR) $(AR_FLAGS) $(MAIN_FILE) $(C_OBJECTS)
|
|
|
|
$(OBJ_DIR)/%.o: %.c
|
|
@mkdir -p $(OBJ_DIR)
|
|
@$(foreach folder, $(SRC_DIR), $(shell mkdir -p $(OBJ_DIR)/$(folder)))
|
|
$(call makedep,$<,$@,$(subst .o,.d,$@),$(GEN_FLAGS) $(C_FLAGS))
|
|
$(CC) $(GEN_FLAGS) $(C_FLAGS) -c -o "$@" "$<"
|
|
|
|
test: $(C_OBJECTS)
|
|
@$(MKDIR) $(EXE_DIR)
|
|
@$(MKDIR) $(MAP_DIR)
|
|
@$(MKDIR) $(SIZE_DIR)
|
|
$(CXX) $(GEN_FLAGS) $(L_FLAGS) -Wl,-Map,"$(MAP_FILE)" -o "$(TEST_FILE)" $(C_OBJECTS)
|
|
$(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
|
|
|
|
clean:
|
|
$(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 \
|
|
$(OBJ_DIR)/*.d \
|
|
$(MAIN_FILE) \
|
|
$(BIN_FILE)
|
|
|
|
distclean:
|
|
-rm -rf $(ROOT_DIR)/release
|
|
|
|
install: all
|
|
$(PRE_PROGRAM)
|
|
$(PROGRAM)
|
|
|
|
ifneq "$(MAKECMDGOALS)" "clean"
|
|
-include $(C_DEPS)
|
|
else
|
|
ifneq "$(MAKECMDGOALS)" "distclean"
|
|
-include $(C_DEPS)
|
|
endif
|
|
endif |