summaryrefslogtreecommitdiff
path: root/xmake/scripts
diff options
context:
space:
mode:
authorruki <[email protected]>2015-06-12 13:54:35 +0800
committerruki <[email protected]>2015-06-12 13:54:35 +0800
commit3c4c1616be193d5146e2ddd9f8dcc706baf1f8f5 (patch)
tree080d3a77b57526d71d154e7aa0465b9d70390821 /xmake/scripts
parent5dbb7213dae2568a85bd4cbc7fcfeefc8a908fc9 (diff)
add mingw platform
Diffstat (limited to 'xmake/scripts')
-rw-r--r--xmake/scripts/platform/android/prober.lua14
-rw-r--r--xmake/scripts/platform/mingw/mingw.lua87
-rw-r--r--xmake/scripts/platform/mingw/prober.lua190
3 files changed, 287 insertions, 4 deletions
diff --git a/xmake/scripts/platform/android/prober.lua b/xmake/scripts/platform/android/prober.lua
index 45f4c23ea..756dcec50 100644
--- a/xmake/scripts/platform/android/prober.lua
+++ b/xmake/scripts/platform/android/prober.lua
@@ -83,13 +83,19 @@ function prober._probe_ndk_sdkver(configs)
end
-- probe ok? update it
- if ndk_sdkver > 0 then
+ if type(ndk_sdkver) == "number" and ndk_sdkver > 0 then
+
+ -- save it
configs.set("ndk_sdkver", ndk_sdkver)
configs.set("__ndk_sdkdir", string.format("%s/platforms/android-%d", ndk, ndk_sdkver))
- end
- -- trace
- utils.verbose("checking for the SDK version of NDK ... %s", string.format("android-%d", ndk_sdkver))
+ -- trace
+ utils.verbose("checking for the SDK version of NDK ... %s", string.format("android-%d", ndk_sdkver))
+ else
+
+ -- trace
+ utils.verbose("checking for the SDK version of NDK ... no")
+ end
-- ok
return true
diff --git a/xmake/scripts/platform/mingw/mingw.lua b/xmake/scripts/platform/mingw/mingw.lua
new file mode 100644
index 000000000..d4ae010bb
--- /dev/null
+++ b/xmake/scripts/platform/mingw/mingw.lua
@@ -0,0 +1,87 @@
+--!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) 2009 - 2015, ruki All rights reserved.
+--
+-- @author ruki
+-- @file mingw.lua
+--
+
+-- define module: mingw
+local mingw = mingw or {}
+
+-- load modules
+local config = require("base/config")
+
+-- init host
+mingw._HOST = xmake._HOST
+
+-- init architectures
+mingw._ARCHS = {"x86", "x64"}
+
+-- make configure
+function mingw.make(configs)
+
+ -- init the file formats
+ configs.formats = {}
+ configs.formats.static = {"lib", ".a"}
+ configs.formats.object = {"", ".o"}
+ configs.formats.shared = {"lib", ".so"}
+
+ -- init the toolchains
+ configs.tools = {}
+ configs.tools.make = config.get("make")
+ configs.tools.ccache = config.get("__ccache")
+ configs.tools.cc = config.get("cc")
+ configs.tools.cxx = config.get("cxx")
+ configs.tools.ld = config.get("ld")
+ configs.tools.ar = config.get("ar")
+ configs.tools.sh = config.get("sh")
+
+ -- init flags for architecture
+ local archflags = nil
+ local arch = config.get("arch")
+ if arch then
+ if arch == "x64" then archflags = "-m64"
+ elseif arch == "x86" then archflags = "-m32"
+ end
+ end
+ configs.cxflags = { archflags }
+ configs.asflags = { archflags }
+ configs.ldflags = { archflags }
+ configs.shflags = { archflags }
+
+end
+
+-- get the option menu for action: xmake config or global
+function mingw.menu(action)
+
+ -- init config option menu
+ mingw._MENU_CONFIG = mingw._MENU_CONFIG or {}
+
+ -- init global option menu
+ mingw._MENU_GLOBAL = mingw._MENU_GLOBAL or {}
+
+ -- get the option menu
+ if action == "config" then
+ return mingw._MENU_CONFIG
+ elseif action == "global" then
+ return mingw._MENU_GLOBAL
+ end
+end
+
+-- return module: mingw
+return mingw
diff --git a/xmake/scripts/platform/mingw/prober.lua b/xmake/scripts/platform/mingw/prober.lua
new file mode 100644
index 000000000..51074d9a3
--- /dev/null
+++ b/xmake/scripts/platform/mingw/prober.lua
@@ -0,0 +1,190 @@
+--!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) 2009 - 2015, ruki All rights reserved.
+--
+-- @author ruki
+-- @file prober.lua
+--
+
+-- load modules
+local os = require("base/os")
+local path = require("base/path")
+local utils = require("base/utils")
+local string = require("base/string")
+local tools = require("tools/tools")
+local config = require("base/config")
+local global = require("base/global")
+
+-- define module: prober
+local prober = prober or {}
+
+-- probe the architecture
+function prober._probe_arch(configs)
+
+ -- get the architecture
+ local arch = configs.get("arch")
+
+ -- ok?
+ if arch then return true end
+
+ -- init the default architecture
+ configs.set("arch", "x86")
+
+ -- trace
+ utils.verbose("checking for the architecture ... %s", configs.get("arch"))
+
+ -- ok
+ return true
+end
+
+-- probe the make
+function prober._probe_make(configs)
+
+ -- ok?
+ local make = configs.get("make")
+ if make then return true end
+
+ -- probe the make path
+ make = tools.probe("make", {"/usr/bin", "/usr/local/bin", "/opt/bin", "/opt/local/bin"})
+
+ -- probe ok? update it
+ if make then configs.set("make", make) end
+
+ -- trace
+ utils.verbose("checking for the make ... %s", utils.ifelse(make, make, "no"))
+
+ -- ok
+ return true
+end
+
+-- probe the ccache
+function prober._probe_ccache(configs)
+
+ -- ok?
+ local ccache_enable = configs.get("ccache")
+ if ccache_enable and configs.get("__ccache") then return true end
+
+ -- disable?
+ if type(ccache_enable) == "boolean" and not ccache_enable then
+ configs.set("__ccache", nil)
+ return true
+ end
+
+ -- probe the ccache path
+ local ccache_path = tools.probe("ccache", {"/usr/bin", "/usr/local/bin", "/opt/bin", "/opt/local/bin"})
+
+ -- probe ok? update it
+ if ccache_path then
+ configs.set("ccache", true)
+ configs.set("__ccache", ccache_path)
+ else
+ configs.set("ccache", false)
+ end
+
+ -- trace
+ utils.verbose("checking for the ccache ... %s", utils.ifelse(ccache_path, ccache_path, "no"))
+
+ -- ok
+ return true
+end
+
+-- probe the tool path
+function prober._probe_toolpath(configs, kind, cross, name, description)
+
+ -- check
+ assert(kind)
+
+ -- get the cross
+ cross = configs.get("cross") or cross
+
+ -- attempt to get it from the given cross toolchains
+ local toolpath = nil
+ local toolchains = configs.get("toolchains")
+ if toolchains then
+ toolpath = tools.probe(cross .. (configs.get(kind) or name), toolchains)
+ end
+
+ -- attempt to get it directly from the configure
+ if not toolpath then
+ toolpath = configs.get(kind)
+ end
+
+ -- attempt to run it directly
+ if not toolpath then
+ toolpath = tools.probe(cross .. name)
+ end
+
+ -- probe ok? update it
+ if toolpath then configs.set(kind, toolpath) end
+
+ -- trace
+ utils.verbose("checking for %s (%s) ... %s", description, kind, utils.ifelse(toolpath, path.filename(toolpath), "no"))
+
+ -- ok
+ return true
+end
+
+-- probe the toolchains
+function prober._probe_toolchains(configs)
+
+ -- init the default cross from the current host and architecture
+ local cross = ""
+ local arch = configs.get("arch")
+ if arch then
+ if xmake._HOST == "macosx" and arch == "x86" then
+ cross = "i386-mingw32-"
+ elseif arch == "x86" then
+ cross = "i686-w64-mingw32-"
+ elseif arch == "x64" then
+ cross = "x86_64-w64-mingw32-"
+ end
+ end
+
+ -- done
+ if not prober._probe_toolpath(configs, "cc", cross, "gcc", "the c compiler") then return false end
+ if not prober._probe_toolpath(configs, "cxx", cross, "g++", "the c++ compiler") then return false end
+ if not prober._probe_toolpath(configs, "as", cross, "gcc", "the assember") then return false end
+ if not prober._probe_toolpath(configs, "ld", cross, "g++", "the linker") then return false end
+ if not prober._probe_toolpath(configs, "ar", cross, "ar", "the static library linker") then return false end
+ if not prober._probe_toolpath(configs, "sh", cross, "g++", "the shared library linker") then return false end
+ return true
+end
+
+-- probe the project configure
+function prober.config()
+
+ -- call all probe functions
+ utils.call( { prober._probe_arch
+ , prober._probe_make
+ , prober._probe_ccache
+ , prober._probe_toolchains}
+ , nil
+ , config)
+end
+
+-- probe the global configure
+function prober.global()
+
+ -- call all probe functions
+ utils.call( { prober._probe_make
+ , prober._probe_ccache}
+ , nil
+ , global)
+end
+
+-- return module: prober
+return prober