allow room for gyro sync interrupt timing errors.
[betaflight.git] / Makefile
blob8a834bb8408bc419640990df3ed66170c709b2eb
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 cleanflight firmware.
10 # Invoke this with 'make help' to see the list of supported targets.
13 ###############################################################################
14 # Things that the user might override on the commandline
17 # The target to build, see VALID_TARGETS below
18 TARGET ?= NAZE
20 # Compile-time options
21 OPTIONS ?=
22 export OPTIONS
24 # Debugger optons, must be empty or GDB
25 DEBUG ?=
27 # Serial port/Device for flashing
28 SERIAL_DEVICE ?= $(firstword $(wildcard /dev/ttyUSB*) no-port-found)
30 # Flash size (KB). Some low-end chips actually have more flash than advertised, use this to override.
31 FLASH_SIZE ?=
33 ###############################################################################
34 # Things that need to be maintained as the source changes
37 FORKNAME = cleanflight
39 64K_TARGETS = CJMCU
40 128K_TARGETS = ALIENFLIGHTF1 CC3D NAZE OLIMEXINO RMDO SPRACINGF1OSD
41 256K_TARGETS = ALIENFLIGHTF3 CHEBUZZF3 COLIBRI_RACE EUSTM32F103RC IRCFUSIONF3 LUX_RACE MOTOLAB PORT103R RCEXPLORERF3 SPARKY SPRACINGF3 SPRACINGF3EVO SPRACINGF3MINI STM32F3DISCOVERY SPRACINGF3OSD
43 F3_TARGETS = ALIENFLIGHTF3 CHEBUZZF3 COLIBRI_RACE IRCFUSIONF3 LUX_RACE MOTOLAB RCEXPLORERF3 RMDO SPARKY SPRACINGF3 SPRACINGF3EVO SPRACINGF3MINI STM32F3DISCOVERY SPRACINGF3OSD
45 VALID_TARGETS = $(64K_TARGETS) $(128K_TARGETS) $(256K_TARGETS)
47 VCP_TARGETS = CC3D ALIENFLIGHTF3 CHEBUZZF3 COLIBRI_RACE LUX_RACE MOTOLAB RCEXPLORERF3 SPARKY SPRACINGF3EVO SPRACINGF3MINI STM32F3DISCOVERY SPRACINGF1OSD SPRACINGF3OSD
48 OSD_TARGETS = SPRACINGF1OSD SPRACINGF3OSD
50 # Configure default flash sizes for the targets
51 ifeq ($(FLASH_SIZE),)
52 ifeq ($(TARGET),$(filter $(TARGET),$(64K_TARGETS)))
53 FLASH_SIZE = 64
54 else ifeq ($(TARGET),$(filter $(TARGET),$(128K_TARGETS)))
55 FLASH_SIZE = 128
56 else ifeq ($(TARGET),$(filter $(TARGET),$(256K_TARGETS)))
57 FLASH_SIZE = 256
58 else
59 $(error FLASH_SIZE not configured for target $(TARGET))
60 endif
61 endif
63 REVISION := $(shell git log -1 --format="%h")
65 # Working directories
66 ROOT := $(patsubst %/,%,$(dir $(lastword $(MAKEFILE_LIST))))
67 SRC_DIR = $(ROOT)/src/main
68 OBJECT_DIR = $(ROOT)/obj/main
69 BIN_DIR = $(ROOT)/obj
70 CMSIS_DIR = $(ROOT)/lib/main/CMSIS
71 INCLUDE_DIRS = $(SRC_DIR) \
72 $(ROOT)/src/main/target
73 LINKER_DIR = $(ROOT)/src/main/target
75 # Search path for sources
76 VPATH := $(SRC_DIR):$(SRC_DIR)/startup
77 USBFS_DIR = $(ROOT)/lib/main/STM32_USB-FS-Device_Driver
78 USBPERIPH_SRC = $(notdir $(wildcard $(USBFS_DIR)/src/*.c))
80 CSOURCES := $(shell find $(SRC_DIR) -name '*.c')
82 ifeq ($(TARGET),$(filter $(TARGET),$(F3_TARGETS)))
83 # F3 TARGETS
85 STDPERIPH_DIR = $(ROOT)/lib/main/STM32F30x_StdPeriph_Driver
87 STDPERIPH_SRC = $(notdir $(wildcard $(STDPERIPH_DIR)/src/*.c))
89 EXCLUDES = stm32f30x_crc.c \
90 stm32f30x_can.c
92 STDPERIPH_SRC := $(filter-out ${EXCLUDES}, $(STDPERIPH_SRC))
94 DEVICE_STDPERIPH_SRC = \
95 $(STDPERIPH_SRC)
98 VPATH := $(VPATH):$(CMSIS_DIR)/CM1/CoreSupport:$(CMSIS_DIR)/CM1/DeviceSupport/ST/STM32F30x
99 CMSIS_SRC = $(notdir $(wildcard $(CMSIS_DIR)/CM1/CoreSupport/*.c \
100 $(CMSIS_DIR)/CM1/DeviceSupport/ST/STM32F30x/*.c))
102 INCLUDE_DIRS := $(INCLUDE_DIRS) \
103 $(STDPERIPH_DIR)/inc \
104 $(CMSIS_DIR)/CM1/CoreSupport \
105 $(CMSIS_DIR)/CM1/DeviceSupport/ST/STM32F30x
107 ifeq ($(TARGET),$(filter $(TARGET),$(VCP_TARGETS)))
108 INCLUDE_DIRS := $(INCLUDE_DIRS) \
109 $(USBFS_DIR)/inc \
110 $(ROOT)/src/main/vcp
112 VPATH := $(VPATH):$(USBFS_DIR)/src
114 DEVICE_STDPERIPH_SRC := $(DEVICE_STDPERIPH_SRC)\
115 $(USBPERIPH_SRC)
117 endif
119 LD_SCRIPT = $(LINKER_DIR)/stm32_flash_f303_$(FLASH_SIZE)k.ld
121 ARCH_FLAGS = -mthumb -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -fsingle-precision-constant -Wdouble-promotion
122 DEVICE_FLAGS = -DSTM32F303xC -DSTM32F303
123 TARGET_FLAGS = -D$(TARGET)
125 else ifeq ($(TARGET),$(filter $(TARGET),EUSTM32F103RC PORT103R))
126 # TARGETS: EUSTM32F103RC PORT103R
129 STDPERIPH_DIR = $(ROOT)/lib/main/STM32F10x_StdPeriph_Driver
131 STDPERIPH_SRC = $(notdir $(wildcard $(STDPERIPH_DIR)/src/*.c))
133 EXCLUDES = stm32f10x_crc.c \
134 stm32f10x_cec.c \
135 stm32f10x_can.c
137 STDPERIPH_SRC := $(filter-out ${EXCLUDES}, $(STDPERIPH_SRC))
139 # Search path and source files for the CMSIS sources
140 VPATH := $(VPATH):$(CMSIS_DIR)/CM3/CoreSupport:$(CMSIS_DIR)/CM3/DeviceSupport/ST/STM32F10x
141 CMSIS_SRC = $(notdir $(wildcard $(CMSIS_DIR)/CM3/CoreSupport/*.c \
142 $(CMSIS_DIR)/CM3/DeviceSupport/ST/STM32F10x/*.c))
144 INCLUDE_DIRS := $(INCLUDE_DIRS) \
145 $(STDPERIPH_DIR)/inc \
146 $(CMSIS_DIR)/CM3/CoreSupport \
147 $(CMSIS_DIR)/CM3/DeviceSupport/ST/STM32F10x \
149 LD_SCRIPT = $(LINKER_DIR)/stm32_flash_f103_$(FLASH_SIZE)k.ld
151 ARCH_FLAGS = -mthumb -mcpu=cortex-m3
152 TARGET_FLAGS = -D$(TARGET)
153 DEVICE_FLAGS = -DSTM32F10X_HD -DSTM32F10X
155 DEVICE_STDPERIPH_SRC = $(STDPERIPH_SRC)
157 else
158 # F1 TARGETS
160 STDPERIPH_DIR = $(ROOT)/lib/main/STM32F10x_StdPeriph_Driver
162 STDPERIPH_SRC = $(notdir $(wildcard $(STDPERIPH_DIR)/src/*.c))
164 EXCLUDES = stm32f10x_crc.c \
165 stm32f10x_cec.c \
166 stm32f10x_can.c
168 STDPERIPH_SRC := $(filter-out ${EXCLUDES}, $(STDPERIPH_SRC))
170 # Search path and source files for the CMSIS sources
171 VPATH := $(VPATH):$(CMSIS_DIR)/CM3/CoreSupport:$(CMSIS_DIR)/CM3/DeviceSupport/ST/STM32F10x
172 CMSIS_SRC = $(notdir $(wildcard $(CMSIS_DIR)/CM3/CoreSupport/*.c \
173 $(CMSIS_DIR)/CM3/DeviceSupport/ST/STM32F10x/*.c))
175 INCLUDE_DIRS := $(INCLUDE_DIRS) \
176 $(STDPERIPH_DIR)/inc \
177 $(CMSIS_DIR)/CM3/CoreSupport \
178 $(CMSIS_DIR)/CM3/DeviceSupport/ST/STM32F10x \
180 DEVICE_STDPERIPH_SRC = $(STDPERIPH_SRC)
182 ifeq ($(TARGET),$(filter $(TARGET),$(VCP_TARGETS)))
183 INCLUDE_DIRS := $(INCLUDE_DIRS) \
184 $(USBFS_DIR)/inc \
185 $(ROOT)/src/main/vcp
187 VPATH := $(VPATH):$(USBFS_DIR)/src
189 DEVICE_STDPERIPH_SRC := $(DEVICE_STDPERIPH_SRC) \
190 $(USBPERIPH_SRC)
192 endif
194 LD_SCRIPT = $(LINKER_DIR)/stm32_flash_f103_$(FLASH_SIZE)k.ld
196 ARCH_FLAGS = -mthumb -mcpu=cortex-m3
197 TARGET_FLAGS = -D$(TARGET)
198 DEVICE_FLAGS = -DSTM32F10X_MD -DSTM32F10X
200 endif #TARGETS
202 ifneq ($(FLASH_SIZE),)
203 DEVICE_FLAGS := $(DEVICE_FLAGS) -DFLASH_SIZE=$(FLASH_SIZE)
204 endif
206 TARGET_DIR = $(ROOT)/src/main/target/$(TARGET)
207 TARGET_SRC = $(notdir $(wildcard $(TARGET_DIR)/*.c))
209 # VARIANTS
210 ifeq ($(TARGET),ALIENFLIGHTF1)
211 # ALIENFLIGHTF1 is a VARIANT of NAZE
212 TARGET_FLAGS := $(TARGET_FLAGS) -DNAZE -DALIENFLIGHT
213 TARGET_DIR = $(ROOT)/src/main/target/NAZE
214 endif
215 ifeq ($(TARGET),CHEBUZZF3)
216 # CHEBUZZ is a VARIANT of STM32F3DISCOVERY
217 TARGET_FLAGS := $(TARGET_FLAGS) -DSTM32F3DISCOVERY
218 endif
219 ifeq ($(TARGET),$(filter $(TARGET),RMDO IRCFUSIONF3))
220 # RMDO and IRCFUSIONF3 are a VARIANT of SPRACINGF3
221 TARGET_FLAGS := $(TARGET_FLAGS) -DSPRACINGF3
222 endif
224 # OSDs
225 ifeq ($(TARGET),$(filter $(TARGET),$(OSD_TARGETS)))
226 TARGET_FLAGS := $(TARGET_FLAGS) -DOSD
227 endif
231 INCLUDE_DIRS := $(INCLUDE_DIRS) \
232 $(TARGET_DIR)
234 VPATH := $(VPATH):$(TARGET_DIR)
236 SYSTEM_SRC = \
237 build/build_config.c \
238 build/debug.c \
239 build/version.c \
240 config/config_streamer.c \
241 config/parameter_group.c \
242 config/config_eeprom.c \
243 common/encoding.c \
244 common/filter.c \
245 common/maths.c \
246 common/printf.c \
247 common/streambuf.c \
248 common/typeconversion.c \
249 common/crc.c \
250 common/pilot.c \
251 drivers/buf_writer.c \
252 drivers/dma.c \
253 drivers/serial.c \
254 drivers/system.c \
255 scheduler/scheduler.c \
256 io/serial.c \
257 io/statusindicator.c \
258 msp/msp.c \
259 msp/msp_serial.c \
260 msp/msp_server.c \
261 $(TARGET_SRC) \
262 $(CMSIS_SRC) \
263 $(DEVICE_STDPERIPH_SRC)
265 FC_COMMON_SRC = \
266 config/feature.c \
267 config/profile.c \
268 fc/boot.c \
269 fc/fc_debug.c \
270 fc/cleanflight_fc.c \
271 fc/fc_tasks.c \
272 fc/rate_profile.c \
273 fc/rc_adjustments.c \
274 fc/rc_controls.c \
275 fc/rc_curves.c \
276 fc/fc_serial.c \
277 fc/config.c \
278 fc/runtime_config.c \
279 fc/msp_server_fc.c \
280 flight/altitudehold.c \
281 flight/failsafe.c \
282 flight/pid.c \
283 flight/pid_luxfloat.c \
284 flight/pid_mwrewrite.c \
285 flight/pid_mw23.c \
286 flight/imu.c \
287 flight/mixer.c \
288 flight/servos.c \
289 drivers/bus_i2c_soft.c \
290 drivers/exti.c \
291 drivers/io.c \
292 drivers/rcc.c \
293 drivers/sound_beeper.c \
294 drivers/gyro_sync.c \
295 io/beeper.c \
296 io/gimbal.c \
297 io/motor_and_servo.c \
298 io/serial_4way.c \
299 io/serial_4way_avrootloader.c \
300 io/serial_4way_stk500v2.c \
301 io/serial_cli.c \
302 io/statusindicator.c \
303 rx/rx.c \
304 rx/pwm.c \
305 rx/msp.c \
306 rx/sbus.c \
307 rx/sumd.c \
308 rx/sumh.c \
309 rx/spektrum.c \
310 rx/xbus.c \
311 rx/ibus.c \
312 rx/srxl.c \
313 sensors/sensors.c \
314 sensors/acceleration.c \
315 sensors/battery.c \
316 sensors/voltage.c \
317 sensors/amperage.c \
318 sensors/boardalignment.c \
319 sensors/compass.c \
320 sensors/gyro.c \
321 sensors/initialisation.c
323 OSD_COMMON_SRC = \
324 config/feature.c \
325 osd/boot.c \
326 osd/cleanflight_osd.c \
327 osd/fc_state.c \
328 osd/config.c \
329 osd/osd.c \
330 osd/osd_screen.c \
331 osd/osd_element.c \
332 osd/osd_element_render.c \
333 osd/osd_serial.c \
334 osd/msp_server_osd.c \
335 osd/msp_client_osd.c \
336 osd/osd_tasks.c \
337 sensors/battery.c \
338 sensors/voltage.c \
339 sensors/amperage.c \
340 io/beeper.c
342 HIGHEND_SRC = \
343 flight/gtune.c \
344 flight/navigation.c \
345 flight/gps_conversion.c \
346 common/colorconversion.c \
347 io/gps.c \
348 io/ledstrip.c \
349 io/display.c \
350 telemetry/telemetry.c \
351 telemetry/frsky.c \
352 telemetry/hott.c \
353 telemetry/smartport.c \
354 telemetry/ltm.c \
355 telemetry/mavlink.c \
356 sensors/sonar.c \
357 sensors/barometer.c \
358 blackbox/blackbox.c \
359 blackbox/blackbox_io.c
361 VCP_SRC = \
362 vcp/hw_config.c \
363 vcp/stm32_it.c \
364 vcp/usb_desc.c \
365 vcp/usb_endp.c \
366 vcp/usb_istr.c \
367 vcp/usb_prop.c \
368 vcp/usb_pwr.c \
369 drivers/serial_usb_vcp.c \
370 drivers/usb_io.c
372 STM32F10x_COMMON_SRC = \
373 drivers/adc.c \
374 drivers/adc_stm32f10x.c \
375 drivers/bus_i2c_stm32f10x.c \
376 drivers/gpio_stm32f10x.c \
377 drivers/light_led_stm32f10x.c \
378 drivers/serial_uart.c \
379 drivers/serial_uart_stm32f10x.c \
380 drivers/system_stm32f10x.c
382 NAZE_SRC = \
383 startup_stm32f10x_md_gcc.S \
384 $(STM32F10x_COMMON_SRC) \
385 drivers/accgyro_adxl345.c \
386 drivers/accgyro_bma280.c \
387 drivers/accgyro_l3g4200d.c \
388 drivers/accgyro_mma845x.c \
389 drivers/accgyro_mpu.c \
390 drivers/accgyro_mpu3050.c \
391 drivers/accgyro_mpu6050.c \
392 drivers/accgyro_mpu6500.c \
393 drivers/accgyro_spi_mpu6500.c \
394 drivers/barometer_bmp085.c \
395 drivers/barometer_ms5611.c \
396 drivers/barometer_bmp280.c \
397 drivers/bus_spi.c \
398 drivers/compass_hmc5883l.c \
399 drivers/display_ug2864hsweg01.h \
400 drivers/flash_m25p16.c \
401 drivers/inverter.c \
402 drivers/light_ws2811strip.c \
403 drivers/light_ws2811strip_stm32f10x.c \
404 drivers/sonar_hcsr04.c \
405 drivers/pwm_mapping.c \
406 drivers/pwm_output.c \
407 drivers/pwm_rx.c \
408 drivers/serial_softserial.c \
409 drivers/sound_beeper_stm32f10x.c \
410 drivers/timer.c \
411 drivers/timer_stm32f10x.c \
412 io/flashfs.c \
413 hardware_revision.c \
414 $(HIGHEND_SRC) \
415 $(FC_COMMON_SRC) \
416 $(SYSTEM_SRC)
418 ALIENFLIGHTF1_SRC = $(NAZE_SRC)
420 EUSTM32F103RC_SRC = \
421 startup_stm32f10x_hd_gcc.S \
422 $(STM32F10x_COMMON_SRC) \
423 drivers/accgyro_adxl345.c \
424 drivers/accgyro_bma280.c \
425 drivers/accgyro_l3g4200d.c \
426 drivers/accgyro_mma845x.c \
427 drivers/accgyro_mpu.c \
428 drivers/accgyro_mpu3050.c \
429 drivers/accgyro_mpu6050.c \
430 drivers/accgyro_mpu6500.c \
431 drivers/accgyro_spi_mpu6000.c \
432 drivers/accgyro_spi_mpu6500.c \
433 drivers/barometer_bmp085.c \
434 drivers/barometer_ms5611.c \
435 drivers/bus_spi.c \
436 drivers/compass_ak8975.c \
437 drivers/compass_hmc5883l.c \
438 drivers/display_ug2864hsweg01.c \
439 drivers/flash_m25p16.c \
440 drivers/inverter.c \
441 drivers/light_ws2811strip.c \
442 drivers/light_ws2811strip_stm32f10x.c \
443 drivers/pwm_mapping.c \
444 drivers/pwm_output.c \
445 drivers/pwm_rx.c \
446 drivers/serial_softserial.c \
447 drivers/sonar_hcsr04.c \
448 drivers/sound_beeper_stm32f10x.c \
449 drivers/timer.c \
450 drivers/timer_stm32f10x.c \
451 io/flashfs.c \
452 $(HIGHEND_SRC) \
453 $(FC_COMMON_SRC) \
454 $(SYSTEM_SRC)
456 PORT103R_SRC = $(EUSTM32F103RC_SRC)
458 OLIMEXINO_SRC = \
459 startup_stm32f10x_md_gcc.S \
460 $(STM32F10x_COMMON_SRC) \
461 drivers/accgyro_mpu.c \
462 drivers/accgyro_mpu6050.c \
463 drivers/barometer_bmp085.c \
464 drivers/bus_spi.c \
465 drivers/compass_hmc5883l.c \
466 drivers/light_ws2811strip.c \
467 drivers/light_ws2811strip_stm32f10x.c \
468 drivers/pwm_mapping.c \
469 drivers/pwm_output.c \
470 drivers/pwm_rx.c \
471 drivers/serial_softserial.c \
472 drivers/sonar_hcsr04.c \
473 drivers/sound_beeper_stm32f10x.c \
474 drivers/timer.c \
475 drivers/timer_stm32f10x.c \
476 $(HIGHEND_SRC) \
477 $(FC_COMMON_SRC) \
478 $(SYSTEM_SRC)
480 CJMCU_SRC = \
481 startup_stm32f10x_md_gcc.S \
482 $(STM32F10x_COMMON_SRC) \
483 drivers/accgyro_mpu.c \
484 drivers/accgyro_mpu6050.c \
485 drivers/compass_hmc5883l.c \
486 drivers/pwm_mapping.c \
487 drivers/pwm_output.c \
488 drivers/pwm_rx.c \
489 drivers/sound_beeper_stm32f10x.c \
490 drivers/timer.c \
491 drivers/timer_stm32f10x.c \
492 hardware_revision.c \
493 flight/gtune.c \
494 blackbox/blackbox.c \
495 blackbox/blackbox_io.c \
496 $(FC_COMMON_SRC) \
497 $(SYSTEM_SRC)
499 CC3D_SRC = \
500 startup_stm32f10x_md_gcc.S \
501 $(STM32F10x_COMMON_SRC) \
502 drivers/accgyro_mpu.c \
503 drivers/accgyro_spi_mpu6000.c \
504 drivers/barometer_bmp085.c \
505 drivers/barometer_ms5611.c \
506 drivers/bus_spi.c \
507 drivers/compass_hmc5883l.c \
508 drivers/display_ug2864hsweg01.c \
509 drivers/flash_m25p16.c \
510 drivers/inverter.c \
511 drivers/light_ws2811strip.c \
512 drivers/light_ws2811strip_stm32f10x.c \
513 drivers/pwm_mapping.c \
514 drivers/pwm_output.c \
515 drivers/pwm_rx.c \
516 drivers/serial_softserial.c \
517 drivers/sonar_hcsr04.c \
518 drivers/sound_beeper_stm32f10x.c \
519 drivers/timer.c \
520 drivers/timer_stm32f10x.c \
521 io/flashfs.c \
522 $(HIGHEND_SRC) \
523 $(FC_COMMON_SRC) \
524 $(SYSTEM_SRC) \
525 $(VCP_SRC)
527 STM32F30x_COMMON_SRC = \
528 startup_stm32f30x_md_gcc.S \
529 target/system_stm32f30x.c \
530 drivers/adc.c \
531 drivers/adc_stm32f30x.c \
532 drivers/bus_i2c_stm32f30x.c \
533 drivers/bus_spi.c \
534 drivers/gpio_stm32f30x.c \
535 drivers/light_led_stm32f30x.c \
536 drivers/serial_uart.c \
537 drivers/serial_uart_stm32f30x.c \
538 drivers/sound_beeper_stm32f30x.c \
539 drivers/system_stm32f30x.c
541 STM32F30x_FC_COMMON_SRC = \
542 drivers/display_ug2864hsweg01.h \
543 drivers/timer.c \
544 drivers/timer_stm32f30x.c \
545 drivers/pwm_mapping.c \
546 drivers/pwm_output.c \
547 drivers/pwm_rx.c
549 STM32F3DISCOVERY_COMMON_SRC = \
550 $(STM32F30x_COMMON_SRC) \
551 drivers/accgyro_l3gd20.c \
552 drivers/accgyro_l3gd20.c \
553 drivers/accgyro_lsm303dlhc.c \
554 drivers/compass_hmc5883l.c \
555 $(VCP_SRC)
557 STM32F3DISCOVERY_SRC = \
558 $(STM32F3DISCOVERY_COMMON_SRC) \
559 $(STM32F30x_FC_COMMON_SRC) \
560 drivers/accgyro_adxl345.c \
561 drivers/accgyro_bma280.c \
562 drivers/accgyro_mma845x.c \
563 drivers/accgyro_mpu.c \
564 drivers/accgyro_mpu3050.c \
565 drivers/accgyro_mpu6050.c \
566 drivers/accgyro_l3g4200d.c \
567 drivers/barometer_ms5611.c \
568 drivers/compass_ak8975.c \
569 drivers/light_ws2811strip.c \
570 drivers/light_ws2811strip_stm32f30x.c \
571 drivers/sdcard.c \
572 drivers/sdcard_standard.c \
573 io/asyncfatfs/asyncfatfs.c \
574 io/asyncfatfs/fat_standard.c \
575 $(HIGHEND_SRC) \
576 $(FC_COMMON_SRC) \
577 $(SYSTEM_SRC)
579 CHEBUZZF3_SRC = \
580 $(STM32F3DISCOVERY_SRC) \
581 $(HIGHEND_SRC) \
582 $(FC_COMMON_SRC) \
583 $(SYSTEM_SRC)
585 COLIBRI_RACE_SRC = \
586 $(STM32F30x_COMMON_SRC) \
587 $(STM32F30x_FC_COMMON_SRC) \
588 drivers/accgyro_mpu.c \
589 drivers/accgyro_mpu6500.c \
590 drivers/accgyro_spi_mpu6500.c \
591 drivers/barometer_ms5611.c \
592 drivers/compass_ak8963.c \
593 drivers/compass_ak8975.c \
594 drivers/compass_hmc5883l.c \
595 drivers/display_ug2864hsweg01.c \
596 drivers/light_ws2811strip.c \
597 drivers/light_ws2811strip_stm32f30x.c \
598 drivers/serial_usb_vcp.c \
599 $(HIGHEND_SRC) \
600 $(FC_COMMON_SRC) \
601 $(SYSTEM_SRC) \
602 $(VCP_SRC)
604 LUX_RACE_SRC = \
605 $(STM32F30x_COMMON_SRC) \
606 $(STM32F30x_FC_COMMON_SRC) \
607 drivers/accgyro_mpu.c \
608 drivers/accgyro_mpu6500.c \
609 drivers/accgyro_spi_mpu6500.c \
610 drivers/light_ws2811strip.c \
611 drivers/light_ws2811strip_stm32f30x.c \
612 drivers/serial_usb_vcp.c \
613 $(HIGHEND_SRC) \
614 $(FC_COMMON_SRC) \
615 $(SYSTEM_SRC) \
616 $(VCP_SRC)
618 SPARKY_SRC = \
619 $(STM32F30x_COMMON_SRC) \
620 $(STM32F30x_FC_COMMON_SRC) \
621 drivers/display_ug2864hsweg01.c \
622 drivers/accgyro_mpu.c \
623 drivers/accgyro_mpu6050.c \
624 drivers/barometer_ms5611.c \
625 drivers/compass_ak8975.c \
626 drivers/light_ws2811strip.c \
627 drivers/light_ws2811strip_stm32f30x.c \
628 drivers/serial_usb_vcp.c \
629 drivers/sonar_hcsr04.c \
630 $(HIGHEND_SRC) \
631 $(FC_COMMON_SRC) \
632 $(SYSTEM_SRC) \
633 $(VCP_SRC)
635 ALIENFLIGHTF3_SRC = \
636 $(STM32F30x_COMMON_SRC) \
637 $(STM32F30x_FC_COMMON_SRC) \
638 drivers/display_ug2864hsweg01.c \
639 drivers/accgyro_mpu.c \
640 drivers/accgyro_mpu6050.c \
641 drivers/accgyro_mpu6500.c \
642 drivers/accgyro_spi_mpu6500.c \
643 drivers/compass_ak8963.c \
644 drivers/serial_usb_vcp.c \
645 drivers/sonar_hcsr04.c \
646 $(HIGHEND_SRC) \
647 $(FC_COMMON_SRC) \
648 $(SYSTEM_SRC) \
649 $(VCP_SRC)
651 RCEXPLORERF3_SRC = \
652 $(STM32F30x_COMMON_SRC) \
653 $(STM32F30x_FC_COMMON_SRC) \
654 drivers/accgyro_mpu.c \
655 drivers/accgyro_spi_mpu6000.c \
656 drivers/barometer_ms5611.c \
657 drivers/compass_hmc5883l.c \
658 drivers/compass_ak8975.c \
659 drivers/display_ug2864hsweg01.c \
660 drivers/serial_usb_vcp.c \
661 drivers/flash_m25p16.c \
662 drivers/light_ws2811strip.c \
663 drivers/light_ws2811strip_stm32f30x.c \
664 drivers/sonar_hcsr04.c \
665 io/flashfs.c \
666 $(HIGHEND_SRC) \
667 $(FC_COMMON_SRC) \
668 $(SYSTEM_SRC) \
669 $(VCP_SRC)
671 RMDO_SRC = \
672 $(STM32F30x_COMMON_SRC) \
673 $(STM32F30x_FC_COMMON_SRC) \
674 drivers/accgyro_mpu.c \
675 drivers/accgyro_mpu6050.c \
676 drivers/barometer_bmp280.c \
677 drivers/display_ug2864hsweg01.h \
678 drivers/flash_m25p16.c \
679 drivers/light_ws2811strip.c \
680 drivers/light_ws2811strip_stm32f30x.c \
681 drivers/serial_softserial.c \
682 drivers/sonar_hcsr04.c \
683 io/flashfs.c \
684 $(HIGHEND_SRC) \
685 $(FC_COMMON_SRC) \
686 $(SYSTEM_SRC)
688 SPRACINGF3_SRC = \
689 $(STM32F30x_COMMON_SRC) \
690 $(STM32F30x_FC_COMMON_SRC) \
691 drivers/accgyro_mpu.c \
692 drivers/accgyro_mpu6050.c \
693 drivers/barometer_ms5611.c \
694 drivers/compass_ak8975.c \
695 drivers/compass_hmc5883l.c \
696 drivers/display_ug2864hsweg01.h \
697 drivers/flash_m25p16.c \
698 drivers/light_ws2811strip.c \
699 drivers/light_ws2811strip_stm32f30x.c \
700 drivers/serial_softserial.c \
701 drivers/sonar_hcsr04.c \
702 io/flashfs.c \
703 $(HIGHEND_SRC) \
704 $(FC_COMMON_SRC) \
705 $(SYSTEM_SRC)
707 SPRACINGF3EVO_SRC = \
708 $(STM32F30x_COMMON_SRC) \
709 $(STM32F30x_FC_COMMON_SRC) \
710 drivers/accgyro_mpu.c \
711 drivers/accgyro_mpu6500.c \
712 drivers/accgyro_spi_mpu6500.c \
713 drivers/barometer_bmp280.c \
714 drivers/compass_ak8963.c \
715 drivers/display_ug2864hsweg01.h \
716 drivers/light_ws2811strip.c \
717 drivers/light_ws2811strip_stm32f30x.c \
718 drivers/serial_softserial.c \
719 drivers/serial_usb_vcp.c \
720 drivers/sdcard.c \
721 drivers/sdcard_standard.c \
722 drivers/transponder_ir.c \
723 drivers/transponder_ir_stm32f30x.c \
724 io/asyncfatfs/asyncfatfs.c \
725 io/asyncfatfs/fat_standard.c \
726 io/transponder_ir.c \
727 $(HIGHEND_SRC) \
728 $(FC_COMMON_SRC) \
729 $(SYSTEM_SRC) \
730 $(VCP_SRC)
732 MOTOLAB_SRC = \
733 $(STM32F30x_COMMON_SRC) \
734 $(STM32F30x_FC_COMMON_SRC) \
735 drivers/accgyro_mpu.c \
736 drivers/accgyro_spi_mpu6000.c \
737 drivers/accgyro_mpu6050.c \
738 drivers/barometer_ms5611.c \
739 drivers/compass_hmc5883l.c \
740 drivers/display_ug2864hsweg01.c \
741 drivers/light_ws2811strip.c \
742 drivers/light_ws2811strip_stm32f30x.c \
743 drivers/serial_usb_vcp.c \
744 drivers/flash_m25p16.c \
745 io/flashfs.c \
746 $(HIGHEND_SRC) \
747 $(FC_COMMON_SRC) \
748 $(SYSTEM_SRC) \
749 $(VCP_SRC)
751 SPRACINGF3MINI_SRC = \
752 $(STM32F30x_COMMON_SRC) \
753 $(STM32F30x_FC_COMMON_SRC) \
754 drivers/accgyro_mpu.c \
755 drivers/accgyro_mpu6500.c \
756 drivers/barometer_bmp280.c \
757 drivers/compass_ak8963.c \
758 drivers/compass_hmc5883l.c \
759 drivers/display_ug2864hsweg01.h \
760 drivers/flash_m25p16.c \
761 drivers/light_ws2811strip.c \
762 drivers/light_ws2811strip_stm32f30x.c \
763 drivers/serial_softserial.c \
764 drivers/serial_usb_vcp.c \
765 drivers/sonar_hcsr04.c \
766 drivers/sdcard.c \
767 drivers/sdcard_standard.c \
768 drivers/transponder_ir.c \
769 drivers/transponder_ir_stm32f30x.c \
770 io/asyncfatfs/asyncfatfs.c \
771 io/asyncfatfs/fat_standard.c \
772 io/transponder_ir.c \
773 $(HIGHEND_SRC) \
774 $(FC_COMMON_SRC) \
775 $(SYSTEM_SRC) \
776 $(VCP_SRC)
778 IRCFUSIONF3_SRC = \
779 $(STM32F30x_COMMON_SRC) \
780 $(STM32F30x_FC_COMMON_SRC) \
781 drivers/accgyro_mpu.c \
782 drivers/accgyro_mpu6050.c \
783 drivers/barometer_bmp085.c \
784 drivers/flash_m25p16.c \
785 io/flashfs.c \
786 $(HIGHEND_SRC) \
787 $(FC_COMMON_SRC) \
788 $(SYSTEM_SRC)
790 SPRACINGF1OSD_SRC = \
791 startup_stm32f10x_md_gcc.S \
792 $(STM32F10x_COMMON_SRC) \
793 drivers/bus_spi.c \
794 drivers/video_max7456.c \
795 drivers/flash_m25p16.c \
796 drivers/io.c \
797 drivers/exti.c \
798 drivers/rcc.c \
799 io/flashfs.c \
800 osd/fonts/font_max7456_12x18.c \
801 osd/osd_max7456.c \
802 $(OSD_COMMON_SRC) \
803 $(SYSTEM_SRC) \
804 $(VCP_SRC)
806 SPRACINGF3OSD_SRC = \
807 $(STM32F30x_COMMON_SRC) \
808 drivers/video_max7456.c \
809 drivers/flash_m25p16.c \
810 drivers/io.c \
811 drivers/exti.c \
812 drivers/rcc.c \
813 drivers/transponder_ir.c \
814 drivers/transponder_ir_stm32f30x.c \
815 io/flashfs.c \
816 io/transponder_ir.c \
817 osd/fonts/font_max7456_12x18.c \
818 osd/osd_max7456.c \
819 $(OSD_COMMON_SRC) \
820 $(SYSTEM_SRC) \
821 $(VCP_SRC)
823 # Search path and source files for the ST stdperiph library
824 VPATH := $(VPATH):$(STDPERIPH_DIR)/src
826 ###############################################################################
827 # Things that might need changing to use different tools
830 # Find out if ccache is installed on the system
831 CCACHE := ccache
832 RESULT = $(shell (which $(CCACHE) > /dev/null 2>&1; echo $$?) )
833 ifneq ($(RESULT),0)
834 CCACHE :=
835 endif
837 # Tool names
838 CC := $(CCACHE) arm-none-eabi-gcc
839 OBJCOPY := arm-none-eabi-objcopy
840 SIZE := arm-none-eabi-size
843 # Tool options.
846 ifeq ($(DEBUG),GDB)
847 OPTIMIZE = -O0
848 LTO_FLAGS = $(OPTIMIZE)
849 else
850 OPTIMIZE = -Os
851 LTO_FLAGS = -flto -fuse-linker-plugin $(OPTIMIZE)
852 endif
854 ifneq ($(filter $(OPTIONS),FAIL_ON_WARNINGS),)
855 WARN_FLAGS += -Werror
856 endif
858 DEBUG_FLAGS = -ggdb3 -DDEBUG
860 CFLAGS = $(ARCH_FLAGS) \
861 $(LTO_FLAGS) \
862 $(WARN_FLAGS) \
863 $(addprefix -D,$(OPTIONS)) \
864 $(addprefix -I,$(INCLUDE_DIRS)) \
865 $(DEBUG_FLAGS) \
866 -std=gnu99 \
867 -Wall -Wpedantic -Wextra -Wunsafe-loop-optimizations -Wdouble-promotion -Wundef \
868 -ffunction-sections \
869 -fdata-sections \
870 $(DEVICE_FLAGS) \
871 -DUSE_STDPERIPH_DRIVER \
872 $(TARGET_FLAGS) \
873 -D'__FORKNAME__="$(FORKNAME)"' \
874 -D'__TARGET__="$(TARGET)"' \
875 -D'__REVISION__="$(REVISION)"' \
876 -fverbose-asm -ffat-lto-objects \
877 -save-temps=obj \
878 -MMD -MP
880 ASFLAGS = $(ARCH_FLAGS) \
881 $(WARN_FLAGS) \
882 -x assembler-with-cpp \
883 $(addprefix -I,$(INCLUDE_DIRS)) \
884 -MMD -MP
886 LDFLAGS = -lm \
887 -nostartfiles \
888 --specs=nano.specs \
889 -lc \
890 -lnosys \
891 $(ARCH_FLAGS) \
892 $(LTO_FLAGS) \
893 $(WARN_FLAGS) \
894 $(DEBUG_FLAGS) \
895 -static \
896 -Wl,-gc-sections,-Map,$(TARGET_MAP) \
897 -Wl,-L$(LINKER_DIR) \
898 -Wl,--cref \
899 -T$(LD_SCRIPT)
901 ###############################################################################
902 # No user-serviceable parts below
903 ###############################################################################
905 CPPCHECK = cppcheck $(CSOURCES) --enable=all --platform=unix64 \
906 --std=c99 --inline-suppr --quiet --force \
907 $(addprefix -I,$(INCLUDE_DIRS)) \
908 -I/usr/include -I/usr/include/linux
911 # Things we will build
913 ifeq ($(filter $(TARGET),$(VALID_TARGETS)),)
914 $(error Target '$(TARGET)' is not valid, must be one of $(VALID_TARGETS))
915 endif
917 TARGET_BIN = $(BIN_DIR)/$(FORKNAME)_$(TARGET).bin
918 TARGET_HEX = $(BIN_DIR)/$(FORKNAME)_$(TARGET).hex
919 TARGET_ELF = $(OBJECT_DIR)/$(FORKNAME)_$(TARGET).elf
920 TARGET_OBJS = $(addsuffix .o,$(addprefix $(OBJECT_DIR)/$(TARGET)/,$(basename $($(TARGET)_SRC))))
921 TARGET_DEPS = $(addsuffix .d,$(addprefix $(OBJECT_DIR)/$(TARGET)/,$(basename $($(TARGET)_SRC))))
922 TARGET_MAP = $(OBJECT_DIR)/$(FORKNAME)_$(TARGET).map
925 ## Default make goal:
926 ## hex : Make filetype hex only
927 .DEFAULT_GOAL := hex
929 ## Optional make goals:
930 ## all : Make all filetypes, binary and hex
931 all: hex bin
933 ## binary : Make binary filetype
934 ## bin : Alias of 'binary'
935 ## hex : Make hex filetype
936 bin: $(TARGET_BIN)
937 binary: $(TARGET_BIN)
938 hex: $(TARGET_HEX)
940 # rule to reinvoke make with TARGET= parameter
941 # rules that should be handled in toplevel Makefile, not dependent on TARGET
942 GLOBAL_GOALS = all_targets cppcheck test
944 .PHONY: $(VALID_TARGETS)
945 $(VALID_TARGETS):
946 $(MAKE) TARGET=$@ $(filter-out $(VALID_TARGETS) $(GLOBAL_GOALS), $(MAKECMDGOALS))
948 ## all_targets : Make all TARGETs
949 .PHONY: all_targets
950 all_targets : $(VALID_TARGETS)
952 ## clean : clean up all temporary / machine-generated files
953 clean:
954 rm -f $(TARGET_BIN) $(TARGET_HEX) $(TARGET_ELF) $(TARGET_OBJS) $(TARGET_MAP)
955 rm -rf $(OBJECT_DIR)/$(TARGET)
956 cd src/test && $(MAKE) clean || true
958 flash_$(TARGET): $(TARGET_HEX)
959 stty -F $(SERIAL_DEVICE) raw speed 115200 -crtscts cs8 -parenb -cstopb -ixon
960 echo -n 'R' >$(SERIAL_DEVICE)
961 stm32flash -w $(TARGET_HEX) -v -g 0x0 -b 115200 $(SERIAL_DEVICE)
963 ## flash : flash firmware (.hex) onto flight controller
964 flash: flash_$(TARGET)
966 st-flash_$(TARGET): $(TARGET_BIN)
967 st-flash --reset write $< 0x08000000
969 ## st-flash : flash firmware (.bin) onto flight controller
970 st-flash: st-flash_$(TARGET)
972 unbrick_$(TARGET): $(TARGET_HEX)
973 stty -F $(SERIAL_DEVICE) raw speed 115200 -crtscts cs8 -parenb -cstopb -ixon
974 stm32flash -w $(TARGET_HEX) -v -g 0x0 -b 115200 $(SERIAL_DEVICE)
976 ## unbrick : unbrick flight controller
977 unbrick: unbrick_$(TARGET)
979 ## cppcheck : run static analysis on C source code
980 cppcheck: $(CSOURCES)
981 $(CPPCHECK)
983 cppcheck-result.xml: $(CSOURCES)
984 $(CPPCHECK) --xml-version=2 2> cppcheck-result.xml
986 ## help : print this help message and exit
987 help: Makefile
988 @echo ""
989 @echo "Makefile for the $(FORKNAME) firmware"
990 @echo ""
991 @echo "Usage:"
992 @echo " make [goal] [TARGET=<target>] [OPTIONS=\"<options>\"]"
993 @echo ""
994 @echo "Valid TARGET values are: $(VALID_TARGETS)"
995 @echo ""
996 @sed -n 's/^## //p' $<
998 ## test : run the cleanflight test suite
999 ## junittest : run the cleanflight test suite, producing Junit XML result files.
1000 test junittest:
1001 cd src/test && $(MAKE) $@
1003 # rebuild everything when makefile changes
1004 $(TARGET_OBJS) : Makefile
1006 # List of buildable ELF files and their object dependencies.
1007 # It would be nice to compute these lists, but that seems to be just beyond make.
1009 $(TARGET_HEX): $(TARGET_ELF)
1010 $(OBJCOPY) -O ihex --set-start 0x8000000 $< $@
1012 $(TARGET_BIN): $(TARGET_ELF)
1013 $(OBJCOPY) -O binary $< $@
1015 $(TARGET_ELF): $(TARGET_OBJS)
1016 $(CC) -o $@ $^ $(LDFLAGS)
1017 $(SIZE) $(TARGET_ELF)
1019 # Compile
1020 $(OBJECT_DIR)/$(TARGET)/%.o: %.c
1021 @mkdir -p $(dir $@)
1022 @echo %% $(notdir $<)
1023 @$(CC) -c -o $@ $(CFLAGS) $<
1025 # Assemble
1026 $(OBJECT_DIR)/$(TARGET)/%.o: %.s
1027 @mkdir -p $(dir $@)
1028 @echo %% $(notdir $<)
1029 @$(CC) -c -o $@ $(ASFLAGS) $<
1031 $(OBJECT_DIR)/$(TARGET)/%.o: %.S
1032 @mkdir -p $(dir $@)
1033 @echo %% $(notdir $<)
1034 @$(CC) -c -o $@ $(ASFLAGS) $<
1038 # include auto-generated dependencies
1039 -include $(TARGET_DEPS)