summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2016-04-14 10:07:13 +0800
committerruki <[email protected]>2016-04-14 10:07:13 +0800
commitbfd9b3a115c932973fecc82915f0cead7e6ceaa2 (patch)
treedca32143b2f5d0f6dc5a57091bd14c8b2ddb815c
parent1479b3c2c9ef3621fec864c0dd305ad4b1f5c60f (diff)
fix ar and swiftc bug
-rw-r--r--xmake/core/platform/platforms/android/prober.lua10
-rw-r--r--xmake/core/platform/platforms/iphoneos/prober.lua10
-rw-r--r--xmake/core/platform/platforms/iphonesimulator/prober.lua10
-rw-r--r--xmake/core/platform/platforms/linux/prober.lua10
-rw-r--r--xmake/core/platform/platforms/macosx/prober.lua10
-rw-r--r--xmake/core/platform/platforms/mingw/prober.lua10
-rw-r--r--xmake/core/platform/platforms/watchos/prober.lua10
-rw-r--r--xmake/core/platform/platforms/watchsimulator/prober.lua10
-rw-r--r--xmake/core/platform/platforms/windows/prober.lua1
-rw-r--r--xmake/core/platform/platforms/windows/tools/cl.lua141
-rw-r--r--xmake/core/platform/platforms/windows/tools/lib.lua138
-rw-r--r--xmake/core/platform/platforms/windows/tools/link.lua128
-rw-r--r--xmake/core/platform/platforms/windows/tools/ml.lua132
-rw-r--r--xmake/core/platform/platforms/windows/tools/nmake.lua75
-rw-r--r--xmake/core/platform/tool.lua224
-rw-r--r--xmake/core/tool/tool.lua1
-rw-r--r--xmake/tools/compiler/swiftc.lua7
-rw-r--r--xmake/tools/linker/ar.lua9
18 files changed, 56 insertions, 880 deletions
diff --git a/xmake/core/platform/platforms/android/prober.lua b/xmake/core/platform/platforms/android/prober.lua
index 215a93bfe..8a37630fe 100644
--- a/xmake/core/platform/platforms/android/prober.lua
+++ b/xmake/core/platform/platforms/android/prober.lua
@@ -25,7 +25,7 @@ local os = require("base/os")
local path = require("base/path")
local utils = require("base/utils")
local string = require("base/string")
-local tool = require("platform/tool")
+local tool = require("tool/tool")
local config = require("project/config")
local global = require("project/global")
@@ -108,7 +108,7 @@ function prober._probe_make(configs)
if make then return true end
-- probe the make path
- make = tool.probe("make", {"/usr/bin", "/usr/local/bin", "/opt/bin", "/opt/local/bin"})
+ make = tool.check("make", {"/usr/bin", "/usr/local/bin", "/opt/bin", "/opt/local/bin"})
-- probe ok? update it
if make then configs.set("make", make) end
@@ -134,7 +134,7 @@ function prober._probe_ccache(configs)
end
-- probe the ccache path
- local ccache_path = tool.probe("ccache", {"/usr/bin", "/usr/local/bin", "/opt/bin", "/opt/local/bin"})
+ local ccache_path = tool.check("ccache", {"/usr/bin", "/usr/local/bin", "/opt/bin", "/opt/local/bin"})
-- probe ok? update it
if ccache_path then
@@ -164,7 +164,7 @@ function prober._probe_toolpath(configs, kind, cross, name, description)
local toolpath = nil
local toolchains = configs.get("toolchains")
if toolchains then
- toolpath = tool.probe(cross .. (configs.get(kind) or name), toolchains)
+ toolpath = tool.check(cross .. (configs.get(kind) or name), toolchains)
end
-- attempt to get it directly from the configure
@@ -188,7 +188,7 @@ function prober._probe_toolpath(configs, kind, cross, name, description)
-- probe the tool path
if toolchains then
for _, filepath in ipairs(toolchains) do
- toolpath = tool.probe(cross .. name, path.directory(filepath))
+ toolpath = tool.check(cross .. name, path.directory(filepath))
if toolpath then break end
end
end
diff --git a/xmake/core/platform/platforms/iphoneos/prober.lua b/xmake/core/platform/platforms/iphoneos/prober.lua
index 5e0da4534..683954525 100644
--- a/xmake/core/platform/platforms/iphoneos/prober.lua
+++ b/xmake/core/platform/platforms/iphoneos/prober.lua
@@ -25,7 +25,7 @@ local os = require("base/os")
local path = require("base/path")
local utils = require("base/utils")
local string = require("base/string")
-local tool = require("platform/tool")
+local tool = require("tool/tool")
local config = require("project/config")
local global = require("project/global")
@@ -167,7 +167,7 @@ function prober._probe_make(configs)
if make then return true end
-- probe the make path
- make = tool.probe("make", {"/usr/bin", "/usr/local/bin", "/opt/bin", "/opt/local/bin"})
+ make = tool.check("make", {"/usr/bin", "/usr/local/bin", "/opt/bin", "/opt/local/bin"})
-- probe ok? update it
if make then configs.set("make", make) end
@@ -193,7 +193,7 @@ function prober._probe_ccache(configs)
end
-- probe the ccache path
- local ccache_path = tool.probe("ccache", {"/usr/bin", "/usr/local/bin", "/opt/bin", "/opt/local/bin"})
+ local ccache_path = tool.check("ccache", {"/usr/bin", "/usr/local/bin", "/opt/bin", "/opt/local/bin"})
-- probe ok? update it
if ccache_path then
@@ -226,7 +226,7 @@ function prober._probe_toolpath(configs, kind, cross, names, description)
-- attempt to get it from the given cross toolchains
if toolchains then
- toolpath = tool.probe(cross .. (configs.get(kind) or name), toolchains)
+ toolpath = tool.check(cross .. (configs.get(kind) or name), toolchains)
end
-- attempt to get it directly from the configure
@@ -236,7 +236,7 @@ function prober._probe_toolpath(configs, kind, cross, names, description)
-- attempt to run it directly
if not toolpath then
- toolpath = tool.probe(cross .. name)
+ toolpath = tool.check(cross .. name)
end
-- probe ok?
diff --git a/xmake/core/platform/platforms/iphonesimulator/prober.lua b/xmake/core/platform/platforms/iphonesimulator/prober.lua
index a3f55d3a6..71eb921fa 100644
--- a/xmake/core/platform/platforms/iphonesimulator/prober.lua
+++ b/xmake/core/platform/platforms/iphonesimulator/prober.lua
@@ -25,7 +25,7 @@ local os = require("base/os")
local path = require("base/path")
local utils = require("base/utils")
local string = require("base/string")
-local tool = require("platform/tool")
+local tool = require("tool/tool")
local config = require("project/config")
local global = require("project/global")
@@ -167,7 +167,7 @@ function prober._probe_make(configs)
if make then return true end
-- probe the make path
- make = tool.probe("make", {"/usr/bin", "/usr/local/bin", "/opt/bin", "/opt/local/bin"})
+ make = tool.check("make", {"/usr/bin", "/usr/local/bin", "/opt/bin", "/opt/local/bin"})
-- probe ok? update it
if make then configs.set("make", make) end
@@ -193,7 +193,7 @@ function prober._probe_ccache(configs)
end
-- probe the ccache path
- local ccache_path = tool.probe("ccache", {"/usr/bin", "/usr/local/bin", "/opt/bin", "/opt/local/bin"})
+ local ccache_path = tool.check("ccache", {"/usr/bin", "/usr/local/bin", "/opt/bin", "/opt/local/bin"})
-- probe ok? update it
if ccache_path then
@@ -226,7 +226,7 @@ function prober._probe_toolpath(configs, kind, cross, names, description)
-- attempt to get it from the given cross toolchains
if toolchains then
- toolpath = tool.probe(cross .. (configs.get(kind) or name), toolchains)
+ toolpath = tool.check(cross .. (configs.get(kind) or name), toolchains)
end
-- attempt to get it directly from the configure
@@ -236,7 +236,7 @@ function prober._probe_toolpath(configs, kind, cross, names, description)
-- attempt to run it directly
if not toolpath then
- toolpath = tool.probe(cross .. name)
+ toolpath = tool.check(cross .. name)
end
-- probe ok?
diff --git a/xmake/core/platform/platforms/linux/prober.lua b/xmake/core/platform/platforms/linux/prober.lua
index 86e2bc8b0..55af51a8f 100644
--- a/xmake/core/platform/platforms/linux/prober.lua
+++ b/xmake/core/platform/platforms/linux/prober.lua
@@ -25,7 +25,7 @@ local os = require("base/os")
local path = require("base/path")
local utils = require("base/utils")
local string = require("base/string")
-local tool = require("platform/tool")
+local tool = require("tool/tool")
local config = require("project/config")
local global = require("project/global")
@@ -63,7 +63,7 @@ function prober._probe_make(configs)
if make then return true end
-- probe the make path
- make = tool.probe("make", {"/usr/bin", "/usr/local/bin", "/opt/bin", "/opt/local/bin"})
+ make = tool.check("make", {"/usr/bin", "/usr/local/bin", "/opt/bin", "/opt/local/bin"})
-- probe ok? update it
if make then configs.set("make", make) end
@@ -89,7 +89,7 @@ function prober._probe_ccache(configs)
end
-- probe the ccache path
- local ccache_path = tool.probe("ccache", {"/usr/bin", "/usr/local/bin", "/opt/bin", "/opt/local/bin"})
+ local ccache_path = tool.check("ccache", {"/usr/bin", "/usr/local/bin", "/opt/bin", "/opt/local/bin"})
-- probe ok? update it
if ccache_path then
@@ -122,7 +122,7 @@ function prober._probe_toolpath(configs, kind, cross, names, description)
-- attempt to get it from the given cross toolchains
if toolchains then
- toolpath = tool.probe(cross .. (configs.get(kind) or name), toolchains)
+ toolpath = tool.check(cross .. (configs.get(kind) or name), toolchains)
end
-- attempt to get it directly from the configure
@@ -132,7 +132,7 @@ function prober._probe_toolpath(configs, kind, cross, names, description)
-- attempt to run it directly
if not toolpath then
- toolpath = tool.probe(cross .. name)
+ toolpath = tool.check(cross .. name)
end
-- probe ok?
diff --git a/xmake/core/platform/platforms/macosx/prober.lua b/xmake/core/platform/platforms/macosx/prober.lua
index 639b4f338..42352d8de 100644
--- a/xmake/core/platform/platforms/macosx/prober.lua
+++ b/xmake/core/platform/platforms/macosx/prober.lua
@@ -25,7 +25,7 @@ local os = require("base/os")
local path = require("base/path")
local utils = require("base/utils")
local string = require("base/string")
-local tool = require("platform/tool")
+local tool = require("tool/tool")
local config = require("project/config")
local global = require("project/global")
@@ -167,7 +167,7 @@ function prober._probe_make(configs)
if make then return true end
-- probe the make path
- make = tool.probe("make", {"/usr/bin", "/usr/local/bin", "/opt/bin", "/opt/local/bin"})
+ make = tool.check("make", {"/usr/bin", "/usr/local/bin", "/opt/bin", "/opt/local/bin"})
-- probe ok? update it
if make then configs.set("make", make) end
@@ -193,7 +193,7 @@ function prober._probe_ccache(configs)
end
-- probe the ccache path
- local ccache_path = tool.probe("ccache", {"/usr/bin", "/usr/local/bin", "/opt/bin", "/opt/local/bin"})
+ local ccache_path = tool.check("ccache", {"/usr/bin", "/usr/local/bin", "/opt/bin", "/opt/local/bin"})
-- probe ok? update it
if ccache_path then
@@ -226,7 +226,7 @@ function prober._probe_toolpath(configs, kind, cross, names, description)
-- attempt to get it from the given cross toolchains
if toolchains then
- toolpath = tool.probe(cross .. (configs.get(kind) or name), toolchains)
+ toolpath = tool.check(cross .. (configs.get(kind) or name), toolchains)
end
-- attempt to get it directly from the configure
@@ -236,7 +236,7 @@ function prober._probe_toolpath(configs, kind, cross, names, description)
-- attempt to run it directly
if not toolpath then
- toolpath = tool.probe(cross .. name)
+ toolpath = tool.check(cross .. name)
end
-- probe ok?
diff --git a/xmake/core/platform/platforms/mingw/prober.lua b/xmake/core/platform/platforms/mingw/prober.lua
index 848dc3f6a..307a16f60 100644
--- a/xmake/core/platform/platforms/mingw/prober.lua
+++ b/xmake/core/platform/platforms/mingw/prober.lua
@@ -25,7 +25,7 @@ local os = require("base/os")
local path = require("base/path")
local utils = require("base/utils")
local string = require("base/string")
-local tool = require("platform/tool")
+local tool = require("tool/tool")
local config = require("project/config")
local global = require("project/global")
@@ -59,7 +59,7 @@ function prober._probe_make(configs)
if make then return true end
-- probe the make path
- make = tool.probe("make", {"/usr/bin", "/usr/local/bin", "/opt/bin", "/opt/local/bin"})
+ make = tool.check("make", {"/usr/bin", "/usr/local/bin", "/opt/bin", "/opt/local/bin"})
-- probe ok? update it
if make then configs.set("make", make) end
@@ -85,7 +85,7 @@ function prober._probe_ccache(configs)
end
-- probe the ccache path
- local ccache_path = tool.probe("ccache", {"/usr/bin", "/usr/local/bin", "/opt/bin", "/opt/local/bin"})
+ local ccache_path = tool.check("ccache", {"/usr/bin", "/usr/local/bin", "/opt/bin", "/opt/local/bin"})
-- probe ok? update it
if ccache_path then
@@ -118,7 +118,7 @@ function prober._probe_toolpath(configs, kind, cross, names, description)
-- attempt to get it from the given cross toolchains
if toolchains then
- toolpath = tool.probe(cross .. (configs.get(kind) or name), toolchains)
+ toolpath = tool.check(cross .. (configs.get(kind) or name), toolchains)
end
-- attempt to get it directly from the configure
@@ -128,7 +128,7 @@ function prober._probe_toolpath(configs, kind, cross, names, description)
-- attempt to run it directly
if not toolpath then
- toolpath = tool.probe(cross .. name)
+ toolpath = tool.check(cross .. name)
end
-- probe ok?
diff --git a/xmake/core/platform/platforms/watchos/prober.lua b/xmake/core/platform/platforms/watchos/prober.lua
index 8c7f28eb2..1fd7332eb 100644
--- a/xmake/core/platform/platforms/watchos/prober.lua
+++ b/xmake/core/platform/platforms/watchos/prober.lua
@@ -25,7 +25,7 @@ local os = require("base/os")
local path = require("base/path")
local utils = require("base/utils")
local string = require("base/string")
-local tool = require("platform/tool")
+local tool = require("tool/tool")
local config = require("project/config")
local global = require("project/global")
@@ -167,7 +167,7 @@ function prober._probe_make(configs)
if make then return true end
-- probe the make path
- make = tool.probe("make", {"/usr/bin", "/usr/local/bin", "/opt/bin", "/opt/local/bin"})
+ make = tool.check("make", {"/usr/bin", "/usr/local/bin", "/opt/bin", "/opt/local/bin"})
-- probe ok? update it
if make then configs.set("make", make) end
@@ -193,7 +193,7 @@ function prober._probe_ccache(configs)
end
-- probe the ccache path
- local ccache_path = tool.probe("ccache", {"/usr/bin", "/usr/local/bin", "/opt/bin", "/opt/local/bin"})
+ local ccache_path = tool.check("ccache", {"/usr/bin", "/usr/local/bin", "/opt/bin", "/opt/local/bin"})
-- probe ok? update it
if ccache_path then
@@ -226,7 +226,7 @@ function prober._probe_toolpath(configs, kind, cross, names, description)
-- attempt to get it from the given cross toolchains
if toolchains then
- toolpath = tool.probe(cross .. (configs.get(kind) or name), toolchains)
+ toolpath = tool.check(cross .. (configs.get(kind) or name), toolchains)
end
-- attempt to get it directly from the configure
@@ -236,7 +236,7 @@ function prober._probe_toolpath(configs, kind, cross, names, description)
-- attempt to run it directly
if not toolpath then
- toolpath = tool.probe(cross .. name)
+ toolpath = tool.check(cross .. name)
end
-- probe ok?
diff --git a/xmake/core/platform/platforms/watchsimulator/prober.lua b/xmake/core/platform/platforms/watchsimulator/prober.lua
index 1338783d4..abdec157d 100644
--- a/xmake/core/platform/platforms/watchsimulator/prober.lua
+++ b/xmake/core/platform/platforms/watchsimulator/prober.lua
@@ -25,7 +25,7 @@ local os = require("base/os")
local path = require("base/path")
local utils = require("base/utils")
local string = require("base/string")
-local tool = require("platform/tool")
+local tool = require("tool/tool")
local config = require("project/config")
local global = require("project/global")
@@ -167,7 +167,7 @@ function prober._probe_make(configs)
if make then return true end
-- probe the make path
- make = tool.probe("make", {"/usr/bin", "/usr/local/bin", "/opt/bin", "/opt/local/bin"})
+ make = tool.check("make", {"/usr/bin", "/usr/local/bin", "/opt/bin", "/opt/local/bin"})
-- probe ok? update it
if make then configs.set("make", make) end
@@ -193,7 +193,7 @@ function prober._probe_ccache(configs)
end
-- probe the ccache path
- local ccache_path = tool.probe("ccache", {"/usr/bin", "/usr/local/bin", "/opt/bin", "/opt/local/bin"})
+ local ccache_path = tool.check("ccache", {"/usr/bin", "/usr/local/bin", "/opt/bin", "/opt/local/bin"})
-- probe ok? update it
if ccache_path then
@@ -226,7 +226,7 @@ function prober._probe_toolpath(configs, kind, cross, names, description)
-- attempt to get it from the given cross toolchains
if toolchains then
- toolpath = tool.probe(cross .. (configs.get(kind) or name), toolchains)
+ toolpath = tool.check(cross .. (configs.get(kind) or name), toolchains)
end
-- attempt to get it directly from the configure
@@ -236,7 +236,7 @@ function prober._probe_toolpath(configs, kind, cross, names, description)
-- attempt to run it directly
if not toolpath then
- toolpath = tool.probe(cross .. name)
+ toolpath = tool.check(cross .. name)
end
-- probe ok?
diff --git a/xmake/core/platform/platforms/windows/prober.lua b/xmake/core/platform/platforms/windows/prober.lua
index 2c1726ac9..46e41b149 100644
--- a/xmake/core/platform/platforms/windows/prober.lua
+++ b/xmake/core/platform/platforms/windows/prober.lua
@@ -28,7 +28,6 @@ local utils = require("base/utils")
local string = require("base/string")
local config = require("project/config")
local global = require("project/global")
-local tool = require("platform/tool")
local platform = require("platform/platform")
-- define module: prober
diff --git a/xmake/core/platform/platforms/windows/tools/cl.lua b/xmake/core/platform/platforms/windows/tools/cl.lua
deleted file mode 100644
index d03cbc056..000000000
--- a/xmake/core/platform/platforms/windows/tools/cl.lua
+++ /dev/null
@@ -1,141 +0,0 @@
---!The Automatic Cross-platform Build Tool
---
--- XMake is free software; you can redistribute it and/or modify
--- it under the terms of the GNU Lesser General Public License as published by
--- the Free Software Foundation; either version 2.1 of the License, or
--- (at your option) any later version.
---
--- XMake is distributed in the hope that it will be useful,
--- but WITHOUT ANY WARRANTY; without even the implied warranty of
--- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
--- GNU Lesser General Public License for more details.
---
--- You should have received a copy of the GNU Lesser General Public License
--- along with XMake;
--- If not, see <a href="http://www.gnu.org/licenses/"> http://www.gnu.org/licenses/</a>
---
--- Copyright (C) 2015 - 2016, ruki All rights reserved.
---
--- @author ruki
--- @file cl.lua
---
-
--- define module: cl
-local cl = cl or {}
-
--- load modules
-local utils = require("base/utils")
-local string = require("base/string")
-local config = require("project/config")
-local platform = require("platform/platform")
-
--- init the compiler
-function cl.init(self, name)
-
- -- save name
- self.name = name or "cl.exe"
-
- -- init cxflags
- self.cxflags = { "-nologo", "-Gd", "-MP4", "-D_MBCS", "-D_CRT_SECURE_NO_WARNINGS"}
-
- -- init flags map
- self.mapflags =
- {
- -- optimize
- ["-O0"] = "-Od"
- , ["-O3"] = "-Ot"
- , ["-Ofast"] = "-Ox"
- , ["-fomit-frame-pointer"] = "-Oy"
-
- -- symbols
- , ["-g"] = "-Z7"
- , ["-fvisibility=.*"] = ""
-
- -- warnings
- , ["-Wall"] = "-W3" -- = "-Wall" will enable too more warnings
- , ["-W1"] = "-W1"
- , ["-W2"] = "-W2"
- , ["-W3"] = "-W3"
- , ["-Werror"] = "-WX"
- , ["%-Wno%-error=.*"] = ""
- , ["%-fno%-.*"] = ""
-
- -- vectorexts
- , ["-mmmx"] = "-arch:MMX"
- , ["-msse"] = "-arch:SSE"
- , ["-msse2"] = "-arch:SSE2"
- , ["-msse3"] = "-arch:SSE3"
- , ["-mssse3"] = "-arch:SSSE3"
- , ["-mavx"] = "-arch:AVX"
- , ["-mavx2"] = "-arch:AVX2"
- , ["-mfpu=.*"] = ""
-
- -- language
- , ["-ansi"] = ""
- , ["-std=c99"] = "-TP" -- compile as c++ files because msvc only support c89
- , ["-std=c11"] = "-TP" -- compile as c++ files because msvc only support c89
- , ["-std=gnu99"] = "-TP" -- compile as c++ files because msvc only support c89
- , ["-std=gnu11"] = "-TP" -- compile as c++ files because msvc only support c89
- , ["-std=.*"] = ""
-
- -- others
- , ["-ftrapv"] = ""
- , ["-fsanitize=address"] = ""
- }
-
-end
-
--- make the compiler command
-function cl.command_compile(self, srcfile, objfile, flags, logfile)
-
- -- redirect
- local redirect = ""
- if logfile then redirect = string.format(" > %s 2>&1", logfile) end
-
- -- make it
- return string.format("%s -c %s -Fo%s %s%s", self.name, flags, objfile, srcfile, redirect)
-end
-
--- make the define flag
-function cl.flag_define(self, define)
-
- -- make it
- return "-D" .. define:gsub("\"", "\\\"")
-end
-
--- make the undefine flag
-function cl.flag_undefine(self, undefine)
-
- -- make it
- return "-U" .. undefine
-end
-
--- make the includedir flag
-function cl.flag_includedir(self, includedir)
-
- -- make it
- return "-I" .. includedir
-end
-
--- the main function
-function cl.main(self, cmd)
-
- -- the windows module
- local windows = platform.module()
- assert(windows)
-
- -- enter envirnoment
- windows.enter()
-
- -- execute it
- local ok = os.execute(cmd)
-
- -- leave envirnoment
- windows.leave()
-
- -- ok?
- return utils.ifelse(ok == 0, true, false)
-end
-
--- return module: cl
-return cl
diff --git a/xmake/core/platform/platforms/windows/tools/lib.lua b/xmake/core/platform/platforms/windows/tools/lib.lua
deleted file mode 100644
index 571d0ef3f..000000000
--- a/xmake/core/platform/platforms/windows/tools/lib.lua
+++ /dev/null
@@ -1,138 +0,0 @@
---!The Automatic Cross-platform Build Tool
---
--- XMake is free software; you can redistribute it and/or modify
--- it under the terms of the GNU Lesser General Public License as published by
--- the Free Software Foundation; either version 2.1 of the License, or
--- (at your option) any later version.
---
--- XMake is distributed in the hope that it will be useful,
--- but WITHOUT ANY WARRANTY; without even the implied warranty of
--- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
--- GNU Lesser General Public License for more details.
---
--- You should have received a copy of the GNU Lesser General Public License
--- along with XMake;
--- If not, see <a href="http://www.gnu.org/licenses/"> http://www.gnu.org/licenses/</a>
---
--- Copyright (C) 2015 - 2016, ruki All rights reserved.
---
--- @author ruki
--- @file lib.lua
---
-
--- define module: lib
-local lib = lib or {}
-
--- load modules
-local io = require("base/io")
-local os = require("base/os")
-local path = require("base/path")
-local utils = require("base/utils")
-local string = require("base/string")
-local config = require("project/config")
-local platform = require("platform/platform")
-
--- init the compiler
-function lib.init(self, name)
-
- -- save name
- self.name = name or "lib.exe"
-
-end
-
--- extract the static library to object files
-function lib.extract(self, ...)
-
- -- check
- local args = ...
- assert(#args == 2 and self.name)
-
- -- get library and object file path
- local libfile = args[1]
- local objfile = args[2]
- assert(libfile and objfile)
-
- -- get object directory
- local objdir = path.directory(objfile)
- if not os.isdir(objdir) then os.mkdir(objdir) end
- if not os.isdir(objdir) then
- utils.error("%s not found!", objdir)
- return false
- end
-
- -- the windows module
- local windows = platform.module()
- assert(windows)
-
- -- enter envirnoment
- windows.enter()
-
- -- list object files
- local file = io.popen(string.format("%s -nologo -list %s", self.name, libfile))
- if not file then
- utils.error("extract %s to %s failed!", libfile, objdir)
- windows.leave()
- return false
- end
-
- -- extrace all object files
- for line in file:lines() do
-
- -- is object file?
- if line:find("%.obj") then
-
- -- init command
- local out = path.translate(string.format("%s\\%s", objdir, path.filename(line)))
-
- -- repeat? rename it
- if os.isfile(out) then
- for i = 0, 10 do
- out = path.translate(string.format("%s\\%d_%s", objdir, i, path.filename(line)))
- if not os.isfile(out) then break end
- end
- end
-
- -- init command
- local cmd = string.format("%s -nologo -extract:%s -out:%s %s", self.name, line, out, libfile)
-
- -- extract it
- if 0 ~= os.execute(cmd) then
- utils.error("extract %s to %s failed!", libfile, objdir)
- windows.leave()
- return false
- end
- end
- end
-
- -- exit file
- file:close()
-
- -- leave envirnoment
- windows.leave()
-
- -- ok
- return true
-end
-
--- the main function
-function lib.main(self, cmd)
-
- -- the windows module
- local windows = platform.module()
- assert(windows)
-
- -- enter envirnoment
- windows.enter()
-
- -- execute it
- local ok = os.execute(cmd)
-
- -- leave envirnoment
- windows.leave()
-
- -- ok?
- return utils.ifelse(ok == 0, true, false)
-end
-
--- return module: lib
-return lib
diff --git a/xmake/core/platform/platforms/windows/tools/link.lua b/xmake/core/platform/platforms/windows/tools/link.lua
deleted file mode 100644
index a536626d6..000000000
--- a/xmake/core/platform/platforms/windows/tools/link.lua
+++ /dev/null
@@ -1,128 +0,0 @@
---!The Automatic Cross-platform Build Tool
---
--- XMake is free software; you can redistribute it and/or modify
--- it under the terms of the GNU Lesser General Public License as published by
--- the Free Software Foundation; either version 2.1 of the License, or
--- (at your option) any later version.
---
--- XMake is distributed in the hope that it will be useful,
--- but WITHOUT ANY WARRANTY; without even the implied warranty of
--- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
--- GNU Lesser General Public License for more details.
---
--- You should have received a copy of the GNU Lesser General Public License
--- along with XMake;
--- If not, see <a href="http://www.gnu.org/licenses/"> http://www.gnu.org/licenses/</a>
---
--- Copyright (C) 2015 - 2016, ruki All rights reserved.
---
--- @author ruki
--- @file link.lua
---
-
--- define module: link
-local link = link or {}
-
--- load modules
-local utils = require("base/utils")
-local string = require("base/string")
-local config = require("project/config")
-local platform = require("platform/platform")
-
--- init the compiler
-function link.init(self, name)
-
- -- save name
- self.name = name or "link.exe"
-
- -- the architecture
- local arch = config.get("arch")
- assert(arch)
-
- -- init flags for architecture
- local flags_arch = ""
- if arch == "x86" then flags_arch = "-machine:x86"
- elseif arch == "x64" or arch == "amd64" or arch == "x86_amd64" then flags_arch = "-machine:x64"
- end
-
- -- init ldflags
- self.ldflags = { "-nologo"
- , "-dynamicbase"
- , "-nxcompat"
- , flags_arch}
-
- -- init arflags
- self.arflags = {"-nologo", flags_arch}
-
- -- init shflags
- self.shflags = {"-nologo", flags_arch}
-
- -- init flags map
- self.mapflags =
- {
- -- strip
- ["-s"] = ""
- , ["-S"] = ""
-
- -- others
- , ["-ftrapv"] = ""
- , ["-fsanitize=address"] = ""
- }
-
-end
-
--- make the linker command
-function link.command_link(self, objfiles, targetfile, flags, logfile)
-
- -- redirect
- local redirect = ""
- if logfile then redirect = string.format(" > %s 2>&1", logfile) end
-
- -- make it
- local cmd = string.format("%s %s -out:%s %s%s", self.name, flags, targetfile, objfiles, redirect)
-
- -- too long?
- if #cmd > 256 then
- cmd = string.format("%s%s @<<\n%s -out:%s %s\n<<", self.name, redirect, flags, targetfile, objfiles)
- end
-
- -- ok?
- return cmd
-end
-
--- make the link flag
-function link.flag_link(self, link)
-
- -- make it
- return link .. ".lib"
-end
-
--- make the linkdir flag
-function link.flag_linkdir(self, linkdir)
-
- -- make it
- return "-libpath:" .. linkdir
-end
-
--- the main function
-function link.main(self, cmd)
-
- -- the windows module
- local windows = platform.module()
- assert(windows)
-
- -- enter envirnoment
- windows.enter()
-
- -- execute it
- local ok = os.execute(cmd)
-
- -- leave envirnoment
- windows.leave()
-
- -- ok?
- return utils.ifelse(ok == 0, true, false)
-end
-
--- return module: link
-return link
diff --git a/xmake/core/platform/platforms/windows/tools/ml.lua b/xmake/core/platform/platforms/windows/tools/ml.lua
deleted file mode 100644
index 5b91ab7b7..000000000
--- a/xmake/core/platform/platforms/windows/tools/ml.lua
+++ /dev/null
@@ -1,132 +0,0 @@
---!The Automatic Cross-platform Build Tool
---
--- XMake is free software; you can redistribute it and/or modify
--- it under the terms of the GNU Lesser General Public License as published by
--- the Free Software Foundation; either version 2.1 of the License, or
--- (at your option) any later version.
---
--- XMake is distributed in the hope that it will be useful,
--- but WITHOUT ANY WARRANTY; without even the implied warranty of
--- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
--- GNU Lesser General Public License for more details.
---
--- You should have received a copy of the GNU Lesser General Public License
--- along with XMake;
--- If not, see <a href="http://www.gnu.org/licenses/"> http://www.gnu.org/licenses/</a>
---
--- Copyright (C) 2015 - 2016, ruki All rights reserved.
---
--- @author ruki
--- @file ml.lua
---
-
--- define module: ml
-local ml = ml or {}
-
--- load modules
-local utils = require("base/utils")
-local string = require("base/string")
-local config = require("project/config")
-local platform = require("platform/platform")
-
--- init the compiler
-function ml.init(self, name)
-
- -- save name
- self.name = name or "ml.exe"
-
- -- init asflags
- self.asflags = { "-nologo", "-Gd", "-MP4", "-D_MBCS", "-D_CRT_SECURE_NO_WARNINGS"}
-
- -- init flags map
- self.mapflags =
- {
- -- optimize
- ["-O0"] = "-Od"
- , ["-O3"] = "-Ot"
- , ["-Ofast"] = "-Ox"
- , ["-fomit-frame-pointer"] = "-Oy"
-
- -- symbols
- , ["-g"] = "-Z7"
- , ["-fvisibility=.*"] = ""
-
- -- warnings
- , ["-Wall"] = "-W3" -- = "-Wall" will enable too more warnings
- , ["-W1"] = "-W1"
- , ["-W2"] = "-W2"
- , ["-W3"] = "-W3"
- , ["-Werror"] = "-WX"
- , ["%-Wno%-error=.*"] = ""
-
- -- vectorexts
- , ["-mmmx"] = "-arch:MMX"
- , ["-msse"] = "-arch:SSE"
- , ["-msse2"] = "-arch:SSE2"
- , ["-msse3"] = "-arch:SSE3"
- , ["-mssse3"] = "-arch:SSSE3"
- , ["-mavx"] = "-arch:AVX"
- , ["-mavx2"] = "-arch:AVX2"
- , ["-mfpu=.*"] = ""
-
- -- others
- , ["-ftrapv"] = ""
- , ["-fsanitize=address"] = ""
- }
-
-end
-
--- make the compiler command
-function ml.command_compile(self, srcfile, objfile, flags, logfile)
-
- -- redirect
- local redirect = ""
- if logfile then redirect = string.format(" > %s 2>&1", logfile) end
-
- -- make it
- return string.format("%s -c %s -Fo%s %s%s", self.name, flags, objfile, srcfile, redirect)
-end
-
--- make the define flag
-function ml.flag_define(self, define)
-
- -- make it
- return "-D" .. define:gsub("\"", "\\\"")
-end
-
--- make the undefine flag
-function ml.flag_undefine(self, undefine)
-
- -- make it
- return "-U" .. undefine
-end
-
--- make the includedir flag
-function ml.flag_includedir(self, includedir)
-
- -- make it
- return "-I" .. includedir
-end
-
--- the main function
-function ml.main(self, cmd)
-
- -- the windows module
- local windows = platform.module()
- assert(windows)
-
- -- enter envirnoment
- windows.enter()
-
- -- execute it
- local ok = os.execute(cmd)
-
- -- leave envirnoment
- windows.leave()
-
- -- ok?
- return utils.ifelse(ok == 0, true, false)
-end
-
--- return module: ml
-return ml
diff --git a/xmake/core/platform/platforms/windows/tools/nmake.lua b/xmake/core/platform/platforms/windows/tools/nmake.lua
deleted file mode 100644
index d2e1505f6..000000000
--- a/xmake/core/platform/platforms/windows/tools/nmake.lua
+++ /dev/null
@@ -1,75 +0,0 @@
---!The Automatic Cross-platform Build Tool
---
--- XMake is free software; you can redistribute it and/or modify
--- it under the terms of the GNU Lesser General Public License as published by
--- the Free Software Foundation; either version 2.1 of the License, or
--- (at your option) any later version.
---
--- XMake is distributed in the hope that it will be useful,
--- but WITHOUT ANY WARRANTY; without even the implied warranty of
--- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
--- GNU Lesser General Public License for more details.
---
--- You should have received a copy of the GNU Lesser General Public License
--- along with XMake;
--- If not, see <a href="http://www.gnu.org/licenses/"> http://www.gnu.org/licenses/</a>
---
--- Copyright (C) 2015 - 2016, ruki All rights reserved.
---
--- @author ruki
--- @file nmake.lua
---
-
--- load modules
-local os = require("base/os")
-local path = require("base/path")
-local utils = require("base/utils")
-local string = require("base/string")
-local option = require("base/option")
-local config = require("project/config")
-local platform = require("platform/platform")
-
--- define module: nmake
-local nmake = nmake or {}
-
--- the init function
-function nmake.init(self, name)
-
- -- save name
- self.name = name or "nmake.exe"
-
- -- is verbose?
- self._VERBOSE = utils.ifelse(option.get("verbose"), "-v", "")
-
-end
-
--- the main function
-function nmake.main(self, mkfile, target)
-
- -- the windows module
- local windows = platform.module()
- assert(windows)
-
- -- enter envirnoment
- windows.enter()
-
- -- make command
- local cmd = nil
- if mkfile and os.isfile(mkfile) then
- cmd = string.format("%s /nologo /f %s %s VERBOSE=%s", self.name, mkfile, target or "", self._VERBOSE)
- else
- cmd = string.format("%s /nologo %s VERBOSE=%s", self.name, target or "", self._VERBOSE)
- end
-
- -- done
- local ok = os.execute(cmd)
-
- -- leave envirnoment
- windows.leave()
-
- -- ok?
- return utils.ifelse(ok == 0, true, false)
-end
-
--- return module: nmake
-return nmake
diff --git a/xmake/core/platform/tool.lua b/xmake/core/platform/tool.lua
deleted file mode 100644
index cc7346179..000000000
--- a/xmake/core/platform/tool.lua
+++ /dev/null
@@ -1,224 +0,0 @@
---!The Automatic Cross-platform Build Tool
---
--- XMake is free software; you can redistribute it and/or modify
--- it under the terms of the GNU Lesser General Public License as published by
--- the Free Software Foundation; either version 2.1 of the License, or
--- (at your option) any later version.
---
--- XMake is distributed in the hope that it will be useful,
--- but WITHOUT ANY WARRANTY; without even the implied warranty of
--- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
--- GNU Lesser General Public License for more details.
---
--- You should have received a copy of the GNU Lesser General Public License
--- along with XMake;
--- If not, see <a href="http://www.gnu.org/licenses/"> http://www.gnu.org/licenses/</a>
---
--- Copyright (C) 2015 - 2016, ruki All rights reserved.
---
--- @author ruki
--- @file tool.lua
---
-
--- define module: tool
-local tool = tool or {}
-
--- load modules
-local os = require("base/os")
-local path = require("base/path")
-local utils = require("base/utils")
-local string = require("base/string")
-local platform = require("platform/platform")
-
--- match the tool name
-function tool._match(name, toolname)
-
- -- match full? ok
- if name == toolname then return 100 end
-
- -- match the last word? ok
- if name:find(toolname .. "$") then return 80 end
-
- -- match the partial word? ok
- if name:find("%-" .. toolname) then return 60 end
-
- -- contains it? ok
- if name:find(toolname, 1, true) then return 30 end
-
- -- not matched
- return 0
-end
-
--- find tool from the given root directory and name
-function tool._find_from(root, name)
-
- -- attempt to get it directly first
- local filepath = string.format("%s/%s.lua", root, name)
- if os.isfile(filepath) then
- return filepath
- end
-
- -- make the lower name
- name = name:lower()
-
- -- get all tool files
- local file_ok = nil
- local score_maxn = 0
- local files = os.match(string.format("%s/*.lua", root))
- for _, file in ipairs(files) do
-
- -- the tool name
- local toolname = path.basename(file)
-
- -- found it?
- if toolname and toolname ~= "tool" then
-
- -- match score
- local score = tool._match(name, toolname:lower())
-
- -- ok?
- if score >= 100 then return file end
-
- -- select the file with the max score
- if score > score_maxn then
- file_ok = file
- score_maxn = score
- end
- end
- end
-
- -- ok?
- return file_ok
-end
-
--- probe it's absolute path if exists from the given tool name and root directory
-function tool._probe(root, name)
-
- -- check
- assert(root and name)
-
- -- make the tool path
- local toolpath = string.format("%s/%s", root, name)
- toolpath = path.translate(toolpath)
-
- -- the tool exists? ok
- if toolpath and os.isfile(toolpath) then
- return toolpath
- end
-end
-
--- find tool from the given name and directory (optional)
-function tool.find(name, root)
-
- -- check
- assert(name)
-
- -- init filename
- local filepath = nil
-
- -- uses the basename only
- name = path.basename(name)
- assert(name)
-
- -- only find it from this directory if the given directory exists
- if root then return tool._find_from(root, name) end
-
- -- attempt to find it from the current platform directory first
- if not filepath then filepath = tool._find_from(path.join(platform.directory(), "tools"), name) end
-
- -- attempt to find it from the script directory
- if not filepath then filepath = tool._find_from(path.join(xmake._CORE_DIR, "platform/tools"), name) end
-
- -- ok?
- return filepath
-end
-
--- load tool from the given name and directory (optional)
-function tool.load(name, root)
-
- -- check
- assert(name)
-
- -- get it directly from cache dirst
- tool._TOOLS = tool._TOOLS or {}
- if tool._TOOLS[name] then
- return tool._TOOLS[name]
- end
-
- -- find the tool file path
- local toolpath = tool.find(name, root)
-
- -- not exists?
- if not toolpath or not os.isfile(toolpath) then
- return nil, string.format("%s not found!", name)
- end
-
- -- load script
- local script, errors = loadfile(toolpath)
- if script then
-
- -- load tool
- local ok, result = pcall(script)
- if not ok then
- return nil, result
- end
-
- -- init tool
- if result and result.init then
- result:init(name)
- end
-
- -- save tool to the cache
- tool._TOOLS[name] = result
-
- -- ok?
- return result
- end
-
-
- -- failed
- return nil, errors
-end
-
--- get the given tool script from the given kind
-function tool.get(kind)
-
- -- get the tool name
- local toolname = platform.tool(kind)
- if not toolname then
- return nil, string.format("cannot get tool name for %s", kind)
- end
-
- -- load it
- return tool.load(toolname)
-end
-
--- probe it's absolute path if exists from the given tool name
-function tool.probe(name, dirs)
-
- -- check
- assert(name)
-
- -- attempt to run it directly first
- if os.execute(string.format("%s > %s 2>&1", name, xmake._NULDEV)) ~= 0x7f00 then
- return name
- end
-
- -- attempt to get it from the given directories
- if dirs then
- for _, dir in ipairs(table.wrap(dirs)) do
-
- -- probe it
- local toolpath = tool._probe(dir, name)
-
- -- ok?
- if toolpath and os.execute(string.format("%s > %s 2>&1", toolpath, xmake._NULDEV)) ~= 0x7f00 then
- return toolpath
- end
- end
- end
-end
-
-
--- return module: tool
-return tool
diff --git a/xmake/core/tool/tool.lua b/xmake/core/tool/tool.lua
index 75ef33a22..98ab836ac 100644
--- a/xmake/core/tool/tool.lua
+++ b/xmake/core/tool/tool.lua
@@ -388,6 +388,7 @@ function tool.check(shellname, dirs)
-- check
assert(shellname)
+ -- FIXME: 7f00
-- attempt to run it directly first
if os.execute(string.format("%s > %s 2>&1", shellname, xmake._NULDEV)) ~= 0x7f00 then
return shellname
diff --git a/xmake/tools/compiler/swiftc.lua b/xmake/tools/compiler/swiftc.lua
index b61a342d6..517df88a8 100644
--- a/xmake/tools/compiler/swiftc.lua
+++ b/xmake/tools/compiler/swiftc.lua
@@ -64,6 +64,13 @@ function init(shellname)
end
+-- get the property
+function get(name)
+
+ -- get it
+ return _g[name]
+end
+
-- make the compile command
function command(srcfile, objfile, flags, logfile)
diff --git a/xmake/tools/linker/ar.lua b/xmake/tools/linker/ar.lua
index 12beaab0a..3c261a375 100644
--- a/xmake/tools/linker/ar.lua
+++ b/xmake/tools/linker/ar.lua
@@ -27,10 +27,17 @@ function init(shellname)
_g.shellname = shellname or "ar"
-- init arflags
- _g.arflags = { "-crs" }
+ _g.arflags = { "-cr" }
end
+-- get the property
+function get(name)
+
+ -- get it
+ return _g[name]
+end
+
-- make the command
function command(objfiles, targetfile, flags, logfile)