Makefile 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. PROJECT = bootloader
  2. SRC_DIR = src
  3. OBJ_DIR = .obj
  4. ASM_SOURCES = $(wildcard $(SRC_DIR)/*.s)
  5. C_SOURCES = $(wildcard $(SRC_DIR)/*.c)
  6. CPP_SOURCES = $(wildcard $(SRC_DIR)/*.cpp)
  7. #
  8. TARGET ?= f2
  9. TARGET_DIR = targets/$(TARGET)
  10. include $(TARGET_DIR)/target.mk
  11. CFLAGS += -Itargets/include
  12. C_SOURCES += $(wildcard $(TARGET_DIR)/*.c)
  13. DEBUG ?= 1
  14. ifeq ($(DEBUG), 1)
  15. CFLAGS += -DDEBUG -g
  16. else
  17. CFLAGS += -DNDEBUG -Os
  18. endif
  19. PREFIX = arm-none-eabi-
  20. ifdef GCC_PATH
  21. CC = $(GCC_PATH)/$(PREFIX)gcc
  22. CPP = $(GCC_PATH)/$(PREFIX)g++
  23. AS = $(GCC_PATH)/$(PREFIX)gcc -x assembler-with-cpp
  24. CP = $(GCC_PATH)/$(PREFIX)objcopy
  25. SZ = $(GCC_PATH)/$(PREFIX)size
  26. else
  27. CC = $(PREFIX)gcc
  28. CPP = $(PREFIX)g++
  29. AS = $(PREFIX)gcc -x assembler-with-cpp
  30. CP = $(PREFIX)objcopy
  31. SZ = $(PREFIX)size
  32. endif
  33. HEX = $(CP) -O ihex
  34. BIN = $(CP) -O binary -S
  35. $(shell mkdir -p $(OBJ_DIR))
  36. OBJECTS = $(addprefix $(OBJ_DIR)/,$(notdir $(C_SOURCES:.c=.o)))
  37. vpath %.c $(sort $(dir $(C_SOURCES)))
  38. OBJECTS += $(addprefix $(OBJ_DIR)/,$(notdir $(ASM_SOURCES:.s=.o)))
  39. vpath %.s $(sort $(dir $(ASM_SOURCES)))
  40. OBJECTS += $(addprefix $(OBJ_DIR)/,$(notdir $(CPP_SOURCES:.cpp=.o)))
  41. vpath %.cpp $(sort $(dir $(CPP_SOURCES)))
  42. DEPS = $(OBJECTS:.o=.d)
  43. CFLAGS += -MMD -MP -MF"$(@:%.o=%.d)"
  44. CPPFLAGS = -fno-threadsafe-statics
  45. all: $(OBJ_DIR)/$(PROJECT).elf $(OBJ_DIR)/$(PROJECT).hex $(OBJ_DIR)/$(PROJECT).bin
  46. $(OBJ_DIR)/$(PROJECT).elf: $(OBJECTS)
  47. @echo "\tLD\t" $@
  48. @$(CC) $(LDFLAGS) $(OBJECTS) -o $@
  49. $(SZ) $@
  50. $(OBJ_DIR)/$(PROJECT).hex: $(OBJ_DIR)/$(PROJECT).elf
  51. @echo "\tHEX\t" $@
  52. @$(HEX) $< $@
  53. $(OBJ_DIR)/$(PROJECT).bin: $(OBJ_DIR)/$(PROJECT).elf
  54. @echo "\tBIN\t" $@
  55. @$(BIN) $< $@
  56. $(OBJ_DIR)/%.o: %.c
  57. @echo "\tCC\t" $@
  58. @$(CC) $(CFLAGS) -c $< -o $@
  59. $(OBJ_DIR)/%.o: %.s
  60. @echo "\tASM\t" $@
  61. @$(AS) $(CFLAGS) -c $< -o $@
  62. $(OBJ_DIR)/%.o: %.cpp
  63. @echo "\tCPP\t" $@
  64. @$(CPP) $(CFLAGS) $(CPPFLAGS) -c $< -o $@
  65. flash: $(OBJ_DIR)/$(PROJECT).bin
  66. st-flash --reset write $(OBJ_DIR)/$(PROJECT).bin $(BOOT_ADDRESS)
  67. debug:
  68. st-util & arm-none-eabi-gdb -ex "PROJECT extended-remote 127.0.0.1:4242" $(OBJ_DIR)/$(PROJECT).elf
  69. clean:
  70. $(RM) $(OBJ_DIR)/*
  71. zz: | clean flash
  72. zzz: | clean flash debug
  73. -include $(DEPS)