1 ###############################################################################
2 # "THE BEER-WARE LICENSE" (Revision 42):
3 # <msmith@FreeBSD.ORG> wrote this file. As long as you retain this notice you
4 # can do whatever you want with this stuff. If we meet some day, and you think
5 # this stuff is worth it, you can buy me a beer in return
6 ###############################################################################
8 # Makefile for building the betaflight firmware.
10 # Invoke this with 'make help' to see the list of supported targets.
12 ###############################################################################
15 # Things that the user might override on the commandline
18 # The target to build, see VALID_TARGETS below
21 # Compile-time options
24 # compile for OpenPilot BootLoader support
27 # Debugger optons, must be empty or GDB
30 # Insert the debugging hardfault debugger
31 # releases should not be built with this flag as it does not disable pwm output
34 # Serial port/Device for flashing
35 SERIAL_DEVICE ?
= $(firstword $(wildcard /dev
/ttyUSB
*) no-port-found
)
37 # Flash size (KB). Some low-end chips actually have more flash than advertised, use this to override.
40 ###############################################################################
41 # Things that need to be maintained as the source changes
46 CC3D_TARGETS
= CC3D CC3D_OPBL
47 NAZE_TARGETS
= ALIENFLIGHTF1 AFROMMINI
48 SDCARD_TARGETS
= ALIENFLIGHTF4 BLUEJAYF4 SPRACINGF3MINI AQ32_V2 FURYF3
49 SPRACINGF3_TARGETS
= RMDO IRCFUSIONF3
50 SERIAL_USB_TARGETS
= SPRACINGF3 IRCFUSIONF3
52 # Valid targets for STM VCP support
53 VCP_VALID_TARGETS
= KKNGF4 FURYF3 REVO BLUEJAYF4
$(CC3D_TARGETS
)
55 F405_TARGETS
= REVO ALIENFLIGHTF4 BLUEJAYF4 KKNGF4
59 F1_TARGETS
= NAZE OLIMEXINO
$(CC3D_TARGETS
) PORT103R ALIENFLIGHTF1 AFROMINI
60 F3_TARGETS
= STM32F3DISCOVERY CHEBUZZF3 NAZE32PRO SPRACINGF3 IRCFUSIONF3 SPARKY ALIENFLIGHTF3 COLIBRI_RACE LUX_RACE MOTOLAB RMDO SPRACINGF3MINI SPRACINGF3EVO DOGE SINGULARITY FURYF3
61 F4_TARGETS
= $(F405_TARGETS
) $(F405_TARGETS_16
) $(F411_TARGETS
)
62 VALID_TARGETS
= $(F1_TARGETS
) $(F3_TARGETS
) $(F4_TARGETS
)
64 # Valid targets for OP BootLoader support
65 OPBL_VALID_TARGETS
= CC3D_OPBL
68 128K_TARGETS
= ALIENFLIGHTF1
$(CC3D_TARGETS
) NAZE OLIMEXINO RMDO AFROMINI
69 256K_TARGETS
= EUSTM32F103RC PORT103R
$(F3_TARGETS
)
70 512K_TARGETS
= $(F411_TARGETS
)
71 1024K_TARGETS
= $(F405_TARGETS
) $(F405_TARGETS_16
)
73 # note that there is no hardfault debugging startup file assembly handler for other platforms
74 ifeq ($(DEBUG_HARDFAULTS
),F3
)
75 CFLAGS
+= -DDEBUG_HARDFAULTS
76 STM32F30x_COMMON_SRC
= startup_stm32f3_debug_hardfault_handler.S
78 STM32F30x_COMMON_SRC
= startup_stm32f30x_md_gcc.S
81 # Configure default flash sizes for the targets
83 ifeq ($(TARGET
),$(filter $(TARGET
),$(64K_TARGETS
)))
85 else ifeq ($(TARGET
),$(filter $(TARGET
),$(128K_TARGETS
)))
87 else ifeq ($(TARGET
),$(filter $(TARGET
),$(256K_TARGETS
)))
89 else ifeq ($(TARGET
),$(filter $(TARGET
),$(512K_TARGETS
)))
91 else ifeq ($(TARGET
),$(filter $(TARGET
),$(1024K_TARGETS
)))
94 $(error FLASH_SIZE not configured for target
$(TARGET
))
98 REVISION
= $(shell git log
-1 --format
="%h")
100 FC_VER_MAJOR
:= $(shell grep
" FC_VERSION_MAJOR" src
/main
/version.h | awk
'{print $$3}' )
101 FC_VER_MINOR
:= $(shell grep
" FC_VERSION_MINOR" src
/main
/version.h | awk
'{print $$3}' )
102 FC_VER_PATCH
:= $(shell grep
" FC_VERSION_PATCH" src
/main
/version.h | awk
'{print $$3}' )
104 FC_VER
:= $(FC_VER_MAJOR
).
$(FC_VER_MINOR
).
$(FC_VER_PATCH
)
106 # Working directories
107 ROOT
:= $(patsubst %/,%,$(dir $(lastword
$(MAKEFILE_LIST
))))
108 SRC_DIR
= $(ROOT
)/src
/main
109 OBJECT_DIR
= $(ROOT
)/obj
/main
110 BIN_DIR
= $(ROOT
)/obj
111 CMSIS_DIR
= $(ROOT
)/lib
/main
/CMSIS
112 INCLUDE_DIRS
= $(SRC_DIR
) \
113 $(ROOT
)/src
/main
/target
114 LINKER_DIR
= $(ROOT
)/src
/main
/target
116 # Search path for sources
117 VPATH
:= $(SRC_DIR
):$(SRC_DIR
)/startup
118 USBFS_DIR
= $(ROOT
)/lib
/main
/STM32_USB-FS-Device_Driver
119 USBPERIPH_SRC
= $(notdir $(wildcard $(USBFS_DIR
)/src
/*.c
))
120 FATFS_DIR
= $(ROOT
)/lib
/main
/FatFS
121 FATFS_SRC
= $(notdir $(wildcard $(FATFS_DIR
)/*.c
))
123 CSOURCES
:= $(shell find
$(SRC_DIR
) -name
'*.c')
125 ifeq ($(TARGET
),$(filter $(TARGET
),$(F3_TARGETS
)))
127 STDPERIPH_DIR
= $(ROOT
)/lib
/main
/STM32F30x_StdPeriph_Driver
128 STDPERIPH_SRC
= $(notdir $(wildcard $(STDPERIPH_DIR
)/src
/*.c
))
129 EXCLUDES
= stm32f30x_crc.c \
132 STDPERIPH_SRC
:= $(filter-out ${EXCLUDES}, $(STDPERIPH_SRC
))
133 DEVICE_STDPERIPH_SRC
= $(STDPERIPH_SRC
)
135 VPATH
:= $(VPATH
):$(CMSIS_DIR
)/CM1
/CoreSupport
:$(CMSIS_DIR
)/CM1
/DeviceSupport
/ST
/STM32F30x
136 CMSIS_SRC
= $(notdir $(wildcard $(CMSIS_DIR
)/CM1
/CoreSupport
/*.c \
137 $(CMSIS_DIR
)/CM1
/DeviceSupport
/ST
/STM32F30x
/*.c
))
139 INCLUDE_DIRS
:= $(INCLUDE_DIRS
) \
140 $(STDPERIPH_DIR
)/inc \
141 $(CMSIS_DIR
)/CM1
/CoreSupport \
142 $(CMSIS_DIR
)/CM1
/DeviceSupport
/ST
/STM32F30x
144 ifneq ($(TARGET
),$(filter $(TARGET
), $(SERIAL_USB_TARGETS
)))
145 INCLUDE_DIRS
:= $(INCLUDE_DIRS
) \
149 VPATH
:= $(VPATH
):$(USBFS_DIR
)/src
151 DEVICE_STDPERIPH_SRC
:= $(DEVICE_STDPERIPH_SRC
)\
156 ifeq ($(TARGET
),$(filter $(TARGET
), $(SDCARD_TARGETS
)))
157 INCLUDE_DIRS
:= $(INCLUDE_DIRS
) \
160 VPATH
:= $(VPATH
):$(FATFS_DIR
)
163 LD_SCRIPT
= $(LINKER_DIR
)/stm32_flash_f303_
$(FLASH_SIZE
)k.
ld
165 ARCH_FLAGS
= -mthumb
-mcpu
=cortex-m4
-mfloat-abi
=hard
-mfpu
=fpv4-sp-d16
-fsingle-precision-constant
-Wdouble-promotion
166 DEVICE_FLAGS
= -DSTM32F303xC
-DSTM32F303
167 TARGET_FLAGS
= -D
$(TARGET
)
168 ifeq ($(TARGET
),CHEBUZZF3
)
169 # CHEBUZZ is a VARIANT of STM32F3DISCOVERY
170 TARGET_FLAGS
:= $(TARGET_FLAGS
) -DSTM32F3DISCOVERY
173 ifeq ($(TARGET
),$(filter $(TARGET
),$(SPRACINGF3_TARGETS
)))
174 # RMDO and IRCFUSIONF3 are a VARIANT of SPRACINGF3
175 TARGET_FLAGS
:= $(TARGET_FLAGS
) -DSPRACINGF3
181 else ifeq ($(TARGET
),$(filter $(TARGET
), $(F4_TARGETS
)))
184 STDPERIPH_DIR
= $(ROOT
)/lib
/main
/STM32F4xx_StdPeriph_Driver
185 STDPERIPH_SRC
= $(notdir $(wildcard $(STDPERIPH_DIR
)/src
/*.c
))
186 EXCLUDES
= stm32f4xx_crc.c \
192 stm32f4xx_flash_ramfunc.c \
196 stm32f4xx_spdifrx.c \
198 stm32f4xx_cryp_aes.c \
199 stm32f4xx_hash_md5.c \
200 stm32f4xx_cryp_des.c \
204 stm32f4xx_cryp_tdes.c \
205 stm32f4xx_hash_sha1.c
208 ifeq ($(TARGET
),$(filter $(TARGET
), $(F411_TARGETS
)))
209 EXCLUDES
+= stm32f4xx_fsmc.c
212 STDPERIPH_SRC
:= $(filter-out ${EXCLUDES}, $(STDPERIPH_SRC
))
215 USBCORE_DIR
= $(ROOT
)/lib
/main
/STM32_USB_Device_Library
/Core
216 USBCORE_SRC
= $(notdir $(wildcard $(USBCORE_DIR
)/src
/*.c
))
217 USBOTG_DIR
= $(ROOT
)/lib
/main
/STM32_USB_OTG_Driver
218 USBOTG_SRC
= $(notdir $(wildcard $(USBOTG_DIR
)/src
/*.c
))
219 EXCLUDES
= usb_bsp_template.c \
220 usb_conf_template.c \
225 USBOTG_SRC
:= $(filter-out ${EXCLUDES}, $(USBOTG_SRC
))
226 USBCDC_DIR
= $(ROOT
)/lib
/main
/STM32_USB_Device_Library
/Class
/cdc
227 USBCDC_SRC
= $(notdir $(wildcard $(USBCDC_DIR
)/src
/*.c
))
228 EXCLUDES
= usbd_cdc_if_template.c
229 USBCDC_SRC
:= $(filter-out ${EXCLUDES}, $(USBCDC_SRC
))
230 VPATH
:= $(VPATH
):$(USBOTG_DIR
)/src
:$(USBCORE_DIR
)/src
:$(USBCDC_DIR
)/src
232 DEVICE_STDPERIPH_SRC
:= $(STDPERIPH_SRC
) \
238 VPATH
:= $(VPATH
):$(CMSIS_DIR
)/CM4
/CoreSupport
:$(CMSIS_DIR
)/CM4
/DeviceSupport
/ST
/STM32F4xx
239 CMSIS_SRC
= $(notdir $(wildcard $(CMSIS_DIR
)/CM4
/CoreSupport
/*.c \
240 $(CMSIS_DIR
)/CM4
/DeviceSupport
/ST
/STM32F4xx
/*.c
))
241 INCLUDE_DIRS
:= $(INCLUDE_DIRS
) \
242 $(STDPERIPH_DIR
)/inc \
247 $(CMSIS_DIR
)/CM4
/CoreSupport \
248 $(CMSIS_DIR
)/CM4
/DeviceSupport
/ST
/STM32F4xx \
249 $(ROOT
)/src
/main
/vcpf4
251 ifeq ($(TARGET
),$(filter $(TARGET
),$(SDCARD_TARGETS
)))
252 INCLUDE_DIRS
:= $(INCLUDE_DIRS
) \
254 VPATH
:= $(VPATH
):$(FATFS_DIR
)
258 ARCH_FLAGS
= -mthumb
-mcpu
=cortex-m4
-march
=armv7e-m
-mfloat-abi
=hard
-mfpu
=fpv4-sp-d16
-fsingle-precision-constant
-Wdouble-promotion
260 ifeq ($(TARGET
),$(filter $(TARGET
),$(F411_TARGETS
)))
261 DEVICE_FLAGS
= -DSTM32F411xE
262 DEVICE_FLAGS
+= -DHSE_VALUE
=8000000
263 LD_SCRIPT
= $(LINKER_DIR
)/stm32_flash_f411.
ld
264 else ifeq ($(TARGET
),$(filter $(TARGET
),$(F405_TARGETS_16
)))
265 DEVICE_FLAGS
= -DSTM32F40_41xxx
266 DEVICE_FLAGS
+= -DHSE_VALUE
=16000000
267 LD_SCRIPT
= $(LINKER_DIR
)/stm32_flash_f405.
ld
268 else ifeq ($(TARGET
),$(filter $(TARGET
),$(F405_TARGETS
)))
269 DEVICE_FLAGS
= -DSTM32F40_41xxx
270 DEVICE_FLAGS
+= -DHSE_VALUE
=8000000
271 LD_SCRIPT
= $(LINKER_DIR
)/stm32_flash_f405.
ld
273 $(error Unknown MCU for F4 target
)
276 TARGET_FLAGS
= -D
$(TARGET
)
281 else ifeq ($(TARGET
),$(filter $(TARGET
),EUSTM32F103RC PORT103R
))
283 STDPERIPH_DIR
= $(ROOT
)/lib
/main
/STM32F10x_StdPeriph_Driver
284 STDPERIPH_SRC
= $(notdir $(wildcard $(STDPERIPH_DIR
)/src
/*.c
))
285 EXCLUDES
= stm32f10x_crc.c \
289 STDPERIPH_SRC
:= $(filter-out ${EXCLUDES}, $(STDPERIPH_SRC
))
291 # Search path and source files for the CMSIS sources
292 VPATH
:= $(VPATH
):$(CMSIS_DIR
)/CM3
/CoreSupport
:$(CMSIS_DIR
)/CM3
/DeviceSupport
/ST
/STM32F10x
293 CMSIS_SRC
= $(notdir $(wildcard $(CMSIS_DIR
)/CM3
/CoreSupport
/*.c \
294 $(CMSIS_DIR
)/CM3
/DeviceSupport
/ST
/STM32F10x
/*.c
))
296 INCLUDE_DIRS
:= $(INCLUDE_DIRS
) \
297 $(STDPERIPH_DIR
)/inc \
298 $(CMSIS_DIR
)/CM3
/CoreSupport \
299 $(CMSIS_DIR
)/CM3
/DeviceSupport
/ST
/STM32F10x \
301 LD_SCRIPT
= $(LINKER_DIR
)/stm32_flash_f103_
$(FLASH_SIZE
)k.
ld
303 ARCH_FLAGS
= -mthumb
-mcpu
=cortex-m3
304 TARGET_FLAGS
= -D
$(TARGET
) -pedantic
305 DEVICE_FLAGS
= -DSTM32F10X_HD
-DSTM32F10X
307 DEVICE_STDPERIPH_SRC
= $(STDPERIPH_SRC
)
311 STDPERIPH_DIR
= $(ROOT
)/lib
/main
/STM32F10x_StdPeriph_Driver
312 STDPERIPH_SRC
= $(notdir $(wildcard $(STDPERIPH_DIR
)/src
/*.c
))
313 EXCLUDES
= stm32f10x_crc.c \
317 STDPERIPH_SRC
:= $(filter-out ${EXCLUDES}, $(STDPERIPH_SRC
))
319 # Search path and source files for the CMSIS sources
320 VPATH
:= $(VPATH
):$(CMSIS_DIR
)/CM3
/CoreSupport
:$(CMSIS_DIR
)/CM3
/DeviceSupport
/ST
/STM32F10x
321 CMSIS_SRC
= $(notdir $(wildcard $(CMSIS_DIR
)/CM3
/CoreSupport
/*.c \
322 $(CMSIS_DIR
)/CM3
/DeviceSupport
/ST
/STM32F10x
/*.c
))
324 INCLUDE_DIRS
:= $(INCLUDE_DIRS
) \
325 $(STDPERIPH_DIR
)/inc \
326 $(CMSIS_DIR
)/CM3
/CoreSupport \
327 $(CMSIS_DIR
)/CM3
/DeviceSupport
/ST
/STM32F10x \
329 DEVICE_STDPERIPH_SRC
= $(STDPERIPH_SRC
)
331 ifeq ($(TARGET
),$(filter $(TARGET
), $(VCP_VALID_TARGETS
)))
332 INCLUDE_DIRS
:= $(INCLUDE_DIRS
) \
336 VPATH
:= $(VPATH
):$(USBFS_DIR
)/src
338 DEVICE_STDPERIPH_SRC
:= $(DEVICE_STDPERIPH_SRC
) \
343 LD_SCRIPT
= $(LINKER_DIR
)/stm32_flash_f103_
$(FLASH_SIZE
)k.
ld
344 ARCH_FLAGS
= -mthumb
-mcpu
=cortex-m3
345 TARGET_FLAGS
= -D
$(TARGET
) -pedantic
346 DEVICE_FLAGS
= -DSTM32F10X_MD
-DSTM32F10X
353 ifneq ($(FLASH_SIZE
),)
354 DEVICE_FLAGS
:= $(DEVICE_FLAGS
) -DFLASH_SIZE
=$(FLASH_SIZE
)
357 TARGET_DIR
= $(ROOT
)/src
/main
/target
/$(TARGET
)
358 TARGET_SRC
= $(notdir $(wildcard $(TARGET_DIR
)/*.c
))
360 ifeq ($(TARGET
),$(filter $(TARGET
), $(NAZE_TARGETS
)))
362 TARGET_FLAGS
:= $(TARGET_FLAGS
) -DNAZE
-D
$(TARGET
)
363 TARGET_DIR
= $(ROOT
)/src
/main
/target
/NAZE
366 ifeq ($(TARGET
),$(filter $(TARGET
), $(CC3D_TARGETS
)))
367 TARGET_FLAGS
:= $(TARGET_FLAGS
) -DCC3D
368 ifeq ($(TARGET
),CC3D_OPBL
)
369 TARGET_FLAGS
:= $(TARGET_FLAGS
) -DCC3D_OPBL
371 TARGET_DIR
= $(ROOT
)/src
/main
/target
/CC3D
374 ifneq ($(filter $(TARGET
),$(OPBL_VALID_TARGETS
)),)
379 ifneq ($(filter $(TARGET
),$(OPBL_VALID_TARGETS
)),)
380 TARGET_FLAGS
:= -DOPBL
$(TARGET_FLAGS
)
381 LD_SCRIPT
= $(LINKER_DIR
)/stm32_flash_f103_
$(FLASH_SIZE
)k_opbl.
ld
382 .DEFAULT_GOAL
:= binary
384 $(error OPBL specified with a unsupported target
)
388 INCLUDE_DIRS
:= $(INCLUDE_DIRS
) \
391 VPATH
:= $(VPATH
):$(TARGET_DIR
)
399 config
/runtime_config.c \
402 common
/typeconversion.c \
409 flight
/altitudehold.c \
414 drivers
/bus_i2c_soft.c \
416 drivers
/sound_beeper.c \
418 drivers
/gyro_sync.c \
419 drivers
/buf_writer.c \
425 drivers
/pwm_mapping.c \
426 drivers
/pwm_output.c \
428 drivers
/light_led.c \
429 drivers
/serial_uart.c \
436 io
/serial_4way_avrootloader.c \
437 io
/serial_4way_stk500v2.c \
440 io
/statusindicator.c \
451 sensors
/acceleration.c \
453 sensors
/boardalignment.c \
456 sensors
/initialisation.c \
458 $(DEVICE_STDPERIPH_SRC
)
462 flight
/navigation.c \
463 flight
/gps_conversion.c \
464 common
/colorconversion.c \
468 telemetry
/telemetry.c \
471 telemetry
/smartport.c \
474 sensors
/barometer.c \
475 blackbox
/blackbox.c \
476 blackbox
/blackbox_io.c
486 drivers
/serial_usb_vcp.c \
490 vcpf4
/stm32f4xx_it.c \
494 vcpf4
/usbd_cdc_vcp.c \
495 drivers
/serial_usb_vcp.c
497 STM32F10x_COMMON_SRC
= \
498 startup_stm32f10x_md_gcc.S \
499 drivers
/serial_softserial.c \
500 drivers
/serial_uart_stm32f10x.c \
501 drivers
/system_stm32f10x.c \
502 drivers
/timer_stm32f10x.c \
503 drivers
/gpio_stm32f10x.c \
504 drivers
/adc_stm32f10x.c \
505 drivers
/bus_i2c_stm32f10x.c \
509 STM32F30x_COMMON_SRC
= \
510 startup_stm32f30x_md_gcc.S \
511 target
/system_stm32f30x.c \
512 drivers
/adc_stm32f30x.c \
513 drivers
/bus_i2c_stm32f30x.c \
514 drivers
/display_ug2864hsweg01.c \
515 drivers
/gpio_stm32f30x.c \
516 drivers
/serial_uart_stm32f30x.c \
517 drivers
/system_stm32f30x.c \
519 drivers
/timer_stm32f30x.c
521 STM32F4xx_COMMON_SRC
= \
522 startup_stm32f40xx.s \
523 target
/system_stm32f4xx.c \
524 drivers
/accgyro_mpu.c \
525 drivers
/adc_stm32f4xx.c \
526 drivers
/adc_stm32f4xx.c \
527 drivers
/bus_i2c_stm32f10x.c \
528 drivers
/gpio_stm32f4xx.c \
530 drivers
/serial_softserial.c \
531 drivers
/serial_uart_stm32f4xx.c \
532 drivers
/system_stm32f4xx.c \
533 drivers
/timer_stm32f4xx.c \
534 drivers
/dma_stm32f4xx.c \
535 drivers
/flash_m25p16.c \
539 $(STM32F10x_COMMON_SRC
) \
540 drivers
/accgyro_adxl345.c \
541 drivers
/accgyro_bma280.c \
542 drivers
/accgyro_l3g4200d.c \
543 drivers
/accgyro_mma845x.c \
544 drivers
/accgyro_mpu.c \
545 drivers
/accgyro_mpu3050.c \
546 drivers
/accgyro_mpu6050.c \
547 drivers
/accgyro_mpu6500.c \
548 drivers
/accgyro_spi_mpu6500.c \
549 drivers
/barometer_bmp085.c \
550 drivers
/barometer_bmp280.c \
551 drivers
/barometer_ms5611.c \
552 drivers
/barometer_bmp280.c \
553 drivers
/compass_hmc5883l.c \
554 drivers
/display_ug2864hsweg01.c \
555 drivers
/flash_m25p16.c \
556 drivers
/light_ws2811strip.c \
557 drivers
/light_ws2811strip_stm32f10x.c \
558 drivers
/sonar_hcsr04.c \
560 hardware_revision.c \
564 ALIENFLIGHTF1_SRC
= $(NAZE_SRC
)
566 AFROMINI_SRC
= $(NAZE_SRC
)
568 EUSTM32F103RC_SRC
= \
569 $(STM32F10x_COMMON_SRC
) \
570 drivers
/accgyro_adxl345.c \
571 drivers
/accgyro_bma280.c \
572 drivers
/accgyro_l3g4200d.c \
573 drivers
/accgyro_mma845x.c \
574 drivers
/accgyro_mpu.c \
575 drivers
/accgyro_mpu3050.c \
576 drivers
/accgyro_mpu6050.c \
577 drivers
/accgyro_spi_mpu6000.c \
578 drivers
/accgyro_spi_mpu6500.c \
579 drivers
/barometer_bmp085.c \
580 drivers
/barometer_bmp280.c \
581 drivers
/barometer_ms5611.c \
582 drivers
/compass_ak8975.c \
583 drivers
/compass_hmc5883l.c \
584 drivers
/display_ug2864hsweg01.c \
585 drivers
/flash_m25p16.c \
586 drivers
/light_ws2811strip.c \
587 drivers
/light_ws2811strip_stm32f10x.c \
588 drivers
/sonar_hcsr04.c \
593 PORT103R_SRC
= $(EUSTM32F103RC_SRC
)
596 $(STM32F10x_COMMON_SRC
) \
597 drivers
/accgyro_mpu.c \
598 drivers
/accgyro_mpu6050.c \
599 drivers
/barometer_bmp085.c \
600 drivers
/barometer_bmp280.c \
601 drivers
/compass_hmc5883l.c \
602 drivers
/light_ws2811strip.c \
603 drivers
/light_ws2811strip_stm32f10x.c \
604 drivers
/sonar_hcsr04.c \
609 $(STM32F10x_COMMON_SRC
) \
610 drivers
/accgyro_mpu.c \
611 drivers
/accgyro_mpu6050.c \
612 drivers
/compass_hmc5883l.c \
613 hardware_revision.c \
615 blackbox
/blackbox.c \
616 blackbox
/blackbox_io.c \
620 $(STM32F10x_COMMON_SRC
) \
621 drivers
/accgyro_mpu.c \
622 drivers
/accgyro_spi_mpu6000.c \
623 drivers
/barometer_bmp085.c \
624 drivers
/barometer_bmp280.c \
625 drivers
/barometer_ms5611.c \
626 drivers
/compass_hmc5883l.c \
627 drivers
/display_ug2864hsweg01.c \
628 drivers
/flash_m25p16.c \
629 drivers
/light_ws2811strip.c \
630 drivers
/light_ws2811strip_stm32f10x.c \
631 drivers
/sonar_hcsr04.c \
638 $(STM32F30x_COMMON_SRC
) \
643 STM32F3DISCOVERY_COMMON_SRC
= \
644 $(STM32F30x_COMMON_SRC
) \
645 drivers
/light_ws2811strip.c \
646 drivers
/light_ws2811strip_stm32f30x.c \
647 drivers
/accgyro_l3gd20.c \
648 drivers
/accgyro_lsm303dlhc.c \
649 drivers
/compass_hmc5883l.c \
652 STM32F3DISCOVERY_SRC
= \
653 $(STM32F3DISCOVERY_COMMON_SRC
) \
654 drivers
/accgyro_adxl345.c \
655 drivers
/accgyro_bma280.c \
656 drivers
/accgyro_mma845x.c \
657 drivers
/accgyro_mpu.c \
658 drivers
/accgyro_mpu3050.c \
659 drivers
/accgyro_mpu6050.c \
660 drivers
/accgyro_l3g4200d.c \
661 drivers
/barometer_ms5611.c \
662 drivers
/barometer_bmp280.c \
663 drivers
/compass_ak8975.c \
665 drivers
/sdcard_standard.c \
666 io
/asyncfatfs
/asyncfatfs.c \
667 io
/asyncfatfs
/fat_standard.c \
672 $(STM32F3DISCOVERY_SRC
) \
677 $(STM32F30x_COMMON_SRC
) \
679 drivers
/bus_bst_stm32f30x.c \
680 drivers
/accgyro_mpu.c \
681 drivers
/accgyro_mpu6500.c \
682 drivers
/accgyro_spi_mpu6000.c \
683 drivers
/accgyro_spi_mpu6500.c \
684 drivers
/accgyro_mpu6500.c \
685 drivers
/barometer_ms5611.c \
686 drivers
/compass_ak8963.c \
687 drivers
/compass_ak8975.c \
688 drivers
/compass_hmc5883l.c \
689 drivers
/display_ug2864hsweg01.c \
690 drivers
/light_ws2811strip.c \
691 drivers
/light_ws2811strip_stm32f30x.c \
692 drivers
/serial_usb_vcp.c \
698 $(STM32F30x_COMMON_SRC
) \
699 drivers
/accgyro_mpu.c \
700 drivers
/accgyro_mpu6500.c \
701 drivers
/accgyro_spi_mpu6500.c \
702 drivers
/accgyro_mpu6500.c \
703 drivers
/light_ws2811strip.c \
704 drivers
/light_ws2811strip_stm32f30x.c \
705 drivers
/serial_usb_vcp.c \
711 $(STM32F30x_COMMON_SRC
) \
712 drivers
/accgyro_mpu.c \
713 drivers
/accgyro_mpu6500.c \
714 drivers
/accgyro_spi_mpu6500.c \
715 drivers
/barometer_bmp280.c \
716 drivers
/barometer_spi_bmp280.c \
717 drivers
/light_ws2811strip.c \
718 drivers
/light_ws2811strip_stm32f30x.c \
719 drivers
/serial_usb_vcp.c \
725 $(STM32F30x_COMMON_SRC
) \
726 drivers
/display_ug2864hsweg01.c \
727 drivers
/accgyro_mpu.c \
728 drivers
/accgyro_mpu6050.c \
729 drivers
/barometer_ms5611.c \
730 drivers
/barometer_bmp280.c \
731 drivers
/compass_ak8975.c \
732 drivers
/light_ws2811strip.c \
733 drivers
/light_ws2811strip_stm32f30x.c \
734 drivers
/serial_usb_vcp.c \
739 ALIENFLIGHTF3_SRC
= \
740 $(STM32F30x_COMMON_SRC
) \
741 drivers
/accgyro_mpu.c \
742 drivers
/accgyro_mpu6050.c \
743 drivers
/accgyro_mpu.c \
744 drivers
/accgyro_mpu6500.c \
745 drivers
/accgyro_spi_mpu6500.c \
746 drivers
/compass_ak8963.c \
747 hardware_revision.c \
748 drivers
/serial_usb_vcp.c \
749 drivers
/sonar_hcsr04.c \
755 $(STM32F30x_COMMON_SRC
) \
756 drivers
/accgyro_mpu.c \
757 drivers
/accgyro_mpu6050.c \
758 drivers
/barometer_bmp280.c \
759 drivers
/display_ug2864hsweg01.c \
760 drivers
/flash_m25p16.c \
761 drivers
/light_ws2811strip.c \
762 drivers
/light_ws2811strip_stm32f30x.c \
763 drivers
/serial_softserial.c \
764 drivers
/sonar_hcsr04.c \
770 $(STM32F30x_COMMON_SRC
) \
771 drivers
/accgyro_mpu.c \
772 drivers
/accgyro_mpu6050.c \
773 drivers
/barometer_ms5611.c \
774 drivers
/compass_ak8975.c \
775 drivers
/barometer_bmp085.c \
776 drivers
/barometer_bmp280.c \
777 drivers
/compass_hmc5883l.c \
778 drivers
/display_ug2864hsweg01.c \
779 drivers
/flash_m25p16.c \
780 drivers
/light_ws2811strip.c \
781 drivers
/light_ws2811strip_stm32f30x.c \
782 drivers
/serial_softserial.c \
783 drivers
/sonar_hcsr04.c \
789 $(STM32F30x_COMMON_SRC
) \
790 drivers
/accgyro_mpu.c \
791 drivers
/accgyro_mpu6050.c \
792 drivers
/barometer_bmp085.c \
793 drivers
/flash_m25p16.c \
798 SPRACINGF3EVO_SRC
= \
799 $(STM32F30x_COMMON_SRC
) \
800 drivers
/accgyro_mpu.c \
801 drivers
/accgyro_mpu6500.c \
802 drivers
/accgyro_spi_mpu6500.c \
803 drivers
/barometer_bmp280.c \
804 drivers
/compass_ak8963.c \
805 drivers
/display_ug2864hsweg01.c \
806 drivers
/light_ws2811strip.c \
807 drivers
/light_ws2811strip_stm32f30x.c \
808 drivers
/serial_usb_vcp.c \
810 drivers
/sdcard_standard.c \
811 drivers
/transponder_ir.c \
812 drivers
/transponder_ir_stm32f30x.c \
813 io
/asyncfatfs
/asyncfatfs.c \
814 io
/asyncfatfs
/fat_standard.c \
815 io
/transponder_ir.c \
821 $(STM32F30x_COMMON_SRC
) \
822 drivers
/accgyro_mpu.c \
823 drivers
/display_ug2864hsweg01.c \
824 drivers
/accgyro_mpu6050.c \
825 drivers
/accgyro_spi_mpu6000.c \
826 drivers
/barometer_ms5611.c \
827 drivers
/compass_hmc5883l.c \
828 drivers
/light_ws2811strip.c \
829 drivers
/light_ws2811strip_stm32f30x.c \
830 drivers
/serial_softserial.c \
831 drivers
/serial_usb_vcp.c \
832 drivers
/flash_m25p16.c \
838 SPRACINGF3MINI_SRC
= \
839 $(STM32F30x_COMMON_SRC
) \
840 drivers
/accgyro_mpu.c \
841 drivers
/accgyro_mpu6500.c \
842 drivers
/barometer_bmp280.c \
843 drivers
/compass_ak8975.c \
844 drivers
/compass_hmc5883l.c \
845 drivers
/display_ug2864hsweg01.c \
846 drivers
/flash_m25p16.c \
847 drivers
/light_ws2811strip.c \
848 drivers
/light_ws2811strip_stm32f30x.c \
849 drivers
/serial_softserial.c \
850 drivers
/serial_usb_vcp.c \
851 drivers
/sonar_hcsr04.c \
853 drivers
/sdcard_standard.c \
854 drivers
/transponder_ir.c \
855 drivers
/transponder_ir_stm32f30x.c \
856 io
/asyncfatfs
/asyncfatfs.c \
857 io
/asyncfatfs
/fat_standard.c \
858 io
/transponder_ir.c \
865 $(STM32F30x_COMMON_SRC
) \
866 drivers
/accgyro_mpu.c \
867 drivers
/accgyro_mpu6050.c \
868 drivers
/flash_m25p16.c \
869 drivers
/light_ws2811strip.c \
870 drivers
/light_ws2811strip_stm32f30x.c \
871 drivers
/serial_softserial.c \
872 drivers
/serial_usb_vcp.c \
873 drivers
/vtx_rtc6705.c \
881 $(STM32F30x_COMMON_SRC
) \
882 drivers
/accgyro_mpu.c \
883 drivers
/barometer_ms5611.c \
884 drivers
/barometer_bmp280.c \
885 drivers
/display_ug2864hsweg01.c \
886 drivers
/accgyro_spi_mpu6000.c \
887 drivers
/accgyro_mpu6500.c \
888 drivers
/accgyro_spi_mpu6500.c \
889 drivers
/light_ws2811strip.c \
890 drivers
/light_ws2811strip_stm32f30x.c \
891 drivers
/serial_usb_vcp.c \
893 drivers
/sdcard_standard.c \
894 drivers
/flash_m25p16.c \
895 drivers
/sonar_hcsr04.c \
896 drivers
/serial_softserial.c \
897 io
/asyncfatfs
/asyncfatfs.c \
898 io
/asyncfatfs
/fat_standard.c \
904 ALIENFLIGHTF4_SRC
= \
905 $(STM32F4xx_COMMON_SRC
) \
906 drivers
/accgyro_mpu6500.c \
907 drivers
/accgyro_spi_mpu6500.c \
908 drivers
/accgyro_spi_mpu9250.c \
909 drivers
/barometer_bmp280.c \
910 drivers
/barometer_ms5611.c \
911 drivers
/compass_ak8963.c \
912 drivers
/compass_hmc5883l.c \
913 drivers
/display_ug2864hsweg01.c \
914 drivers
/light_ws2811strip.c \
915 drivers
/light_ws2811strip_stm32f4xx.c \
917 drivers
/sdcard_standard.c \
918 io
/asyncfatfs
/asyncfatfs.c \
919 io
/asyncfatfs
/fat_standard.c \
925 $(STM32F4xx_COMMON_SRC
) \
926 drivers
/accgyro_spi_mpu6500.c \
927 drivers
/accgyro_mpu6500.c \
928 drivers
/barometer_ms5611.c \
929 drivers
/display_ug2864hsweg01.c \
931 drivers
/sdcard_standard.c \
932 io
/asyncfatfs
/asyncfatfs.c \
933 io
/asyncfatfs
/fat_standard.c \
939 $(STM32F4xx_COMMON_SRC
) \
940 drivers
/accgyro_spi_mpu6000.c \
941 drivers
/barometer_ms5611.c \
942 drivers
/compass_hmc5883l.c \
943 drivers
/display_ug2864hsweg01.c \
949 $(STM32F4xx_COMMON_SRC
) \
950 drivers
/accgyro_spi_mpu6000.c \
951 drivers
/barometer_ms5611.c \
952 drivers
/display_ug2864hsweg01.c \
957 # Search path and source files for the ST stdperiph library
958 VPATH
:= $(VPATH
):$(STDPERIPH_DIR
)/src
960 ###############################################################################
961 # Things that might need changing to use different tools
965 CC
= arm-none-eabi-gcc
966 OBJCOPY
= arm-none-eabi-objcopy
967 SIZE
= arm-none-eabi-size
975 LTO_FLAGS
= $(OPTIMIZE
)
978 LTO_FLAGS
= -flto
-fuse-linker-plugin
$(OPTIMIZE
)
981 DEBUG_FLAGS
= -ggdb3
-DDEBUG
983 CFLAGS
+= $(ARCH_FLAGS
) \
985 $(addprefix -D
,$(OPTIONS
)) \
986 $(addprefix -I
,$(INCLUDE_DIRS
)) \
989 -Wall
-Wextra
-Wunsafe-loop-optimizations
-Wdouble-promotion \
990 -ffunction-sections \
993 -DUSE_STDPERIPH_DRIVER \
995 -D
'__FORKNAME__="$(FORKNAME)"' \
996 -D
'__TARGET__="$(TARGET)"' \
997 -D
'__REVISION__="$(REVISION)"' \
1001 ASFLAGS
= $(ARCH_FLAGS
) \
1002 -x assembler-with-cpp \
1003 $(addprefix -I
,$(INCLUDE_DIRS
)) \
1008 --specs
=nano.specs \
1015 -Wl
,-gc-sections
,-Map
,$(TARGET_MAP
) \
1016 -Wl
,-L
$(LINKER_DIR
) \
1020 ###############################################################################
1021 # No user-serviceable parts below
1022 ###############################################################################
1024 CPPCHECK
= cppcheck
$(CSOURCES
) --enable
=all --platform
=unix64 \
1025 --std
=c99
--inline-suppr
--quiet
--force \
1026 $(addprefix -I
,$(INCLUDE_DIRS
)) \
1027 -I
/usr
/include -I
/usr
/include/linux
1030 # Things we will build
1032 ifeq ($(filter $(TARGET
),$(VALID_TARGETS
)),)
1033 $(error Target
'$(TARGET)' is not valid
, must be one of
$(VALID_TARGETS
))
1036 CC3D_OPBL_SRC
= $(CC3D_SRC
)
1038 TARGET_BIN
= $(BIN_DIR
)/$(FORKNAME
)_
$(FC_VER
)_
$(TARGET
).bin
1039 TARGET_HEX
= $(BIN_DIR
)/$(FORKNAME
)_
$(FC_VER
)_
$(TARGET
).hex
1040 TARGET_ELF
= $(OBJECT_DIR
)/$(FORKNAME
)_
$(TARGET
).elf
1041 TARGET_OBJS
= $(addsuffix .o
,$(addprefix $(OBJECT_DIR
)/$(TARGET
)/,$(basename $($(TARGET
)_SRC
))))
1042 TARGET_DEPS
= $(addsuffix .d
,$(addprefix $(OBJECT_DIR
)/$(TARGET
)/,$(basename $($(TARGET
)_SRC
))))
1043 TARGET_MAP
= $(OBJECT_DIR
)/$(FORKNAME
)_
$(TARGET
).map
1046 CLEAN_ARTIFACTS
:= $(TARGET_BIN
)
1047 CLEAN_ARTIFACTS
+= $(TARGET_HEX
)
1048 CLEAN_ARTIFACTS
+= $(TARGET_ELF
) $(TARGET_OBJS
) $(TARGET_MAP
)
1050 # List of buildable ELF files and their object dependencies.
1051 # It would be nice to compute these lists, but that seems to be just beyond make.
1053 $(TARGET_HEX
): $(TARGET_ELF
)
1054 $(OBJCOPY
) -O ihex
--set-start
0x8000000 $< $@
1056 $(TARGET_BIN
): $(TARGET_ELF
)
1057 $(OBJCOPY
) -O binary
$< $@
1059 $(TARGET_ELF
): $(TARGET_OBJS
)
1060 @echo LD
$(notdir $@
)
1061 @
$(CC
) -o
$@
$^
$(LDFLAGS
)
1062 $(SIZE
) $(TARGET_ELF
)
1065 $(OBJECT_DIR
)/$(TARGET
)/%.o
: %.c
1067 @echo
%% $(notdir $<)
1068 @
$(CC
) -c
-o
$@
$(CFLAGS
) $<
1071 $(OBJECT_DIR
)/$(TARGET
)/%.o
: %.s
1073 @echo
%% $(notdir $<)
1074 @
$(CC
) -c
-o
$@
$(ASFLAGS
) $<
1076 $(OBJECT_DIR
)/$(TARGET
)/%.o
: %.S
1078 @echo
%% $(notdir $<)
1079 @
$(CC
) -c
-o
$@
$(ASFLAGS
) $<
1082 ## all : default task; compile C code, build firmware
1085 ## clean : clean up all temporary / machine-generated files
1087 rm -f
$(CLEAN_ARTIFACTS
)
1088 rm -rf
$(OBJECT_DIR
)/$(TARGET
)
1089 cd src
/test && $(MAKE
) clean || true
1091 flash_
$(TARGET
): $(TARGET_HEX
)
1092 stty
-F
$(SERIAL_DEVICE
) raw speed
115200 -crtscts cs8
-parenb
-cstopb
-ixon
1093 echo
-n
'R' >$(SERIAL_DEVICE
)
1094 stm32flash
-w
$(TARGET_HEX
) -v
-g
0x0 -b
115200 $(SERIAL_DEVICE
)
1096 ## flash : flash firmware (.hex) onto flight controller
1097 flash
: flash_
$(TARGET
)
1099 st-flash_
$(TARGET
): $(TARGET_BIN
)
1100 st-flash
--reset write
$< 0x08000000
1102 ## st-flash : flash firmware (.bin) onto flight controller
1103 st-flash
: st-flash_
$(TARGET
)
1105 binary
: $(TARGET_BIN
)
1108 unbrick_
$(TARGET
): $(TARGET_HEX
)
1109 stty
-F
$(SERIAL_DEVICE
) raw speed
115200 -crtscts cs8
-parenb
-cstopb
-ixon
1110 stm32flash
-w
$(TARGET_HEX
) -v
-g
0x0 -b
115200 $(SERIAL_DEVICE
)
1112 ## unbrick : unbrick flight controller
1113 unbrick
: unbrick_
$(TARGET
)
1115 ## cppcheck : run static analysis on C source code
1116 cppcheck
: $(CSOURCES
)
1119 cppcheck-result.xml
: $(CSOURCES
)
1120 $(CPPCHECK
) --xml-version
=2 2> cppcheck-result.xml
1122 ## help : print this help message and exit
1125 @echo
"Makefile for the $(FORKNAME) firmware"
1128 @echo
" make [TARGET=<target>] [OPTIONS=\"<options>\"]"
1130 @echo
"Valid TARGET values are: $(VALID_TARGETS)"
1132 @sed
-n
's/^## //p' $<
1134 ## test : run the cleanflight test suite
1136 cd src
/test && $(MAKE
) test || true
1138 # rebuild everything when makefile changes
1139 $(TARGET_OBJS
) : Makefile
1141 # include auto-generated dependencies
1142 -include $(TARGET_DEPS
)