diff options
| author | ruki <[email protected]> | 2015-06-12 13:54:35 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2015-06-12 13:54:35 +0800 |
| commit | 3c4c1616be193d5146e2ddd9f8dcc706baf1f8f5 (patch) | |
| tree | 080d3a77b57526d71d154e7aa0465b9d70390821 /xmake/scripts | |
| parent | 5dbb7213dae2568a85bd4cbc7fcfeefc8a908fc9 (diff) | |
add mingw platform
Diffstat (limited to 'xmake/scripts')
| -rw-r--r-- | xmake/scripts/platform/android/prober.lua | 14 | ||||
| -rw-r--r-- | xmake/scripts/platform/mingw/mingw.lua | 87 | ||||
| -rw-r--r-- | xmake/scripts/platform/mingw/prober.lua | 190 |
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 |
