summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2022-08-21 16:27:52 +0800
committerGitHub <[email protected]>2022-08-21 16:27:52 +0800
commit1eebadef123f6c110a671fe041fd110899340bb4 (patch)
treeceee665362dbc6fb4412169f35ed62108841142b
parente914ebdba3e47cd0fe90de6b8ade2c328e0d04b6 (diff)
parent82c2ee867dc33097800caa4d25ab44aa1696517b (diff)
Merge pull request #2695 from xmake-io/catalyst
add mac catalyst
-rw-r--r--xmake/modules/detect/sdks/find_xcode.lua28
-rw-r--r--xmake/platforms/iphoneos/xmake.lua2
-rw-r--r--xmake/toolchains/xcode/check.lua31
-rw-r--r--xmake/toolchains/xcode/load_macosx.lua48
4 files changed, 64 insertions, 45 deletions
diff --git a/xmake/modules/detect/sdks/find_xcode.lua b/xmake/modules/detect/sdks/find_xcode.lua
index e3c927979..80f3daead 100644
--- a/xmake/modules/detect/sdks/find_xcode.lua
+++ b/xmake/modules/detect/sdks/find_xcode.lua
@@ -72,6 +72,29 @@ function _find_xcode_sdkver(sdkdir, opt)
end
end
+-- find the target minver
+function _find_target_minver(sdkdir, sdkver, opt)
+ opt = opt or {}
+ local target_minver = sdkver
+ if opt.plat == "macosx" then
+ if opt.appledev == "catalyst" then
+ local platsdkdir = "Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS*.*.sdk"
+ local dir = find_directory(platsdkdir, sdkdir)
+ if dir then
+ target_minver = dir:match("%d+%.%d+")
+ else
+ target_minver = "13.1"
+ end
+ else
+ local macos_ver = macos.version()
+ if macos_ver then
+ target_minver = macos_ver:major() .. "." .. macos_ver:minor()
+ end
+ end
+ end
+ return target_minver
+end
+
-- find the xcode toolchain
function _find_xcode(sdkdir, opt)
@@ -87,6 +110,9 @@ function _find_xcode(sdkdir, opt)
return {}
end
+ -- find the target minver
+ local target_minver = _find_target_minver(sdkdir, sdkver, opt)
+
-- find codesign
local codesign_identity, mobile_provision
if opt.find_codesign then
@@ -126,7 +152,7 @@ function _find_xcode(sdkdir, opt)
end
end
end
- return {sdkdir = sdkdir, sdkver = sdkver, codesign_identity = codesign_identity, mobile_provision = mobile_provision}
+ return {sdkdir = sdkdir, sdkver = sdkver, target_minver = target_minver, codesign_identity = codesign_identity, mobile_provision = mobile_provision}
end
-- find xcode toolchain
diff --git a/xmake/platforms/iphoneos/xmake.lua b/xmake/platforms/iphoneos/xmake.lua
index 057a2704b..9e592c1f0 100644
--- a/xmake/platforms/iphoneos/xmake.lua
+++ b/xmake/platforms/iphoneos/xmake.lua
@@ -46,7 +46,7 @@ platform("iphoneos")
, {nil, "xcode_mobile_provision", "kv", "auto", "The Mobile Provision for Xcode" }
, {nil, "target_minver", "kv", "auto", "The Target Minimal Version" }
, {nil, "appledev", "kv", nil, "The Apple Device Type",
- values = {"simulator", "iphone", "watchtv", "appletv"}}
+ values = {"simulator", "iphone", "watchtv", "appletv", "catalyst"}}
}
, global =
diff --git a/xmake/toolchains/xcode/check.lua b/xmake/toolchains/xcode/check.lua
index 927eadceb..30886e584 100644
--- a/xmake/toolchains/xcode/check.lua
+++ b/xmake/toolchains/xcode/check.lua
@@ -26,11 +26,23 @@ import("detect.sdks.find_xcode")
-- main entry
function main(toolchain)
+ -- get apple device
+ local simulator
+ local appledev = toolchain:config("appledev") or config.get("appledev")
+ if appledev and appledev == "simulator" then
+ simulator = true
+ appledev = "simulator"
+ elseif not toolchain:is_plat("macosx") and toolchain:is_arch("i386", "x86_64") then
+ simulator = true
+ appledev = "simulator"
+ end
+
-- find xcode
local xcode_sdkver = toolchain:config("xcode_sdkver") or config.get("xcode_sdkver")
local xcode = find_xcode(config.get("xcode"), {force = true, verbose = true,
find_codesign = toolchain:is_global(),
sdkver = xcode_sdkver,
+ appledev = appledev,
plat = toolchain:plat(),
arch = toolchain:arch()})
if not xcode then
@@ -59,17 +71,6 @@ function main(toolchain)
end
end
- -- get apple device
- local simulator
- local appledev = toolchain:config("appledev") or config.get("appledev")
- if appledev and appledev == "simulator" then
- simulator = true
- appledev = "simulator"
- elseif not toolchain:is_plat("macosx") and toolchain:is_arch("i386", "x86_64") then
- simulator = true
- appledev = "simulator"
- end
-
-- save xcode sysroot directory
local xcode_sysroot
if xcode.sdkdir and xcode_sdkver then
@@ -102,13 +103,7 @@ function main(toolchain)
--
local target_minver = toolchain:config("target_minver") or config.get("target_minver")
if xcode_sdkver and not target_minver then
- target_minver = xcode_sdkver
- if toolchain:is_plat("macosx") then
- local macos_ver = macos.version()
- if macos_ver then
- target_minver = macos_ver:major() .. "." .. macos_ver:minor()
- end
- end
+ target_minver = xcode.target_minver
end
toolchain:config_set("xcode", xcode.sdkdir)
toolchain:config_set("xcode_sdkver", xcode_sdkver)
diff --git a/xmake/toolchains/xcode/load_macosx.lua b/xmake/toolchains/xcode/load_macosx.lua
index d5e3d3b9a..107e5a9da 100644
--- a/xmake/toolchains/xcode/load_macosx.lua
+++ b/xmake/toolchains/xcode/load_macosx.lua
@@ -29,43 +29,41 @@ function main(toolchain)
local target_minver = toolchain:config("target_minver")
local xcode_sysroot = toolchain:config("xcode_sysroot")
- -- init flags for c/c++
- toolchain:add("cxflags", "-arch", arch)
- toolchain:add("ldflags", "-arch", arch)
- toolchain:add("shflags", "-arch", arch)
+ -- init target flags
+ local appledev = toolchain:config("appledev")
if target_minver then
- toolchain:add("cxflags", "-mmacosx-version-min=" .. target_minver)
- toolchain:add("mxflags", "-mmacosx-version-min=" .. target_minver)
- toolchain:add("ldflags", "-mmacosx-version-min=" .. target_minver)
- toolchain:add("shflags", "-mmacosx-version-min=" .. target_minver)
+ local target = ("%s-apple-macos%s"):format(arch, target_minver)
+ if appledev == "catalyst" then
+ target = ("%s-apple-ios%s-macabi"):format(arch, target_minver)
+ end
+ toolchain:add("cxflags", "-target", target)
+ toolchain:add("mxflags", "-target", target)
+ toolchain:add("asflags", "-target", target)
+ toolchain:add("ldflags", "-target", target)
+ toolchain:add("shflags", "-target", target)
+ toolchain:add("scflags", "-target", target)
+ toolchain:add("scldflags", "-target", target)
+ toolchain:add("scshflags", "-target", target)
end
+
+ -- add sysroot flags
if xcode_sysroot then
toolchain:add("cxflags", "-isysroot", xcode_sysroot)
+ toolchain:add("asflags", "-isysroot", xcode_sysroot)
toolchain:add("ldflags", "-isysroot", xcode_sysroot)
toolchain:add("shflags", "-isysroot", xcode_sysroot)
+ toolchain:add("mxflags", "-isysroot", xcode_sysroot)
+ toolchain:add("scflags", "-sdk " .. xcode_sysroot)
+ toolchain:add("scshflags", "-sdk " .. xcode_sysroot)
+ toolchain:add("scldflags", "-sdk " .. xcode_sysroot)
end
+
+ -- init flags for c/c++
toolchain:add("ldflags", "-stdlib=libc++")
toolchain:add("shflags", "-stdlib=libc++")
toolchain:add("syslinks", "z")
-- init flags for objc/c++ (with ldflags and shflags)
- toolchain:add("mxflags", "-arch", arch)
- if xcode_sysroot then
- toolchain:add("mxflags", "-isysroot", xcode_sysroot)
- end
-- we can use `add_mxflags("-fno-objc-arc")` to override it in xmake.lua
toolchain:add("mxflags", "-fobjc-arc")
-
- -- init flags for asm
- toolchain:add("asflags", "-arch", arch)
- if xcode_sysroot then
- toolchain:add("asflags", "-isysroot", xcode_sysroot)
- end
-
- -- init flags for swift
- if target_minver and xcode_sysroot then
- toolchain:add("scflags", format("-target %s-apple-macosx%s", arch, target_minver) , "-sdk " .. xcode_sysroot)
- toolchain:add("scshflags", format("-target %s-apple-macosx%s", arch, target_minver) , "-sdk " .. xcode_sysroot)
- toolchain:add("scldflags", format("-target %s-apple-macosx%s", arch, target_minver) , "-sdk " .. xcode_sysroot)
- end
end