Makefile (2570B)
1 # Calculadora estilo Casio "natural": terminal, ventana SDL, simulador y PicoCalc. 2 CC ?= cc 3 CFLAGS ?= -O2 -g 4 CFLAGS += -std=gnu11 -Wall -Wextra -Wshadow -Wno-unused-parameter 5 COMUN ?= ../comun 6 include $(COMUN)/comun.mk 7 CPPFLAGS += -I. -Icore -Igfx -Ilinux $(COMUN_INC) 8 NCURSES := $(shell pkg-config --libs ncursesw 2>/dev/null || echo -lncursesw) 9 SDL := $(shell pkg-config --cflags --libs sdl3 2>/dev/null) 10 11 CORE := $(wildcard core/*.c) 12 GFX := $(wildcard gfx/*.c) 13 HDRS := $(wildcard core/*.h gfx/*.h linux/*.h) $(COMUN_HDRS) 14 TEST := linux/selftest.c linux/selftest_num.c linux/selftest_calc.c 15 LINUX := linux/main.c linux/gui.c linux/tui.c linux/tui_modes.c linux/store.c 16 CLIENT := $(CORE) $(GFX) $(TEST) $(LINUX) $(COMUN_BASE) $(COMUN_GFX) $(COMUN_LINUX) $(COMUN_TUI) $(COMUN_GUI) 17 SIM_SRC := $(CORE) $(GFX) pico/app.c $(COMUN_BASE) $(COMUN_GFX) $(COMUN_SIM) 18 19 all: calc calc-picosim 20 21 calc: $(CLIENT) $(HDRS) 22 $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $(CLIENT) -lm $(NCURSES) $(SDL) 23 24 # simulador de la PicoCalc (mismo pico/app.c que el firmware) 25 calc-picosim: $(SIM_SRC) $(HDRS) 26 $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $(SIM_SRC) -lm $(SDL) 27 28 gfx/calcfont.c: tools/mkcalcfont.py 29 python3 tools/mkcalcfont.py > $@ 30 31 test: calc 32 ./calc --selftest 33 34 debug: 35 $(MAKE) -B calc CFLAGS="-O1 -g -fsanitize=address,undefined -fno-omit-frame-pointer" 36 37 # el nucleo tiene que compilar para la Pico: tamano de codigo y RAM 38 check-arm: 39 @for f in $(CORE); do arm-none-eabi-gcc -mcpu=cortex-m0plus -mthumb -std=gnu11 -O2 -Wall -Wextra -Wshadow \ 40 -Wno-unused-parameter -Icore -I$(COMUN)/base -c $$f -o /tmp/calc-arm-$$(basename $$f).o || exit 1; done 41 @arm-none-eabi-size -t /tmp/calc-arm-*.o | tail -1; rm -f /tmp/calc-arm-*.o 42 43 # firmware para la PicoCalc (necesita arm-none-eabi-gcc y PICO_SDK_PATH) 44 pico: 45 cmake -S pico -B pico/build -DPICO_SDK_PATH=$${PICO_SDK_PATH:-$$HOME/pico-sdk} -DCOMUN_DIR=$(abspath $(COMUN)) >/dev/null && $(MAKE) -C pico/build -j8 46 @mkdir -p sd/pico1-apps sd/firmware 47 cp pico/build/calc_picocalc.uf2 sd/pico1-apps/Calculadora.uf2 48 cp pico/build/calc_picocalc_sd200k.bin sd/firmware/Calculadora.bin 49 python3 $(COMUN_TOOLS)/patch_reset.py pico/build/calc_picocalc_sd200k.elf sd/firmware/Calculadora.bin 50 @test -f sd/CALC.LOG || head -c 65536 /dev/zero | tr '\0' ' ' > sd/CALC.LOG 51 @test -f sd/CALC.SAV || head -c 40960 /dev/zero > sd/CALC.SAV 52 @echo "Listo: copiá el contenido de sd/ a la raíz de la SD (CALC.LOG y CALC.SAV solo la primera vez)" 53 54 clean: 55 rm -f calc calc-picosim 56 rm -rf pico/build 57 58 .PHONY: all test debug check-arm clean pico