Skip to content
Snippets Groups Projects
Makefile 3.42 KiB
Newer Older
  • Learn to ignore specific revisions
  • 
    # 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"