diff options
author | Scott Murray <scott.murray@konsulko.com> | 2020-06-09 17:27:32 -0400 |
---|---|---|
committer | Scott Murray <scott.murray@konsulko.com> | 2020-06-09 17:27:32 -0400 |
commit | dc06c9d93176db61ab9f979ef4d8105f99e102ad (patch) | |
tree | 121028efa1a87f1272030a893b3b3dac3c781090 /src/template.d/autobuild/agl/autobuild.in | |
parent | 811548a29224705c5c228ae9d66bb5b8e61b1d23 (diff) |
Update autobuild script templatesjellyfish_9.99.1jellyfish/9.99.19.99.1
Update autobuild.in files with reworked version with the following
changes:
- Fixes for building outside of the source tree by over-riding
BUILD_DIR* (done by use of new ROOT_DIR variable).
- Rules simplified by use of static pattern rules and target specific
variables.
- package-test rule no longer builds the full widget, only the test
widget. This is a behavior change, but seems more in line with
developer expectations and avoids wasting time during builds from
AGL.
- package-{coverage,debug}-test rules removed for lack of utility.
- Variable usage switched to parentheses instead of braces to match
typical usage in Makefiles in other FOSS projects.
The autobuild documentation has also been updated to include the
previously added targets and BUILD_DIR* variables, and the description
of package-test has been updated for the behavior change mentioned
above.
Bug-AGL: SPEC-2049, SPEC-3300
Signed-off-by: Scott Murray <scott.murray@konsulko.com>
Change-Id: Ifaf0d59b9ee26bde6d27b8968e68f5dc84df548c
Diffstat (limited to 'src/template.d/autobuild/agl/autobuild.in')
-rwxr-xr-x | src/template.d/autobuild/agl/autobuild.in | 179 |
1 files changed, 77 insertions, 102 deletions
diff --git a/src/template.d/autobuild/agl/autobuild.in b/src/template.d/autobuild/agl/autobuild.in index 7816b3d..16181b8 100755 --- a/src/template.d/autobuild/agl/autobuild.in +++ b/src/template.d/autobuild/agl/autobuild.in @@ -1,5 +1,6 @@ #!/usr/bin/make -f # Copyright (C) 2015 - 2018 "IoT.bzh" +# Copyright (C) 2020 Konsulko Group # Author "Romain Forlot" <romain.forlot@iot.bzh> # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -15,139 +16,113 @@ # limitations under the License. THISFILE := $(lastword $(MAKEFILE_LIST)) -BUILD_DIR := $(abspath $(dir $(THISFILE))/../../build) -BUILD_DIR_TEST := $(abspath $(dir $(THISFILE))/../../build-test) -BUILD_DIR_DEBUG := $(abspath $(dir $(THISFILE))/../../build-debug) -BUILD_DIR_COVERAGE := $(abspath $(dir $(THISFILE))/../../build-coverage) -BUILD_DIR_DEBUG_TEST := $(abspath $(dir $(THISFILE))/../../build-debug-test) -BUILD_DIR_COVERAGE_TEST := $(abspath $(dir $(THISFILE))/../../build-coverage-test) -DEST := ${BUILD_DIR} - -.PHONY: all clean distclean configure build package help update configure-debug configure-coverage build-debug build-coverage package-test package-debug package-coverage package-debug package-debug-test package-coverage-test package-all -all: help +ROOT_DIR := $(abspath $(dir $(THISFILE))/../..) + +# Build directories +# Note that the debug/test/coverage directories are defined in relation +# to the release directory (BUILD_DIR), this needs to be kept in mind +# if over-riding it and building those widget types, the specific widget +# type variable (e.g. BUILD_DIR_DEBUG) may also need to be specified +# to yield the desired output hierarchy. +BUILD_DIR = $(ROOT_DIR)/build +BUILD_DIR_DEBUG = $(abspath $(BUILD_DIR)/../build-debug) +BUILD_DIR_TEST = $(abspath $(BUILD_DIR)/../build-test) +BUILD_DIR_COVERAGE = $(abspath $(BUILD_DIR)/../build-coverage) + +# Output directory variable for use in pattern rules. +# This is intended for internal use only, hence the explicit override +# definition. +override OUTPUT_DIR = $(BUILD_DIR) + +# Final install directory for widgets +DEST = $(OUTPUT_DIR) + +# Default build type for release/test builds +BUILD_TYPE = RELEASE + +.PHONY: all help update install distclean +.PHONY: clean clean-release clean-debug clean-test clean-coverage clean-all +.PHONY: configure configure-release configure-debug configure-test configure-coverage +.PHONY: build build-release build-debug build-test build-coverage build-all +.PHONY: package package-release package-debug package-test package-coverage package-all help: @echo "List of targets available:" @echo "" @echo "- all" + @echo "- help" @echo "- clean" @echo "- distclean" @echo "- configure" @echo "- build: compilation, link and prepare files for package into a widget" @echo "- package: output a widget file '*.wgt'" - @echo "- install: install in your ${CMAKE_INSTALL_DIR} directory" + @echo "- install: install in your $(CMAKE_INSTALL_DIR) directory" @echo "" @echo "Usage: ./autobuild/agl/autobuild package DEST=${HOME}/opt" @echo "Don't use your build dir as DEST as wgt file is generated at this location" -update: configure - @cmake --build ${BUILD_DIR} --target autobuild +all: package-all -clean: - @([ -d ${BUILD_DIR} ] && make -C ${BUILD_DIR} ${CLEAN_ARGS} clean) || echo Nothing to clean +# Target specific variable over-rides so static pattern rules can be +# used for the various type-specific targets. -distclean: - @rm -rf ${BUILD_DIR} +configure-test build-test package-test clean-test: OUTPUT_DIR = $(BUILD_DIR_TEST) -configure: - @[ -d ${BUILD_DIR} ] || mkdir -p ${BUILD_DIR} - @[ -f ${BUILD_DIR}/Makefile ] || (cd ${BUILD_DIR} && cmake -DCMAKE_BUILD_TYPE=RELEASE ${CONFIGURE_ARGS} ..) +configure-coverage build-coverage package-coverage clean-coverage: OUTPUT_DIR = $(BUILD_DIR_COVERAGE) +configure-coverage build-coverage package-coverage: BUILD_TYPE = COVERAGE -configure-test: - @[ -d ${BUILD_DIR_TEST} ] || mkdir -p ${BUILD_DIR_TEST} - @[ -f ${BUILD_DIR_TEST}/Makefile ] || (cd ${BUILD_DIR_TEST} && cmake -DCMAKE_BUILD_TYPE=RELEASE ${CONFIGURE_ARGS} ..) +configure-debug build-debug package-debug clean-debug: OUTPUT_DIR = $(BUILD_DIR_DEBUG) +configure-debug build-debug package-debug: BUILD_TYPE = DEBUG -configure-debug: - @[ -d ${BUILD_DIR_DEBUG} ] || mkdir -p ${BUILD_DIR_DEBUG} - @[ -f ${BUILD_DIR_DEBUG}/Makefile ] || (cd ${BUILD_DIR_DEBUG} && cmake -DCMAKE_BUILD_TYPE=DEBUG ${CONFIGURE_ARGS} ..) +clean-release clean-test clean-debug clean-coverage: + @if [ -d $(OUTPUT_DIR) ]; then \ + $(MAKE) -C $(OUTPUT_DIR) $(CLEAN_ARGS) clean; \ + else \ + echo Nothing to clean; \ + fi -configure-coverage: - @[ -d ${BUILD_DIR_COVERAGE} ] || mkdir -p ${BUILD_DIR_COVERAGE} - @[ -f ${BUILD_DIR_COVERAGE}/Makefile ] || (cd ${BUILD_DIR_COVERAGE} && cmake -DCMAKE_BUILD_TYPE=COVERAGE ${CONFIGURE_ARGS} ..) +clean: clean-release -build: configure - @cmake --build ${BUILD_DIR} ${BUILD_ARGS} --target all +clean-all: clean-release clean-test clean-debug clean-coverage -build-test: configure-test - @cmake --build ${BUILD_DIR_TEST} ${BUILD_ARGS} --target all - -build-debug: configure-debug - @cmake --build ${BUILD_DIR_DEBUG} ${BUILD_ARGS} --target all - -build-coverage: configure-coverage - @cmake --build ${BUILD_DIR} ${BUILD_ARGS} --target all - -package: build - @mkdir -p ${BUILD_DIR}/$@/bin - @mkdir -p ${BUILD_DIR}/$@/etc - @mkdir -p ${BUILD_DIR}/$@/lib - @mkdir -p ${BUILD_DIR}/$@/htdocs - @mkdir -p ${BUILD_DIR}/$@/var - @cmake --build ${BUILD_DIR} ${PACKAGE_ARGS} --target widget - @if [ "${DEST}" != "${BUILD_DIR}" ]; then \ - mkdir -p ${DEST} && cp ${BUILD_DIR}/*.wgt ${DEST}; \ - fi +distclean: clean-all -package-test: build-test - @mkdir -p ${BUILD_DIR_TEST}/$@/bin - @mkdir -p ${BUILD_DIR_TEST}/$@/etc - @mkdir -p ${BUILD_DIR_TEST}/$@/lib - @mkdir -p ${BUILD_DIR_TEST}/$@/htdocs - @mkdir -p ${BUILD_DIR_TEST}/$@/var - @cmake --build ${BUILD_DIR_TEST} ${PACKAGE_ARGS} --target widget - @cmake --build ${BUILD_DIR_TEST} ${PACKAGE_ARGS} --target test_widget - @if [ "${DEST}" != "${BUILD_DIR_TEST}" ]; then \ - mkdir -p ${DEST} && cp ${BUILD_DIR_TEST}/*.wgt ${DEST}; \ +configure-release configure-test configure-debug configure-coverage: + @mkdir -p $(OUTPUT_DIR) + @if [ ! -f $(OUTPUT_DIR)/Makefile ]; then \ + (cd $(OUTPUT_DIR) && cmake -S $(ROOT_DIR) -DCMAKE_BUILD_TYPE=$(BUILD_TYPE) $(CONFIGURE_ARGS)); \ fi -package-debug: build-debug - @mkdir -p ${BUILD_DIR_DEBUG}/$@/bin - @mkdir -p ${BUILD_DIR_DEBUG}/$@/etc - @mkdir -p ${BUILD_DIR_DEBUG}/$@/lib - @mkdir -p ${BUILD_DIR_DEBUG}/$@/htdocs - @mkdir -p ${BUILD_DIR_DEBUG}/$@/var - @cmake --build ${BUILD_DIR_DEBUG} ${PACKAGE_ARGS} --target widget - @if [ "${DEST}" != "${BUILD_DIR_DEBUG}" ]; then \ - mkdir -p ${DEST} && cp ${BUILD_DIR_DEBUG}/*.wgt ${DEST}; \ - fi +configure: configure-release + +build-release build-debug build-coverage: build-%: configure-% + @cmake --build $(OUTPUT_DIR) $(BUILD_ARGS) --target all -package-coverage: build-coverage - @mkdir -p ${BUILD_DIR_COVERAGE}/$@/bin - @mkdir -p ${BUILD_DIR_COVERAGE}/$@/etc - @mkdir -p ${BUILD_DIR_COVERAGE}/$@/lib - @mkdir -p ${BUILD_DIR_COVERAGE}/$@/htdocs - @mkdir -p ${BUILD_DIR_COVERAGE}/$@/var - @cmake --build ${BUILD_DIR_COVERAGE} ${PACKAGE_ARGS} --target widget - @if [ "${DEST}" != "${BUILD_DIR_COVERAGE}" ]; then \ - mkdir -p ${DEST} && cp ${BUILD_DIR_COVERAGE}/*.wgt ${DEST}; \ +# Kept for consistency, empty to avoid building everything for test widget +build-test: configure-test + +build: build-release + +build-all: build-release build-debug build-test build-coverage + +package-release package-debug package-coverage: package-%: build-% + @cmake --build $(OUTPUT_DIR) $(PACKAGE_ARGS) --target widget + @if [ "$(abspath $(DEST))" != "$(abspath $(OUTPUT_DIR))" ]; then \ + mkdir -p $(DEST) && cp $(OUTPUT_DIR)/*.wgt $(DEST); \ fi -package-coverage-test: build-coverage - @mkdir -p ${BUILD_DIR_COVERAGE_TEST}/$@/bin - @mkdir -p ${BUILD_DIR_COVERAGE_TEST}/$@/etc - @mkdir -p ${BUILD_DIR_COVERAGE_TEST}/$@/lib - @mkdir -p ${BUILD_DIR_COVERAGE_TEST}/$@/htdocs - @mkdir -p ${BUILD_DIR_COVERAGE_TEST}/$@/var - @cmake --build ${BUILD_DIR_COVERAGE_TEST} ${PACKAGE_ARGS} --target widget - @cmake --build ${BUILD_DIR_COVERAGE_TEST} ${PACKAGE_ARGS} --target test_widget - @if [ "${DEST}" != "${BUILD_DIR_COVERAGE_TEST}" ]; then \ - mkdir -p ${DEST} && cp ${BUILD_DIR_COVERAGE_TEST}/*.wgt ${DEST}; \ +package-test: build-test + @cmake --build $(OUTPUT_DIR) $(PACKAGE_ARGS) --target test_widget + @if [ "$(abspath $(DEST))" != "$(abspath $(OUTPUT_DIR))" ]; then \ + mkdir -p $(DEST) && cp $(OUTPUT_DIR)/*.wgt $(DEST); \ fi +package: package-release -package-debug-test: build-debug - @mkdir -p ${BUILD_DIR_DEBUG_TEST}/$@/bin - @mkdir -p ${BUILD_DIR_DEBUG_TEST}/$@/etc - @mkdir -p ${BUILD_DIR_DEBUG_TEST}/$@/lib - @mkdir -p ${BUILD_DIR_DEBUG_TEST}/$@/htdocs - @mkdir -p ${BUILD_DIR_DEBUG_TEST}/$@/var - @cmake --build ${BUILD_DIR_DEBUG_TEST} ${PACKAGE_ARGS} --target widget - @cmake --build ${BUILD_DIR_DEBUG_TEST} ${PACKAGE_ARGS} --target test_widget - @if [ "${DEST}" != "${BUILD_DIR_DEBUG_TEST}" ]; then \ - mkdir -p ${DEST} && cp ${BUILD_DIR_DEBUG_TEST}/*.wgt ${DEST}; \ - fi +package-all: package-release package-test package-coverage package-debug -package-all: package package-test package-coverage package-debug +update: configure + @cmake --build $(BUILD_DIR) --target autobuild install: build - @cmake --build ${BUILD_DIR} ${INSTALL_ARGS} --target install + @cmake --build $(BUILD_DIR) $(INSTALL_ARGS) --target install |