summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2023-10-13 05:03:01 -0500
committerGitHub <[email protected]>2023-10-13 05:03:01 -0500
commit8da5b070c91ba1fd48173e560400d088e69ac0a2 (patch)
treebc189c82fcff0f9838b95ee77dacf23ca0a72e36
parent97ffd7a145521e930a237e8977e73fdf3d41dbf4 (diff)
parent676ad02bf8014542c1c237f93b5a5cab6f07d5ab (diff)
Merge pull request #4286 from xmake-io/xros
Add apple xros support
-rw-r--r--CHANGELOG.md2
-rw-r--r--xmake/modules/core/tools/gcc.lua2
-rw-r--r--xmake/modules/detect/sdks/find_xcode.lua6
-rw-r--r--xmake/modules/private/detect/find_platform.lua2
-rw-r--r--xmake/platforms/applexros/xmake.lua66
-rw-r--r--xmake/toolchains/xcode/check.lua5
-rw-r--r--xmake/toolchains/xcode/load_applexros.lua64
-rw-r--r--xmake/toolchains/xcode/load_macosx.lua1
8 files changed, 145 insertions, 3 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 2aeb65b0d..1c2aa166a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -8,6 +8,7 @@
* [#1438](https://github.com/xmake-io/xmake/issues/1438): Support code amalgamation
* [#3381](https://github.com/xmake-io/xmake/issues/3381): Add `xmake test` support
* [#4276](https://github.com/xmake-io/xmake/issues/4276): Support custom scope api
+* [#4286](https://github.com/xmake-io/xmake/pull/4286): Add Apple XROS support
### Changes
@@ -1683,6 +1684,7 @@
* [#1438](https://github.com/xmake-io/xmake/issues/1438): 支持代码 amalgamation
* [#3381](https://github.com/xmake-io/xmake/issues/3381): 添加 `xmake test` 支持
* [#4276](https://github.com/xmake-io/xmake/issues/4276): 支持自定义域 API
+* [#4286](https://github.com/xmake-io/xmake/pull/4286): 添加 Apple XROS 支持
### 改进
diff --git a/xmake/modules/core/tools/gcc.lua b/xmake/modules/core/tools/gcc.lua
index eb2e78641..6ccf50266 100644
--- a/xmake/modules/core/tools/gcc.lua
+++ b/xmake/modules/core/tools/gcc.lua
@@ -86,7 +86,7 @@ function nf_strip(self, level, target)
debug = "-Wl,-S"
, all = "-s"
}
- if self:is_plat("macosx", "iphoneos") then
+ if self:is_plat("macosx", "iphoneos", "watchos", "appletvos", "applexros") then
maps.all = {"-Wl,-x", "-Wl,-dead_strip"}
elseif self:is_plat("windows") then
-- clang does not it on windows, TODO maybe we need test it for gcc
diff --git a/xmake/modules/detect/sdks/find_xcode.lua b/xmake/modules/detect/sdks/find_xcode.lua
index 15dbd7bcd..9a6e18a38 100644
--- a/xmake/modules/detect/sdks/find_xcode.lua
+++ b/xmake/modules/detect/sdks/find_xcode.lua
@@ -59,6 +59,12 @@ function _find_xcode_sdkver(sdkdir, opt)
else
platsdkdir = "Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS*.*.sdk"
end
+ elseif plat == "applexros" then
+ if arch == "i386" or arch == "x86_64" then
+ platsdkdir = "Contents/Developer/Platforms/XRSimulator.platform/Developer/SDKs/XRSimulator*.*.sdk"
+ else
+ platsdkdir = "Contents/Developer/Platforms/XROS.platform/Developer/SDKs/XROS*.*.sdk"
+ end
else
platsdkdir = "Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX*.*.sdk"
end
diff --git a/xmake/modules/private/detect/find_platform.lua b/xmake/modules/private/detect/find_platform.lua
index d00809e47..977f93072 100644
--- a/xmake/modules/private/detect/find_platform.lua
+++ b/xmake/modules/private/detect/find_platform.lua
@@ -94,7 +94,7 @@ function _find_arch(plat, arch)
local appledev = config.get("appledev")
if plat == "android" then
arch = "armeabi-v7a"
- elseif plat == "iphoneos" or plat == "appletvos" then
+ elseif plat == "iphoneos" or plat == "appletvos" or plat == "applexros" then
arch = appledev == "simulator" and os.arch() or "arm64"
elseif plat == "watchos" then
arch = appledev == "simulator" and os.arch() or "armv7k"
diff --git a/xmake/platforms/applexros/xmake.lua b/xmake/platforms/applexros/xmake.lua
new file mode 100644
index 000000000..c8a8ca066
--- /dev/null
+++ b/xmake/platforms/applexros/xmake.lua
@@ -0,0 +1,66 @@
+--!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-present, TBOOX Open Source Group.
+--
+-- @author ruki
+-- @file xmake.lua
+--
+
+platform("applexros")
+ set_os("ios")
+ set_hosts("macosx")
+
+ if os.arch() == "arm64" then -- on apple m1 device
+ set_archs("arm64", "x86_64")
+ else
+ set_archs("arm64", "armv7", "armv7s", "i386", "x86_64")
+ end
+
+ set_formats("static", "lib$(name).a")
+ set_formats("object", "$(name).o")
+ set_formats("shared", "lib$(name).dylib")
+ set_formats("symbol", "$(name).dSYM")
+
+ set_toolchains("envs", "xcode")
+
+ set_menu {
+ config =
+ {
+ {category = "XCode SDK Configuration" }
+ , {nil, "xcode", "kv", "auto", "The Xcode Application Directory" }
+ , {nil, "xcode_sdkver", "kv", "auto", "The SDK Version for Xcode" }
+ , {nil, "xcode_bundle_identifier", "kv", "auto", "The Bundle Identifier for Xcode" }
+ , {nil, "xcode_codesign_identity", "kv", "auto", "The Codesign Identity for Xcode" }
+ , {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", "applexr"}}
+ }
+
+ , global =
+ {
+ {category = "XCode SDK Configuration" }
+ , {nil, "xcode", "kv", "auto", "The Xcode Application Directory" }
+ , {nil, "xcode_bundle_identifier", "kv", "auto", "The Bundle Identifier for Xcode" }
+ , {nil, "xcode_codesign_identity", "kv", "auto", "The Codesign Identity for Xcode" }
+ , {nil, "xcode_mobile_provision", "kv", "auto", "The Mobile Provision for Xcode" }
+ }
+ }
+
+
+
+
+
+
diff --git a/xmake/toolchains/xcode/check.lua b/xmake/toolchains/xcode/check.lua
index 40c05095c..225e84284 100644
--- a/xmake/toolchains/xcode/check.lua
+++ b/xmake/toolchains/xcode/check.lua
@@ -86,6 +86,8 @@ function main(toolchain)
cross = simulator and "xcrun -sdk watchsimulator " or "xcrun -sdk watchos "
elseif toolchain:is_plat("appletvos") then
cross = simulator and "xcrun -sdk appletvsimulator " or "xcrun -sdk appletvos "
+ elseif toolchain:is_plat("applexros") then
+ cross = simulator and "xcrun -sdk xrsimulator " or "xcrun -sdk xros "
else
raise("unknown platform for xcode!")
end
@@ -109,6 +111,9 @@ function main(toolchain)
elseif toolchain:is_plat("appletvos") then
local platname = simulator and "AppleTVSimulator" or "AppleTVOS"
xcode_sysroot = format("%s/Contents/Developer/Platforms/%s.platform/Developer/SDKs/%s%s.sdk", xcode.sdkdir, platname, platname, xcode_sdkver)
+ elseif toolchain:is_plat("applexros") then
+ local platname = simulator and "XRSimulator" or "XROS"
+ xcode_sysroot = format("%s/Contents/Developer/Platforms/%s.platform/Developer/SDKs/%s%s.sdk", xcode.sdkdir, platname, platname, xcode_sdkver)
end
else
-- maybe it is from CommandLineTools, e.g. /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk
diff --git a/xmake/toolchains/xcode/load_applexros.lua b/xmake/toolchains/xcode/load_applexros.lua
new file mode 100644
index 000000000..61b142374
--- /dev/null
+++ b/xmake/toolchains/xcode/load_applexros.lua
@@ -0,0 +1,64 @@
+--!A cross-toolchain 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-present, TBOOX Open Source Group.
+--
+-- @author ruki
+-- @file load_applexros.lua
+--
+
+-- imports
+import("core.project.config")
+
+-- main entry
+function main(toolchain)
+
+ local arch = toolchain:arch()
+ local xcode_sdkver = toolchain:config("xcode_sdkver")
+ local xcode_sysroot = toolchain:config("xcode_sysroot")
+ local target_minver = toolchain:config("target_minver")
+
+ -- init target flags
+ if target_minver then
+ local simulator = toolchain:config("appledev") == "simulator"
+ local target = (simulator and "%s-apple-xrsimulator%s" or "%s-apple-xros%s"):format(arch, target_minver)
+ 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
+
+ -- init flags for c/c++
+ toolchain:add("cxflags", "-isysroot", xcode_sysroot)
+ toolchain:add("ldflags", "-fobjc-link-runtime", "-isysroot", xcode_sysroot)
+ toolchain:add("shflags", "-fobjc-link-runtime", "-isysroot", xcode_sysroot)
+
+ -- init flags for objc/c++
+ toolchain:add("mxflags", "-isysroot", xcode_sysroot)
+ -- 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", "-isysroot", xcode_sysroot)
+
+ -- init flags for swift (with toolchain:add("ldflags and toolchain:add("shflags)
+ toolchain:add("scflags", "-sdk " .. xcode_sysroot)
+ toolchain:add("scshflags", "-sdk " .. xcode_sysroot)
+ toolchain:add("scldflags", "-sdk " .. xcode_sysroot)
+end
+
diff --git a/xmake/toolchains/xcode/load_macosx.lua b/xmake/toolchains/xcode/load_macosx.lua
index fb7c3d615..039152067 100644
--- a/xmake/toolchains/xcode/load_macosx.lua
+++ b/xmake/toolchains/xcode/load_macosx.lua
@@ -24,7 +24,6 @@ import("core.project.config")
-- main entry
function main(toolchain)
- -- init flags for architecture
local arch = toolchain:arch()
local target_minver = toolchain:config("target_minver")
local xcode_sysroot = toolchain:config("xcode_sysroot")