summaryrefslogtreecommitdiffstats
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
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
-rwxr-xr-xdocs/dev_guide/autobuild.md34
-rwxr-xr-xsrc/template.d/autobuild/agl/autobuild.in179
-rwxr-xr-xsrc/template.d/autobuild/linux/autobuild.in179
3 files changed, 180 insertions, 212 deletions
diff --git a/docs/dev_guide/autobuild.md b/docs/dev_guide/autobuild.md
index 7eb09dd..ec1ece2 100755
--- a/docs/dev_guide/autobuild.md
+++ b/docs/dev_guide/autobuild.md
@@ -1,4 +1,4 @@
-# Autobuild
+# Autobuild
Applications based on the AGL framework should have a
full build and packaging solution that is independent of the
@@ -107,22 +107,40 @@ cmake .. && make autobuild
Following are the targets available from the **autobuild** script:
- **clean**: Removes all the object files and target results generated by Makefile.
-- **distclean**: Deletes the build directory.
-- **configure**: Generates the project Makefile from the `CMakeLists.txt` files.
-- **build**: Compiles all project targets.
-- **package**: Builds a widget (**wgt**) package.
-- **package-test**: Builds the test **wgt** package and the normal **wgt** package.
+- **clean-{release,debug,coverage,test}**: Removes all the object files and target results generated by Makefile for the specified build type.
+- **clean-all**: Deletes the build directories for all build types.
+- **distclean**: Deletes the build directories for all build types.
+- **configure**: Generates the project Makefile from the `CMakeLists.txt` files for the release build type.
+- **configure-{release,debug,coverage,test}**: Generates the project Makefile from the `CMakeLists.txt` files for the specified build type.
+- **build**: Compiles all project targets for the release build type.
+- **build-{release,debug,coverage,test}**: Compiles all project targets for the specified build type.
+- **build-all**: Compiles all project targets for all specified build types.
+- **package**: Builds the widget (**wgt**) package for the release build type.
+- **package-{release,debug,coverage}**: Builds the widget (**wgt**) package for the specified build type.
+- **package-test**: Builds the test **wgt** package.
+- **package-all**: Builds the widget (**wgt**) packages for all build types.
- **install**: Installs the project into your filesystem.
+Note that `aglwgt.bbclass` only will use the **package-{coverage,test}** targets (and thus the **build-{coverage,test}**, etc. targets) for service bindings by default, so **autobuild** scripts for applications may omit support for those.
+
Specifying the following variables lets you modify compilation behavior:
- **CLEAN_ARGS**: Variable used at **clean** time.
-- **DISTCLEAN_ARGS**: Variable used at **distclean** time.
- **CONFIGURE_ARGS**: Variable used at **configure** time.
- **BUILD_ARGS**: Variable used at **build** time.
-- **DEST**: Directory in which to place the created ***wgt*** file.
+- **BUILD_DIR**: Build directory for release type build.
+ The default value is a "build" directory in the root of the project.
+- **BUILD_DIR_DEBUG**: Build directory for debug type build.
+ The default value is a "build-debug" directory in the root of the project.
+- **BUILD_DIR_TEST**: Build directory for test type build.
+ The default value is a "build-test" directory in the root of the project.
+- **BUILD_DIR_COVERAGE**: Build directory for coverage type build.
+ The default value is a "build-coverage" directory in the root of the project.
+- **DEST**: Directory in which to place the created ***wgt*** file(s).
The default directory is the build root directory.
+Note that the values of **BUILD_DIR_{DEBUG,TEST,COVERAGE}** are defined based on the value of **BUILD_DIR**, so this needs to be kept in mind if over-riding it and building those other widget types.
+
When you provide a variable, use the CMake format (i.e.
BUILD_ARGS="-DC_FLAGS='-g -O2'").
Following is an example:
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
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