From d021df166bfd45c2d18ae6fa39cd685006491d01 Mon Sep 17 00:00:00 2001 From: ruki Date: Sat, 16 May 2020 10:59:10 +0800 Subject: rename dlang, rust, swift, go ldflags --- xmake/platforms/linux/load.lua | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'xmake/platforms/linux/load.lua') diff --git a/xmake/platforms/linux/load.lua b/xmake/platforms/linux/load.lua index e1357e717..fcbbc61ff 100644 --- a/xmake/platforms/linux/load.lua +++ b/xmake/platforms/linux/load.lua @@ -66,16 +66,16 @@ function main(platform) platform:add("asflags", archflags) -- init flags for golang - platform:set("gc-ldflags", "") + platform:set("gcldflags", "") -- init flags for dlang local dc_archs = { i386 = "-m32", x86_64 = "-m64" } platform:add("dcflags", dc_archs[arch] or "") - platform:add("dc-shflags", dc_archs[arch] or "") - platform:add("dc-ldflags", dc_archs[arch] or "") + platform:add("dcshflags", dc_archs[arch] or "") + platform:add("dcldflags", dc_archs[arch] or "") -- init flags for rust - platform:set("rc-shflags", "") - platform:set("rc-ldflags", "") + platform:set("rcshflags", "") + platform:set("rcldflags", "") end -- cgit v1.3.1 From 1c7e32dea671abf42fc097db7141bd52a1fbfb19 Mon Sep 17 00:00:00 2001 From: ruki Date: Wed, 20 May 2020 00:36:09 +0800 Subject: improve linux platform --- xmake/platforms/linux/check.lua | 155 +++------------------------------------ xmake/platforms/linux/load.lua | 81 -------------------- xmake/platforms/linux/xmake.lua | 4 +- xmake/toolchains/clang/xmake.lua | 30 ++++++++ xmake/toolchains/gcc/xmake.lua | 30 ++++++++ xmake/toolchains/go/xmake.lua | 5 ++ xmake/toolchains/rust/xmake.lua | 6 ++ 7 files changed, 83 insertions(+), 228 deletions(-) delete mode 100644 xmake/platforms/linux/load.lua (limited to 'xmake/platforms/linux/load.lua') diff --git a/xmake/platforms/linux/check.lua b/xmake/platforms/linux/check.lua index 0fee59e6d..c435b7ad9 100644 --- a/xmake/platforms/linux/check.lua +++ b/xmake/platforms/linux/check.lua @@ -20,156 +20,21 @@ -- 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.arch()) - - -- 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 strip = toolchain("the symbols stripper") - 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, strip = strip, - 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 symbols stripper - strip:add("$(env STRIP)", {name = "strip", 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("linux.toolchains", _toolchains)[name] - if toolchain then - check_toolchain(config, name, toolchain) - end - else + -- check arch + check_arch(config, os.arch()) - -- check arch - _check_arch() + -- check toolchains + local toolchains = platform:toolchains() + for idx, toolchain in irpairs(toolchains) do + if not toolchain:check() then + table.remove(toolchains, idx) + end end + assert(#toolchains > 0, "toolchains not found!") end diff --git a/xmake/platforms/linux/load.lua b/xmake/platforms/linux/load.lua deleted file mode 100644 index fcbbc61ff..000000000 --- a/xmake/platforms/linux/load.lua +++ /dev/null @@ -1,81 +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) - - -- cross toolchains? - if config.get("cross") or config.get("bin") or config.get("sdk") then - - -- init linkdirs and includedirs - local sdkdir = config.get("sdk") - if sdkdir then - local includedir = path.join(sdkdir, "include") - if os.isdir(includedir) then - platform:add("includedirs", includedir) - end - local linkdir = path.join(sdkdir, "lib") - if os.isdir(linkdir) then - platform:add("linkdirs", linkdir) - end - end - - -- ok - return - end - - -- 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" - end - end - - -- init flags for c/c++ - platform:add("cxflags", archflags, "-I/usr/local/include", "-I/usr/include") - platform:add("ldflags", archflags, "-L/usr/local/lib", "-L/usr/lib") - platform:add("shflags", archflags, "-L/usr/local/lib", "-L/usr/lib") - - -- init flags for objc/c++ (with ldflags and shflags) - platform:add("mxflags", archflags) - - -- init flags for asm - platform:add("yasm.asflags", "-f", arch == "x86_64" and "elf64" or "elf32") - platform:add("asflags", archflags) - - -- init flags for golang - platform:set("gcldflags", "") - - -- init flags for dlang - local dc_archs = { i386 = "-m32", x86_64 = "-m64" } - platform:add("dcflags", dc_archs[arch] or "") - platform:add("dcshflags", dc_archs[arch] or "") - platform:add("dcldflags", dc_archs[arch] or "") - - -- init flags for rust - platform:set("rcshflags", "") - platform:set("rcldflags", "") -end - diff --git a/xmake/platforms/linux/xmake.lua b/xmake/platforms/linux/xmake.lua index 21e4d2e51..250441a68 100644 --- a/xmake/platforms/linux/xmake.lua +++ b/xmake/platforms/linux/xmake.lua @@ -39,8 +39,8 @@ platform("linux") -- on check on_check("check") - -- on load - on_load("load") + -- set toolchains + set_toolchains("envs", "gcc", "clang", "yasm", "nasm", "fasm", "cuda", "dlang", "go", "rust") -- set menu set_menu { diff --git a/xmake/toolchains/clang/xmake.lua b/xmake/toolchains/clang/xmake.lua index d4c1c3798..5d495fff5 100644 --- a/xmake/toolchains/clang/xmake.lua +++ b/xmake/toolchains/clang/xmake.lua @@ -37,3 +37,33 @@ toolchain("clang") on_check(function (toolchain) return import("lib.detect.find_tool")("clang") end) + + -- on load + on_load(function (toolchain) + + -- get march + local march = is_arch("x86_64", "x64") and "-m64" or "-m32" + + -- init flags for c/c++ + toolchain:add("cxflags", march) + toolchain:add("ldflags", march) + toolchain:add("shflags", march) + if not is_plat("windows") and os.isdir("/usr") then + for _, includedir in ipairs({"/usr/local/include", "/usr/include"}) do + if os.isdir(includedir) then + toolchain:add("includedirs", includedir) + end + end + for _, linkdir in ipairs({"/usr/local/lib", "/usr/lib"}) do + if os.isdir(linkdir) then + toolchain:add("linkdirs", linkdir) + end + end + end + + -- init flags for objc/c++ (with ldflags and shflags) + toolchain:add("mxflags", march) + + -- init flags for asm + toolchain:add("asflags", march) + end) diff --git a/xmake/toolchains/gcc/xmake.lua b/xmake/toolchains/gcc/xmake.lua index 08bb2d062..ba1ef6989 100644 --- a/xmake/toolchains/gcc/xmake.lua +++ b/xmake/toolchains/gcc/xmake.lua @@ -37,3 +37,33 @@ toolchain("gcc") on_check(function (toolchain) return import("lib.detect.find_tool")("gcc") end) + + -- on load + on_load(function (toolchain) + + -- get march + local march = is_arch("x86_64", "x64") and "-m64" or "-m32" + + -- init flags for c/c++ + toolchain:add("cxflags", march) + toolchain:add("ldflags", march) + toolchain:add("shflags", march) + if not is_plat("windows") and os.isdir("/usr") then + for _, includedir in ipairs({"/usr/local/include", "/usr/include"}) do + if os.isdir(includedir) then + toolchain:add("includedirs", includedir) + end + end + for _, linkdir in ipairs({"/usr/local/lib", "/usr/lib"}) do + if os.isdir(linkdir) then + toolchain:add("linkdirs", linkdir) + end + end + end + + -- init flags for objc/c++ (with ldflags and shflags) + toolchain:add("mxflags", march) + + -- init flags for asm + toolchain:add("asflags", march) + end) diff --git a/xmake/toolchains/go/xmake.lua b/xmake/toolchains/go/xmake.lua index a5400302b..402e5cc04 100644 --- a/xmake/toolchains/go/xmake.lua +++ b/xmake/toolchains/go/xmake.lua @@ -26,3 +26,8 @@ toolchain("go") set_toolsets("gcld", "$(env GC)", "go", "gccgo") set_toolsets("gcar", "$(env GC)", "go", "gccgo") + -- on load + on_load(function (toolchain) + toolchain:set("gcldflags", "") + end) + diff --git a/xmake/toolchains/rust/xmake.lua b/xmake/toolchains/rust/xmake.lua index 6eba85440..43684a5bb 100644 --- a/xmake/toolchains/rust/xmake.lua +++ b/xmake/toolchains/rust/xmake.lua @@ -26,3 +26,9 @@ toolchain("rust") set_toolsets("rcld", "$(env RC)", "rustc") set_toolsets("rcsh", "$(env RC)", "rustc") set_toolsets("rcar", "$(env RC)", "rustc") + + -- on load + on_load(function (toolchain) + toolchain:set("rcshflags", "") + toolchain:set("rcldflags", "") + end) -- cgit v1.3.1