|
1 | | -# Self-contained build for the NumWorks RPN external app. |
| 1 | +# Build the NumWorks RPN external app. |
2 | 2 | # |
3 | | -# make build the device app -> output/rpn.nwa |
4 | | -# make test build & run the host engine tests |
5 | | -# make install build and upload to a plugged-in calculator |
| 3 | +# make device app -> output/rpn.nwa (arm-none-eabi) |
| 4 | +# make PLATFORM=web web app -> output/rpn.nwb (emscripten) |
| 5 | +# make install upload to a plugged-in calculator |
| 6 | +# make test build & run the host engine tests |
6 | 7 | # make clean |
7 | 8 | # |
8 | | -# Requirements: arm-none-eabi-gcc (device build) and node/npx (nwlink). |
| 9 | +# Requirements: node/npx (nwlink); arm-none-eabi-gcc for device; emcc for web. |
9 | 10 |
|
10 | 11 | APP_NAME = rpn |
11 | 12 | APP_ICON = src/icon.png |
12 | 13 | OUTPUT_DIR = output |
| 14 | +PLATFORM ?= device |
13 | 15 |
|
14 | 16 | NWLINK = npx --yes -- nwlink |
15 | 17 |
|
16 | | -CC = arm-none-eabi-gcc |
17 | | -CXX = arm-none-eabi-g++ |
18 | | - |
19 | 18 | SOURCES = $(wildcard src/*.cpp) |
20 | | -OBJS = $(patsubst src/%.cpp,$(OUTPUT_DIR)/%.o,$(SOURCES)) |
21 | | - |
22 | | -# Flags provided by nwlink for the calculator target (Cortex-M7 + EADK headers). |
23 | | -EADK_CFLAGS := $(shell $(NWLINK) eadk-cflags-device) |
24 | | -EADK_LDFLAGS := $(shell $(NWLINK) eadk-ldflags-device) |
25 | | - |
26 | | -CXXFLAGS = $(EADK_CFLAGS) -std=c++11 -fno-exceptions -Wall -Os -MMD -MP |
27 | | -CXXFLAGS += -fdata-sections -ffunction-sections |
28 | | -CXXFLAGS += -flto -fno-fat-lto-objects -fwhole-program -fvisibility=internal |
29 | | - |
30 | | -LDFLAGS = $(EADK_LDFLAGS) --specs=nano.specs |
31 | | -LDFLAGS += -Wl,-e,main -Wl,-u,eadk_app_name -Wl,-u,eadk_app_icon -Wl,-u,eadk_api_level |
32 | | -LDFLAGS += -Wl,--gc-sections -flinker-output=nolto-rel |
33 | | -# Pull float support into newlib-nano's printf so decimals render (%g). |
34 | | -LDFLAGS += -Wl,-u,_printf_float |
| 19 | +OBJDIR = $(OUTPUT_DIR)/$(PLATFORM) |
| 20 | +OBJS = $(patsubst src/%.cpp,$(OBJDIR)/%.o,$(SOURCES)) |
| 21 | + |
| 22 | +ifeq ($(PLATFORM),device) |
| 23 | + CC = arm-none-eabi-gcc |
| 24 | + CXX = arm-none-eabi-g++ |
| 25 | + EADK_CFLAGS := $(shell $(NWLINK) eadk-cflags-device) |
| 26 | + CXXFLAGS = $(EADK_CFLAGS) -std=c++11 -fno-exceptions -Wall -Os -MMD -MP |
| 27 | + CXXFLAGS += -fdata-sections -ffunction-sections |
| 28 | + CXXFLAGS += -flto -fno-fat-lto-objects -fwhole-program -fvisibility=internal |
| 29 | + LDFLAGS = $(shell $(NWLINK) eadk-ldflags-device) --specs=nano.specs |
| 30 | + LDFLAGS += -Wl,-e,main -Wl,-u,eadk_app_name -Wl,-u,eadk_app_icon -Wl,-u,eadk_api_level |
| 31 | + LDFLAGS += -Wl,--gc-sections -flinker-output=nolto-rel -Wl,-u,_printf_float |
| 32 | + APP = $(OUTPUT_DIR)/$(APP_NAME).nwa |
| 33 | +else ifeq ($(PLATFORM),web) |
| 34 | + CC = emcc |
| 35 | + CXX = em++ |
| 36 | + EADK_CFLAGS := $(shell $(NWLINK) eadk-cflags-web) |
| 37 | + CXXFLAGS = $(EADK_CFLAGS) -std=c++11 -fno-exceptions -Wall -O0 -g -MMD -MP |
| 38 | + LDFLAGS = -sSIDE_MODULE=2 -sEXPORTED_FUNCTIONS=_main -sASYNCIFY=1 |
| 39 | + LDFLAGS += -sASYNCIFY_IMPORTS=eadk_event_get,_eadk_keyboard_scan_do_scan,eadk_timing_msleep,eadk_display_wait_for_vblank |
| 40 | + LDFLAGS += -lc |
| 41 | + APP = $(OUTPUT_DIR)/$(APP_NAME).nwb |
| 42 | +else |
| 43 | + $(error Unknown PLATFORM '$(PLATFORM)' (use device or web)) |
| 44 | +endif |
35 | 45 |
|
36 | 46 | .PHONY: all |
37 | | -all: $(OUTPUT_DIR)/$(APP_NAME).nwa |
| 47 | +all: $(APP) |
38 | 48 |
|
39 | | -$(OUTPUT_DIR)/$(APP_NAME).nwa: $(OBJS) $(OUTPUT_DIR)/icon.o |
| 49 | +$(APP): $(OBJS) $(OBJDIR)/icon.o |
40 | 50 | @echo "LD $@" |
41 | 51 | $(CC) $(CXXFLAGS) $(LDFLAGS) $^ -o $@ |
42 | 52 |
|
43 | | -$(OUTPUT_DIR)/%.o: src/%.cpp | $(OUTPUT_DIR) |
| 53 | +$(OBJDIR)/%.o: src/%.cpp | $(OBJDIR) |
44 | 54 | @echo "CXX $<" |
45 | 55 | $(CXX) $(CXXFLAGS) -c $< -o $@ |
46 | 56 |
|
47 | | -$(OUTPUT_DIR)/icon.o: $(APP_ICON) | $(OUTPUT_DIR) |
| 57 | +$(OBJDIR)/icon.o: $(APP_ICON) | $(OBJDIR) |
48 | 58 | @echo "ICON $<" |
49 | 59 | $(NWLINK) png-icon-o $< $@ |
50 | 60 |
|
51 | | -$(OUTPUT_DIR): |
52 | | - mkdir -p $(OUTPUT_DIR) |
| 61 | +$(OBJDIR): |
| 62 | + mkdir -p $(OBJDIR) |
53 | 63 |
|
54 | 64 | .PHONY: install |
55 | 65 | install: $(OUTPUT_DIR)/$(APP_NAME).nwa |
|
0 commit comments