summaryrefslogtreecommitdiff
path: root/xmake/toolchains/icc/load.lua
diff options
context:
space:
mode:
authorruki <[email protected]>2024-05-23 23:01:03 +0800
committerruki <[email protected]>2024-05-23 23:01:03 +0800
commit476153ac1e36d99285fb16cd75eae2ce88932fff (patch)
treed0fd53afb0f1e4e85bb7628884d1acff9488fab5 /xmake/toolchains/icc/load.lua
parentbe0dfd9660593047612afbad24a1c637c5883655 (diff)
improve icl envs
Diffstat (limited to 'xmake/toolchains/icc/load.lua')
-rw-r--r--xmake/toolchains/icc/load.lua58
1 files changed, 49 insertions, 9 deletions
diff --git a/xmake/toolchains/icc/load.lua b/xmake/toolchains/icc/load.lua
index e1ceba260..21cb0170b 100644
--- a/xmake/toolchains/icc/load.lua
+++ b/xmake/toolchains/icc/load.lua
@@ -21,9 +21,34 @@
-- imports
import("core.base.option")
import("core.project.config")
+import("detect.sdks.find_vstudio")
+
+-- add the given vs environment
+function _add_vsenv(toolchain, name, curenvs)
+
+ -- get vcvars
+ local vcvars = toolchain:config("vcvars")
+ if not vcvars then
+ return
+ end
+
+ -- get the paths for the vs environment
+ local new = vcvars[name]
+ if new then
+ -- fix case naming conflict for cmake/msbuild between the new msvc envs and current environment, if we are running xmake in vs prompt.
+ -- @see https://github.com/xmake-io/xmake/issues/4751
+ for k, c in pairs(curenvs) do
+ if name:lower() == k:lower() and name ~= k then
+ name = k
+ break
+ end
+ end
+ toolchain:add("runenvs", name, table.unpack(path.splitenv(new)))
+ end
+end
-- add the given icl environment
-function _add_iclenv(toolchain, name)
+function _add_iclenv(toolchain, name, curenvs)
-- get iclvarsall
local iclvarsall = toolchain:config("varsall")
@@ -36,9 +61,17 @@ function _add_iclenv(toolchain, name)
local iclenv = iclvarsall[arch] or {}
-- get the paths for the icl environment
- local env = iclenv[name]
- if env then
- toolchain:add("runenvs", name:upper(), path.splitenv(env))
+ local new = iclenv[name]
+ if new then
+ -- fix case naming conflict for cmake/msbuild between the new msvc envs and current environment, if we are running xmake in vs prompt.
+ -- @see https://github.com/xmake-io/xmake/issues/4751
+ for k, c in pairs(curenvs) do
+ if name:lower() == k:lower() and name ~= k then
+ name = k
+ break
+ end
+ end
+ toolchain:add("runenvs", name, table.unpack(path.splitenv(new)))
end
end
@@ -68,11 +101,18 @@ function _load_intel_on_windows(toolchain)
toolchain:set("toolset", "as", "icc")
end
- -- add icl environments
- _add_iclenv(toolchain, "PATH")
- _add_iclenv(toolchain, "LIB")
- _add_iclenv(toolchain, "INCLUDE")
- _add_iclenv(toolchain, "LIBPATH")
+ -- add vs/icl environments
+ local expect_vars = {"PATH", "LIB", "INCLUDE", "LIBPATH"}
+ local curenvs = os.getenvs()
+ for _, name in ipairs(expect_vars) do
+ _add_vsenv(toolchain, name, curenvs)
+ _add_iclenv(toolchain, name, curenvs)
+ end
+ for _, name in ipairs(find_vstudio.get_vcvars()) do
+ if not table.contains(expect_vars, name:upper()) then
+ _add_vsenv(toolchain, name, curenvs)
+ end
+ end
end
-- load intel on linux