diff options
| author | ruki <[email protected]> | 2020-10-07 23:07:26 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2020-10-07 23:07:26 +0800 |
| commit | fb24f3450c6578054d6a4817a23341c17139fda2 (patch) | |
| tree | 099390f0f002765f92991dd7dcbd554df3ee418d | |
| parent | e1f3347f09b19f7f379dc5af66ad5bb4efceefe7 (diff) | |
fix ifort for windows
| -rw-r--r-- | xmake/modules/core/tools/ifort.lua | 41 | ||||
| -rw-r--r-- | xmake/rules/fortran/xmake.lua | 10 | ||||
| -rw-r--r-- | xmake/toolchains/ifort/load.lua | 24 |
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") |
