make.mk 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. # ---------------------------------------
  2. # Common make definition for all examples
  3. # ---------------------------------------
  4. # Build directory
  5. BUILD := _build/$(BOARD)
  6. PROJECT := $(notdir $(CURDIR))
  7. BIN := $(TOP)/_bin/$(BOARD)/$(notdir $(CURDIR))
  8. # Handy check parameter function
  9. check_defined = \
  10. $(strip $(foreach 1,$1, \
  11. $(call __check_defined,$1,$(strip $(value 2)))))
  12. __check_defined = \
  13. $(if $(value $1),, \
  14. $(error Undefined make flag: $1$(if $2, ($2))))
  15. #-------------- Select the board to build for. ------------
  16. # Board without family
  17. ifneq ($(wildcard $(TOP)/hw/bsp/$(BOARD)/board.mk),)
  18. BOARD_PATH := hw/bsp/$(BOARD)
  19. FAMILY :=
  20. endif
  21. # Board within family
  22. ifeq ($(BOARD_PATH),)
  23. BOARD_PATH := $(subst $(TOP)/,,$(wildcard $(TOP)/hw/bsp/*/boards/$(BOARD)))
  24. FAMILY := $(word 3, $(subst /, ,$(BOARD_PATH)))
  25. FAMILY_PATH = hw/bsp/$(FAMILY)
  26. endif
  27. ifeq ($(BOARD_PATH),)
  28. $(info You must provide a BOARD parameter with 'BOARD=')
  29. $(error Invalid BOARD specified)
  30. endif
  31. ifeq ($(FAMILY),)
  32. include $(TOP)/hw/bsp/$(BOARD)/board.mk
  33. else
  34. # Include Family and Board specific defs
  35. include $(TOP)/$(FAMILY_PATH)/family.mk
  36. SRC_C += $(subst $(TOP)/,,$(wildcard $(TOP)/$(FAMILY_PATH)/*.c))
  37. endif
  38. #-------------- Cross Compiler ------------
  39. # Can be set by board, default to ARM GCC
  40. CROSS_COMPILE ?= arm-none-eabi-
  41. # Allow for -Os to be changed by board makefiles in case -Os is not allowed
  42. CFLAGS_OPTIMIZED ?= -Os
  43. CC = $(CROSS_COMPILE)gcc
  44. CXX = $(CROSS_COMPILE)g++
  45. GDB = $(CROSS_COMPILE)gdb
  46. OBJCOPY = $(CROSS_COMPILE)objcopy
  47. SIZE = $(CROSS_COMPILE)size
  48. MKDIR = mkdir
  49. ifeq ($(CMDEXE),1)
  50. CP = copy
  51. RM = del
  52. PYTHON = python
  53. else
  54. SED = sed
  55. CP = cp
  56. RM = rm
  57. PYTHON = python3
  58. endif
  59. #-------------- Source files and compiler flags --------------
  60. # Include all source C in family & board folder
  61. SRC_C += hw/bsp/board.c
  62. SRC_C += $(subst $(TOP)/,,$(wildcard $(TOP)/$(BOARD_PATH)/*.c))
  63. INC += $(TOP)/$(FAMILY_PATH)
  64. # Compiler Flags
  65. CFLAGS += \
  66. -ggdb \
  67. -fdata-sections \
  68. -ffunction-sections \
  69. -fsingle-precision-constant \
  70. -fno-strict-aliasing \
  71. -Wall \
  72. -Wextra \
  73. -Werror \
  74. -Wfatal-errors \
  75. -Wdouble-promotion \
  76. -Wstrict-prototypes \
  77. -Wstrict-overflow \
  78. -Werror-implicit-function-declaration \
  79. -Wfloat-equal \
  80. -Wundef \
  81. -Wshadow \
  82. -Wwrite-strings \
  83. -Wsign-compare \
  84. -Wmissing-format-attribute \
  85. -Wunreachable-code \
  86. -Wcast-align \
  87. -Wcast-function-type \
  88. -Wcast-qual \
  89. -Wnull-dereference \
  90. -Wuninitialized \
  91. -Wunused \
  92. -Wredundant-decls
  93. # conversion is too strict for most mcu driver, may be disable sign/int/arith-conversion
  94. # -Wconversion
  95. # Debugging/Optimization
  96. ifeq ($(DEBUG), 1)
  97. CFLAGS += -O0
  98. NO_LTO = 1
  99. else
  100. CFLAGS += $(CFLAGS_OPTIMIZED)
  101. endif
  102. # Log level is mapped to TUSB DEBUG option
  103. ifneq ($(LOG),)
  104. CMAKE_DEFSYM += -DLOG=$(LOG)
  105. CFLAGS += -DCFG_TUSB_DEBUG=$(LOG)
  106. endif
  107. # Logger: default is uart, can be set to rtt or swo
  108. ifneq ($(LOGGER),)
  109. CMAKE_DEFSYM += -DLOGGER=$(LOGGER)
  110. endif
  111. ifeq ($(LOGGER),rtt)
  112. CFLAGS += -DLOGGER_RTT -DSEGGER_RTT_MODE_DEFAULT=SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL
  113. RTT_SRC = lib/SEGGER_RTT
  114. INC += $(TOP)/$(RTT_SRC)/RTT
  115. SRC_C += $(RTT_SRC)/RTT/SEGGER_RTT.c
  116. else ifeq ($(LOGGER),swo)
  117. CFLAGS += -DLOGGER_SWO
  118. endif