6155bf82c8
Instead of exporting various variables (unintendedly making them available to the OpenWrt build, possibly bypassing .config), pass the environment only to commands that need it.
232 lines
6.0 KiB
Makefile
232 lines
6.0 KiB
Makefile
all:
|
|
|
|
LC_ALL:=C
|
|
LANG:=C
|
|
export LC_ALL LANG
|
|
|
|
.SHELLFLAGS = -ec
|
|
|
|
# check for spaces & resolve possibly relative paths
|
|
define mkabspath
|
|
ifneq (1,$(words [$($(1))]))
|
|
$$(error $(1) must not contain spaces)
|
|
endif
|
|
override $(1) := $(abspath $($(1)))
|
|
endef
|
|
|
|
escape = '$(subst ','\'',$(1))'
|
|
|
|
GLUON_SITEDIR ?= site
|
|
$(eval $(call mkabspath,GLUON_SITEDIR))
|
|
|
|
$(GLUON_SITEDIR)/site.mk:
|
|
$(error No site configuration was found. Please check out a site configuration to $(GLUON_SITEDIR))
|
|
|
|
include $(GLUON_SITEDIR)/site.mk
|
|
|
|
GLUON_RELEASE ?= $(error GLUON_RELEASE not set. GLUON_RELEASE can be set in site.mk or on the command line)
|
|
|
|
GLUON_DEPRECATED ?= $(error GLUON_DEPRECATED not set. Please consult the documentation)
|
|
|
|
# initialize (possibly already user set) directory variables
|
|
GLUON_TMPDIR ?= tmp
|
|
GLUON_OUTPUTDIR ?= output
|
|
GLUON_IMAGEDIR ?= $(GLUON_OUTPUTDIR)/images
|
|
GLUON_PACKAGEDIR ?= $(GLUON_OUTPUTDIR)/packages
|
|
GLUON_TARGETSDIR ?= targets
|
|
GLUON_PATCHESDIR ?= patches
|
|
|
|
$(eval $(call mkabspath,GLUON_TMPDIR))
|
|
$(eval $(call mkabspath,GLUON_OUTPUTDIR))
|
|
$(eval $(call mkabspath,GLUON_IMAGEDIR))
|
|
$(eval $(call mkabspath,GLUON_PACKAGEDIR))
|
|
$(eval $(call mkabspath,GLUON_TARGETSDIR))
|
|
$(eval $(call mkabspath,GLUON_PATCHESDIR))
|
|
|
|
GLUON_MULTIDOMAIN ?= 0
|
|
GLUON_DEBUG ?= 0
|
|
|
|
GLUON_VARS = \
|
|
GLUON_RELEASE GLUON_REGION GLUON_MULTIDOMAIN GLUON_DEBUG GLUON_DEPRECATED GLUON_DEVICES \
|
|
GLUON_TARGETSDIR GLUON_PATCHESDIR GLUON_TMPDIR GLUON_IMAGEDIR GLUON_PACKAGEDIR \
|
|
GLUON_SITEDIR GLUON_RELEASE GLUON_BRANCH GLUON_LANGS BOARD SUBTARGET
|
|
|
|
unexport $(GLUON_VARS)
|
|
GLUON_ENV = $(foreach var,$(GLUON_VARS),$(var)=$(call escape,$($(var))))
|
|
|
|
show-release:
|
|
@echo '$(GLUON_RELEASE)'
|
|
|
|
|
|
update: FORCE
|
|
@
|
|
export $(GLUON_ENV)
|
|
scripts/update.sh
|
|
scripts/patch.sh
|
|
scripts/feeds.sh
|
|
|
|
update-patches: FORCE
|
|
@
|
|
export $(GLUON_ENV)
|
|
scripts/update.sh
|
|
scripts/update-patches.sh
|
|
scripts/patch.sh
|
|
|
|
update-feeds: FORCE
|
|
@$(GLUON_ENV) scripts/feeds.sh
|
|
|
|
|
|
GLUON_TARGETS :=
|
|
|
|
define GluonTarget
|
|
gluon_target := $(1)$$(if $(2),-$(2))
|
|
GLUON_TARGETS += $$(gluon_target)
|
|
GLUON_TARGET_$$(gluon_target)_BOARD := $(1)
|
|
GLUON_TARGET_$$(gluon_target)_SUBTARGET := $(2)
|
|
endef
|
|
|
|
include $(GLUON_TARGETSDIR)/targets.mk
|
|
|
|
|
|
OPENWRTMAKE = $(MAKE) -C openwrt
|
|
|
|
BOARD := $(GLUON_TARGET_$(GLUON_TARGET)_BOARD)
|
|
SUBTARGET := $(GLUON_TARGET_$(GLUON_TARGET)_SUBTARGET)
|
|
|
|
|
|
define CheckTarget
|
|
if [ -z '$(BOARD)' ]; then
|
|
echo 'Please set GLUON_TARGET to a valid target. Gluon supports the following targets:'
|
|
for target in $(GLUON_TARGETS); do
|
|
echo " * $$target"
|
|
done
|
|
exit 1
|
|
fi
|
|
endef
|
|
|
|
define CheckExternal
|
|
if [ ! -d openwrt ]; then
|
|
echo "You don't seem to have obtained the external repositories needed by Gluon; please call \`make update\` first!"
|
|
exit 1
|
|
fi
|
|
endef
|
|
|
|
define CheckSite
|
|
if ! GLUON_SITEDIR='$(GLUON_SITEDIR)' GLUON_SITE_CONFIG='$(1).conf' $(LUA) -e 'assert(dofile("scripts/site_config.lua")(os.getenv("GLUON_SITE_CONFIG")))'; then
|
|
echo 'Your site configuration ($(1).conf) did not pass validation
|
|
exit 1
|
|
fi
|
|
endef
|
|
|
|
list-targets: FORCE
|
|
@for target in $(GLUON_TARGETS); do
|
|
echo "$$target"
|
|
done
|
|
|
|
lint: lint-lua lint-sh
|
|
|
|
lint-lua: FORCE
|
|
@scripts/lint-lua.sh
|
|
|
|
lint-sh: FORCE
|
|
@scripts/lint-sh.sh
|
|
|
|
define merge_lists
|
|
$(1) :=
|
|
$(foreach pkg,$(2),
|
|
$(1) := $$(strip $$(filter-out -$$(patsubst -%,%,$(pkg)) $$(patsubst -%,%,$(pkg)),$$(value $(1))) $(pkg))
|
|
)
|
|
endef
|
|
|
|
define feature_packages
|
|
$(1) := $(shell scripts/features.sh '$(2)' || echo '__ERROR__')
|
|
endef
|
|
|
|
$(eval $(call merge_lists,GLUON_FEATURE_LIST_standard,$(GLUON_FEATURES) $(GLUON_FEATURES_standard)))
|
|
$(eval $(call merge_lists,GLUON_FEATURE_LIST_tiny,$(GLUON_FEATURES) $(GLUON_FEATURES_tiny)))
|
|
|
|
$(eval $(call feature_packages,GLUON_FEATURE_PACKAGES_standard,$(GLUON_FEATURE_LIST_standard)))
|
|
$(eval $(call feature_packages,GLUON_FEATURE_PACKAGES_tiny,$(GLUON_FEATURE_LIST_tiny)))
|
|
|
|
ifneq ($(filter __ERROR__,$(GLUON_FEATURES_standard) $(GLUON_FEATURES_tiny)),)
|
|
$(error Error while evaluating features)
|
|
endif
|
|
|
|
$(eval $(call merge_lists,GLUON_DEFAULT_PACKAGES,$(GLUON_DEFAULT_PACKAGES) $(GLUON_SITE_PACKAGES)))
|
|
$(eval $(call merge_lists,GLUON_CLASS_PACKAGES_standard,$(GLUON_FEATURE_PACKAGES_standard) $(GLUON_SITE_PACKAGES_standard)))
|
|
$(eval $(call merge_lists,GLUON_CLASS_PACKAGES_tiny,$(GLUON_FEATURE_PACKAGES_tiny) $(GLUON_SITE_PACKAGES_tiny)))
|
|
|
|
|
|
LUA := openwrt/staging_dir/hostpkg/bin/lua
|
|
|
|
$(LUA):
|
|
+@
|
|
|
|
$(CheckExternal)
|
|
|
|
[ -e openwrt/.config ] || $(OPENWRTMAKE) defconfig
|
|
$(OPENWRTMAKE) tools/install
|
|
$(OPENWRTMAKE) package/lua/host/compile
|
|
|
|
|
|
config: $(LUA) FORCE
|
|
+@
|
|
|
|
$(CheckExternal)
|
|
$(CheckTarget)
|
|
$(foreach conf,site $(patsubst $(GLUON_SITEDIR)/%.conf,%,$(wildcard $(GLUON_SITEDIR)/domains/*.conf)),\
|
|
$(call CheckSite,$(conf)); \
|
|
)
|
|
|
|
$(GLUON_ENV) \
|
|
$(LUA) scripts/target_config.lua '$(GLUON_TARGET)' '$(GLUON_DEFAULT_PACKAGES)' '$(GLUON_CLASS_PACKAGES_standard)' '$(GLUON_CLASS_PACKAGES_tiny)' \
|
|
> openwrt/.config
|
|
$(OPENWRTMAKE) defconfig
|
|
|
|
$(GLUON_ENV) \
|
|
$(LUA) scripts/target_config_check.lua '$(GLUON_TARGET)' '$(GLUON_DEFAULT_PACKAGES)' '$(GLUON_CLASS_PACKAGES_standard)' '$(GLUON_CLASS_PACKAGES_tiny)'
|
|
|
|
|
|
all: config
|
|
+@
|
|
$(GLUON_ENV) \
|
|
$(LUA) scripts/clean_output.lua
|
|
$(OPENWRTMAKE)
|
|
$(GLUON_ENV) \
|
|
$(LUA) scripts/copy_output.lua '$(GLUON_TARGET)'
|
|
|
|
clean download: config
|
|
+@$(OPENWRTMAKE) $@
|
|
|
|
dirclean: FORCE
|
|
+@
|
|
[ -e openwrt/.config ] || $(OPENWRTMAKE) defconfig
|
|
$(OPENWRTMAKE) dirclean
|
|
rm -rf $(GLUON_TMPDIR) $(GLUON_OUTPUTDIR)
|
|
|
|
manifest: $(LUA) FORCE
|
|
@
|
|
[ '$(GLUON_BRANCH)' ] || (echo 'Please set GLUON_BRANCH to create a manifest.'; false)
|
|
echo '$(GLUON_PRIORITY)' | grep -qE '^([0-9]*\.)?[0-9]+$$' || (echo 'Please specify a numeric value for GLUON_PRIORITY to create a manifest.'; false)
|
|
$(CheckExternal)
|
|
|
|
(
|
|
export $(GLUON_ENV)
|
|
echo 'BRANCH=$(GLUON_BRANCH)'
|
|
echo "DATE=$$($(LUA) scripts/rfc3339date.lua)"
|
|
echo 'PRIORITY=$(GLUON_PRIORITY)'
|
|
echo
|
|
for target in $(GLUON_TARGETS); do
|
|
$(LUA) scripts/generate_manifest.lua "$$target"
|
|
done
|
|
) > 'tmp/$(GLUON_BRANCH).manifest.tmp'
|
|
|
|
mkdir -p '$(GLUON_IMAGEDIR)/sysupgrade'
|
|
mv 'tmp/$(GLUON_BRANCH).manifest.tmp' '$(GLUON_IMAGEDIR)/sysupgrade/$(GLUON_BRANCH).manifest'
|
|
|
|
FORCE: ;
|
|
|
|
.PHONY: FORCE
|
|
.NOTPARALLEL:
|
|
.ONESHELL:
|