2015-09-10 22:15:55 -03:00
############################################################################
#
2020-05-25 12:25:00 -03:00
# Copyright (c) 2015 - 2020 PX4 Development Team. All rights reserved.
2015-09-10 22:15:55 -03:00
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in
# the documentation and/or other materials provided with the
# distribution.
# 3. Neither the name PX4 nor the names of its contributors may be
# used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
############################################################################
2015-10-11 07:04:34 -03:00
# Enforce the presence of the GIT repository
#
# We depend on our submodules, so we have to prevent attempts to
# compile without it being present.
i f e q ( $( wildcard .git ) , )
2015-10-26 06:19:30 -03:00
$( error YOU HAVE TO USE GIT TO DOWNLOAD THIS REPOSITORY. ABORTING.)
e n d i f
2015-09-11 20:39:57 -03:00
# Help
# --------------------------------------------------------------------
# Don't be afraid of this makefile, it is just passing
# arguments to cmake to allow us to keep the wiki pages etc.
# that describe how to build the px4 firmware
# the same even when using cmake instead of make.
#
# Example usage:
#
2018-11-22 00:27:21 -04:00
# make px4_fmu-v2_default (builds)
# make px4_fmu-v2_default upload (builds and uploads)
# make px4_fmu-v2_default test (builds and tests)
2015-09-11 20:39:57 -03:00
#
2018-11-22 00:27:21 -04:00
# This tells cmake to build the nuttx px4_fmu-v2 default config in the
# directory build/px4_fmu-v2_default and then call make
2015-09-11 20:39:57 -03:00
# in that directory with the target upload.
2019-04-23 04:41:21 -03:00
# explicity set default build target
2018-11-22 00:27:21 -04:00
all : px 4_sitl_default
2015-10-03 15:51:12 -03:00
2019-04-23 04:41:21 -03:00
# define a space character to be able to explicitly find it in strings
space := $( subst ,, )
2020-06-19 17:40:36 -03:00
d e f i n e m a k e _ l i s t
2021-06-14 04:42:19 -03:00
$( shell [ -f .github/workflows/compile_${ 1 } .yml ] && cat .github/workflows/compile_${ 1 } .yml | sed -E 's|[[:space:]]+(.*),|check_\1|g' | grep check_${ 2 } )
2020-06-19 17:40:36 -03:00
e n d e f
2015-09-11 20:39:57 -03:00
# Parsing
# --------------------------------------------------------------------
# assume 1st argument passed is the main target, the
# rest are arguments to pass to the makefile generated
# by cmake in the subdirectory
2016-09-17 20:44:45 -03:00
FIRST_ARG := $( firstword $( MAKECMDGOALS) )
2015-09-11 20:39:57 -03:00
ARGS := $( wordlist 2,$( words $( MAKECMDGOALS) ) ,$( MAKECMDGOALS) )
2020-05-25 12:25:00 -03:00
# Get -j or --jobs argument as suggested in:
# https://stackoverflow.com/a/33616144/8548472
MAKE_PID := $( shell echo $$ PPID)
2020-07-12 13:18:22 -03:00
j := $( shell ps T | sed -n 's|.*$(MAKE_PID).*$(MAKE).* \(-j\|--jobs\) *\([0-9][0-9]*\).*|\2|p' )
2015-09-11 20:39:57 -03:00
2020-05-27 12:19:33 -03:00
# Default j for clang-tidy
j_clang_tidy := $( or $( j) ,4)
2016-12-21 19:44:58 -04:00
NINJA_BIN := ninja
2016-09-26 17:48:37 -03:00
i f n d e f N O _ N I N J A _ B U I L D
2016-12-30 19:11:59 -04:00
NINJA_BUILD := $( shell $( NINJA_BIN) --version 2>/dev/null)
2016-12-21 19:44:58 -04:00
2016-12-30 19:11:59 -04:00
ifndef NINJA_BUILD
NINJA_BIN := ninja-build
NINJA_BUILD := $( shell $( NINJA_BIN) --version 2>/dev/null)
endif
2016-09-26 17:48:37 -03:00
e n d i f
2016-12-21 19:44:58 -04:00
2015-10-06 15:57:55 -03:00
i f d e f N I N J A _ B U I L D
2016-12-31 19:31:02 -04:00
PX4_CMAKE_GENERATOR := Ninja
2016-12-30 19:11:59 -04:00
PX4_MAKE := $( NINJA_BIN)
2017-04-17 21:57:35 -03:00
ifdef VERBOSE
2020-05-26 04:20:33 -03:00
PX4_MAKE_ARGS := -v
2017-04-17 21:57:35 -03:00
else
2020-05-26 04:20:33 -03:00
PX4_MAKE_ARGS :=
endif
# Only override ninja default if -j is set.
ifneq ( $( j) ,)
PX4_MAKE_ARGS := $( PX4_MAKE_ARGS) -j$( j)
2017-04-17 21:57:35 -03:00
endif
2015-10-06 15:57:55 -03:00
e l s e
2016-12-30 19:11:59 -04:00
ifdef SYSTEMROOT
# Windows
2016-12-31 19:31:02 -04:00
PX4_CMAKE_GENERATOR := "MSYS\ Makefiles"
2016-12-30 19:11:59 -04:00
else
2016-12-31 19:31:02 -04:00
PX4_CMAKE_GENERATOR := "Unix\ Makefiles"
2016-12-30 19:11:59 -04:00
endif
2020-05-26 04:20:33 -03:00
# For non-ninja builds we default to -j4
j := $( or $( j) ,4)
2016-12-30 19:11:59 -04:00
PX4_MAKE = $( MAKE)
PX4_MAKE_ARGS = -j$( j) --no-print-directory
e n d i f
2015-10-12 12:10:13 -03:00
2018-11-21 16:00:28 -04:00
SRC_DIR := $( shell dirname " $( realpath $( lastword $( MAKEFILE_LIST) ) ) " )
2016-12-30 19:11:59 -04:00
2016-06-30 10:16:52 -03:00
# check if replay env variable is set & set build dir accordingly
i f d e f r e p l a y
BUILD_DIR_SUFFIX := _replay
e l s e
BUILD_DIR_SUFFIX :=
e n d i f
2022-05-24 04:37:03 -03:00
CMAKE_ARGS ?=
2016-09-07 09:05:22 -03:00
# additional config parameters passed to cmake
i f d e f E X T E R N A L _ M O D U L E S _ L O C A T I O N
2022-05-24 04:37:03 -03:00
override CMAKE_ARGS += -DEXTERNAL_MODULES_LOCATION:STRING= $( EXTERNAL_MODULES_LOCATION)
2016-09-07 09:05:22 -03:00
e n d i f
2017-06-01 09:47:33 -03:00
i f d e f P X 4 _ C M A K E _ B U I L D _ T Y P E
2022-05-24 04:37:03 -03:00
override CMAKE_ARGS += -DCMAKE_BUILD_TYPE= ${ PX4_CMAKE_BUILD_TYPE }
2018-09-23 17:52:09 -03:00
e l s e
# Address Sanitizer
ifdef PX4_ASAN
2022-05-24 04:37:03 -03:00
override CMAKE_ARGS += -DCMAKE_BUILD_TYPE= AddressSanitizer
2018-09-23 17:52:09 -03:00
endif
# Memory Sanitizer
ifdef PX4_MSAN
2022-05-24 04:37:03 -03:00
override CMAKE_ARGS += -DCMAKE_BUILD_TYPE= MemorySanitizer
2018-09-23 17:52:09 -03:00
endif
# Thread Sanitizer
ifdef PX4_TSAN
2022-05-24 04:37:03 -03:00
override CMAKE_ARGS += -DCMAKE_BUILD_TYPE= ThreadSanitizer
2018-09-23 17:52:09 -03:00
endif
# Undefined Behavior Sanitizer
ifdef PX4_UBSAN
2022-05-24 04:37:03 -03:00
override CMAKE_ARGS += -DCMAKE_BUILD_TYPE= UndefinedBehaviorSanitizer
2018-09-23 17:52:09 -03:00
endif
2019-09-04 11:30:20 -03:00
# Fuzz Testing
ifdef PX4_FUZZ
2022-05-24 04:37:03 -03:00
override CMAKE_ARGS += -DCMAKE_BUILD_TYPE= FuzzTesting
2019-09-04 11:30:20 -03:00
endif
2017-06-01 09:47:33 -03:00
e n d i f
2016-08-25 16:47:45 -03:00
2020-01-31 13:18:36 -04:00
# Pick up specific Python path if set
i f d e f P Y T H O N _ E X E C U T A B L E
2022-05-24 04:37:03 -03:00
override CMAKE_ARGS += -DPYTHON_EXECUTABLE= ${ PYTHON_EXECUTABLE }
2020-01-31 13:18:36 -04:00
e n d i f
2021-06-20 11:33:36 -03:00
# Check if the microRTPS agent is to be built
i f d e f B U I L D _ M I C R O R T P S _ A G E N T
2022-05-24 04:37:03 -03:00
override CMAKE_ARGS += -DBUILD_MICRORTPS_AGENT= ON
2021-06-20 11:33:36 -03:00
e n d i f
2015-09-11 20:39:57 -03:00
# Functions
# --------------------------------------------------------------------
2015-09-13 15:31:58 -03:00
# describe how to build a cmake config
2015-09-11 20:39:57 -03:00
d e f i n e c m a k e - b u i l d
2022-05-24 04:37:03 -03:00
$( eval override CMAKE_ARGS += -DCONFIG= $( 1) )
2019-02-24 08:57:56 -04:00
@$( eval BUILD_DIR = " $( SRC_DIR) /build/ $( 1) " )
2019-02-25 17:15:58 -04:00
@# check if the desired cmake configuration matches the cache then CMAKE_CACHE_CHECK stays empty
@$( call cmake-cache-check)
2019-02-24 08:57:56 -04:00
@# make sure to start from scratch when switching from GNU Make to Ninja
@if [ $( PX4_CMAKE_GENERATOR) = "Ninja" ] && [ -e $( BUILD_DIR) /Makefile ] ; then rm -rf $( BUILD_DIR) ; fi
2021-03-10 11:41:04 -04:00
@# make sure to start from scratch if ninja build file is missing
@if [ $( PX4_CMAKE_GENERATOR) = "Ninja" ] && [ ! -f $( BUILD_DIR) /build.ninja ] ; then rm -rf $( BUILD_DIR) ; fi
2019-02-24 08:57:56 -04:00
@# only excplicitly configure the first build, if cache file already exists the makefile will rerun cmake automatically if necessary
2019-02-25 17:15:58 -04:00
@if [ ! -e $( BUILD_DIR) /CMakeCache.txt ] || [ $( CMAKE_CACHE_CHECK) ] ; then \
2019-02-24 08:57:56 -04:00
mkdir -p $( BUILD_DIR) \
&& cd $( BUILD_DIR) \
&& cmake " $( SRC_DIR) " -G" $( PX4_CMAKE_GENERATOR) " $( CMAKE_ARGS) \
|| ( rm -rf $( BUILD_DIR) ) ; \
fi
@# run the build for the specified target
@cmake --build $( BUILD_DIR) -- $( PX4_MAKE_ARGS) $( ARGS)
2016-04-24 19:48:56 -03:00
e n d e f
2019-02-25 17:15:58 -04:00
# check if the options we want to build with in CMAKE_ARGS match the ones which are already configured in the cache inside BUILD_DIR
d e f i n e c m a k e - c a c h e - c h e c k
@# change to build folder which fails if it doesn' t exist and CACHED_CMAKE_OPTIONS stays empty
@# fetch all previously configured and cached options from the build folder and transform them into the OPTION = VALUE format without type ( e.g. :BOOL)
2020-07-12 13:18:22 -03:00
@$( eval CACHED_CMAKE_OPTIONS = $( shell cd $( BUILD_DIR) 2>/dev/null && cmake -L 2>/dev/null | sed -n 's|\([^[:blank:]]*\):[^[:blank:]]*\(=[^[:blank:]]*\)|\1\2|gp' ) )
2019-02-25 17:15:58 -04:00
@# transform the options in CMAKE_ARGS into the OPTION = VALUE format without -D
2020-07-12 13:18:22 -03:00
@$( eval DESIRED_CMAKE_OPTIONS = $( shell echo $( CMAKE_ARGS) | sed -n 's|-D\([^[:blank:]]*=[^[:blank:]]*\)|\1|gp' ) )
2019-04-23 04:41:21 -03:00
@# find each currently desired option in the already cached ones making sure the complete configured string value is the same
@$( eval VERIFIED_CMAKE_OPTIONS = $( foreach option,$( DESIRED_CMAKE_OPTIONS) ,$( strip $( findstring $( option) $( space) ,$( CACHED_CMAKE_OPTIONS) ) ) ) )
2019-02-25 17:15:58 -04:00
@# if the complete list of desired options is found in the list of verified options we don' t need to reconfigure and CMAKE_CACHE_CHECK stays empty
@$( eval CMAKE_CACHE_CHECK = $( if $( findstring $( DESIRED_CMAKE_OPTIONS) ,$( VERIFIED_CMAKE_OPTIONS) ) ,,y) )
e n d e f
2018-05-08 09:27:40 -03:00
COLOR_BLUE = \0 33[ 0; 94m
2017-07-28 15:27:33 -03:00
NO_COLOR = \0 33[ m
2016-04-17 18:18:26 -03:00
d e f i n e c o l o r e c h o
2018-05-08 10:29:35 -03:00
+ @ e c h o - e '${COLOR_BLUE}${1} ${NO_COLOR}'
2016-04-17 18:18:26 -03:00
e n d e f
2021-08-04 12:09:21 -03:00
# Get a list of all config targets boards/*/*.px4board
ALL_CONFIG_TARGETS := $( shell find boards -maxdepth 3 -mindepth 3 -name '*.px4board' -print | sed -e 's|boards\/||' | sed -e 's|\.px4board||' | sed -e 's|\/|_|g' | sort)
2018-11-16 13:52:37 -04:00
2015-09-11 20:39:57 -03:00
# ADD CONFIGS HERE
# --------------------------------------------------------------------
# Do not put any spaces between function arguments.
2016-09-17 20:44:45 -03:00
# All targets.
$(ALL_CONFIG_TARGETS) :
2021-07-15 11:05:37 -03:00
@$( call cmake-build,$@ $( BUILD_DIR_SUFFIX) )
2016-09-26 17:48:37 -03:00
2019-02-24 08:57:56 -04:00
# Filter for only default targets to allow omiting the "_default" postfix
CONFIG_TARGETS_DEFAULT := $( patsubst %_default,%,$( filter %_default,$( ALL_CONFIG_TARGETS) ) )
2018-11-16 13:52:37 -04:00
$(CONFIG_TARGETS_DEFAULT) :
2021-07-15 11:05:37 -03:00
@$( call cmake-build,$@ _default$( BUILD_DIR_SUFFIX) )
2018-11-16 13:52:37 -04:00
2019-02-24 08:57:56 -04:00
all_config_targets : $( ALL_CONFIG_TARGETS )
2018-11-16 13:52:37 -04:00
all_default_targets : $( CONFIG_TARGETS_DEFAULT )
2021-08-17 13:41:59 -03:00
updateconfig :
@./Tools/kconfig/updateconfig.py
2018-11-22 14:02:38 -04:00
# board reorganization deprecation warnings (2018-11-22)
d e f i n e d e p r e c a t i o n _ w a r n i n g
$( warning $( 1) has been deprecated and will be removed, please use $( 2) !)
e n d e f
2017-10-17 17:29:55 -03:00
# All targets with just dependencies but no recipe must either be marked as phony (or have the special @: as recipe).
2020-02-08 15:38:56 -04:00
.PHONY : all px 4_sitl_default all_config_targets all_default_targets
2017-10-17 17:29:55 -03:00
2015-09-11 20:39:57 -03:00
# Other targets
# --------------------------------------------------------------------
2016-03-12 15:59:21 -04:00
2020-02-16 13:11:54 -04:00
.PHONY : qgc_firmware px 4fmu_firmware misc_qgc_extra_firmware check_rtps
2016-12-12 20:42:37 -04:00
2017-01-14 10:38:28 -04:00
# QGroundControl flashable NuttX firmware
2017-10-20 10:20:30 -03:00
qgc_firmware : px 4fmu_firmware misc_qgc_extra_firmware
2017-04-23 20:11:44 -03:00
# px4fmu NuttX firmware
px4fmu_firmware : \
2018-11-22 00:27:21 -04:00
check_px4_io-v2_default \
check_px4_fmu-v2_default \
check_px4_fmu-v3_default \
check_px4_fmu-v4_default \
check_px4_fmu-v4pro_default \
check_px4_fmu-v5_default \
2019-05-28 19:18:38 -03:00
check_px4_fmu-v5x_default \
2017-04-23 20:11:44 -03:00
sizes
misc_qgc_extra_firmware : \
2019-05-03 07:31:50 -03:00
check_nxp_fmuk66-v3_default \
2019-12-04 14:59:47 -04:00
check_nxp_fmurt1062-v1_default \
2020-01-22 15:58:57 -04:00
check_mro_x21_default \
2018-11-22 00:27:21 -04:00
check_bitcraze_crazyflie_default \
2021-01-13 04:33:51 -04:00
check_bitcraze_crazyflie21_default \
2018-11-22 00:27:21 -04:00
check_airmind_mindpx-v2_default \
2017-04-23 20:11:44 -03:00
sizes
2016-12-31 18:49:08 -04:00
2017-10-17 17:29:55 -03:00
# builds with RTPS
check_rtps : \
2018-11-22 00:27:21 -04:00
check_px4_fmu-v3_rtps \
check_px4_fmu-v4_rtps \
check_px4_fmu-v4pro_rtps \
check_px4_sitl_rtps \
2017-10-17 17:29:55 -03:00
sizes
2017-12-15 06:52:21 -04:00
.PHONY : sizes check quick_check check_rtps uorb_graphs
2017-10-20 10:20:30 -03:00
2017-01-14 10:38:28 -04:00
sizes :
2017-08-29 18:22:05 -03:00
@-find build -name *.elf -type f | xargs size 2> /dev/null || :
2016-12-12 20:42:37 -04:00
2017-01-14 10:38:28 -04:00
# All default targets that don't require a special build environment
2020-02-16 13:11:54 -04:00
check : check_px 4_sitl_default px 4fmu_firmware misc_qgc_extra_firmware tests check_format
2016-12-30 19:11:59 -04:00
2020-02-08 15:38:56 -04:00
# quick_check builds a single nuttx and SITL target, runs testing, and checks the style
2019-02-05 12:52:40 -04:00
quick_check : check_px 4_sitl_test check_px 4_fmu -v 5_default tests check_format
2017-01-14 10:38:28 -04:00
check_% :
@echo
2018-05-08 10:29:35 -03:00
$( call colorecho,'Building' $( subst check_,,$@ ) )
2017-01-14 10:38:28 -04:00
@$( MAKE) --no-print-directory $( subst check_,,$@ )
@echo
2021-07-15 11:05:37 -03:00
all_variants_% :
@echo 'Building all $(subst all_variants_,,$@) variants:' $( filter $( subst all_variants_,,$@ ) _%, $( ALL_CONFIG_TARGETS) )
@echo
$( foreach a,$( filter $( subst all_variants_,,$@ ) _%, $( ALL_CONFIG_TARGETS) ) , $( call cmake-build,$( a) $( BUILD_DIR_SUFFIX) ) )
2017-12-15 06:52:21 -04:00
uorb_graphs :
2021-07-28 17:07:12 -03:00
@./Tools/uorb_graph/create.py --src-path src --exclude-path src/examples --exclude-path src/lib/parameters --merge-depends --file Tools/uorb_graph/graph_full
@./Tools/uorb_graph/create.py --src-path src --exclude-path src/examples --exclude-path src/lib/parameters --exclude-path src/modules/mavlink --merge-depends --file Tools/uorb_graph/graph_full_no_mavlink
2018-11-22 00:27:21 -04:00
@$( MAKE) --no-print-directory px4_fmu-v2_default uorb_graph
@$( MAKE) --no-print-directory px4_fmu-v4_default uorb_graph
2021-07-28 17:07:12 -03:00
@$( MAKE) --no-print-directory px4_fmu-v5_default uorb_graph
2018-11-22 00:27:21 -04:00
@$( MAKE) --no-print-directory px4_sitl_default uorb_graph
2017-12-15 06:52:21 -04:00
2022-08-19 06:53:04 -03:00
px4io_update :
@$( MAKE) --no-print-directory px4_io-v2_default
@$( MAKE) --no-print-directory cubepilot_io-v2_default
2021-11-15 19:47:38 -04:00
# px4_io-v2_default
2022-09-15 14:13:49 -03:00
cp build/px4_io-v2_default/px4_io-v2_default.bin boards/ark/fmu-v6x/extras/px4_io-v2_default.bin
2021-11-15 19:47:38 -04:00
cp build/px4_io-v2_default/px4_io-v2_default.bin boards/holybro/durandal-v1/extras/px4_io-v2_default.bin
cp build/px4_io-v2_default/px4_io-v2_default.bin boards/holybro/pix32v5/extras/px4_io-v2_default.bin
2022-08-24 15:44:17 -03:00
cp build/px4_io-v2_default/px4_io-v2_default.bin boards/mro/x21/extras/px4_io-v2_default.bin
2021-11-15 19:47:38 -04:00
cp build/px4_io-v2_default/px4_io-v2_default.bin boards/mro/x21-777/extras/px4_io-v2_default.bin
cp build/px4_io-v2_default/px4_io-v2_default.bin boards/px4/fmu-v2/extras/px4_io-v2_default.bin
cp build/px4_io-v2_default/px4_io-v2_default.bin boards/px4/fmu-v3/extras/px4_io-v2_default.bin
cp build/px4_io-v2_default/px4_io-v2_default.bin boards/px4/fmu-v4pro/extras/px4_io-v2_default.bin
cp build/px4_io-v2_default/px4_io-v2_default.bin boards/px4/fmu-v5/extras/px4_io-v2_default.bin
cp build/px4_io-v2_default/px4_io-v2_default.bin boards/px4/fmu-v5x/extras/px4_io-v2_default.bin
cp build/px4_io-v2_default/px4_io-v2_default.bin boards/px4/fmu-v6x/extras/px4_io-v2_default.bin
2022-05-20 16:49:06 -03:00
cp build/px4_io-v2_default/px4_io-v2_default.bin boards/px4/fmu-v6c/extras/px4_io-v2_default.bin
2021-11-15 19:47:38 -04:00
# cubepilot_io-v2_default
cp build/cubepilot_io-v2_default/cubepilot_io-v2_default.bin boards/cubepilot/cubeorange/extras/cubepilot_io-v2_default.bin
cp build/cubepilot_io-v2_default/cubepilot_io-v2_default.bin boards/cubepilot/cubeyellow/extras/cubepilot_io-v2_default.bin
git status
2022-09-15 14:13:49 -03:00
bootloaders_update : ark_fmu -v 6x_bootloader cuav_nora_bootloader cuav_x 7pro_bootloader cubepilot_cubeorange_bootloader holybro_durandal -v 1_bootloader holybro_kakuteh 7_bootloader matek_h 743_bootloader matek_h 743-mini_bootloader matek_h 743-slim_bootloader modalai_fc -v 2_bootloader mro_ctrl -zero -classic_bootloader mro_ctrl -zero -h 7_bootloader mro_ctrl -zero -h 7-oem_bootloader mro_pixracerpro_bootloader px 4_fmu -v 6c_bootloader px 4_fmu -v 6u_bootloader px 4_fmu -v 6x_bootloader
2021-11-15 19:47:38 -04:00
git status
2017-12-15 06:52:21 -04:00
2017-11-22 00:37:34 -04:00
.PHONY : coverity_scan
2018-11-22 00:27:21 -04:00
coverity_scan : px 4_sitl_default
2017-11-22 00:37:34 -04:00
2017-04-06 17:06:11 -03:00
# Documentation
# --------------------------------------------------------------------
2020-11-26 08:47:47 -04:00
.PHONY : parameters_metadata airframe_metadata module_documentation extract_events px 4_metadata doxygen
2017-04-06 17:06:11 -03:00
2017-10-20 10:20:30 -03:00
parameters_metadata :
2021-03-22 07:58:22 -03:00
@$( MAKE) --no-print-directory px4_sitl_default metadata_parameters ver_gen
2017-04-06 17:06:11 -03:00
2017-04-22 21:40:42 -03:00
airframe_metadata :
2021-04-29 05:06:35 -03:00
@$( MAKE) --no-print-directory px4_sitl_default metadata_airframes ver_gen
2017-04-22 21:40:42 -03:00
2017-05-05 06:51:34 -03:00
module_documentation :
2018-11-22 00:27:21 -04:00
@$( MAKE) --no-print-directory px4_sitl_default metadata_module_documentation
2017-05-05 06:51:34 -03:00
2020-11-26 08:47:47 -04:00
extract_events :
@$( MAKE) --no-print-directory px4_sitl_default metadata_extract_events ver_gen
px4_metadata : parameters_metadata airframe_metadata module_documentation extract_events
2017-04-22 21:40:42 -03:00
2018-07-30 10:46:00 -03:00
doxygen :
2018-11-21 16:00:28 -04:00
@mkdir -p " $( SRC_DIR) " /build/doxygen
2018-11-22 00:27:21 -04:00
@cd " $( SRC_DIR) " /build/doxygen && cmake " $( SRC_DIR) " $( CMAKE_ARGS) -G" $( PX4_CMAKE_GENERATOR) " -DCONFIG= px4_sitl_default -DBUILD_DOXYGEN= ON
2018-11-21 16:00:28 -04:00
@$( PX4_MAKE) -C " $( SRC_DIR) " /build/doxygen
@touch " $( SRC_DIR) " /build/doxygen/Documentation/.nojekyll
2018-07-30 10:46:00 -03:00
2017-01-14 10:38:28 -04:00
# Astyle
# --------------------------------------------------------------------
.PHONY : check_format format
2016-03-12 15:59:21 -04:00
2015-10-06 16:26:19 -03:00
check_format :
2018-05-08 10:29:35 -03:00
$( call colorecho,'Checking formatting with astyle' )
2018-11-21 16:00:28 -04:00
@" $( SRC_DIR) " /Tools/astyle/check_code_style_all.sh
@cd " $( SRC_DIR) " && git diff --check
2015-10-06 16:26:19 -03:00
2016-08-05 23:23:32 -03:00
format :
2018-05-08 10:29:35 -03:00
$( call colorecho,'Formatting with astyle' )
2018-11-21 16:00:28 -04:00
@" $( SRC_DIR) " /Tools/astyle/check_code_style_all.sh --fix
2016-08-05 23:23:32 -03:00
2017-01-14 10:38:28 -04:00
# Testing
# --------------------------------------------------------------------
2019-04-23 06:22:14 -03:00
.PHONY : tests tests_coverage tests_mission tests_mission_coverage tests_offboard tests_avoidance
2019-04-07 16:31:52 -03:00
.PHONY : rostest python_coverage
2016-06-22 18:42:49 -03:00
2019-04-07 16:31:52 -03:00
tests :
2022-05-24 04:37:03 -03:00
$( eval override CMAKE_ARGS += -DTESTFILTER= $( TESTFILTER) )
2019-04-14 15:55:35 -03:00
$( eval ARGS += test_results)
$( eval ASAN_OPTIONS += color = always:check_initialization_order= 1:detect_stack_use_after_return= 1)
$( eval UBSAN_OPTIONS += color = always)
$( call cmake-build,px4_sitl_test)
2016-03-12 15:05:43 -04:00
2016-12-04 20:10:24 -04:00
tests_coverage :
2018-01-01 19:23:39 -04:00
@$( MAKE) clean
2021-01-28 05:32:29 -04:00
@$( MAKE) --no-print-directory tests PX4_CMAKE_BUILD_TYPE = Coverage
@mkdir -p coverage
@lcov --directory build/px4_sitl_test --base-directory build/px4_sitl_test --gcov-tool gcov --capture -o coverage/lcov.info
2017-06-01 09:47:33 -03:00
2018-11-22 00:27:21 -04:00
rostest : px 4_sitl_default
@$( MAKE) --no-print-directory px4_sitl_default sitl_gazebo
2017-12-10 21:19:03 -04:00
2019-12-26 13:36:24 -04:00
tests_integration : px 4_sitl_default
@$( MAKE) --no-print-directory px4_sitl_default sitl_gazebo
2020-01-01 22:30:59 -04:00
@$( MAKE) --no-print-directory px4_sitl_default mavsdk_tests
2020-07-21 06:35:46 -03:00
@" $( SRC_DIR) " /test/mavsdk_tests/mavsdk_test_runner.py --speed-factor 20 test/mavsdk_tests/configs/sitl.json
2019-12-24 05:58:21 -04:00
2019-12-26 13:36:24 -04:00
tests_integration_coverage :
@$( MAKE) clean
@$( MAKE) --no-print-directory px4_sitl_default PX4_CMAKE_BUILD_TYPE = Coverage
2020-01-01 22:30:59 -04:00
@$( MAKE) --no-print-directory px4_sitl_default sitl_gazebo
@$( MAKE) --no-print-directory px4_sitl_default mavsdk_tests
2020-07-21 06:35:46 -03:00
@" $( SRC_DIR) " /test/mavsdk_tests/mavsdk_test_runner.py --speed-factor 20 test/mavsdk_tests/configs/sitl.json
2020-01-25 11:32:10 -04:00
@mkdir -p coverage
@lcov --directory build/px4_sitl_default --base-directory build/px4_sitl_default --gcov-tool gcov --capture -o coverage/lcov.info
2019-12-26 13:36:24 -04:00
2017-12-10 21:19:03 -04:00
tests_mission : rostest
2018-11-21 16:00:28 -04:00
@" $( SRC_DIR) " /test/rostest_px4_run.sh mavros_posix_tests_missions.test
2017-12-10 21:19:03 -04:00
2019-02-07 17:11:25 -04:00
rostest_run : px 4_sitl_default
@$( MAKE) --no-print-directory px4_sitl_default sitl_gazebo
@" $( SRC_DIR) " /test/rostest_px4_run.sh $( TEST_FILE) mission:= $( TEST_MISSION) vehicle:= $( TEST_VEHICLE)
2018-05-05 17:55:36 -03:00
tests_mission_coverage :
@$( MAKE) clean
2018-11-22 00:27:21 -04:00
@$( MAKE) --no-print-directory px4_sitl_default PX4_CMAKE_BUILD_TYPE = Coverage
@$( MAKE) --no-print-directory px4_sitl_default sitl_gazebo PX4_CMAKE_BUILD_TYPE = Coverage
2018-11-21 16:00:28 -04:00
@" $( SRC_DIR) " /test/rostest_px4_run.sh mavros_posix_test_mission.test mission:= VTOL_mission_1 vehicle:= standard_vtol
2018-11-22 00:27:21 -04:00
@$( MAKE) --no-print-directory px4_sitl_default generate_coverage
2018-05-05 17:55:36 -03:00
2017-12-10 21:19:03 -04:00
tests_offboard : rostest
2018-11-21 16:00:28 -04:00
@" $( SRC_DIR) " /test/rostest_px4_run.sh mavros_posix_tests_offboard_attctl.test
@" $( SRC_DIR) " /test/rostest_px4_run.sh mavros_posix_tests_offboard_posctl.test
2020-04-24 10:28:55 -03:00
@" $( SRC_DIR) " /test/rostest_px4_run.sh mavros_posix_tests_offboard_rpyrt_ctl.test
2017-12-10 21:19:03 -04:00
2019-04-05 11:05:16 -03:00
tests_avoidance : rostest
2019-03-15 01:37:23 -03:00
@" $( SRC_DIR) " /test/rostest_avoidance_run.sh mavros_posix_test_avoidance.test
2019-08-02 08:10:19 -03:00
@" $( SRC_DIR) " /test/rostest_avoidance_run.sh mavros_posix_test_safe_landing.test
2019-03-15 01:37:23 -03:00
2018-08-04 19:22:08 -03:00
python_coverage :
2018-11-21 16:00:28 -04:00
@mkdir -p " $( SRC_DIR) " /build/python_coverage
2018-11-22 00:27:21 -04:00
@cd " $( SRC_DIR) " /build/python_coverage && cmake " $( SRC_DIR) " $( CMAKE_ARGS) -G" $( PX4_CMAKE_GENERATOR) " -DCONFIG= px4_sitl_default -DPYTHON_COVERAGE= ON
2018-11-21 16:00:28 -04:00
@$( PX4_MAKE) -C " $( SRC_DIR) " /build/python_coverage
@$( PX4_MAKE) -C " $( SRC_DIR) " /build/python_coverage metadata_airframes
@$( PX4_MAKE) -C " $( SRC_DIR) " /build/python_coverage metadata_parameters
#@$(PX4_MAKE) -C "$(SRC_DIR)"/build/python_coverage module_documentation # TODO: fix within coverage.py
2018-08-04 19:22:08 -03:00
@coverage combine ` find . -name .coverage\* `
@coverage report -m
2019-03-15 01:37:23 -03:00
2017-04-23 15:48:35 -03:00
# static analyzers (scan-build, clang-tidy, cppcheck)
2017-01-14 10:38:28 -04:00
# --------------------------------------------------------------------
2018-11-22 00:27:21 -04:00
.PHONY : scan -build px 4_sitl_default -clang clang -tidy clang -tidy -fix clang -tidy -quiet
2018-09-22 04:03:59 -03:00
.PHONY : cppcheck shellcheck_all validate_module_configs
2017-01-14 10:38:28 -04:00
2017-01-01 23:42:01 -04:00
scan-build :
2017-04-23 15:48:35 -03:00
@export CCC_CC = clang
@export CCC_CXX = clang++
2018-11-22 00:27:21 -04:00
@rm -rf " $( SRC_DIR) " /build/px4_sitl_default-scan-build
2018-11-21 16:00:28 -04:00
@rm -rf " $( SRC_DIR) " /build/scan-build/report_latest
2018-11-22 00:27:21 -04:00
@mkdir -p " $( SRC_DIR) " /build/px4_sitl_default-scan-build
@cd " $( SRC_DIR) " /build/px4_sitl_default-scan-build && scan-build cmake " $( SRC_DIR) " -GNinja -DCONFIG= px4_sitl_default
@scan-build -o " $( SRC_DIR) " /build/scan-build cmake --build " $( SRC_DIR) " /build/px4_sitl_default-scan-build
2018-11-21 16:00:28 -04:00
@find " $( SRC_DIR) " /build/scan-build -maxdepth 1 -mindepth 1 -type d -exec cp -r "{}" " $( SRC_DIR) " /build/scan-build/report_latest \;
2017-04-23 15:48:35 -03:00
2018-11-22 00:27:21 -04:00
px4_sitl_default-clang :
@mkdir -p " $( SRC_DIR) " /build/px4_sitl_default-clang
@cd " $( SRC_DIR) " /build/px4_sitl_default-clang && cmake " $( SRC_DIR) " $( CMAKE_ARGS) -G" $( PX4_CMAKE_GENERATOR) " -DCONFIG= px4_sitl_default -DCMAKE_C_COMPILER= clang -DCMAKE_CXX_COMPILER= clang++
@$( PX4_MAKE) -C " $( SRC_DIR) " /build/px4_sitl_default-clang
2017-10-20 10:20:30 -03:00
2018-11-22 00:27:21 -04:00
clang-tidy : px 4_sitl_default -clang
2020-05-27 12:19:33 -03:00
@cd " $( SRC_DIR) " /build/px4_sitl_default-clang && " $( SRC_DIR) " /Tools/run-clang-tidy.py -header-filter= ".*\.hpp" -j$( j_clang_tidy) -p .
2017-04-23 15:48:35 -03:00
# to automatically fix a single check at a time, eg modernize-redundant-void-arg
# % run-clang-tidy-4.0.py -fix -j4 -checks=-\*,modernize-redundant-void-arg -p .
2018-11-22 00:27:21 -04:00
clang-tidy-fix : px 4_sitl_default -clang
2020-05-27 12:19:33 -03:00
@cd " $( SRC_DIR) " /build/px4_sitl_default-clang && " $( SRC_DIR) " /Tools/run-clang-tidy.py -header-filter= ".*\.hpp" -j$( j_clang_tidy) -fix -p .
2017-04-23 15:48:35 -03:00
# modified version of run-clang-tidy.py to return error codes and only output relevant results
2018-11-22 00:27:21 -04:00
clang-tidy-quiet : px 4_sitl_default -clang
2020-05-27 12:19:33 -03:00
@cd " $( SRC_DIR) " /build/px4_sitl_default-clang && " $( SRC_DIR) " /Tools/run-clang-tidy.py -header-filter= ".*\.hpp" -j$( j_clang_tidy) -p .
2017-04-23 15:48:35 -03:00
2017-04-24 12:27:46 -03:00
# TODO: Fix cppcheck errors then try --enable=warning,performance,portability,style,unusedFunction or --enable=all
2018-11-22 00:27:21 -04:00
cppcheck : px 4_sitl_default
2018-11-21 16:00:28 -04:00
@mkdir -p " $( SRC_DIR) " /build/cppcheck
2020-01-21 22:49:10 -04:00
@cppcheck -i" $( SRC_DIR) " /src/examples --enable= performance --std= c++14 --std= c99 --std= posix --project= " $( SRC_DIR) " /build/px4_sitl_default/compile_commands.json --xml-version= 2 2> " $( SRC_DIR) " /build/cppcheck/cppcheck-result.xml > /dev/null
2018-11-21 16:00:28 -04:00
@cppcheck-htmlreport --source-encoding= ascii --file= " $( SRC_DIR) " /build/cppcheck/cppcheck-result.xml --report-dir= " $( SRC_DIR) " /build/cppcheck --source-dir= " $( SRC_DIR) " /src/
2017-01-01 23:42:01 -04:00
2018-08-25 14:17:31 -03:00
shellcheck_all :
2018-11-21 16:00:28 -04:00
@" $( SRC_DIR) " /Tools/run-shellcheck.sh " $( SRC_DIR) " /ROMFS/px4fmu_common/
2018-11-30 22:01:29 -04:00
@make px4_fmu-v5_default shellcheck
2018-08-17 22:21:41 -03:00
2018-09-22 04:03:59 -03:00
validate_module_configs :
2021-11-24 05:47:01 -04:00
@find " $( SRC_DIR) " /src/modules " $( SRC_DIR) " /src/drivers " $( SRC_DIR) " /src/lib -name *.yaml -type f \
-not -path " $( SRC_DIR) /src/lib/mixer_module/* " -not -path " $( SRC_DIR) /src/lib/crypto/libtommath/* " -print0 | \
xargs -0 " $( SRC_DIR) " /Tools/validate_yaml.py --schema-file " $( SRC_DIR) " /validation/module_schema.yaml
2018-09-22 04:03:59 -03:00
2017-01-14 10:38:28 -04:00
# Cleanup
# --------------------------------------------------------------------
2017-09-27 19:25:48 -03:00
.PHONY : clean submodulesclean submodulesupdate gazeboclean distclean
2016-03-12 16:55:42 -04:00
2015-09-11 20:39:57 -03:00
clean :
2021-05-12 04:59:25 -03:00
@[ ! -d " $( SRC_DIR) /build " ] || find " $( SRC_DIR) /build " -mindepth 1 -maxdepth 1 -type d -exec sh -c "echo {}; cmake --build {} -- clean || rm -rf {}" \; # use generated build system to clean, wipe build directory if it fails
2021-05-06 10:58:11 -03:00
@git submodule foreach git clean -dX --force # some submodules generate build artifacts in source
2015-10-14 07:13:20 -03:00
2016-03-12 15:15:23 -04:00
submodulesclean :
2017-04-17 21:57:35 -03:00
@git submodule foreach --quiet --recursive git clean -ff -x -d
@git submodule update --quiet --init --recursive --force || true
2016-06-03 17:48:30 -03:00
@git submodule sync --recursive
2021-05-06 10:58:11 -03:00
@git submodule update --init --recursive --force --jobs 4
2016-03-12 15:15:23 -04:00
2017-04-17 21:57:35 -03:00
submodulesupdate :
2021-05-06 10:58:11 -03:00
@git submodule update --quiet --init --recursive --jobs 4 || true
2017-04-17 21:57:35 -03:00
@git submodule sync --recursive
2021-05-06 10:58:11 -03:00
@git submodule update --init --recursive --jobs 4
2021-09-11 16:10:56 -03:00
@git fetch --all --tags --recurse-submodules= yes --jobs= 4
2017-04-17 21:57:35 -03:00
2017-02-19 08:35:11 -04:00
gazeboclean :
@rm -rf ~/.gazebo/*
2018-01-09 02:07:55 -04:00
distclean : gazeboclean
2021-05-06 10:58:11 -03:00
@git submodule deinit --force $( SRC_DIR)
@rm -rf " $( SRC_DIR) /build "
@git clean --force -X " $( SRC_DIR) /msg/ " " $( SRC_DIR) /platforms/ " " $( SRC_DIR) /posix-configs/ " " $( SRC_DIR) /ROMFS/ " " $( SRC_DIR) /src/ " " $( SRC_DIR) /test/ " " $( SRC_DIR) /Tools/ "
2016-03-12 15:15:23 -04:00
2021-07-24 14:38:38 -03:00
# Help / Error / Misc
2017-01-14 10:38:28 -04:00
# --------------------------------------------------------------------
2016-09-17 20:44:45 -03:00
# All other targets are handled by PX4_MAKE. Add a rule here to avoid printing an error.
% :
$( if $( filter $( FIRST_ARG) ,$@ ) , \
2020-01-25 11:33:12 -04:00
$( error " Make target $@ not found. It either does not exist or $@ cannot be the first argument. Use ' $( MAKE) help|list_config_targets' to get a list of all possible [configuration] targets. " ) ,@#)
2015-09-11 20:39:57 -03:00
2016-09-17 20:44:45 -03:00
# Print a list of non-config targets (based on http://stackoverflow.com/a/26339924/1487069)
help :
@echo " Usage: $( MAKE) <target> "
@echo "Where <target> is one of:"
@$( MAKE) -pRrq -f $( lastword $( MAKEFILE_LIST) ) : 2>/dev/null | \
awk -v RS = -F: '/^# File/,/^# Finished Make data base/ {if ($$1 !~ "^[#.]") {print $$1}}' | sort | \
2021-07-15 14:17:15 -03:00
egrep -v -e '^[^[:alnum:]]' -e '^($(subst $(space),|,$(ALL_CONFIG_TARGETS)))$$' -e '_default$$' -e '^(Makefile)'
2016-09-17 20:44:45 -03:00
@echo
@echo " Or, $( MAKE) <config_target> [<make_target(s)>] "
@echo " Use ' $( MAKE) list_config_targets' for a list of configuration targets. "
# Print a list of all config targets.
list_config_targets :
2018-11-16 13:52:37 -04:00
@for targ in $( patsubst %_default,%[ _default] ,$( ALL_CONFIG_TARGETS) ) ; do echo $$ targ; done
2020-06-19 17:40:36 -03:00
check_nuttx : $( call make_list ,nuttx ) \
sizes
check_linux : $( call make_list ,linux ) \
sizes
check_px4 : $( call make_list ,nuttx ,"px 4") \
sizes
check_nxp : $( call make_list ,nuttx ,"nxp ") \
sizes
2021-07-24 14:38:38 -03:00
i f n e q ( $( ROS 2_WS_DIR ) , )
ROS2_WS_DIR := $( basename ${ ROS2_WS_DIR } )
e l s e
ROS2_WS_DIR := ~/colcon_ws
e n d i f
update_ros2_bridge :
@Tools/update_px4_ros2_bridge.sh --ws_dir ${ ROS2_WS_DIR } --all
update_px4_ros_com :
@Tools/update_px4_ros2_bridge.sh --ws_dir ${ ROS2_WS_DIR } --px4_ros_com
update_px4_msgs :
@Tools/update_px4_ros2_bridge.sh --ws_dir ${ ROS2_WS_DIR } --px4_msgs
2022-04-26 06:07:02 -03:00
.PHONY : failsafe_web run_failsafe_web_server
failsafe_web :
@if ! command -v emcc; then echo -e "Install emscripten first: https://emscripten.org/docs/getting_started/downloads.html\nAnd source the env: source <path>/emsdk_env.sh" ; exit 1; fi
@$( MAKE) --no-print-directory px4_sitl_default failsafe_test parameters_xml \
PX4_CMAKE_BUILD_TYPE = Release BUILD_DIR_SUFFIX = _failsafe_web \
CMAKE_ARGS = "-DCMAKE_CXX_COMPILER=em++ -DCMAKE_C_COMPILER=emcc"
run_failsafe_web_server : failsafe_web
@cd build/px4_sitl_default_failsafe_web && \
python3 -m http.server