summaryrefslogtreecommitdiff
path: root/xmake/scripts/platform/windows
diff options
context:
space:
mode:
authorruki <[email protected]>2015-06-04 15:46:43 +0800
committerruki <[email protected]>2015-06-04 15:46:43 +0800
commit6c5fbedfe26db54b0bbb95fa9154ed759c7ad98f (patch)
treec7a1d2ba8ee4076e7576df79a53c1dfaadf7f14b /xmake/scripts/platform/windows
parent83295bd3a1b27f844759aeadbbdc23f51e2f2d89 (diff)
rebuild compiler and linker
Diffstat (limited to 'xmake/scripts/platform/windows')
-rw-r--r--xmake/scripts/platform/windows/prober.lua203
-rw-r--r--xmake/scripts/platform/windows/tools/nmake.lua112
-rw-r--r--xmake/scripts/platform/windows/windows.lua87
3 files changed, 0 insertions, 402 deletions
diff --git a/xmake/scripts/platform/windows/prober.lua b/xmake/scripts/platform/windows/prober.lua
deleted file mode 100644
index 0eb5d0157..000000000
--- a/xmake/scripts/platform/windows/prober.lua
+++ /dev/null
@@ -1,203 +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) 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")
-
--- define module: _prober
-local _prober = _prober or {}
-
--- probe the architecture
-function _prober._probe_arch(configs)
-
- -- get the architecture
- local arch = configs.arch
-
- -- ok?
- if arch then return true end
-
- -- init the default architecture
- configs.arch = xmake._ARCH
-
- -- ok
- return true
-end
-
--- probe the vs version
-function _prober._probe_vs_version(configs)
-
- -- get the vs version
- local vs = configs.vs
-
- -- ok?
- if vs then return true end
-
- -- clear it first
- vs = nil
-
- -- make the map table
- local map =
- {
- VS120COMNTOOLS = "2013"
- , VS110COMNTOOLS = "2012"
- , VS100COMNTOOLS = "2010"
- , VS90COMNTOOLS = "2008"
- , VS80COMNTOOLS = "2005"
- , VS71COMNTOOLS = "2003"
- , VS70COMNTOOLS = "7.0"
- , VS60COMNTOOLS = "6.0"
- , VS50COMNTOOLS = "5.0"
- , VS42COMNTOOLS = "4.2"
- }
-
- -- attempt to get it from the envirnoment variable
- if not vs then
- for k, v in pairs(map) do
- if os.getenv(k) then
- vs = v
- break
- end
- end
- end
-
- -- probe ok? update it
- if vs then
- configs.vs = vs
- else
- -- failed
- utils.error("The Microsoft Visual Studio is unknown now, please config it first!")
- utils.error(" - xmake config --vs=xxx")
- utils.error("or - xmake global --vs=xxx")
- return false
- end
-
- -- ok
- return true
-end
-
--- probe the vs path
-function _prober._probe_vs_path(configs)
-
- -- ok?
- if configs.__vsenv_path then return true end
-
- -- get the vs version
- local vs = configs.vs
- assert(vs)
-
- -- make the map table
- local map =
- {
- ["2013"] = "VS120COMNTOOLS"
- , ["2012"] = "VS110COMNTOOLS"
- , ["2010"] = "VS100COMNTOOLS"
- , ["2008"] = "VS90COMNTOOLS"
- , ["2005"] = "VS80COMNTOOLS"
- , ["2003"] = "VS71COMNTOOLS"
- , ["7.0"] = "VS70COMNTOOLS"
- , ["6.0"] = "VS60COMNTOOLS"
- , ["5.0"] = "VS50COMNTOOLS"
- , ["4.2"] = "VS42COMNTOOLS"
- }
-
- -- attempt to get the tools directory from the envirnoment variable
- local toolsdir = map[vs]
- if toolsdir then
- toolsdir = os.getenv(toolsdir)
- end
-
- -- the vsvars32.bat path
- local vsvars32 = toolsdir .. "\\vsvars32.bat"
- if not os.isfile(vsvars32) then
- -- error
- utils.error("not found %s", vsvars32)
- return false
- end
-
- -- get the temporary directory
- local tmpdir = os.tmpdir()
- assert(tmpdir)
-
- -- make the call(vsvars32.bat) file
- local callpath = tmpdir .. "\\call_vsvars32.bat"
- local callfile = io.open(callpath, "w")
- assert(callfile)
-
- -- make call scripts
- callfile:write("@echo off\n")
- callfile:write(string.format("call \"%s\" > nul\n", vsvars32))
- callfile:write("echo return \n")
- callfile:write("echo { \n")
- callfile:write("echo path = \"%path%\"\n")
- callfile:write("echo , lib = \"%lib%\"\n")
- callfile:write("echo , libpath = \"%libpath%\"\n")
- callfile:write("echo , include = \"%include%\"\n")
- callfile:write("echo , devenvdir = \"%devenvdir%\"\n")
- callfile:write("echo , vsinstalldir = \"%vsinstalldir%\"\n")
- callfile:write("echo , vcinstalldir = \"%vcinstalldir%\"\n")
- callfile:write("echo } \n")
-
- -- close the file
- callfile:close()
-
- -- execute the call(vsvars32.bat) file and get all envirnoment variables
- local cmd = io.popen(callpath)
- local results = cmd:read("*all")
- cmd:close()
-
- -- translate '\' => '\\'
- results = results:gsub("\\", "\\\\")
-
- -- get all envirnoment variables
- local variables = assert(loadstring(results))()
- if not variables or not variables.path then
- return false
- end
-
- -- save the variables
- for k, v in pairs(variables) do
- configs["__vsenv_" .. k] = v
- end
-
- -- ok
- return true
-end
-
--- probe the configure
-function _prober.done(configs, is_global)
-
- -- probe the architecture
- if not _prober._probe_arch(configs) then return end
-
- -- probe the vs version
- if not _prober._probe_vs_version(configs) then return end
-
- -- probe the vs path
- if not _prober._probe_vs_path(configs) then return end
-
-end
-
--- return module: _prober
-return _prober
diff --git a/xmake/scripts/platform/windows/tools/nmake.lua b/xmake/scripts/platform/windows/tools/nmake.lua
deleted file mode 100644
index 6d6b21258..000000000
--- a/xmake/scripts/platform/windows/tools/nmake.lua
+++ /dev/null
@@ -1,112 +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) 2009 - 2015, 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 config = require("base/config")
-
--- define module: nmake
-local nmake = nmake or {}
-
--- enter the given environment
-function nmake._enter(name)
-
- -- check
- assert(name)
-
- -- get the pathes for the vs environment
- local old = nil
- local new = config.get("__vsenv_" .. name)
- if new then
-
- -- get the current pathes
- old = os.getenv(name) or ""
-
- -- append the current pathes
- new = new .. ";" .. old
-
- -- update the pathes for the environment
- os.setenv(name, new)
- end
-
- -- return the previous environment
- return old;
-end
-
--- leave the given environment
-function nmake._leave(name, old)
-
- -- check
- assert(name)
-
- -- restore the previous environment
- if old then
- os.setenv(name, old)
- end
-end
-
--- the init function
-function nmake.init(name)
-
- -- save name
- nmake._NAME = name or "nmake.exe"
-
- -- is verbose?
- nmake._VERBOSE = utils.ifelse(xmake._OPTIONS.verbose, "-v", "")
-
-end
-
--- the main function
-function nmake.main(mkfile, target)
-
- -- enter the vs environment
- local pathes = nmake._enter("path")
- local libs = nmake._enter("lib")
- local includes = nmake._enter("include")
- local libpathes = nmake._enter("libpath")
-
- -- make command
- local cmd = nil
- if mkfile and os.isfile(mkfile) then
- cmd = string.format("%s /f %s %s VERBOSE=%s 2> nul", nmake._NAME, mkfile, target or "", nmake._VERBOSE)
- else
- cmd = string.format("%s %s VERBOSE=%s 2> nul", nmake._NAME, target or "", nmake._VERBOSE)
- end
-
- -- done
- local ok = os.execute(cmd)
-
- -- leave the vs environment
- nmake._leave("path", pathes)
- nmake._leave("lib", libs)
- nmake._leave("include", includes)
- nmake._leave("libpath", libpathes)
-
- -- ok?
- return utils.ifelse(ok == 0, true, false)
-end
-
--- return module: nmake
-return nmake
diff --git a/xmake/scripts/platform/windows/windows.lua b/xmake/scripts/platform/windows/windows.lua
deleted file mode 100644
index 5a7b48c72..000000000
--- a/xmake/scripts/platform/windows/windows.lua
+++ /dev/null
@@ -1,87 +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) 2009 - 2015, ruki All rights reserved.
---
--- @author ruki
--- @file _windows.lua
---
-
--- define module: _windows
-local _windows = _windows or {}
-
--- load modules
-local config = require("base/config")
-
--- init host
-_windows._HOST = "windows"
-
--- init architectures
-_windows._ARCHS = {"x86", "x64"}
-
--- make configure
-function _windows.make(configs)
-
- -- init the file formats
- configs.formats = {}
- configs.formats.static = {"", ".lib"}
- configs.formats.object = {"", ".obj"}
- configs.formats.shared = {"", ".dll"}
- configs.formats.binary = {"", ".exe"}
-
- -- init the toolchains
- configs.tools = {}
- configs.tools.make = "nmake"
-
- -- init the compiler
- configs.compiler = {}
- configs.compiler.cc = config.get("cc") or "cl.exe"
- configs.compiler.cxx = config.get("cxx") or "cl.exe"
-
- -- init the linker
- configs.linker = {}
- configs.linker.binary = config.get("ld") or "link.exe"
- configs.linker.static = config.get("ar") or "link.exe"
- configs.linker.shared = config.get("sh") or "link.exe"
-
-end
-
--- get the option menu for action: xmake config or global
-function _windows.menu(action)
-
- -- init config option menu
- _windows._MENU_CONFIG = _windows._MENU_CONFIG or
- { {}
- , {nil, "vs", "kv", "auto", "The Microsoft Visual Studio" }
- , }
-
- -- init global option menu
- _windows._MENU_GLOBAL = _windows._MENU_GLOBAL or
- { {}
- , {nil, "vs", "kv", "auto", "The Microsoft Visual Studio" }
- , }
-
- -- get the option menu
- if action == "config" then
- return _windows._MENU_CONFIG
- elseif action == "global" then
- return _windows._MENU_GLOBAL
- end
-end
-
-
--- return module: _windows
-return _windows