diff options
| author | ruki <[email protected]> | 2020-05-20 23:50:04 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2020-05-20 17:00:24 +0800 |
| commit | a896b35be6d07660cf65c1885a41edd568e5fdf0 (patch) | |
| tree | 9580e5b50a039a77ce0ccf1d620aac4fc3508318 | |
| parent | c6d413d07d771ed199b1b4d747625a6a7059fdca (diff) | |
improve cygwin platform
| -rw-r--r-- | xmake/platforms/cygwin/check.lua | 163 | ||||
| -rw-r--r-- | xmake/platforms/cygwin/load.lua | 46 | ||||
| -rw-r--r-- | xmake/platforms/cygwin/xmake.lua | 4 |
3 files changed, 23 insertions, 190 deletions
diff --git a/xmake/platforms/cygwin/check.lua b/xmake/platforms/cygwin/check.lua index 22d8809ad..8cd3cfbe0 100644 --- a/xmake/platforms/cygwin/check.lua +++ b/xmake/platforms/cygwin/check.lua @@ -20,153 +20,32 @@ -- imports import("core.project.config") -import("core.base.singleton") -import("detect.sdks.find_cross_toolchain") -import("private.platform.toolchain") import("private.platform.check_arch") -import("private.platform.check_toolchain") - --- check the architecture -function _check_arch() - - -- get the architecture - local arch = config.get("arch") - if not arch then - - -- init the default architecture - config.set("arch", config.get("cross") and "none" or os.subarch()) - - -- trace - print("checking for the architecture ... %s", config.get("arch")) - end -end - --- get toolchains -function _toolchains() - - -- find cross toolchain - local cross = "" - local cross_toolchain = find_cross_toolchain(config.get("sdk") or config.get("bin"), {bindir = config.get("bin"), cross = config.get("cross")}) - if cross_toolchain then - config.set("cross", cross_toolchain.cross, {readonly = true, force = true}) - config.set("bin", cross_toolchain.bindir, {readonly = true, force = true}) - cross = cross_toolchain.cross - end - - -- init toolchains - local cc = toolchain("the c compiler") - local cxx = toolchain("the c++ compiler") - local ld = toolchain("the linker") - local sh = toolchain("the shared library linker") - local ar = toolchain("the static library archiver") - local ex = toolchain("the static library extractor") - local mm = toolchain("the objc compiler") - local mxx = toolchain("the objc++ compiler") - local as = toolchain("the assember") - local gc = toolchain("the golang compiler") - local gc_ld = toolchain("the golang linker") - local gc_ar = toolchain("the golang static library archiver") - local dc = toolchain("the dlang compiler") - local dc_ld = toolchain("the dlang linker") - local dc_sh = toolchain("the dlang shared library linker") - local dc_ar = toolchain("the dlang static library archiver") - local rc = toolchain("the rust compiler") - local rc_ld = toolchain("the rust linker") - local rc_sh = toolchain("the rust shared library linker") - local rc_ar = toolchain("the rust static library archiver") - local cu = toolchain("the cuda compiler") - local cu_ld = toolchain("the cuda linker") - local cu_ccbin = toolchain("the cuda host c++ compiler") - local toolchains = {cc = cc, cxx = cxx, as = as, ld = ld, sh = sh, ar = ar, ex = ex, - mm = mm, mxx = mxx, - gc = gc, ["gcld"] = gc_ld, ["gcar"] = gc_ar, - dc = dc, ["dcld"] = dc_ld, ["dcsh"] = dc_sh, ["dcar"] = dc_ar, - rc = rc, ["rcld"] = rc_ld, ["rcsh"] = rc_sh, ["rcar"] = rc_ar, - cu = cu, ["culd"] = cu_ld, ["cu-ccbin"] = cu_ccbin} - - -- init the c compiler - cc:add("$(env CC)", {name = "gcc", cross = cross}, {name = "clang", cross = cross}) - - -- init the c++ compiler - cxx:add("$(env CXX)") - cxx:add({name = "gcc", cross = cross}) - cxx:add({name = "clang", cross = cross}) - cxx:add({name = "g++", cross = cross}) - cxx:add({name = "clang++", cross = cross}) - - -- init the assember - as:add("$(env AS)", {name = "gcc", cross = cross}, {name = "clang", cross = cross}) - - -- init the linker - ld:add("$(env LD)", "$(env CXX)") - ld:add({name = "g++", cross = cross}) - ld:add({name = "gcc", cross = cross}) - ld:add({name = "clang++", cross = cross}) - ld:add({name = "clang", cross = cross}) - - -- init the shared library linker - sh:add("$(env SH)", "$(env CXX)") - sh:add({name = "g++", cross = cross}) - sh:add({name = "gcc", cross = cross}) - sh:add({name = "clang++", cross = cross}) - sh:add({name = "clang", cross = cross}) - - -- init the static library archiver - ar:add("$(env AR)", {name = "ar", cross = cross}) - - -- init the static library extractor - ex:add("$(env AR)", {name = "ar", cross = cross}) - - -- init the objc compiler - mm:add("$(env MM)", {name = "clang", cross = cross}, {name = "gcc", cross = cross}) - - -- init the objc++ compiler - mxx:add("$(env MXX)") - mxx:add({name = "clang", cross = cross}) - mxx:add({name = "clang++", cross = cross}) - mxx:add({name = "gcc", cross = cross}) - mxx:add({name = "g++", cross = cross}) - - -- init the golang compiler and linker - gc:add("$(env GC)", "go", "gccgo") - gc_ld:add("$(env GC)", "go", "gccgo") - gc_ar:add("$(env GC)", "go", "gccgo") - - -- init the dlang compiler and linker - dc:add("$(env DC)", "dmd", "ldc2", "gdc") - dc_ld:add("$(env DC)", "dmd", "ldc2", "gdc") - dc_sh:add("$(env DC)", "dmd", "ldc2", "gdc") - dc_ar:add("$(env DC)", "dmd", "ldc2", "gdc") - - -- init the rust compiler and linker - rc:add("$(env RC)", "rustc") - rc_ld:add("$(env RC)", "rustc") - rc_sh:add("$(env RC)", "rustc") - rc_ar:add("$(env RC)", "rustc") - - -- init the cuda compiler and linker - cu:add("nvcc", "clang++", "clang") - cu_ld:add("nvcc") - if not cross or cross == "" then - cu_ccbin:add("$(env CXX)", "$(env CC)", "gcc", "clang", "g++", "clang++") - end - - return toolchains -end -- check it -function main(platform, name) +function main(platform) - -- only check the given config name? - if name then - local toolchain = singleton.get("cygwin.toolchains", _toolchains)[name] - if toolchain then - check_toolchain(config, name, toolchain) - end - else + -- check arch + check_arch(config, config.get("cross") and "none" or os.subarch()) - -- check arch - _check_arch() + -- check toolchains + local toolchains = platform:toolchains() + local idx = 1 + local num = #toolchains + local standalone = false + while idx <= num do + local toolchain = toolchains[idx] + -- we need remove other standalone toolchains if standalone toolchain found + if (standalone and toolchain:standalone()) or not toolchain:check() then + table.remove(toolchains, idx) + num = num - 1 + else + if toolchain:standalone() then + standalone = true + end + idx = idx + 1 + end end + assert(#toolchains > 0, "toolchains not found!") end diff --git a/xmake/platforms/cygwin/load.lua b/xmake/platforms/cygwin/load.lua deleted file mode 100644 index c101640b5..000000000 --- a/xmake/platforms/cygwin/load.lua +++ /dev/null @@ -1,46 +0,0 @@ ---!A cross-platform build utility based on Lua --- --- Licensed under the Apache License, Version 2.0 (the "License"); --- you may not use this file except in compliance with the License. --- You may obtain a copy of the License at --- --- http://www.apache.org/licenses/LICENSE-2.0 --- --- Unless required by applicable law or agreed to in writing, software --- distributed under the License is distributed on an "AS IS" BASIS, --- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. --- See the License for the specific language governing permissions and --- limitations under the License. --- --- Copyright (C) 2015-2020, TBOOX Open Source Group. --- --- @author ruki --- @file load.lua --- - --- imports -import("core.project.config") - --- load it -function main(platform) - - -- init flags for architecture - local archflags = nil - local arch = config.get("arch") - if arch then - if arch == "x86_64" then archflags = "-m64" - elseif arch == "i386" then archflags = "-m32" - else archflags = "-arch " .. arch - end - end - if archflags then - platform:add("cxflags", archflags) - platform:add("asflags", archflags) - platform:add("ldflags", archflags) - platform:add("shflags", archflags) - end - - -- init flags for asm - platform:add("yasm.asflags", "-f", arch == "x86_64" and "win64" or "win32") -end - diff --git a/xmake/platforms/cygwin/xmake.lua b/xmake/platforms/cygwin/xmake.lua index 32ab7df58..14b608732 100644 --- a/xmake/platforms/cygwin/xmake.lua +++ b/xmake/platforms/cygwin/xmake.lua @@ -39,6 +39,6 @@ platform("cygwin") -- on check on_check("check") - -- on load - on_load("load") + -- set toolchains + set_toolchains("envs", "cross", "gcc", "clang", "yasm") |
