diff options
| author | ruki <[email protected]> | 2024-05-23 22:39:39 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2024-05-23 22:39:39 +0800 |
| commit | e4a3ca8b3412581eaa9b6a7acb00d7d2b5a6b27a (patch) | |
| tree | 0528a32c85f0fa02738c0073fc60075da4b3807a /xmake/toolchains | |
| parent | cfafccfa0bae60f83d27fdda1cb593da9aa0d309 (diff) | |
add icx for windows
Diffstat (limited to 'xmake/toolchains')
| -rw-r--r-- | xmake/toolchains/icx/check.lua | 44 | ||||
| -rw-r--r-- | xmake/toolchains/icx/load.lua | 73 |
2 files changed, 111 insertions, 6 deletions
diff --git a/xmake/toolchains/icx/check.lua b/xmake/toolchains/icx/check.lua index 4d627915b..d22889f14 100644 --- a/xmake/toolchains/icx/check.lua +++ b/xmake/toolchains/icx/check.lua @@ -24,17 +24,44 @@ import("core.project.config") import("detect.sdks.find_icxenv") import("lib.detect.find_tool") --- main entry -function main(toolchain) +-- check intel on windows +function _check_intel_on_windows(toolchain) + + -- have been checked? + local varsall = toolchain:config("varsall") + if varsall then + return true + end + + -- find intel llvm c/c++ compiler environment + local icxenv = find_icxenv() + if icxenv and icxenv.icxvars then + local icxvarsall = icxenv.icxvars + local icxenv = icxvarsall[toolchain:arch()] + if icxenv and icxenv.PATH and icxenv.INCLUDE and icxenv.LIB then + local tool = find_tool("icx.exe", {force = true, envs = icxenv, version = true}) + if tool then + cprint("checking for Intel LLVM C/C++ Compiler (%s) ... ${color.success}${text.success}", toolchain:arch()) + toolchain:config_set("varsall", icxvarsall) + toolchain:configs_save() + return true + end + end + end +end + +-- check intel on linux +function _check_intel_on_linux(toolchain) local icxenv = toolchain:config("icxenv") if icxenv then return true end icxenv = find_icxenv() if icxenv then - local tool = find_tool("icx", {force = true, paths = icxenv.bindir}) + local ldname = is_host("macosx") and "DYLD_LIBRARY_PATH" or "LD_LIBRARY_PATH" + local tool = find_tool("icx", {force = true, envs = {[ldname] = icxenv.libdir}, paths = icxenv.bindir}) if tool then - cprint("checking for Intel LLVM C/C++ Compiler (%s) ... ${color.success}${text.success}", toolchain:arch()) + cprint("checking for Intel C/C++ Compiler (%s) ... ${color.success}${text.success}", toolchain:arch()) toolchain:config_set("icxenv", icxenv) toolchain:config_set("bindir", icxenv.bindir) toolchain:configs_save() @@ -44,3 +71,12 @@ function main(toolchain) end end +-- main entry +function main(toolchain) + if is_host("windows") then + return _check_intel_on_windows(toolchain) + else + return _check_intel_on_linux(toolchain) + end +end + diff --git a/xmake/toolchains/icx/load.lua b/xmake/toolchains/icx/load.lua index 4608c15ae..ebe3e8554 100644 --- a/xmake/toolchains/icx/load.lua +++ b/xmake/toolchains/icx/load.lua @@ -22,8 +22,61 @@ import("core.base.option") import("core.project.config") --- main entry -function main(toolchain) +-- add the given icx environment +function _add_icxenv(toolchain, name) + + -- get icxvarsall + local icxvarsall = toolchain:config("varsall") + if not icxvarsall then + return + end + + -- get icx environment for the current arch + local arch = toolchain:arch() + local icxenv = icxvarsall[arch] or {} + + -- get the paths for the icx environment + local env = icxenv[name] + if env then + toolchain:add("runenvs", name:upper(), path.splitenv(env)) + end +end + +-- load intel on windows +function _load_intel_on_windows(toolchain) + + -- set toolset + if toolchain:is_plat("windows") then + toolchain:set("toolset", "cc", "icx.exe") + toolchain:set("toolset", "cxx", "icx.exe") + toolchain:set("toolset", "mrc", "rc.exe") + if toolchain:is_arch("x64") then + toolchain:set("toolset", "as", "ml64.exe") + else + toolchain:set("toolset", "as", "ml.exe") + end + toolchain:set("toolset", "ld", "link.exe") + toolchain:set("toolset", "sh", "link.exe") + toolchain:set("toolset", "ar", "link.exe") + else + toolchain:set("toolset", "cc", "icx") + toolchain:set("toolset", "cxx", "icpx", "icx") + toolchain:set("toolset", "ld", "icpx", "icx") + toolchain:set("toolset", "sh", "icpx", "icx") + toolchain:set("toolset", "ar", "ar") + toolchain:set("toolset", "strip", "strip") + toolchain:set("toolset", "as", "icx") + end + + -- add icx environments + _add_icxenv(toolchain, "PATH") + _add_icxenv(toolchain, "LIB") + _add_icxenv(toolchain, "INCLUDE") + _add_icxenv(toolchain, "LIBPATH") +end + +-- load intel on linux +function _load_intel_on_linux(toolchain) -- set toolset toolchain:set("toolset", "cc", "icx") @@ -47,5 +100,21 @@ function main(toolchain) toolchain:add("ldflags", march) toolchain:add("shflags", march) end + + -- get icx environments + local icxenv = toolchain:config("icxenv") + if icxenv then + local ldname = is_host("macosx") and "DYLD_LIBRARY_PATH" or "LD_LIBRARY_PATH" + toolchain:add("runenvs", ldname, icxenv.libdir) + end +end + +-- main entry +function main(toolchain) + if is_host("windows") then + return _load_intel_on_windows(toolchain) + else + return _load_intel_on_linux(toolchain) + end end |
