summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2021-07-22 23:59:56 +0800
committerruki <[email protected]>2021-07-22 23:59:56 +0800
commit161aae37144ebeba16c70956d30c0792de5fa328 (patch)
tree3557897e040da1d7820c83a85c9c5840ccaa1fbf
parent724a295b705555c329b1f8d89572892a74082386 (diff)
add set_defaultxxx
-rw-r--r--tests/apis/add_allowedxxx/xmake.lua11
-rw-r--r--xmake/actions/config/main.lua3
-rw-r--r--xmake/actions/config/menuconf.lua2
-rw-r--r--xmake/core/project/project.lua93
-rw-r--r--xmake/core/sandbox/modules/import/core/project/project.lua1
-rw-r--r--xmake/modules/private/detect/find_platform.lua4
6 files changed, 56 insertions, 58 deletions
diff --git a/tests/apis/add_allowedxxx/xmake.lua b/tests/apis/add_allowedxxx/xmake.lua
index 8db790ffa..e2f1f1ad9 100644
--- a/tests/apis/add_allowedxxx/xmake.lua
+++ b/tests/apis/add_allowedxxx/xmake.lua
@@ -1,9 +1,12 @@
add_rules("mode.debug", "mode.release")
-add_allowedmodes("releasedbg", "debug", {default = "releasedbg"})
-add_allowedplats("windows", "linux", "macosx", {default = "linux"})
-add_allowedarchs("arm64", "x86_64", {plat = "macosx", default = "x86_64"})
-add_allowedarchs("i386", {plat = "linux", default = "i386"})
+set_defaultmode("releasedbg")
+set_defaultplat("linux")
+set_defaultarchs("macosx|arm64", "linux|i386", "armv7")
+
+set_allowedmodes("releasedbg", "debug")
+set_allowedplats("windows", "linux", "macosx")
+set_allowedarchs("macosx|arm64", "macosx|x86_64", "linux|i386", "linux|x86_64")
target("test")
set_kind("binary")
diff --git a/xmake/actions/config/main.lua b/xmake/actions/config/main.lua
index b0cfb6fd6..e1095c509 100644
--- a/xmake/actions/config/main.lua
+++ b/xmake/actions/config/main.lua
@@ -195,8 +195,7 @@ end
function _find_default_mode()
local mode = config.mode()
if not mode then
- local _, defaultmode = project.allowed_modes()
- mode = defaultmode
+ mode = project.get("defaultmode")
if not mode then
mode = "release"
end
diff --git a/xmake/actions/config/menuconf.lua b/xmake/actions/config/menuconf.lua
index 7ab6f46dd..2f8706e4e 100644
--- a/xmake/actions/config/menuconf.lua
+++ b/xmake/actions/config/menuconf.lua
@@ -241,7 +241,7 @@ function app:_basic_configs(cache)
elseif name == "arch" then
_, default = find_platform()
elseif name == "mode" then
- _, default = project.allowed_modes()
+ default = project.get("defaultmode")
if not default then
default = "release"
end
diff --git a/xmake/core/project/project.lua b/xmake/core/project/project.lua
index 9d253b829..d2f8f7489 100644
--- a/xmake/core/project/project.lua
+++ b/xmake/core/project/project.lua
@@ -655,13 +655,13 @@ function project.apis()
, "set_allowedmodes"
, "set_allowedplats"
, "set_allowedarchs"
+ , "set_defaultmode"
+ , "set_defaultplat"
+ , "set_defaultarchs"
-- add_xxx
, "add_requires"
, "add_requireconfs"
, "add_repositories"
- , "add_allowedmodes"
- , "add_allowedplats"
- , "add_allowedarchs"
}
, paths =
{
@@ -1215,9 +1215,30 @@ function project.modes()
return table.unique(modes)
end
+-- get default architectures from the given platform
+--
+-- set_defaultarchs("linux|x86_64", "iphoneos|arm64")
+--
+function project.default_arch(plat)
+ local default_archs = project._memcache():get("defaultarchs")
+ if not default_archs then
+ default_archs = {}
+ for _, defaultarch in ipairs(table.wrap(project.get("defaultarchs"))) do
+ local splitinfo = defaultarch:split('|')
+ if #splitinfo == 2 then
+ default_archs[splitinfo[1]] = splitinfo[2]
+ elseif #splitinfo == 1 and not default_archs.default then
+ default_archs.default = defaultarch
+ end
+ end
+ project._memcache():set("defaultarchs", default_archs or false)
+ end
+ return default_archs[plat or "default"] or default_archs["default"]
+end
+
-- get allowed modes
--
--- add_allowedmodes("releasedbg", "debug", {default = "releasedbg"})
+-- set_allowedmodes("releasedbg", "debug")
--
function project.allowed_modes()
local allowed_modes_set = project._memcache():get("allowedmodes")
@@ -1228,24 +1249,12 @@ function project.allowed_modes()
end
project._memcache():set("allowedmodes", allowed_modes_set or false)
end
- local default_mode = project._memcache():get("allowedmodes.default")
- if not default_mode then
- local allowed_modes = table.wrap(project.get("allowedmodes"))
- for _, allowed_mode in ipairs(allowed_modes) do
- if project.extraconf("allowedmodes", allowed_mode, "default") == allowed_mode then
- default_mode = allowed_mode
- break
- end
- end
- project._memcache():set("allowedmodes.default", default_mode or false)
- end
- return allowed_modes_set or nil, default_mode or nil
+ return allowed_modes_set or nil
end
-- get allowed platforms
--
--- add_allowedplats("windows", "mingw", {default = "windows"})
--- add_allowedplats("windows", "mingw", "linux", "macosx")
+-- set_allowedplats("windows", "mingw", "linux", "macosx")
--
function project.allowed_plats()
local allowed_plats_set = project._memcache():get("allowedplats")
@@ -1256,54 +1265,40 @@ function project.allowed_plats()
end
project._memcache():set("allowedplats", allowed_plats_set or false)
end
- local default_plat = project._memcache():get("allowedplats.default")
- if not default_plat then
- local allowed_plats = table.wrap(project.get("allowedplats"))
- for _, allowed_plat in ipairs(allowed_plats) do
- if project.extraconf("allowedplats", allowed_plat, "default") == allowed_plat then
- default_plat = allowed_plat
- break
- end
- end
- project._memcache():set("allowedplats.default", default_plat or false)
- end
- return allowed_plats_set or nil, default_plat or nil
+ return allowed_plats_set or nil
end
-- get allowed architectures
--
--- add_allowedarchs("arm64", "x86_64", {plat = "macosx", default = "arm64"})
--- add_allowedarchs("i386", {plat = "linux"})
+-- set_allowedarchs("macosx|arm64", "macosx|x86_64", "linux|i386")
--
function project.allowed_archs(plat)
- local allowed_archs_set = project._memcache():get2("allowedarchs", plat or "")
+ plat = plat or ""
+ local allowed_archs_set = project._memcache():get2("allowedarchs", plat)
if not allowed_archs_set then
local allowed_archs = table.wrap(project.get("allowedarchs"))
if #allowed_archs > 0 then
for _, allowed_arch in ipairs(allowed_archs) do
- if not plat or project.extraconf("allowedarchs", allowed_arch, "plat") == plat then
+ local splitinfo = allowed_arch:split('|')
+ local splitplat, splitarch
+ if #splitinfo == 2 then
+ splitplat = splitinfo[1]
+ splitarch = splitinfo[2]
+ elseif #splitinfo == 1 then
+ splitplat = ""
+ splitarch = allowed_arch
+ end
+ if plat == splitplat then
if not allowed_archs_set then
allowed_archs_set = hashset.new()
end
- allowed_archs_set:insert(allowed_arch)
- end
- end
- end
- project._memcache():set2("allowedarchs", plat or "", allowed_archs_set or false)
- end
- local default_arch = project._memcache():get2("allowedarchs.default", plat or "")
- if not default_arch then
- if allowed_archs_set then
- for _, allowed_arch in allowed_archs_set:keys() do
- if project.extraconf("allowedarchs", allowed_arch, "default") == allowed_arch then
- default_arch = allowed_arch
- break
+ allowed_archs_set:insert(splitarch)
end
end
end
- project._memcache():set2("allowedarchs.default", plat or "", default_arch or false)
+ project._memcache():set2("allowedarchs", plat, allowed_archs_set or false)
end
- return allowed_archs_set or nil, default_arch or nil
+ return allowed_archs_set or nil
end
-- return module: project
diff --git a/xmake/core/sandbox/modules/import/core/project/project.lua b/xmake/core/sandbox/modules/import/core/project/project.lua
index 01c62aedf..8e50dfb24 100644
--- a/xmake/core/sandbox/modules/import/core/project/project.lua
+++ b/xmake/core/sandbox/modules/import/core/project/project.lua
@@ -53,6 +53,7 @@ sandbox_core_project.rcfiles = project.rcfiles
sandbox_core_project.directory = project.directory
sandbox_core_project.name = project.name
sandbox_core_project.modes = project.modes
+sandbox_core_project.default_arch = project.default_arch
sandbox_core_project.allowed_modes = project.allowed_modes
sandbox_core_project.allowed_plats = project.allowed_plats
sandbox_core_project.allowed_archs = project.allowed_archs
diff --git a/xmake/modules/private/detect/find_platform.lua b/xmake/modules/private/detect/find_platform.lua
index e5a6de09f..54f8a2182 100644
--- a/xmake/modules/private/detect/find_platform.lua
+++ b/xmake/modules/private/detect/find_platform.lua
@@ -28,7 +28,7 @@ function _find_plat(plat)
plat = plat or config.get("plat")
if not plat then
if not plat then
- _, plat = project.allowed_plats()
+ plat = project.get("defaultplat")
end
if not plat then
plat = os.subhost()
@@ -88,7 +88,7 @@ function _find_arch(plat, arch)
arch = arch or config.get("arch")
if not arch then
if not arch then
- _, arch = project.allowed_archs(plat)
+ arch = project.default_arch(plat)
end
if not arch then
if plat == "android" then