diff --git a/ports/card10/Makefile b/ports/card10/Makefile index 33b364014ec67c1c4781e1b3a4f35955638807ff..11ea51fd96e1c115162783fbe4b808cf21186d35 100644 --- a/ports/card10/Makefile +++ b/ports/card10/Makefile @@ -8,20 +8,35 @@ include $(TOP)/py/py.mk CROSS_COMPILE = arm-none-eabi- +SDK_LOCATION ?= ../../../firmware/sdk + INC += -I. INC += -I$(TOP) INC += -I$(BUILD) +INC += -I$(SDK_LOCATION)/Libraries/MAX32665PeriphDriver/Include +INC += -I$(SDK_LOCATION)/Libraries/CMSIS/Device/Maxim/MAX32665/Include +INC += -I$(SDK_LOCATION)/Libraries/CMSIS/Include +INC += -I$(SDK_LOCATION)/Libraries/Boards/card10/Include +INC += -I$(SDK_LOCATION)/Libraries/Boards/Include + +# CFLAGS_CORTEX_M4 = -mthumb -mtune=cortex-m4 -mabi=aapcs-linux -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -fsingle-precision-constant -Wdouble-promotion +# CFLAGS = $(INC) -Wall -Werror -std=c99 -nostdlib $(CFLAGS_CORTEX_M4) $(COPT) +# LDFLAGS = -nostdlib -T stm32f405.ld -Map=$@.map --cref --gc-sections +CFLAGS_MAX32665 = -mthumb -mcpu=cortex-m4 -mfloat-abi=softfp -mfpu=fpv4-sp-d16 +SDK_CFLAGS = -DTARGET=32665 -DTARGET_REV=0x4131 -DBOARD_CARD10=1 -Wa,-mimplicit-it=thumb +CFLAGS = $(CFLAGS_MAX32665) -Wall -Wdouble-promotion -Wno-format -fno-isolate-erroneous-paths-dereference -fsingle-precision-constant -std=c99 $(SDK_CFLAGS) $(INC) -CFLAGS_CORTEX_M4 = -mthumb -mtune=cortex-m4 -mabi=aapcs-linux -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -fsingle-precision-constant -Wdouble-promotion -CFLAGS = $(INC) -Wall -Werror -std=c99 -nostdlib $(CFLAGS_CORTEX_M4) $(COPT) -LDFLAGS = -nostdlib -T stm32f405.ld -Map=$@.map --cref --gc-sections +LDFLAGS = -T $(SDK_LOCATION)/Libraries/CMSIS/Device/Maxim/MAX32665/Source/GCC/max32665.ld +LDFLAGS += --entry Reset_Handler $(CFLAGS_MAX32665) +LDFLAGS += -Xlinker --gc-sections -Xlinker -Map -Xlinker $(BUILD)/max32665.map +LDFLAGS += -L$(SDK_LOCATION)/Libraries/CMSIS/Device/Maxim/MAX32665/Source/GCC # Tune for Debugging or Optimization ifeq ($(DEBUG), 1) -CFLAGS += -O0 -ggdb +CFLAGS += -O0 -ggdb -DDEBUG -DMXC_ASSERT_ENABLE else CFLAGS += -Os -DNDEBUG -CFLAGS += -fdata-sections -ffunction-sections +CFLAGS += -fdata-sections -ffunction-sections -fsingle-precision-constant endif LIBS = @@ -37,11 +52,71 @@ SRC_C = \ OBJ = $(PY_CORE_O) $(addprefix $(BUILD)/, $(SRC_C:.c=.o)) -all: $(BUILD)/firmware.elf +# SDK compilation hack + +# ----------------------------------------------------------------------------- +.PHONY: sdk +sdk: $(BUILD)/sdk/PeriphDriver.a + +# Rules to build sdk sources +SDK_SOURCES = $(wildcard $(SDK_LOCATION)/Libraries/MAX32665PeriphDriver/Source/*.c) +SDK_OBJECTS = $(foreach src, $(SDK_SOURCES), \ + $(patsubst $(SDK_LOCATION)/Libraries/MAX32665PeriphDriver/Source/%.c, $(BUILD)/sdk/%.o, $(src))\ +) + +$(BUILD)/sdk: + @mkdir -p $(BUILD)/sdk + +$(BUILD)/sdk/PeriphDriver.a: $(BUILD)/sdk $(SDK_OBJECTS) + $(ECHO) "AR $@" + $(Q)$(CROSS_COMPILE)ar -cr $@ $(SDK_OBJECTS) + +$(BUILD)/sdk/%.o: $(SDK_LOCATION)/Libraries/MAX32665PeriphDriver/Source/%.c + $(ECHO) "CC $<" + $(Q)$(CC) $(CFLAGS) -c -MD -o $@ $< +# ----------------------------------------------------------------------------- + +# ----------------------------------------------------------------------------- +# Rules to build board.c and startup files +SDK_BOARD_SRC = $(wildcard $(SDK_LOCATION)/Libraries/Boards/Source/*.c) +SDK_BOARD_OBJ = $(foreach src, $(SDK_BOARD_SRC), \ + $(patsubst $(SDK_LOCATION)/Libraries/Boards/Source/%.c, $(BUILD)/sdk/board/%.o, $(src))\ +) +BOARD_ADDITIONAL = board.o startup_max32665.o heap.o system_max32665.o +SDK_BOARD_OBJ += $(foreach obj, $(BOARD_ADDITIONAL), $(BUILD)/sdk/board/$(obj)) + +.PHONY: board +board: $(BUILD)/sdk/board $(SDK_BOARD_OBJ) + +$(BUILD)/sdk/board: + @mkdir -p $(BUILD)/sdk/board + +$(BUILD)/sdk/board/board.o: $(SDK_LOCATION)/Libraries/Boards/card10/Source/board.c + $(ECHO) "CC $<" + $(Q)$(CC) $(CFLAGS) -c -MD -o $@ $< + +$(BUILD)/sdk/board/startup_max32665.o: $(SDK_LOCATION)/Libraries/CMSIS/Device/Maxim/MAX32665/Source/GCC/startup_max32665.S + $(ECHO) "CC $<" + $(Q)$(CC) $(CFLAGS) -c -MD -o $@ $< + +$(BUILD)/sdk/board/heap.o: $(SDK_LOCATION)/Libraries/CMSIS/Device/Maxim/MAX32665/Source/heap.c + $(ECHO) "CC $<" + $(Q)$(CC) $(CFLAGS) -c -MD -o $@ $< + +$(BUILD)/sdk/board/system_max32665.o: $(SDK_LOCATION)/Libraries/CMSIS/Device/Maxim/MAX32665/Source/system_max32665.c + $(ECHO) "CC $<" + $(Q)$(CC) $(CFLAGS) -c -MD -o $@ $< + +$(BUILD)/sdk/board/%.o: $(SDK_LOCATION)/Libraries/Boards/Source/%.c + $(ECHO) "CC $<" + $(Q)$(CC) $(CFLAGS) -c -MD -o $@ $< +# ----------------------------------------------------------------------------- + +all: sdk board $(BUILD)/firmware.elf -$(BUILD)/firmware.elf: $(OBJ) +$(BUILD)/firmware.elf: $(OBJ) $(SDK_BOARD_OBJ) $(ECHO) "LINK $@" - $(Q)$(LD) $(LDFLAGS) -o $@ $^ $(LIBS) + $(Q)$(CC) $(LDFLAGS) -o $@ $^ $(LIBS) -Xlinker --start-group $(BUILD)/sdk/PeriphDriver.a -lc -lm -lnosys -Xlinker --end-group $(Q)$(SIZE) $@ # $(BUILD)/firmware.bin: $(BUILD)/firmware.elf