buildsystem: allow building custom buildtypes
This adds GLUON_BUILDTYPE, which is an option that allows specifying an alternate base configuration Other additions: - GLUON_PREFIX option to specify the filename prefix, if VERSION_DIST is set - Skip gluon target-definitions if TARGET_ALL_PROFILES is set - Allow overriding any file in targets/ by adding the file to site/ - Allow loading the original file using include_gluon() from gluon
This commit is contained in:
parent
1780bafafc
commit
e5be1a6b76
4
Makefile
4
Makefile
@ -45,6 +45,7 @@ GLUON_PACKAGEDIR ?= $(GLUON_OUTPUTDIR)/packages
|
||||
GLUON_DEBUGDIR ?= $(GLUON_OUTPUTDIR)/debug
|
||||
GLUON_TARGETSDIR ?= targets
|
||||
GLUON_PATCHESDIR ?= patches
|
||||
GLUON_PREFIX ?= openwrt
|
||||
|
||||
$(eval $(call mkabspath,GLUON_TMPDIR))
|
||||
$(eval $(call mkabspath,GLUON_OUTPUTDIR))
|
||||
@ -60,6 +61,7 @@ GLUON_MULTIDOMAIN ?= 0
|
||||
GLUON_AUTOREMOVE ?= 0
|
||||
GLUON_DEBUG ?= 0
|
||||
GLUON_MINIFY ?= 1
|
||||
GLUON_BUILDTYPE ?= gluon
|
||||
|
||||
# Can be overridden via environment/command line/... to use the Gluon
|
||||
# build system for non-Gluon builds
|
||||
@ -71,7 +73,7 @@ GLUON_VARS = \
|
||||
GLUON_VERSION GLUON_SITE_VERSION \
|
||||
GLUON_RELEASE GLUON_REGION GLUON_MULTIDOMAIN GLUON_AUTOREMOVE GLUON_DEBUG GLUON_MINIFY GLUON_DEPRECATED \
|
||||
GLUON_DEVICES GLUON_TARGETSDIR GLUON_PATCHESDIR GLUON_TMPDIR GLUON_IMAGEDIR GLUON_PACKAGEDIR GLUON_DEBUGDIR \
|
||||
GLUON_SITEDIR GLUON_AUTOUPDATER_BRANCH GLUON_AUTOUPDATER_ENABLED GLUON_LANGS GLUON_BASE_FEEDS \
|
||||
GLUON_SITEDIR GLUON_BUILDTYPE GLUON_AUTOUPDATER_BRANCH GLUON_AUTOUPDATER_ENABLED GLUON_LANGS GLUON_BASE_FEEDS GLUON_PREFIX \
|
||||
GLUON_TARGET BOARD SUBTARGET
|
||||
|
||||
unexport $(GLUON_VARS)
|
||||
|
@ -35,7 +35,7 @@ lib.include(target)
|
||||
|
||||
local function image_source(image)
|
||||
return string.format(
|
||||
'openwrt/bin/targets/%s/openwrt-%s-%s%s%s',
|
||||
'openwrt/bin/targets/%s/' .. (env.GLUON_PREFIX or 'openwrt') .. '-%s-%s%s%s',
|
||||
bindir, openwrt_target, image.name, image.in_suffix, image.extension)
|
||||
end
|
||||
|
||||
|
@ -174,13 +174,16 @@ local function get_default_pkgs()
|
||||
end
|
||||
|
||||
lib.include('generic')
|
||||
lib.include('generic_' .. env.GLUON_BUILDTYPE)
|
||||
lib.include(target)
|
||||
|
||||
lib.check_devices()
|
||||
|
||||
handle_target_pkgs(concat_list(get_default_pkgs(), lib.target_packages))
|
||||
|
||||
for _, dev in ipairs(lib.devices) do
|
||||
-- the if condition in ipairs checks if a user-configured target is
|
||||
-- trying to build all devices, in which case specific gluon target-definitions are skipped
|
||||
for _, dev in ipairs(lib.configs.TARGET_ALL_PROFILES and {} or lib.devices) do
|
||||
local device_pkgs = {}
|
||||
local function handle_pkgs(pkgs)
|
||||
for _, pkg in ipairs(pkgs) do
|
||||
@ -192,9 +195,14 @@ for _, dev in ipairs(lib.devices) do
|
||||
end
|
||||
|
||||
handle_pkgs(lib.target_packages)
|
||||
handle_pkgs(class_packages(dev.options.class))
|
||||
handle_pkgs(dev.options.packages or {})
|
||||
|
||||
if env.GLUON_BUILDTYPE == 'gluon' then
|
||||
handle_pkgs(class_packages(dev.options.class))
|
||||
handle_pkgs(site_packages(dev.image))
|
||||
else
|
||||
handle_pkgs(lib.target_class_packages[dev.options.class] or {})
|
||||
end
|
||||
|
||||
local profile_config = string.format('%s_DEVICE_%s', openwrt_config_target, dev.name)
|
||||
lib.config(
|
||||
|
@ -25,6 +25,7 @@ M.site_code = assert(
|
||||
dofile('scripts/site_config.lua')('site.conf').site_code, 'site_code missing in site.conf'
|
||||
)
|
||||
M.target_packages = {}
|
||||
M.target_class_packages = {}
|
||||
M.configs = {}
|
||||
M.devices = {}
|
||||
M.images = {}
|
||||
@ -202,6 +203,17 @@ function F.packages(pkgs)
|
||||
end
|
||||
M.packages = F.packages
|
||||
|
||||
function F.class_packages(target, pkgs)
|
||||
if not M.target_class_packages[target] then
|
||||
M.target_class_packages[target] = {}
|
||||
end
|
||||
|
||||
for _, pkg in ipairs(pkgs) do
|
||||
table.insert(M.target_class_packages[target], pkg)
|
||||
end
|
||||
end
|
||||
M.class_packages = F.class_packages
|
||||
|
||||
local function as_table(v)
|
||||
if type(v) == 'table' then
|
||||
return v
|
||||
@ -270,12 +282,38 @@ function F.defaults(options)
|
||||
default_options = merge(default_options, options)
|
||||
end
|
||||
|
||||
local function load_and_assert(...)
|
||||
for _, path in ipairs(arg) do
|
||||
local fd = io.open(path, 'r')
|
||||
if fd ~= nil then
|
||||
fd:close()
|
||||
-- only assert if file exists. this allows trying multiple files.
|
||||
return assert(loadfile(path))
|
||||
end
|
||||
end
|
||||
|
||||
assert(nil)
|
||||
end
|
||||
|
||||
-- this function allows including target configurations from the first source
|
||||
-- that a file is found
|
||||
-- targets are loaded in the following order:
|
||||
-- - current working directory
|
||||
-- - site
|
||||
-- - gluon
|
||||
function F.include(name)
|
||||
local f = assert(loadfile(env.GLUON_TARGETSDIR .. '/' .. name))
|
||||
local f = load_and_assert('./' .. name, env.GLUON_SITEDIR .. '/' .. name, env.GLUON_TARGETSDIR .. '/' .. name)
|
||||
setfenv(f, funcs)
|
||||
return f()
|
||||
end
|
||||
|
||||
-- this function allows including target configurations from gluon
|
||||
-- can be used to include original targets via site, for example
|
||||
function F.include_gluon(name)
|
||||
local f = load_and_assert(env.GLUON_TARGETSDIR .. '/' .. name)
|
||||
setfenv(f, funcs)
|
||||
return f()
|
||||
end
|
||||
|
||||
function M.check_devices()
|
||||
local device_list = {}
|
||||
|
@ -1,26 +1,8 @@
|
||||
assert(env.GLUON_LANGS)
|
||||
|
||||
|
||||
config('GLUON_SITEDIR', env.GLUON_SITEDIR)
|
||||
config('GLUON_VERSION', env.GLUON_VERSION)
|
||||
config('GLUON_SITE_VERSION', env.GLUON_SITE_VERSION)
|
||||
config('GLUON_RELEASE', env.GLUON_RELEASE)
|
||||
|
||||
try_config('GLUON_AUTOUPDATER_BRANCH', env.GLUON_AUTOUPDATER_BRANCH)
|
||||
try_config('GLUON_AUTOUPDATER_ENABLED', istrue(env.GLUON_AUTOUPDATER_ENABLED))
|
||||
|
||||
for lang in string.gmatch(env.GLUON_LANGS, '%S+') do
|
||||
try_config('GLUON_WEB_LANG_' .. lang, true)
|
||||
end
|
||||
|
||||
config('TARGET_' .. env.BOARD, true)
|
||||
if env.SUBTARGET ~= '' then
|
||||
config(string.format('TARGET_%s_%s', env.BOARD, env.SUBTARGET), true)
|
||||
end
|
||||
|
||||
-- Disable non-default feeds in distfeeds.conf
|
||||
config('FEED_gluon_base', false)
|
||||
|
||||
local default_feeds = {}
|
||||
for feed in string.gmatch(exec_capture_raw('. scripts/default_feeds.sh && echo "$DEFAULT_FEEDS"'), '%S+') do
|
||||
default_feeds[feed] = true
|
||||
@ -32,51 +14,6 @@ for feed in string.gmatch(exec_capture_raw('. scripts/modules.sh && echo -n "$FE
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
config('TARGET_ROOTFS_INITRAMFS', false)
|
||||
|
||||
config('DEVEL', true)
|
||||
config('ALL_NONSHARED', true)
|
||||
|
||||
try_config('PACKAGE_usbip', false) -- fails to build
|
||||
|
||||
try_config('PACKAGE_ATH_DEBUG', true)
|
||||
|
||||
try_config('PACKAGE_dnsmasq_full_dhcpv6', false)
|
||||
try_config('PACKAGE_dnsmasq_full_auth', false)
|
||||
try_config('PACKAGE_dnsmasq_full_ipset', false)
|
||||
try_config('PACKAGE_dnsmasq_full_nftset', false)
|
||||
try_config('PACKAGE_dnsmasq_full_conntrack', false)
|
||||
try_config('PACKAGE_dnsmasq_full_noid', false)
|
||||
try_config('PACKAGE_dnsmasq_full_broken_rtc', false)
|
||||
try_config('PACKAGE_dnsmasq_full_rtc', false)
|
||||
|
||||
try_config('TARGET_SQUASHFS_BLOCK_SIZE', 256)
|
||||
|
||||
config('KERNEL_PROC_STRIPPED', true)
|
||||
config('KERNEL_AIO', false)
|
||||
config('KERNEL_IO_URING', false)
|
||||
config('KERNEL_FHANDLE', false)
|
||||
config('KERNEL_FANOTIFY', false)
|
||||
config('KERNEL_CGROUPS', false)
|
||||
config('KERNEL_IP_MROUTE', false)
|
||||
config('KERNEL_IPV6_MROUTE', false)
|
||||
config('KERNEL_IPV6_SEG6_LWTUNNEL', false)
|
||||
config('SECCOMP', false)
|
||||
config('KERNEL_SECCOMP', false)
|
||||
-- kmod-mt7915e pulls in CONFIG_KERNEL_RELAY
|
||||
-- use try_config, so enabling the package is still possible
|
||||
try_config('PACKAGE_kmod-mt7915e', false)
|
||||
|
||||
config('COLLECT_KERNEL_DEBUG', true)
|
||||
|
||||
config('TARGET_MULTI_PROFILE', true)
|
||||
config('TARGET_PER_DEVICE_ROOTFS', true)
|
||||
|
||||
config('GLUON_MULTIDOMAIN', istrue(env.GLUON_MULTIDOMAIN))
|
||||
|
||||
config('AUTOREMOVE', istrue(env.GLUON_AUTOREMOVE))
|
||||
|
||||
if istrue(env.GLUON_DEBUG) then
|
||||
config('DEBUG', true)
|
||||
config('NO_STRIP', true)
|
||||
@ -85,24 +22,3 @@ if istrue(env.GLUON_DEBUG) then
|
||||
|
||||
try_config('TARGET_ROOTFS_PARTSIZE', 500)
|
||||
end
|
||||
|
||||
config('GLUON_MINIFY', istrue(env.GLUON_MINIFY))
|
||||
|
||||
packages {
|
||||
'-ca-bundle',
|
||||
'-dnsmasq',
|
||||
'-kmod-ipt-offload',
|
||||
'-kmod-nft-offload',
|
||||
'-libustream-wolfssl',
|
||||
'-libwolfssl',
|
||||
'-nftables',
|
||||
'-odhcpd-ipv6only',
|
||||
'-ppp',
|
||||
'-ppp-mod-pppoe',
|
||||
'-wpad-mini',
|
||||
'-wpad-basic',
|
||||
'-wpad-basic-wolfssl',
|
||||
'-firewall4',
|
||||
'gluon-core',
|
||||
'ip6tables-zz-legacy',
|
||||
}
|
||||
|
84
targets/generic_gluon
Normal file
84
targets/generic_gluon
Normal file
@ -0,0 +1,84 @@
|
||||
assert(env.GLUON_LANGS)
|
||||
|
||||
|
||||
config('GLUON_SITEDIR', env.GLUON_SITEDIR)
|
||||
config('GLUON_VERSION', env.GLUON_VERSION)
|
||||
config('GLUON_SITE_VERSION', env.GLUON_SITE_VERSION)
|
||||
config('GLUON_RELEASE', env.GLUON_RELEASE)
|
||||
|
||||
try_config('GLUON_AUTOUPDATER_BRANCH', env.GLUON_AUTOUPDATER_BRANCH)
|
||||
try_config('GLUON_AUTOUPDATER_ENABLED', istrue(env.GLUON_AUTOUPDATER_ENABLED))
|
||||
|
||||
for lang in string.gmatch(env.GLUON_LANGS, '%S+') do
|
||||
try_config('GLUON_WEB_LANG_' .. lang, true)
|
||||
end
|
||||
|
||||
-- Disable non-default feeds in distfeeds.conf
|
||||
config('FEED_gluon_base', false)
|
||||
|
||||
|
||||
config('TARGET_ROOTFS_INITRAMFS', false)
|
||||
|
||||
config('DEVEL', true)
|
||||
config('ALL_NONSHARED', true)
|
||||
|
||||
try_config('PACKAGE_usbip', false) -- fails to build
|
||||
|
||||
try_config('PACKAGE_ATH_DEBUG', true)
|
||||
|
||||
try_config('PACKAGE_dnsmasq_full_dhcpv6', false)
|
||||
try_config('PACKAGE_dnsmasq_full_auth', false)
|
||||
try_config('PACKAGE_dnsmasq_full_ipset', false)
|
||||
try_config('PACKAGE_dnsmasq_full_nftset', false)
|
||||
try_config('PACKAGE_dnsmasq_full_conntrack', false)
|
||||
try_config('PACKAGE_dnsmasq_full_noid', false)
|
||||
try_config('PACKAGE_dnsmasq_full_broken_rtc', false)
|
||||
try_config('PACKAGE_dnsmasq_full_rtc', false)
|
||||
|
||||
try_config('TARGET_SQUASHFS_BLOCK_SIZE', 256)
|
||||
|
||||
config('KERNEL_PROC_STRIPPED', true)
|
||||
config('KERNEL_AIO', false)
|
||||
config('KERNEL_IO_URING', false)
|
||||
config('KERNEL_FHANDLE', false)
|
||||
config('KERNEL_FANOTIFY', false)
|
||||
config('KERNEL_CGROUPS', false)
|
||||
config('KERNEL_IP_MROUTE', false)
|
||||
config('KERNEL_IPV6_MROUTE', false)
|
||||
config('KERNEL_IPV6_SEG6_LWTUNNEL', false)
|
||||
config('SECCOMP', false)
|
||||
config('KERNEL_SECCOMP', false)
|
||||
-- kmod-mt7915e pulls in CONFIG_KERNEL_RELAY
|
||||
-- use try_config, so enabling the package is still possible
|
||||
try_config('PACKAGE_kmod-mt7915e', false)
|
||||
|
||||
config('COLLECT_KERNEL_DEBUG', true)
|
||||
|
||||
config('TARGET_MULTI_PROFILE', true)
|
||||
config('TARGET_PER_DEVICE_ROOTFS', true)
|
||||
|
||||
config('GLUON_MULTIDOMAIN', istrue(env.GLUON_MULTIDOMAIN))
|
||||
|
||||
config('AUTOREMOVE', istrue(env.GLUON_AUTOREMOVE))
|
||||
|
||||
|
||||
config('GLUON_MINIFY', istrue(env.GLUON_MINIFY))
|
||||
|
||||
packages {
|
||||
'-ca-bundle',
|
||||
'-dnsmasq',
|
||||
'-kmod-ipt-offload',
|
||||
'-kmod-nft-offload',
|
||||
'-libustream-wolfssl',
|
||||
'-libwolfssl',
|
||||
'-nftables',
|
||||
'-odhcpd-ipv6only',
|
||||
'-ppp',
|
||||
'-ppp-mod-pppoe',
|
||||
'-wpad-mini',
|
||||
'-wpad-basic',
|
||||
'-wpad-basic-wolfssl',
|
||||
'-firewall4',
|
||||
'gluon-core',
|
||||
'ip6tables-zz-legacy',
|
||||
}
|
Loading…
Reference in New Issue
Block a user