summaryrefslogtreecommitdiffstats
path: root/src/template.d/autobuild/linux/autobuild.in
diff options
context:
space:
mode:
authorScott Murray <scott.murray@konsulko.com>2020-06-09 17:27:32 -0400
committerScott Murray <scott.murray@konsulko.com>2020-06-09 17:27:32 -0400
commitdc06c9d93176db61ab9f979ef4d8105f99e102ad (patch)
tree121028efa1a87f1272030a893b3b3dac3c781090 /src/template.d/autobuild/linux/autobuild.in
parent811548a29224705c5c228ae9d66bb5b8e61b1d23 (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/linux/autobuild.in')
-rwxr-xr-xsrc/template.d/autobuild/linux/autobuild.in179
1 files changed, 77 insertions, 102 deletions
diff --git a/src/template.d/autobuild/linux/autobuild.in b/src/template.d/autobuild/linux/autobuild.in
index 7816b3d..16181b8 100755
--- a/src/template.d/autobuild/linux/autobuild.in
+++ b/src/template.d/autobuild/linux/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