summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2020-06-20 00:38:29 +0800
committerruki <[email protected]>2020-06-19 21:50:59 +0800
commitf5392149886b2083ec0d6db2adef3da405297fe8 (patch)
tree12a41f554b7e4bce55a8fb6f8e46aee2c4eba3f9
parentca1bd50cc1e0b5939311ac73c61180957763cbbc (diff)
improve xcode and msvc toolchains
-rw-r--r--xmake/core/project/project.lua4
-rw-r--r--xmake/modules/detect/sdks/find_xcode.lua10
-rw-r--r--xmake/modules/package/manager/conan/install_package.lua2
-rw-r--r--xmake/platforms/windows/xmake.lua2
-rw-r--r--xmake/rules/qt/deploy/macosx.lua2
-rw-r--r--xmake/rules/xcode/info_plist/xmake.lua2
-rw-r--r--xmake/rules/xcode/storyboard/xmake.lua15
-rw-r--r--xmake/rules/xcode/xcassets/xmake.lua9
-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.lua21
-rw-r--r--xmake/toolchains/xcode/load_iphoneos.lua4
-rw-r--r--xmake/toolchains/xcode/load_macosx.lua4
-rw-r--r--xmake/toolchains/xcode/load_watchos.lua4
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++