dynruntime.mk 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. # Makefile fragment for generating native .mpy files from C source
  2. # MPY_DIR must be set to the top of the MicroPython source tree
  3. BUILD ?= build
  4. ECHO = @echo
  5. RM = /bin/rm
  6. MKDIR = /bin/mkdir
  7. PYTHON = python3
  8. MPY_CROSS = $(MPY_DIR)/mpy-cross/mpy-cross
  9. MPY_TOOL = $(PYTHON) $(MPY_DIR)/tools/mpy-tool.py
  10. MPY_LD = $(PYTHON) $(MPY_DIR)/tools/mpy_ld.py
  11. Q = @
  12. ifeq ("$(origin V)", "command line")
  13. ifeq ($(V),1)
  14. Q =
  15. MPY_LD += '-vvv'
  16. endif
  17. endif
  18. ARCH_UPPER = $(shell echo $(ARCH) | tr '[:lower:]' '[:upper:]')
  19. CONFIG_H = $(BUILD)/$(MOD).config.h
  20. CFLAGS += -I. -I$(MPY_DIR)
  21. CFLAGS += -std=c99
  22. CFLAGS += -Os
  23. CFLAGS += -Wall -Werror -DNDEBUG
  24. CFLAGS += -DNO_QSTR
  25. CFLAGS += -DMP_CONFIGFILE='<$(CONFIG_H)>'
  26. CFLAGS += -fpic -fno-common
  27. CFLAGS += -U _FORTIFY_SOURCE # prevent use of __*_chk libc functions
  28. #CFLAGS += -fdata-sections -ffunction-sections
  29. MPY_CROSS_FLAGS += -march=$(ARCH)
  30. SRC_O += $(addprefix $(BUILD)/, $(patsubst %.c,%.o,$(filter %.c,$(SRC))))
  31. SRC_MPY += $(addprefix $(BUILD)/, $(patsubst %.py,%.mpy,$(filter %.py,$(SRC))))
  32. ################################################################################
  33. # Architecture configuration
  34. ifeq ($(ARCH),x86)
  35. # x86
  36. CROSS =
  37. CFLAGS += -m32 -fno-stack-protector
  38. MPY_CROSS_FLAGS += -mcache-lookup-bc
  39. MICROPY_FLOAT_IMPL ?= double
  40. else ifeq ($(ARCH),x64)
  41. # x64
  42. CROSS =
  43. CFLAGS += -fno-stack-protector
  44. MPY_CROSS_FLAGS += -mcache-lookup-bc
  45. MICROPY_FLOAT_IMPL ?= double
  46. else ifeq ($(ARCH),armv7m)
  47. # thumb
  48. CROSS = arm-none-eabi-
  49. CFLAGS += -mthumb -mcpu=cortex-m3
  50. MICROPY_FLOAT_IMPL ?= none
  51. else ifeq ($(ARCH),armv7emsp)
  52. # thumb
  53. CROSS = arm-none-eabi-
  54. CFLAGS += -mthumb -mcpu=cortex-m4
  55. CFLAGS += -mfpu=fpv4-sp-d16 -mfloat-abi=hard
  56. MICROPY_FLOAT_IMPL ?= float
  57. else ifeq ($(ARCH),armv7emdp)
  58. # thumb
  59. CROSS = arm-none-eabi-
  60. CFLAGS += -mthumb -mcpu=cortex-m7
  61. CFLAGS += -mfpu=fpv5-d16 -mfloat-abi=hard
  62. MICROPY_FLOAT_IMPL ?= double
  63. else ifeq ($(ARCH),xtensa)
  64. # xtensa
  65. CROSS = xtensa-lx106-elf-
  66. CFLAGS += -mforce-l32
  67. MICROPY_FLOAT_IMPL ?= none
  68. else ifeq ($(ARCH),xtensawin)
  69. # xtensawin
  70. CROSS = xtensa-esp32-elf-
  71. CFLAGS +=
  72. MICROPY_FLOAT_IMPL ?= float
  73. else
  74. $(error architecture '$(ARCH)' not supported)
  75. endif
  76. MICROPY_FLOAT_IMPL_UPPER = $(shell echo $(MICROPY_FLOAT_IMPL) | tr '[:lower:]' '[:upper:]')
  77. CFLAGS += -DMICROPY_FLOAT_IMPL=MICROPY_FLOAT_IMPL_$(MICROPY_FLOAT_IMPL_UPPER)
  78. CFLAGS += $(CFLAGS_EXTRA)
  79. ################################################################################
  80. # Build rules
  81. .PHONY: all clean
  82. all: $(MOD).mpy
  83. clean:
  84. $(RM) -rf $(BUILD) $(CLEAN_EXTRA)
  85. # Create build destination directories first
  86. BUILD_DIRS = $(sort $(dir $(CONFIG_H) $(SRC_O) $(SRC_MPY)))
  87. $(CONFIG_H) $(SRC_O) $(SRC_MPY): | $(BUILD_DIRS)
  88. $(BUILD_DIRS):
  89. $(Q)$(MKDIR) -p $@
  90. # Preprocess all source files to generate $(CONFIG_H)
  91. $(CONFIG_H): $(SRC)
  92. $(ECHO) "GEN $@"
  93. $(Q)$(MPY_LD) --arch $(ARCH) --preprocess -o $@ $^
  94. # Build .o from .c source files
  95. $(BUILD)/%.o: %.c $(CONFIG_H) Makefile
  96. $(ECHO) "CC $<"
  97. $(Q)$(CROSS)gcc $(CFLAGS) -o $@ -c $<
  98. # Build .mpy from .py source files
  99. $(BUILD)/%.mpy: %.py
  100. $(ECHO) "MPY $<"
  101. $(Q)$(MPY_CROSS) $(MPY_CROSS_FLAGS) -o $@ $<
  102. # Build native .mpy from object files
  103. $(BUILD)/$(MOD).native.mpy: $(SRC_O)
  104. $(ECHO) "LINK $<"
  105. $(Q)$(MPY_LD) --arch $(ARCH) --qstrs $(CONFIG_H) -o $@ $^
  106. # Build final .mpy from all intermediate .mpy files
  107. $(MOD).mpy: $(BUILD)/$(MOD).native.mpy $(SRC_MPY)
  108. $(ECHO) "GEN $@"
  109. $(Q)$(MPY_TOOL) --merge -o $@ $^