summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2024-09-02 22:52:18 +0800
committerruki <[email protected]>2024-09-02 22:52:18 +0800
commit4e9459eca8abe50b31f498541173948f2153f7b4 (patch)
tree8f304a6b6e4c428f7abee87de69192c089ddbee1
parent87252889ffb913043721dd332456c186588a5ee7 (diff)
load cosmocc envs
-rw-r--r--xmake/modules/detect/tools/find_cosmoar.lua1
-rw-r--r--xmake/modules/detect/tools/find_cosmocc.lua2
-rw-r--r--xmake/modules/detect/tools/find_cosmocxx.lua1
-rw-r--r--xmake/toolchains/cosmocc/check.lua10
-rw-r--r--xmake/toolchains/cosmocc/xmake.lua8
5 files changed, 21 insertions, 1 deletions
diff --git a/xmake/modules/detect/tools/find_cosmoar.lua b/xmake/modules/detect/tools/find_cosmoar.lua
index 01c9232ce..b293c9b57 100644
--- a/xmake/modules/detect/tools/find_cosmoar.lua
+++ b/xmake/modules/detect/tools/find_cosmoar.lua
@@ -36,6 +36,7 @@ import("lib.detect.find_program")
function main(opt)
opt = opt or {}
opt.shell = true
+ opt.envs = opt.envs or {PATH = os.getenv("PATH")}
local program = find_program(opt.program or "cosmoar", opt)
if program and is_host("windows") then
program = program:gsub("\\", "/")
diff --git a/xmake/modules/detect/tools/find_cosmocc.lua b/xmake/modules/detect/tools/find_cosmocc.lua
index 910643626..14d14d1be 100644
--- a/xmake/modules/detect/tools/find_cosmocc.lua
+++ b/xmake/modules/detect/tools/find_cosmocc.lua
@@ -37,7 +37,7 @@ import("lib.detect.find_programver")
function main(opt)
opt = opt or {}
opt.shell = true
- opt.envs = {PATH = os.getenv("PATH")}
+ opt.envs = opt.envs or {PATH = os.getenv("PATH")}
local program = find_program(opt.program or "cosmocc", opt)
if program and is_host("windows") then
program = program:gsub("\\", "/")
diff --git a/xmake/modules/detect/tools/find_cosmocxx.lua b/xmake/modules/detect/tools/find_cosmocxx.lua
index 06ce69aac..d09bac510 100644
--- a/xmake/modules/detect/tools/find_cosmocxx.lua
+++ b/xmake/modules/detect/tools/find_cosmocxx.lua
@@ -37,6 +37,7 @@ import("lib.detect.find_programver")
function main(opt)
opt = opt or {}
opt.shell = true
+ opt.envs = opt.envs or {PATH = os.getenv("PATH")}
local program = find_program(opt.program or "cosmoc++", opt)
if program and is_host("windows") then
program = program:gsub("\\", "/")
diff --git a/xmake/toolchains/cosmocc/check.lua b/xmake/toolchains/cosmocc/check.lua
index d193cceb2..5876db68f 100644
--- a/xmake/toolchains/cosmocc/check.lua
+++ b/xmake/toolchains/cosmocc/check.lua
@@ -32,6 +32,7 @@ function main(toolchain)
local bindir = toolchain:bindir()
-- find cross toolchain from external envirnoment
+ local envs
local cross_toolchain = find_cross_toolchain(sdkdir, {bindir = bindir})
if not cross_toolchain then
-- find it from packages
@@ -40,6 +41,11 @@ function main(toolchain)
if installdir and os.isdir(installdir) then
cross_toolchain = find_cross_toolchain(installdir)
if cross_toolchain then
+ -- we need to bind msys2 shell envirnoments for calling cosmocc,
+ -- @see https://github.com/xmake-io/xmake/issues/5552
+ if is_subhost("windows") then
+ envs = package:envs()
+ end
break
end
end
@@ -57,9 +63,13 @@ function main(toolchain)
toolchain:config_set("cross", cross_toolchain.cross)
toolchain:config_set("bindir", cross_toolchain.bindir)
toolchain:config_set("sdkdir", cross_toolchain.sdkdir)
+ if envs then
+ toolchain:config_set("envs", envs)
+ end
toolchain:configs_save()
else
raise("cosmocc toolchain not found!")
end
return cross_toolchain
end
+
diff --git a/xmake/toolchains/cosmocc/xmake.lua b/xmake/toolchains/cosmocc/xmake.lua
index 0b19ad16c..17d217a6c 100644
--- a/xmake/toolchains/cosmocc/xmake.lua
+++ b/xmake/toolchains/cosmocc/xmake.lua
@@ -45,4 +45,12 @@ toolchain("cosmocc")
toolchain:set("toolset", "ranlib", "aarch64-linux-cosmo-ranlib")
toolchain:set("toolset", "strip", "aarch64-linux-cosmo-strip")
end
+ -- @see https://github.com/xmake-io/xmake/issues/5552
+ local envs = toolchain:config("envs")
+ if envs then
+ for k, v in pairs(envs) do
+ toolchain:add("runenvs", k, v)
+ end
+ end
end)
+