Maxim Integrated's IoT development kit.

Dependencies:   MAX30101 MAX30003 MAX113XX_Pixi MAX30205 max32630fthr USBDevice

Makefile

Committer:
Mahir Ozturk
Date:
2018-03-15
Revision:
2:68ffd74e3b5c
Parent:
1:efe9cad8942f

File content as of revision 2:68ffd74e3b5c:

#/******************************************************************************
# * Copyright (C) 2018 Maxim Integrated Products, Inc., All rights Reserved.
# * 
# * This software is protected by copyright laws of the United States and
# * of foreign countries. This material may also be protected by patent laws
# * and technology transfer regulations of the United States and of foreign
# * countries. This software is furnished under a license agreement and/or a
# * nondisclosure agreement and may only be used or reproduced in accordance
# * with the terms of those agreements. Dissemination of this information to
# * any party or parties not specified in the license agreement and/or
# * nondisclosure agreement is expressly prohibited.
# *
# * The above copyright notice and this permission notice shall be included
# * in all copies or substantial portions of the Software.
# *
# * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
# * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
# * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
# * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
# * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
# * OTHER DEALINGS IN THE SOFTWARE.
# *
# * Except as contained in this notice, the name of Maxim Integrated
# * Products, Inc. shall not be used except as stated in the Maxim Integrated
# * Products, Inc. Branding Policy.
# *
# * The mere transfer of this software does not imply any licenses
# * of trade secrets, proprietary technology, copyrights, patents,
# * trademarks, maskwork rights, or any other form of intellectual
# * property whatsoever. Maxim Integrated Products, Inc. retains all
# * ownership rights.
# ******************************************************************************
# */

PROJECT_PATH=$(realpath ./)
PROJECT_NAME=$(shell basename $(realpath ./))
PROJECT_BUILD_PATH=$(realpath BUILD/)
PROJECT_TOOLS_PATH=$(realpath tools/)
PROJECT_CONFIGS_PATH=$(realpath configs/)
PROJECT_TOOLCHAIN=GCC_ARM
PROJECT_SCM_BRANCH=$(shell git rev-parse --abbrev-ref HEAD)
PROJECT_SCM_HASH=$(shell git rev-parse HEAD)
-include .config

EXTERNAL_SOURCES += mbed-os
EXTERNAL_SOURCES += USBDevice
PROJECT_SOURCES += $(wildcard *.cpp)
PROJECT_SOURCES += $(wildcard *.h)

## BEGIN PLATFORM ##
ifeq ($(CONFIG_PLATFORM_MAX32600MBED), y)
CONFIG_FLAGS += PLATFORM_MAX32600MBED
CONFIG_PLATFORM_NAME=MAX32600MBED

else ifeq ($(CONFIG_PLATFORM_MAX32625MBED), y)
CONFIG_FLAGS += PLATFORM_MAX32625MBED
CONFIG_PLATFORM_NAME=MAX32625MBED
PROJECT_SOURCES += max32625mbed

else ifeq ($(CONFIG_PLATFORM_MAX32630FTHR), y)
CONFIG_FLAGS += PLATFORM_MAX32630FTHR
CONFIG_PLATFORM_NAME=MAX32630FTHR
EXTERNAL_SOURCES += max32630fthr

else ifeq ($(CONFIG_PLATFORM_MAX32625PICO), y)
CONFIG_FLAGS += PLATFORM_MAX32625PICO
CONFIG_PLATFORM_NAME=MAX32625PICO

else
$(warning NO MAXIM PLATFORM SELECTED)
endif
CONFIG_FLAGS += MAXIM_PLATFORM_NAME=\"$(CONFIG_MAXIM_PLATFORM_NAME)\"
## END PLATFORM ##

## BEGIN Maxim IoT Platform ##
ifeq ($(CONFIG_BLE_SUPPORT), y)
CONFIG_FLAGS += BLE_SUPPORT
endif

ifeq ($(CONFIG_LIBRARY_MAX30205), y)
CONFIG_FLAGS += LIB_MAX30205
ifeq ($(CONFIG_BLE_SUPPORT), y)
CONFIG_FLAGS += MAX30205_BLE_NOTIFY_PERIOD_SEC=$(CONFIG_MAX30205_BLE_NOTIFY_PERIOD_SEC)
endif
PROJECT_SOURCES += MAX30205
endif

ifeq ($(CONFIG_LIBRARY_MAX113XX_PIXI), y)
CONFIG_FLAGS += LIB_MAX113XX_PIXI
ifeq ($(CONFIG_BLE_SUPPORT), y)
CONFIG_FLAGS += MAX113XX_PIXI_BLE_NOTIFY_PERIOD_SEC=$(CONFIG_MAX113XX_PIXI_BLE_NOTIFY_PERIOD_SEC)
endif
PROJECT_SOURCES += MAX113XX_Pixi
endif

ifeq ($(CONFIG_LIBRARY_MAX30003), y)
CONFIG_FLAGS += LIB_MAX30003
ifeq ($(CONFIG_BLE_SUPPORT), y)
CONFIG_FLAGS += MAX30003_BLE_NOTIFY_PERIOD_SEC=$(CONFIG_MAX30003_BLE_NOTIFY_PERIOD_SEC)
endif
PROJECT_SOURCES += MAX30003
endif

ifeq ($(CONFIG_LIBRARY_MAX30101), y)
CONFIG_FLAGS += LIB_MAX30101
ifeq ($(CONFIG_BLE_SUPPORT), y)
CONFIG_FLAGS += MAX30101_BLE_NOTIFY_PERIOD_SEC=$(CONFIG_MAX30101_BLE_NOTIFY_PERIOD_SEC)
endif
PROJECT_SOURCES += MAX30101
endif
## END Maxim IoT Platform ##

## BEGIN MEMORY DEBUG ##
ifeq ($(CONFIG_ENABLE_MEMORY_DEBUG), y)
CONFIG_FLAGS += ENABLE_MEMORY_DEBUG
endif

ifeq ($(CONFIG_MBED_HEAP_STATS_ENABLED), y)
CONFIG_FLAGS += MBED_HEAP_STATS_ENABLED
endif

ifeq ($(CONFIG_MBED_MEM_TRACING_ENABLED), y)
CONFIG_FLAGS += MBED_MEM_TRACING_ENABLED
endif

ifeq ($(CONFIG_MBED_STACK_STATS_ENABLED), y)
CONFIG_FLAGS += MBED_STACK_STATS_ENABLED
endif
## END MEMORY DEBUG ##

ifeq ($(V), 1)
BUILD_VERBOSE = -v
endif

SRC_ARGS += $(addprefix --source $(PROJECT_PATH)/, $(EXTERNAL_SOURCES))
SRC_ARGS += $(addprefix --source $(PROJECT_PATH)/, $(PROJECT_SOURCES))
CFG_ARGS = $(addprefix -D, $(CONFIG_FLAGS))

$(info SELECTED_CONFIG=$(CONFIG_CONFIG_NAME))
$(info CONFIG_PLATFORM_NAME=$(CONFIG_PLATFORM_NAME) CONFIG_MAXIM_PLATFORM_NAME=$(CONFIG_MAXIM_PLATFORM_NAME) CONFIG_FLAGS=$(CONFIG_FLAGS))
$(info PROJECT_SOURCES=$(PROJECT_SOURCES))
$(info EXTERNAL_SOURCES=$(EXTERNAL_SOURCES))
$(info PROJECT_SCM=$(PROJECT_SCM_BRANCH) ($(PROJECT_SCM_HASH)))


## BEGIN MAKEFILE RULES ##
all: pre_build	## Build the project. This will also call checkout rule if it is not called before
	@if [ -f $(CONFIG_CONFIG_NAME) ]; then \
		printf "NO CONFIG SELECTED!\n"; \
		exit 1; \
	fi;
	@if [ ! -f .checkout ]; then \
		$(MAKE) checkout ; \
	fi;
	mbed compile -t $(PROJECT_TOOLCHAIN) -m $(CONFIG_PLATFORM_NAME) $(BUILD_VERBOSE) $(CFG_ARGS) $(SRC_ARGS)

debug_build:
	mbed compile -t $(PROJECT_TOOLCHAIN) -m $(CONFIG_PLATFORM_NAME) $(BUILD_VERBOSE) $(CFG_ARGS) $(SRC_ARGS) --profile $(PROJECT_PATH)/mbed-os/tools/profiles/debug.json

clean_build:
	mbed compile -t $(PROJECT_TOOLCHAIN) -m $(CONFIG_PLATFORM_NAME) -c $(BUILD_VERBOSE) $(CFG_ARGS) $(SRC_ARGS)

clean:	## Clean the project
	rm -rf $(PROJECT_BUILD_PATH)

menuconfig:	## If you want to make changes on config file for your board
	${PROJECT_TOOLS_PATH}/windows_kconfig/kconfig-mconf.exe Kconfig

run:	## If your mbed device is connected, this will run the project on the device
	python ${PROJECT_TOOLS_PATH}/mbed_run.py ${PROJECT_BUILD_PATH}/${CONFIG_PLATFORM_NAME}/$(PROJECT_TOOLCHAIN)/mbed-os.bin

checkout:		## Checkout necessary mbed libraries for your configuration.
	@echo "Downloading libraries"
	mbed deploy
	@touch .$@

selectconfig.%:	## Select available config. Avilable configs are under <project_dir>/configs directory
	@if [ -f $(PROJECT_CONFIGS_PATH)/$(word 2,$(subst ., ,$@)).config ]; then \
		cp $(PROJECT_CONFIGS_PATH)/$(word 2,$(subst ., ,$@)).config $(PROJECT_PATH)/.config; \
		printf "\n$(word 2,$(subst ., ,$@)).config selected\n"; \
	else \
		printf "\nConfig [$(word 2,$(subst ., ,$@))] is not found!\n"; \
		printf "Available configs are:\n\n"; \
		ls $(PROJECT_CONFIGS_PATH) | cut -d "." -f 1; \
		printf "\n"; \
	fi;

gnuarmeclipse:	## Create projects files for eclipse
		mbed export --ide gnuarmeclipse -m $(CONFIG_PLATFORM_NAME)

saveconfig:	## Save your current configuration to <project_dir>/configs directory
	cp $(PROJECT_PATH)/.config $(PROJECT_CONFIGS_PATH)/$(CONFIG_CONFIG_NAME).config

staticcheck:	## Consecutively run RATS-2.4, Cppcheck-1.78 and VisualCodeGrepper-2.1.0 static code analyzers
	@printf "\n\nRATS-2.4 Staic Analyzer\n"
	@printf "=========== BEGIN =============\n"
	${PROJECT_TOOLS_PATH}/Rats-2.4/rats.exe --quiet -w 3 --db ${PROJECT_TOOLS_PATH}/Rats-2.4/rats-c.xml $(PROJECT_SOURCES)
	@printf "============ END ==============\n"
	@printf "\n\nCppcheck-1.78 Static Analyzer\n"
	@printf "=========== BEGIN =============\n"
	${PROJECT_TOOLS_PATH}/Cppcheck-1.78/cppcheck.exe -q --enable=all --force $(PROJECT_SOURCES)
	@printf "============ END ==============\n"
	@printf "\n\nVisualCodeGrepper-2.1.0 Static Analyzer\n"
	@printf "=========== BEGIN =============\n"
	@cd ${PROJECT_TOOLS_PATH}/VisualCodeGrepper-2.1.0; \
	for src in $(PROJECT_SOURCES) ; do \
		${PROJECT_TOOLS_PATH}/VisualCodeGrepper-2.1.0/VisualCodeGrepper.exe -c -t $(PROJECT_PATH)/$$src -r $(PROJECT_PATH)/.tmp_VCG_step.txt ; \
		echo "" >> $(PROJECT_PATH)/.tmp_VCG_result.txt ; \
		echo "$$src:" >> $(PROJECT_PATH)/.tmp_VCG_result.txt ; \
		cat $(PROJECT_PATH)/.tmp_VCG_step.txt >> $(PROJECT_PATH)/.tmp_VCG_result.txt ; \
		rm -rf $(PROJECT_PATH)/.tmp_VCG_step.txt ;\
	done ; \
	cat $(PROJECT_PATH)/.tmp_VCG_result.txt ; \
	rm -rf $(PROJECT_PATH)/.tmp_VCG_result.txt
	@printf "============ END ==============\n"

doxygen:	## Generate and open Doxygen API documentation
	mkdir -p $(PROJECT_BUILD_PATH)
	export PROJECT_SOURCES="$(PROJECT_SOURCES)"; \
	export PROJECT_SCM_HASH="$(PROJECT_SCM_HASH)"; \
	doxygen doxygen.conf
	start $(PROJECT_BUILD_PATH)/doc/html/index.html

astyle:	## Run Astyle source code formatter.
	${PROJECT_TOOLS_PATH}/AStyle_3.0.1_windows/bin/AStyle.exe --dry-run --options=${PROJECT_TOOLS_PATH}/AStyle_3.0.1_windows/file/custom.ini $(wildcard $(PROJECT_SOURCES)*.) $(wildcard $(PROJECT_SOURCES)/*) $(wildcard $(PROJECT_SOURCES)/*/*)

pre_build:
	@echo "#ifndef __BUILD_VERSION_H__" > build_version.h
	@echo "#define __BUILD_VERSION_H__" >> build_version.h
	@echo "#define BUILD_SOURCE_BRANCH \"$(PROJECT_SCM_BRANCH)\"" >> build_version.h
	@echo "#define BUILD_SOURCE_HASH \"$(PROJECT_SCM_HASH)\"" >> build_version.h
	@echo "#endif" >> build_version.h

help:	## Display this help text
	@echo 'usage: make [target] ...'
	@echo ''
	@echo 'targets:'
	@echo 'all            Build the project. This will also call checkout rule if it is not called before'
	@echo 'astyle         Run Astyle source code formatter'
	@echo 'checkout       Checkout necessary mbed libraries for your configuration'
	@echo 'clean          Clean the project'
	@echo 'doxygen        Generate and open Doxygen API documentation'
	@echo 'gnuarmeclipse  Create projects files for eclipse'
	@echo 'help           Display this help text'
	@echo 'menuconfig     If you want to make changes on config file for your board'
	@echo 'run            If your mbed device is connected, this will run the project on the device'
	@echo 'saveconfig     Save your current configuration to <project_dir>/configs directory'
	@echo 'staticcheck    Consecutively run RATS-2.4, Cppcheck-1.78 and VisualCodeGrepper-2.1.0 static code analyzers'

## END MAKEFILE RULES ##