summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2020-05-20 23:50:04 +0800
committerruki <[email protected]>2020-05-20 17:00:24 +0800
commita896b35be6d07660cf65c1885a41edd568e5fdf0 (patch)
tree9580e5b50a039a77ce0ccf1d620aac4fc3508318
parentc6d413d07d771ed199b1b4d747625a6a7059fdca (diff)
improve cygwin platform
-rw-r--r--xmake/platforms/cygwin/check.lua163
-rw-r--r--xmake/platforms/cygwin/load.lua46
-rw-r--r--xmake/platforms/cygwin/xmake.lua4
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")