diff options
| author | ruki <[email protected]> | 2020-06-20 00:38:29 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2020-06-19 21:50:59 +0800 |
| commit | f5392149886b2083ec0d6db2adef3da405297fe8 (patch) | |
| tree | 12a41f554b7e4bce55a8fb6f8e46aee2c4eba3f9 | |
| parent | ca1bd50cc1e0b5939311ac73c61180957763cbbc (diff) | |
improve xcode and msvc toolchains
| -rw-r--r-- | xmake/core/project/project.lua | 4 | ||||
| -rw-r--r-- | xmake/modules/detect/sdks/find_xcode.lua | 10 | ||||
| -rw-r--r-- | xmake/modules/package/manager/conan/install_package.lua | 2 | ||||
| -rw-r--r-- | xmake/platforms/windows/xmake.lua | 2 | ||||
| -rw-r--r-- | xmake/rules/qt/deploy/macosx.lua | 2 | ||||
| -rw-r--r-- | xmake/rules/xcode/info_plist/xmake.lua | 2 | ||||
| -rw-r--r-- | xmake/rules/xcode/storyboard/xmake.lua | 15 | ||||
| -rw-r--r-- | xmake/rules/xcode/xcassets/xmake.lua | 9 | ||||
| -rw-r--r-- | xmake/toolchains/msvc/check.lua (renamed from xmake/toolchains/vs/check.lua) | 16 | ||||
| -rw-r--r-- | xmake/toolchains/msvc/load.lua (renamed from xmake/toolchains/vs/load.lua) | 6 | ||||
| -rw-r--r-- | xmake/toolchains/msvc/xmake.lua (renamed from xmake/toolchains/vs/xmake.lua) | 2 | ||||
| -rw-r--r-- | xmake/toolchains/xcode/check.lua | 21 | ||||
| -rw-r--r-- | xmake/toolchains/xcode/load_iphoneos.lua | 4 | ||||
| -rw-r--r-- | xmake/toolchains/xcode/load_macosx.lua | 4 | ||||
| -rw-r--r-- | xmake/toolchains/xcode/load_watchos.lua | 4 |
15 files changed, 66 insertions, 37 deletions
diff --git a/xmake/core/project/project.lua b/xmake/core/project/project.lua index 795f863b5..be0694235 100644 --- a/xmake/core/project/project.lua +++ b/xmake/core/project/project.lua @@ -433,9 +433,7 @@ function project._load_targets() if toolchains then t._TOOLCHAINS = {} for _, name in ipairs(table.wrap(toolchains)) do - local toolchain_plat = t:extraconf("toolchains", name, "plat") - local toolchain_arch = t:extraconf("toolchains", name, "arch") - local toolchain_inst, errors = toolchain.load(name, {plat = toolchain_plat, arch = toolchain_arch}) + local toolchain_inst, errors = toolchain.load(name, t:extraconf("toolchains", name)) -- attempt to load toolchain from project if not toolchain_inst then toolchain_inst = project.toolchain(name) diff --git a/xmake/modules/detect/sdks/find_xcode.lua b/xmake/modules/detect/sdks/find_xcode.lua index 3b33ab955..a1ab709df 100644 --- a/xmake/modules/detect/sdks/find_xcode.lua +++ b/xmake/modules/detect/sdks/find_xcode.lua @@ -147,13 +147,19 @@ function main(sdkdir, opt) local plat = opt.plat or config.get("plat") or "macosx" local arch = opt.arch or config.get("arch") or "x86_64" + -- get xcode sdk version + local xcode_sdkver = (plat == config.plat()) and config.get("xcode_sdkver") + if not xcode_sdkver then + xcode_sdkver = config.get("xcode_sdkver_" .. plat) + end + -- find xcode - local xcode = _find_xcode(sdkdir or config.get("xcode") or global.get("xcode"), opt.sdkver or config.get("xcode_sdkver"), plat, arch) + local xcode = _find_xcode(sdkdir or config.get("xcode") or global.get("xcode"), opt.sdkver or xcode_sdkver, plat, arch) if xcode and xcode.sdkdir then -- save to config config.set("xcode", xcode.sdkdir, {force = true, readonly = true}) - config.set("xcode_sdkver", xcode.sdkver, {force = true, readonly = true}) + config.set("xcode_sdkver_" .. plat, xcode.sdkver, {force = true, readonly = true}) config.set("xcode_codesign_identity", xcode.codesign_identity, {force = true, readonly = true}) config.set("xcode_mobile_provision", xcode.mobile_provision, {force = true, readonly = true}) diff --git a/xmake/modules/package/manager/conan/install_package.lua b/xmake/modules/package/manager/conan/install_package.lua index 201c50841..e1ad06df4 100644 --- a/xmake/modules/package/manager/conan/install_package.lua +++ b/xmake/modules/package/manager/conan/install_package.lua @@ -219,7 +219,7 @@ function main(name, opt) table.insert(argv, "compiler.runtime=" .. opt.vs_runtime) end elseif opt.plat == "iphoneos" then - local target_minver = config.get("target_minver") + local target_minver = config.get("target_minver_iphoneos") if target_minver and tonumber(target_minver) > 10 and (arch == "armv7" or arch == "armv7s" or arch == "x86") then target_minver = "10" -- iOS 10 is the maximum deployment target for 32-bit targets end diff --git a/xmake/platforms/windows/xmake.lua b/xmake/platforms/windows/xmake.lua index 5c29b0e0b..9dd8fecbd 100644 --- a/xmake/platforms/windows/xmake.lua +++ b/xmake/platforms/windows/xmake.lua @@ -48,7 +48,7 @@ platform("windows") end) -- set toolchains - set_toolchains("vs", "clang", "yasm", "nasm", "cuda", "dlang", "rust", "go") + set_toolchains("msvc", "clang", "yasm", "nasm", "cuda", "dlang", "rust", "go") -- set menu set_menu { diff --git a/xmake/rules/qt/deploy/macosx.lua b/xmake/rules/qt/deploy/macosx.lua index bbefe38ee..6b3549ec2 100644 --- a/xmake/rules/qt/deploy/macosx.lua +++ b/xmake/rules/qt/deploy/macosx.lua @@ -59,7 +59,7 @@ function _save_info_plist(target, info_plist_file) <key>NSPrincipalClass</key> <string>NSApplication</string> </dict> -</plist>]], name, name, name, name, get_config("target_minver") or (macos.version():major() .. "." .. macos.version():minor()))) +</plist>]], name, name, name, name, get_config("target_minver_macosx") or (macos.version():major() .. "." .. macos.version():minor()))) end -- deploy application package for macosx diff --git a/xmake/rules/xcode/info_plist/xmake.lua b/xmake/rules/xcode/info_plist/xmake.lua index 611969e0c..6f1899f8e 100644 --- a/xmake/rules/xcode/info_plist/xmake.lua +++ b/xmake/rules/xcode/info_plist/xmake.lua @@ -60,7 +60,7 @@ rule("xcode.info_plist") PRODUCT_NAME = target:name(), PRODUCT_DISPLAY_NAME = target:name(), CURRENT_PROJECT_VERSION = target:version() and tostring(target:version()) or "1.0", - MACOSX_DEPLOYMENT_TARGET = get_config("target_minver") + MACOSX_DEPLOYMENT_TARGET = get_config("target_minver_macosx") } if target:rule("xcode.bundle") then maps.PRODUCT_BUNDLE_PACKAGE_TYPE = "BNDL" diff --git a/xmake/rules/xcode/storyboard/xmake.lua b/xmake/rules/xcode/storyboard/xmake.lua index bc9444d38..264525b61 100644 --- a/xmake/rules/xcode/storyboard/xmake.lua +++ b/xmake/rules/xcode/storyboard/xmake.lua @@ -57,11 +57,14 @@ rule("xcode.storyboard") os.tryrm(base_lproj) -- do compile + local target_minver local argv = {"--errors", "--warnings", "--notices", "--auto-activate-custom-fonts", "--output-format", "human-readable-text"} if is_plat("macosx") then + target_minver = get_config("target_minver_macosx") table.insert(argv, "--target-device") table.insert(argv, "mac") elseif is_plat("iphoneos") then + target_minver = get_config("target_minver_iphoneos") table.insert(argv, "--target-device") table.insert(argv, "iphone") table.insert(argv, "--target-device") @@ -69,8 +72,10 @@ rule("xcode.storyboard") else assert("unknown device!") end - table.insert(argv, "--minimum-deployment-target") - table.insert(argv, get_config("target_minver")) + if target_minver then + table.insert(argv, "--minimum-deployment-target") + table.insert(argv, target_minver) + end table.insert(argv, "--compilation-directory") table.insert(argv, base_lproj) table.insert(argv, sourcefile) @@ -82,8 +87,10 @@ rule("xcode.storyboard") table.insert(argv, "--target-device") table.insert(argv, "mac") end - table.insert(argv, "--minimum-deployment-target") - table.insert(argv, get_config("target_minver")) + if target_minver then + table.insert(argv, "--minimum-deployment-target") + table.insert(argv, target_minver) + end table.insert(argv, "--link") table.insert(argv, resourcesdir) table.insert(argv, path.join(base_lproj, path.filename(sourcefile) .. "c")) diff --git a/xmake/rules/xcode/xcassets/xmake.lua b/xmake/rules/xcode/xcassets/xmake.lua index df25794e5..6803a2999 100644 --- a/xmake/rules/xcode/xcassets/xmake.lua +++ b/xmake/rules/xcode/xcassets/xmake.lua @@ -60,13 +60,16 @@ rule("xcode.xcassets") io.writefile(assetcatalog_generated_info_plist, "") -- do compile + local target_minver local argv = {"--warnings", "--notices", "--output-format", "human-readable-text"} if is_plat("macosx") then + target_minver = get_config("target_minver_macosx") table.insert(argv, "--target-device") table.insert(argv, "mac") table.insert(argv, "--platform") table.insert(argv, "macosx") elseif is_plat("iphoneos") then + target_minver = get_config("target_minver_iphoneos") table.insert(argv, "--target-device") table.insert(argv, "iphone") table.insert(argv, "--target-device") @@ -76,8 +79,10 @@ rule("xcode.xcassets") else assert("unknown device!") end - table.insert(argv, "--minimum-deployment-target") - table.insert(argv, get_config("target_minver")) + if target_minver then + table.insert(argv, "--minimum-deployment-target") + table.insert(argv, target_minver) + end table.insert(argv, "--app-icon") table.insert(argv, "AppIcon") if is_plat("iphoneos") then diff --git a/xmake/toolchains/vs/check.lua b/xmake/toolchains/msvc/check.lua index 12fac2aa0..bf42ca64f 100644 --- a/xmake/toolchains/vs/check.lua +++ b/xmake/toolchains/msvc/check.lua @@ -25,7 +25,7 @@ import("detect.sdks.find_vstudio") import("lib.detect.find_tool") -- attempt to check vs environment -function _check_vsenv() +function _check_vsenv(toolchain) -- have been checked? local vs = config.get("vs") @@ -52,7 +52,7 @@ function _check_vsenv() -- get vcvarsall for _, vsver in ipairs(vsvers) do local vcvarsall = (vstudio[vsver] or {}).vcvarsall or {} - local vsenv = vcvarsall[config.get("arch") or ""] + local vsenv = vcvarsall[toolchain:arch()] if vsenv and vsenv.path and vsenv.include and vsenv.lib then -- save vsenv @@ -83,13 +83,13 @@ function _check_vsenv() end -- check the visual studio -function _check_vstudio() - local vs = _check_vsenv() +function _check_vstudio(toolchain) + local vs = _check_vsenv(toolchain) if vs then config.set("vs", vs, {readonly = true, force = true}) - cprint("checking for the Microsoft Visual Studio (%s) version ... ${color.success}%s", config.get("arch"), vs) + cprint("checking for the Microsoft Visual Studio (%s) version ... ${color.success}%s", toolchain:arch(), vs) else - cprint("checking for the Microsoft Visual Studio (%s) version ... ${color.nothing}${text.nothing}", config.get("arch")) + cprint("checking for the Microsoft Visual Studio (%s) version ... ${color.nothing}${text.nothing}", toolchain:arch()) if not (opt and opt.try) then print("please run:") print(" - xmake config --vs=xxx [--vs_toolset=xxx]") @@ -101,13 +101,13 @@ function _check_vstudio() end -- main entry -function main() +function main(toolchain) -- @see https://github.com/xmake-io/xmake/pull/679 local cc = path.basename(config.get("cc") or "cl"):lower() local cxx = path.basename(config.get("cxx") or "cl"):lower() local mrc = path.basename(config.get("mrc") or "rc"):lower() if cc == "cl" or cxx == "cl" or mrc == "rc" then - return _check_vstudio(config) + return _check_vstudio(toolchain) end end diff --git a/xmake/toolchains/vs/load.lua b/xmake/toolchains/msvc/load.lua index af32ca092..c6d53f86a 100644 --- a/xmake/toolchains/vs/load.lua +++ b/xmake/toolchains/msvc/load.lua @@ -32,10 +32,8 @@ function _add_vsenv(toolchain, name) return end - -- get arch - local arch = config.get("arch") or "" - -- get vs environment for the current arch + local arch = toolchain:arch() local vsenv = vcvarsall[arch] or {} -- switch vstudio environment if vs_sdkver has been changed @@ -71,7 +69,7 @@ function main(toolchain) toolchain:set("toolset", "cc", "cl.exe") toolchain:set("toolset", "cxx", "cl.exe") toolchain:set("toolset", "mrc", "rc.exe") - if is_arch("x64") then + if toolchain:is_arch("x64") then toolchain:set("toolset", "as", "ml64.exe") else toolchain:set("toolset", "as", "ml.exe") diff --git a/xmake/toolchains/vs/xmake.lua b/xmake/toolchains/msvc/xmake.lua index 4bbc5798c..bbef5815d 100644 --- a/xmake/toolchains/vs/xmake.lua +++ b/xmake/toolchains/msvc/xmake.lua @@ -19,7 +19,7 @@ -- -- define toolchain -toolchain("vs") +toolchain("msvc") -- set homepage set_homepage("https://visualstudio.microsoft.com") diff --git a/xmake/toolchains/xcode/check.lua b/xmake/toolchains/xcode/check.lua index d5f79ab27f..e49957b17 100644 --- a/xmake/toolchains/xcode/check.lua +++ b/xmake/toolchains/xcode/check.lua @@ -35,8 +35,23 @@ function main(toolchain) end -- save target minver - local xcode_sdkver = config.get("xcode_sdkver") - local target_minver = config.get("target_minver") + -- + -- @note we need to differentiate the version for the system, + -- because the xcode toolchain of iphoneos/macosx may need to be used at the same time. + -- + -- e.g. + -- + -- target("test") + -- set_toolchains("xcode", {plat = os.host(), arch = os.arch()}) + -- + local xcode_sdkver = toolchain:is_plat(config.plat()) and config.get("xcode_sdkver") + if not xcode_sdkver then + xcode_sdkver = config.get("xcode_sdkver_" .. toolchain:plat()) + end + local target_minver = toolchain:is_plat(config.plat()) and config.get("target_minver") + if not target_minver then + target_minver = config.get("target_minver_" .. toolchain:plat()) + end if xcode_sdkver and not target_minver then target_minver = xcode_sdkver if toolchain:is_plat("macosx") then @@ -45,7 +60,7 @@ function main(toolchain) target_minver = macos_ver:major() .. "." .. macos_ver:minor() end end - config.set("target_minver", target_minver) + config.set("target_minver_" .. toolchain:plat(), target_minver) end return true end diff --git a/xmake/toolchains/xcode/load_iphoneos.lua b/xmake/toolchains/xcode/load_iphoneos.lua index 842064cb7..1d495a5cb 100644 --- a/xmake/toolchains/xcode/load_iphoneos.lua +++ b/xmake/toolchains/xcode/load_iphoneos.lua @@ -32,7 +32,7 @@ function main(toolchain) local platname = simulator and "iPhoneSimulator" or "iPhoneOS" -- init target minimal version - local target_minver = config.get("target_minver") + local target_minver = config.get("target_minver_iphoneos") if target_minver and tonumber(target_minver) > 10 and (arch == "armv7" or arch == "armv7s" or arch == "i386") then target_minver = "10" -- iOS 10 is the maximum deployment target for 32-bit targets end @@ -40,7 +40,7 @@ function main(toolchain) -- init the xcode sdk directory local xcode_dir = config.get("xcode") - local xcode_sdkver = config.get("xcode_sdkver") + local xcode_sdkver = config.get("xcode_sdkver_iphoneos") local xcode_sdkdir = format("%s/Contents/Developer/Platforms/%s.platform/Developer/SDKs/%s%s.sdk", xcode_dir, platname, platname, xcode_sdkver) -- init flags for c/c++ diff --git a/xmake/toolchains/xcode/load_macosx.lua b/xmake/toolchains/xcode/load_macosx.lua index f2060ad68..c16fd6665 100644 --- a/xmake/toolchains/xcode/load_macosx.lua +++ b/xmake/toolchains/xcode/load_macosx.lua @@ -26,11 +26,11 @@ function main(toolchain) -- init flags for architecture local arch = toolchain:arch() - local target_minver = config.get("target_minver") + local target_minver = config.get("target_minver_macosx") -- init flags for the xcode sdk directory local xcode_dir = config.get("xcode") - local xcode_sdkver = config.get("xcode_sdkver") + local xcode_sdkver = config.get("xcode_sdkver_macosx") local xcode_sdkdir = nil if xcode_dir and xcode_sdkver then xcode_sdkdir = xcode_dir .. "/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX" .. xcode_sdkver .. ".sdk" diff --git a/xmake/toolchains/xcode/load_watchos.lua b/xmake/toolchains/xcode/load_watchos.lua index 6730784b1..cae0b40d4 100644 --- a/xmake/toolchains/xcode/load_watchos.lua +++ b/xmake/toolchains/xcode/load_watchos.lua @@ -32,12 +32,12 @@ function main(toolchain) local platname = simulator and "WatchSimulator" or "WatchOS" -- init target minimal version - local target_minver = config.get("target_minver") + local target_minver = config.get("target_minver_watchos") local target_minver_flags = (simulator and "-mwatchos-simulator-version-min=" or "-mwatchos-version-min=") .. target_minver -- init the xcode sdk directory local xcode_dir = config.get("xcode") - local xcode_sdkver = config.get("xcode_sdkver") + local xcode_sdkver = config.get("xcode_sdkver_watchos") local xcode_sdkdir = format("%s/Contents/Developer/Platforms/%s.platform/Developer/SDKs/%s%s.sdk", xcode_dir, platname, platname, xcode_sdkver) -- init flags for c/c++ |
