|
| 1 | +# This file is part of the MicroPython project, http://micropython.org/ |
| 2 | +# |
| 3 | +# The MIT License (MIT) |
| 4 | +# |
| 5 | +# SPDX-FileCopyrightText: Copyright (c) 2019 Dan Halbert for Adafruit Industries |
| 6 | +# |
| 7 | +# Permission is hereby granted, free of charge, to any person obtaining a copy |
| 8 | +# of this software and associated documentation files (the "Software"), to deal |
| 9 | +# in the Software without restriction, including without limitation the rights |
| 10 | +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
| 11 | +# copies of the Software, and to permit persons to whom the Software is |
| 12 | +# furnished to do so, subject to the following conditions: |
| 13 | +# |
| 14 | +# The above copyright notice and this permission notice shall be included in |
| 15 | +# all copies or substantial portions of the Software. |
| 16 | +# |
| 17 | +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
| 18 | +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
| 19 | +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
| 20 | +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
| 21 | +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
| 22 | +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
| 23 | +# THE SOFTWARE. |
| 24 | + |
| 25 | +include ../../py/circuitpy_mkenv.mk |
| 26 | + |
| 27 | +CROSS_COMPILE = arm-none-eabi- |
| 28 | + |
| 29 | +INC += \ |
| 30 | + -I. \ |
| 31 | + -I../.. \ |
| 32 | + -I../lib/mp-readline \ |
| 33 | + -I../shared/timeutils \ |
| 34 | + -Iboards/$(BOARD) \ |
| 35 | + -Iboards/ \ |
| 36 | + -isystem ./../../lib/cmsis/inc \ |
| 37 | + -I$(BUILD) |
| 38 | + |
| 39 | +CFLAGS += -ggdb3 -Os |
| 40 | + |
| 41 | +DISABLE_WARNINGS = -Wno-cast-align |
| 42 | +CFLAGS += $(INC) -Wall -Werror -std=gnu11 -fshort-enums $(BASE_CFLAGS) $(CFLAGS_MOD) $(COPT) $(DISABLE_WARNINGS) -Werror=missing-prototypes |
| 43 | + |
| 44 | +CFLAGS += \ |
| 45 | + -march=armv6-m \ |
| 46 | + -mthumb \ |
| 47 | + -mabi=aapcs \ |
| 48 | + -mcpu=cortex-m0plus \ |
| 49 | + -msoft-float \ |
| 50 | + -mfloat-abi=soft \ |
| 51 | + --specs=nano.specs |
| 52 | + |
| 53 | +# Use toolchain libm if we're not using our own. |
| 54 | +ifndef INTERNAL_LIBM |
| 55 | +LIBS += -lm |
| 56 | +endif |
| 57 | + |
| 58 | +LIBS += -lc |
| 59 | + |
| 60 | +SRC_C += \ |
| 61 | + boards/$(BOARD)/board.c \ |
| 62 | + boards/$(BOARD)/pins.c \ |
| 63 | + background.c \ |
| 64 | + mphalport.c \ |
| 65 | + |
| 66 | + |
| 67 | +SRC_COMMON_HAL_EXPANDED = $(addprefix shared-bindings/, $(SRC_COMMON_HAL)) \ |
| 68 | + $(addprefix shared-bindings/, $(SRC_BINDINGS_ENUMS)) \ |
| 69 | + $(addprefix common-hal/, $(SRC_COMMON_HAL)) |
| 70 | + |
| 71 | +SRC_SHARED_MODULE_EXPANDED = $(addprefix shared-bindings/, $(SRC_SHARED_MODULE)) \ |
| 72 | + $(addprefix shared-module/, $(SRC_SHARED_MODULE)) \ |
| 73 | + $(addprefix shared-module/, $(SRC_SHARED_MODULE_INTERNAL)) |
| 74 | + |
| 75 | +# There may be duplicates between SRC_COMMON_HAL_EXPANDED and SRC_SHARED_MODULE_EXPANDED, |
| 76 | +# because a few modules have files both in common-hal/ and shared-module/. |
| 77 | +# Doing a $(sort ...) removes duplicates as part of sorting. |
| 78 | +SRC_COMMON_HAL_SHARED_MODULE_EXPANDED = $(sort $(SRC_COMMON_HAL_EXPANDED) $(SRC_SHARED_MODULE_EXPANDED)) |
| 79 | + |
| 80 | +SRC_S = supervisor/$(CPU)_cpu.s |
| 81 | + |
| 82 | +OBJ = $(PY_O) $(SUPERVISOR_O) $(addprefix $(BUILD)/, $(SRC_C:.c=.o)) |
| 83 | +OBJ += $(addprefix $(BUILD)/, $(SRC_COMMON_HAL_SHARED_MODULE_EXPANDED:.c=.o)) |
| 84 | +ifeq ($(INTERNAL_LIBM),1) |
| 85 | +OBJ += $(addprefix $(BUILD)/, $(SRC_LIBM:.c=.o)) |
| 86 | +endif |
| 87 | +OBJ += $(addprefix $(BUILD)/, $(SRC_CIRCUITPY_COMMON:.c=.o)) |
| 88 | +OBJ += $(addprefix $(BUILD)/, $(SRC_S:.s=.o)) |
| 89 | +OBJ += $(addprefix $(BUILD)/, $(SRC_S_UPPER:.S=.o)) |
| 90 | +OBJ += $(addprefix $(BUILD)/, $(SRC_MOD:.c=.o)) |
| 91 | + |
| 92 | +$(BUILD)/%.o: $(BUILD)/%.S |
| 93 | + $(STEPECHO) "CC $<" |
| 94 | + $(Q)$(CC) $(CFLAGS) -c -o $@ $< |
| 95 | + |
| 96 | +SRC_QSTR += $(SRC_C) $(SRC_SUPERVISOR) $(SRC_COMMON_HAL_EXPANDED) $(SRC_SHARED_MODULE_EXPANDED) $(SRC_CIRCUITPY_COMMON) |
| 97 | + |
| 98 | +all: $(BUILD)/firmware.elf $(BUILD)/circuitpy.img |
| 99 | + |
| 100 | +BOARD_LD := $(wildcard boards/$(BOARD)/link.ld) |
| 101 | + |
| 102 | +ifneq ($(BOARD_LD),) |
| 103 | + LINKER_SCRIPTS = -Wl,-T,$(BOARD_LD) |
| 104 | +endif |
| 105 | + |
| 106 | +LINKER_SCRIPTS += -Wl,-T,link.ld |
| 107 | + |
| 108 | +$(BUILD)/circuitpy.img: circuitpy/code.py |
| 109 | + $(STEPECHO) "Create $@" |
| 110 | + $(Q)dd if=/dev/zero of=$(BUILD)/circuitpy.img bs=1 count=0 seek=512K |
| 111 | + $(Q)mkfs.fat -n CIRCUITPY --offset=0 $(BUILD)/circuitpy.img |
| 112 | + $(Q)mcopy -i $(BUILD)/circuitpy.img circuitpy/* :: |
| 113 | + |
| 114 | +ifeq ($(VALID_BOARD),) |
| 115 | +$(BUILD)/firmware.elf: invalid-board |
| 116 | +else |
| 117 | +$(BUILD)/firmware.elf: $(OBJ) $(BOARD_LD) link.ld |
| 118 | + $(STEPECHO) "LINK $@" |
| 119 | + $(Q)echo $(OBJ) > $(BUILD)/firmware.objs |
| 120 | + $(Q)echo $(PICO_LDFLAGS) > $(BUILD)/firmware.ldflags |
| 121 | + $(Q)$(CC) -o $@ $(CFLAGS) @$(BUILD)/firmware.ldflags $(LINKER_SCRIPTS) -Wl,--print-memory-usage -Wl,-Map=$@.map -Wl,-cref -Wl,--gc-sections @$(BUILD)/firmware.objs -Wl,-lc |
| 122 | +endif |
| 123 | + |
| 124 | +$(BUILD)/firmware.bin: $(BUILD)/firmware.elf |
| 125 | + $(STEPECHO) "Create $@" |
| 126 | + $(Q)$(OBJCOPY) -O binary -R .dtcm_bss $^ $@ |
| 127 | + |
| 128 | +include $(TOP)/py/mkrules.mk |
0 commit comments