136 lines
3.4 KiB
Makefile
136 lines
3.4 KiB
Makefile
|
|
# Enforce the presence of the GIT repository
|
|
#
|
|
# We depend on our submodules, so we have to prevent attempts to
|
|
# compile without it being present.
|
|
ifeq ($(wildcard .git),)
|
|
$(error YOU HAVE TO USE GIT TO DOWNLOAD THIS REPOSITORY. ABORTING.)
|
|
endif
|
|
|
|
|
|
# explicity set default build target
|
|
all: linux
|
|
|
|
# Parsing
|
|
# --------------------------------------------------------------------
|
|
# assume 1st argument passed is the main target, the
|
|
# rest are arguments to pass to the makefile generated
|
|
# by cmake in the subdirectory
|
|
FIRST_ARG := $(firstword $(MAKECMDGOALS))
|
|
ARGS := $(wordlist 2,$(words $(MAKECMDGOALS)),$(MAKECMDGOALS))
|
|
j ?= 4
|
|
|
|
NINJA_BIN := ninja
|
|
ifndef NO_NINJA_BUILD
|
|
NINJA_BUILD := $(shell $(NINJA_BIN) --version 2>/dev/null)
|
|
|
|
ifndef NINJA_BUILD
|
|
NINJA_BIN := ninja-build
|
|
NINJA_BUILD := $(shell $(NINJA_BIN) --version 2>/dev/null)
|
|
endif
|
|
endif
|
|
|
|
ifdef NINJA_BUILD
|
|
PX4_CMAKE_GENERATOR := Ninja
|
|
PX4_MAKE := $(NINJA_BIN)
|
|
|
|
ifdef VERBOSE
|
|
PX4_MAKE_ARGS := -v
|
|
else
|
|
PX4_MAKE_ARGS :=
|
|
endif
|
|
else
|
|
ifdef SYSTEMROOT
|
|
# Windows
|
|
PX4_CMAKE_GENERATOR := "MSYS\ Makefiles"
|
|
else
|
|
PX4_CMAKE_GENERATOR := "Unix\ Makefiles"
|
|
endif
|
|
PX4_MAKE = $(MAKE)
|
|
PX4_MAKE_ARGS = -j$(j) --no-print-directory
|
|
endif
|
|
|
|
CMAKE_BUILD_TYPE ?= RelWithDebInfo
|
|
|
|
SRC_DIR := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
|
|
|
|
# Functions
|
|
# --------------------------------------------------------------------
|
|
# describe how to build a cmake config
|
|
define cmake-build
|
|
+@$(eval BUILD_DIR = $(SRC_DIR)/build/$@$(BUILD_DIR_SUFFIX))
|
|
+@if [ $(PX4_CMAKE_GENERATOR) = "Ninja" ] && [ -e $(BUILD_DIR)/Makefile ]; then rm -rf $(BUILD_DIR); fi
|
|
+@if [ ! -e $(BUILD_DIR)/CMakeCache.txt ]; then mkdir -p $(BUILD_DIR) && cd $(BUILD_DIR) && cmake $(2) -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -G"$(PX4_CMAKE_GENERATOR)" -DQT_MKSPEC=$(1) || (rm -rf $(BUILD_DIR)); fi
|
|
+@(cd $(BUILD_DIR) && $(PX4_MAKE) $(PX4_MAKE_ARGS) $(ARGS))
|
|
endef
|
|
|
|
|
|
# Qt mkspec
|
|
# android_armv7 android_x86 gcc_64
|
|
|
|
gcc_64:
|
|
$(call cmake-build,$@,$(SRC_DIR))
|
|
|
|
android_armv7:
|
|
$(call cmake-build,$@,$(SRC_DIR))
|
|
|
|
android_x86:
|
|
$(call cmake-build,$@,$(SRC_DIR))
|
|
|
|
clang_64:
|
|
$(call cmake-build,$@,$(SRC_DIR))
|
|
|
|
xcode:
|
|
@mkdir -p build/xcode; cd build/xcode; cmake -GXcode -DCMAKE_BUILD_TYPE=RelWithDebInfo $(SRC_DIR)
|
|
|
|
linux: gcc_64
|
|
|
|
android: android_armv7
|
|
|
|
mac: clang_64
|
|
|
|
|
|
# Astyle
|
|
# --------------------------------------------------------------------
|
|
.PHONY: check_format format
|
|
|
|
check_format:
|
|
$(call colorecho,"Checking formatting with astyle")
|
|
@$(SRC_DIR)/Tools/astyle/check_code_style_all.sh
|
|
@cd $(SRC_DIR) && git diff --check
|
|
|
|
format:
|
|
$(call colorecho,"Formatting with astyle")
|
|
@$(SRC_DIR)/Tools/astyle/check_code_style_all.sh --fix
|
|
|
|
# Testing
|
|
# --------------------------------------------------------------------
|
|
.PHONY: tests tests_coverage
|
|
|
|
tests:
|
|
|
|
tests_coverage:
|
|
|
|
# Cleanup
|
|
# --------------------------------------------------------------------
|
|
.PHONY: clean submodulesclean submodulesupdate distclean
|
|
|
|
clean:
|
|
@rm -rf $(SRC_DIR)/build
|
|
|
|
submodulesclean:
|
|
@git submodule foreach --quiet --recursive git clean -ff -x -d
|
|
@git submodule update --quiet --init --recursive --force || true
|
|
@git submodule sync --recursive
|
|
@git submodule update --init --recursive --force
|
|
|
|
submodulesupdate:
|
|
@git submodule update --quiet --init --recursive || true
|
|
@git submodule sync --recursive
|
|
@git submodule update --init --recursive
|
|
|
|
distclean:
|
|
@git submodule deinit -f .
|
|
@git clean -ff -x -d -e ".project" -e ".cproject" -e ".idea" -e ".settings" -e ".vscode"
|
|
|