summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2020-10-07 23:07:26 +0800
committerruki <[email protected]>2020-10-07 23:07:26 +0800
commitfb24f3450c6578054d6a4817a23341c17139fda2 (patch)
tree099390f0f002765f92991dd7dcbd554df3ee418d
parente1f3347f09b19f7f379dc5af66ad5bb4efceefe7 (diff)
fix ifort for windows
-rw-r--r--xmake/modules/core/tools/ifort.lua41
-rw-r--r--xmake/rules/fortran/xmake.lua10
-rw-r--r--xmake/toolchains/ifort/load.lua24
3 files changed, 25 insertions, 50 deletions
diff --git a/xmake/modules/core/tools/ifort.lua b/xmake/modules/core/tools/ifort.lua
index 5e94a8a25..37871cb7c 100644
--- a/xmake/modules/core/tools/ifort.lua
+++ b/xmake/modules/core/tools/ifort.lua
@@ -21,9 +21,16 @@
if is_host("windows") then
-- imports
- import("core.project.config")
- import("private.tools.vstool")
inherit("cl")
+ inherit("link")
+ import("private.tools.vstool")
+
+ -- init it
+ function init(self)
+ self:set("fcflags", "-nologo")
+ self:set("fcldflags", "-nologo", "-dynamicbase", "-nxcompat")
+ self:set("fcshflags", "-nologo")
+ end
-- get the property
function get(self, name)
@@ -35,38 +42,10 @@ if is_host("windows") then
return values
end
- -- make the strip flag
- function nf_strip(self, level)
- -- @note we explicitly strip some useless code, because `/debug` may keep them
- -- @see https://github.com/xmake-io/xmake/issues/907
- --
- local maps =
- {
- debug = "/opt:ref /opt:icf"
- , all = "/opt:ref /opt:icf /ltcg" -- we enable /ltcg for optimize/smallest:/Gl
- }
- return maps[level]
- end
-
- -- make the link flag
- function nf_link(self, lib)
- return lib .. ".lib"
- end
-
- -- make the syslink flag
- function nf_syslink(self, lib)
- return nf_link(self, lib)
- end
-
- -- make the linkdir flag
- function nf_linkdir(self, dir)
- return "-libpath:" .. os.args(path.translate(dir))
- end
-
-- make the link arguments list
function linkargv(self, objectfiles, targetkind, targetfile, flags, opt)
opt = opt or {}
- local argv = table.join(flags, "-out:" .. targetfile, objectfiles)
+ local argv = table.join("-o", targetfile, objectfiles, "/link", flags)
if not opt.rawargs then
argv = winos.cmdargv(argv)
end
diff --git a/xmake/rules/fortran/xmake.lua b/xmake/rules/fortran/xmake.lua
index adf3ab427..3909111f4 100644
--- a/xmake/rules/fortran/xmake.lua
+++ b/xmake/rules/fortran/xmake.lua
@@ -21,10 +21,12 @@
-- define rule: fortran.build.modules
rule("fortran.build.modules")
before_build(function (target)
- local modulesdir = target:values("fortran.moduledir") or path.join(target:objectdir(), ".modules")
- os.mkdir(modulesdir)
- target:add("fcflags", "-J" .. modulesdir)
- target:add("includedirs", modulesdir, {public = true})
+ if not is_host("windows") then
+ local modulesdir = target:values("fortran.moduledir") or path.join(target:objectdir(), ".modules")
+ os.mkdir(modulesdir)
+ target:add("fcflags", "-J" .. modulesdir)
+ target:add("includedirs", modulesdir, {public = true})
+ end
end)
-- define rule: fortran.build
diff --git a/xmake/toolchains/ifort/load.lua b/xmake/toolchains/ifort/load.lua
index 7144b62c4..5c31e4777 100644
--- a/xmake/toolchains/ifort/load.lua
+++ b/xmake/toolchains/ifort/load.lua
@@ -46,23 +46,17 @@ end
function _load_intel_on_windows(toolchain)
-- set toolset
- if toolchain:is_plat("windows") then
- toolchain:set("toolset", "fc", "ifort.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", "fcld", "ifort.exe")
- toolchain:set("toolset", "fcsh", "ifort.exe")
- toolchain:set("toolset", "ar", "link.exe")
- toolchain:set("toolset", "ex", "lib.exe")
+ toolchain:set("toolset", "fc", "ifort.exe")
+ toolchain:set("toolset", "mrc", "rc.exe")
+ if toolchain:is_arch("x64") then
+ toolchain:set("toolset", "as", "ml64.exe")
else
- toolchain:set("toolset", "fc", "ifort")
- toolchain:set("toolset", "fcld", "ifort")
- toolchain:set("toolset", "fcsh", "ifort")
+ toolchain:set("toolset", "as", "ml.exe")
end
+ toolchain:set("toolset", "fcld", "ifort.exe")
+ toolchain:set("toolset", "fcsh", "ifort.exe")
+ toolchain:set("toolset", "fcar", "link.exe")
+ toolchain:set("toolset", "ex", "lib.exe")
-- add ifort environments
_add_ifortenv(toolchain, "PATH")