summaryrefslogtreecommitdiffstatshomepage
path: root/qemu-arm/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'qemu-arm/Makefile')
-rw-r--r--qemu-arm/Makefile57
1 files changed, 57 insertions, 0 deletions
diff --git a/qemu-arm/Makefile b/qemu-arm/Makefile
new file mode 100644
index 0000000000..2f03c0c8da
--- /dev/null
+++ b/qemu-arm/Makefile
@@ -0,0 +1,57 @@
+include ../py/mkenv.mk
+-include mpconfigport.mk
+
+# qstr definitions (must come before including py.mk)
+QSTR_DEFS = qstrdefsport.h
+
+# include py core make definitions
+include ../py/py.mk
+
+CROSS_COMPILE = arm-none-eabi-
+
+INC = -I.
+INC += -I$(PY_SRC)
+INC += -I$(BUILD)
+
+CFLAGS_CORTEX_M3 = -mthumb -mcpu=cortex-m3
+CFLAGS = $(INC) -Wall -Werror -ansi -std=gnu99 $(CFLAGS_CORTEX_M3) $(COPT) \
+ -flto -ffunction-sections -fdata-sections
+
+#Debugging/Optimization
+ifeq ($(DEBUG), 1)
+CFLAGS += -g -DPENDSV_DEBUG
+COPT = -O0
+else
+COPT += -Os -DNDEBUG
+endif
+
+## With CoudeSourcery it's actually a little different, you just need `-T generic-m-hosted.ld`.
+## Although for some reason `$(LD)` will not find that linker script, it works with `$(CC)`.
+## It turns out that this is specific to CoudeSourcery, and ARM version of GCC ships something
+## else instead and according to the following files, this is what we need to pass to `$(CC).
+## - gcc-arm-none-eabi-4_8-2014q1/share/gcc-arm-none-eabi/samples/src/makefile.conf
+## - gcc-arm-none-eabi-4_8-2014q1/share/gcc-arm-none-eabi/samples/src/qemu/Makefile
+LDFLAGS= --specs=nano.specs --specs=rdimon.specs -Wl,--gc-sections -Wl,-Map=$(@:.elf=.map)
+
+SRC_C = \
+ main.c \
+
+SRC_S = \
+
+OBJ =
+OBJ += $(PY_O)
+OBJ += $(addprefix $(BUILD)/, $(SRC_C:.c=.o))
+OBJ += $(addprefix $(BUILD)/, $(SRC_S:.s=.o))
+
+all: run
+
+run: $(BUILD)/flash.elf
+
+ qemu-system-arm -cpu cortex-m3 -nographic -monitor null -serial null -semihosting -kernel $(BUILD)/flash.elf
+
+## `$(LD)` doesn't seem to like `--specs` for some reason, but we can just use `$(CC)` here.
+$(BUILD)/flash.elf: $(OBJ)
+ $(Q)$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(OBJ) $(LIBS)
+ $(Q)$(SIZE) $@
+
+include ../py/mkrules.mk