ARMOBJDUMP?= arm-none-eabi-objdump ARMCC?= arm-none-eabi-gcc ARMTARGET?= -mcpu=cortex-m3 -mthumb -DSTROBE_SINGLE_THREAD=1 # Clang doesn't work due to no-nano libc #ARMCC?=clang-mp-9.0 #ARMTARGET?= -nostdlib -ffreestanding -target arm-none-eabi -mcpu=cortex-m3 -mfloat-abi=soft -mthumb PROG = lora.irr PROGEXT = .elf SRCS = main.c SRCS+= board.c SRCS+= misc.c SRCS+= strobe_rng_init.c CFLAGS+= -I$(.CURDIR) CFLAGS+= -g #CFLAGS+= -DNDEBUG # Strobe .PATH: $(.CURDIR)/strobe CFLAGS+= -I$(.CURDIR)/strobe SRCS+= strobe.c \ x25519.c # LoRamac (SX1276) radio code LORAMAC_SRC = $(.CURDIR)/loramac/src .PATH: $(LORAMAC_SRC)/radio/sx1276 $(LORAMAC_SRC)/system $(LORAMAC_SRC)/boards/mcu $(LORAMAC_SRC)/boards/NucleoL152 CFLAGS+= -I$(LORAMAC_SRC)/boards CFLAGS+= -I$(LORAMAC_SRC)/system CFLAGS+= -I$(LORAMAC_SRC)/radio CFLAGS+= -DUSE_HAL_DRIVER -DSX1276MB1LAS SRCS+= sx1276.c SRCS+= utilities.c SRCS+= adc.c timer.c delay.c gpio.c uart.c fifo.c SRCS+= adc-board.c delay-board.c gpio-board.c rtc-board.c lpm-board.c sx1276mb1las-board.c spi-board.c uart-board.c # Microcontroller STM32=$(.CURDIR)/stm32 .PATH: $(STM32)/l151ccux LINKER_SCRIPT=$(STM32)/l151ccux/STM32L151CCUX_FLASH.ld SRCS+= \ startup_stm32l151ccux.s \ stm32l1xx_hal.c \ stm32l1xx_hal_adc.c \ stm32l1xx_hal_adc_ex.c \ stm32l1xx_hal_cortex.c \ stm32l1xx_hal_dma.c \ stm32l1xx_hal_gpio.c \ stm32l1xx_hal_spi.c \ stm32l1xx_hal_pwr.c \ stm32l1xx_hal_pwr_ex.c \ stm32l1xx_hal_pcd.c \ stm32l1xx_hal_pcd_ex.c \ stm32l1xx_hal_rcc.c \ stm32l1xx_hal_rcc_ex.c \ stm32l1xx_hal_rtc.c \ stm32l1xx_hal_rtc_ex.c \ stm32l1xx_hal_uart.c \ system_stm32l1xx.c SRCS+= \ stm32l1xx_it.c \ stm32l1xx_hal_msp.c CFLAGS+= -I$(STM32) CFLAGS+= -I$(STM32)/l151ccux CFLAGS+= -DSTM32L151xC # USB .PATH: $(STM32)/usb SRCS+= \ stm32l1xx_ll_usb.c \ usb_device.c \ usbd_cdc.c \ usbd_cdc_if.c \ usbd_conf.c \ usbd_core.c \ usbd_ctlreq.c \ usbd_desc.c \ usbd_ioreq.c CFLAGS+= -I$(STM32)/usb OBJS = $(SRCS:C/.c$/.o/) CFLAGS+= -Werror -Wall .PHONY: all all: $(PROG)$(PROGEXT) $(PROG).list .PHONY: depend depend: $(SRCS) $(ARMCC) $(ARMTARGET) $(CFLAGS) $(.ALLSRC) -MM > .depend || rm -f .depend $(PROG)$(PROGEXT): $(OBJS) $(ARMCC) $(ARMTARGET) -o $@ $(.ALLSRC) -T$(LINKER_SCRIPT) --specs=nosys.specs -Wl,--gc-sections -static --specs=nano.specs -Wl,--start-group -lc -lm -Wl,--end-group $(PROG).list: $(PROG)$(PROGEXT) $(ARMOBJDUMP) -h -S $(.ALLSRC) > $@ || rm -f $@ .PHONY: runbuild runbuild: $(SRCS) for i in $(.MAKEFILE_LIST) $(.ALLSRC) $$(gsed ':x; /\\$$/ { N; s/\\\n//; tx }' < .depend | sed -e 's/^[^:]*://'); do if [ "$$i" != ".." ]; then echo $$i; fi; done | entr -d sh -c 'echo starting...; cd $(.CURDIR) && $(MAKE) $(.MAKEFLAGS) depend && $(MAKE) $(.MAKEFLAGS) all' .PHONY: runtests runtests: lora.py ls $(.ALLSRC) | entr sh -c 'PYTHONPATH="$(.CURDIR)" python -m coverage run -m unittest lora && coverage report --omit=p/\* -m -i' .c.o: $(ARMCC) $(ARMTARGET) $(CFLAGS) -c $< -o $@ STROBE_NAME = strobe STROBE_REPO = https://git.code.sf.net/p/strobe/code STROBE_BRANCH = master LORAMAC_NAME = loramac LORAMAC_REPO = https://github.com/Lora-net/LoRaMac-node.git LORAMAC_BRANCH = master .for module in STROBE LORAMAC .PHONY: init-$($(module)_NAME) init-$($(module)_NAME): git subtree add -P $($(module)_NAME) --squash $($(module)_REPO) $($(module)_BRANCH) .PHONY: update-$($(module)_NAME) update-$($(module)_NAME): git subtree pull -P $($(module)_NAME) --squash $($(module)_REPO) $($(module)_BRANCH) .endfor