Skip to content

Commit

Permalink
feat: add visionOS support (bkaradzic#323)
Browse files Browse the repository at this point in the history
* feat: define BX_PLATFORM_VISIONOS

* chore: add xros, xrsimulator toolchain support
  • Loading branch information
okwasniewski authored Apr 29, 2024
1 parent 0b8bb71 commit f8dc714
Show file tree
Hide file tree
Showing 9 changed files with 95 additions and 11 deletions.
8 changes: 8 additions & 0 deletions include/bx/platform.h
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@
#define BX_PLATFORM_PS4 0
#define BX_PLATFORM_PS5 0
#define BX_PLATFORM_RPI 0
#define BX_PLATFORM_VISIONOS 0
#define BX_PLATFORM_WINDOWS 0
#define BX_PLATFORM_WINRT 0
#define BX_PLATFORM_XBOXONE 0
Expand Down Expand Up @@ -196,6 +197,9 @@
|| defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__)
# undef BX_PLATFORM_IOS
# define BX_PLATFORM_IOS 1
#elif defined(__has_builtin) && __has_builtin(__is_target_os) && __is_target_os(xros)
# undef BX_PLATFORM_VISIONOS
# define BX_PLATFORM_VISIONOS 1
#elif defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__)
# undef BX_PLATFORM_OSX
# define BX_PLATFORM_OSX __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__
Expand Down Expand Up @@ -275,6 +279,7 @@
|| BX_PLATFORM_PS4 \
|| BX_PLATFORM_PS5 \
|| BX_PLATFORM_RPI \
|| BX_PLATFORM_VISIONOS \
)

///
Expand All @@ -291,6 +296,7 @@
|| BX_PLATFORM_PS4 \
|| BX_PLATFORM_PS5 \
|| BX_PLATFORM_RPI \
|| BX_PLATFORM_VISIONOS \
|| BX_PLATFORM_WINDOWS \
|| BX_PLATFORM_WINRT \
|| BX_PLATFORM_XBOXONE \
Expand Down Expand Up @@ -380,6 +386,8 @@
# define BX_PLATFORM_NAME "Hurd"
#elif BX_PLATFORM_IOS
# define BX_PLATFORM_NAME "iOS"
#elif BX_PLATFORM_VISIONOS
# define BX_PLATFORM_NAME "visionOS"
#elif BX_PLATFORM_LINUX
# define BX_PLATFORM_NAME "Linux"
#elif BX_PLATFORM_NONE
Expand Down
1 change: 1 addition & 0 deletions include/bx/simd_t.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
#elif BX_COMPILER_CLANG \
&& !BX_PLATFORM_EMSCRIPTEN \
&& !BX_PLATFORM_IOS \
&& !BX_PLATFORM_VISIONOS \
&& BX_CLANG_HAS_EXTENSION(attribute_ext_vector_type)
# undef BX_SIMD_LANGEXT
# define BX_SIMD_LANGEXT 1
Expand Down
65 changes: 65 additions & 0 deletions scripts/toolchain.lua
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,8 @@ function toolchain(_buildDir, _libDir)
{ "ios-arm", "iOS - ARM" },
{ "ios-arm64", "iOS - ARM64" },
{ "tvos-arm64", "tvOS - ARM64" },
{ "xros-arm64", "visionOS ARM64" },
{ "xros-simulator", "visionOS - Simulator" },
{ "mingw-gcc", "MinGW" },
{ "mingw-clang", "MinGW (clang compiler)" },
{ "netbsd", "NetBSD" },
Expand Down Expand Up @@ -114,6 +116,7 @@ function toolchain(_buildDir, _libDir)
{ "osx", "OSX" },
{ "ios", "iOS" },
{ "tvos", "tvOS" },
{ "xros", "visionOS" },
}
}

Expand Down Expand Up @@ -141,6 +144,12 @@ function toolchain(_buildDir, _libDir)
description = "Set tvOS target version (default: 9.0).",
}

newoption {
trigger = "with-visionos",
value = "#",
description = "Set visionOS target version (default: 1.0).",
}

newoption {
trigger = "with-windows",
value = "#",
Expand Down Expand Up @@ -193,6 +202,11 @@ function toolchain(_buildDir, _libDir)
tvosPlatform = _OPTIONS["with-tvos"]
end

local xrosPlatform = ""
if _OPTIONS["with-xros"] then
xrosPlatform = _OPTIONS["with-xros"]
end

local windowsPlatform = nil
if _OPTIONS["with-windows"] then
windowsPlatform = _OPTIONS["with-windows"]
Expand Down Expand Up @@ -253,6 +267,13 @@ function toolchain(_buildDir, _libDir)
premake.gcc.ar = "ar"
location (path.join(_buildDir, "projects", _ACTION .. "-" .. _OPTIONS["gcc"]))

elseif "xros-arm64" == _OPTIONS["gcc"]
or "xros-simulator" == _OPTIONS["gcc"] then
premake.gcc.cc = "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang"
premake.gcc.cxx = "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++"
premake.gcc.ar = "ar"
location (path.join(_buildDir, "projects", _ACTION .. "-" .. _OPTIONS["gcc"]))

elseif "tvos-arm64" == _OPTIONS["gcc"] then
premake.gcc.cc = "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang"
premake.gcc.cxx = "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++"
Expand Down Expand Up @@ -432,6 +453,11 @@ function toolchain(_buildDir, _libDir)
action.xcode.tvOSTargetPlatformVersion = str_or(tvosPlatform, "9.0")
premake.xcode.toolset = "appletvos"
location (path.join(_buildDir, "projects", _ACTION .. "-tvos"))

elseif "xros" == _OPTIONS["xcode"] then
action.xcode.visionOSTargetPlatformVersion = str_or(xrosPlatform, "1.0")
premake.xcode.toolset = "xros"
location (path.join(_buildDir, "projects", _ACTION .. "-xros"))
end
end

Expand Down Expand Up @@ -997,6 +1023,45 @@ function toolchain(_buildDir, _libDir)
"-fembed-bitcode",
}

configuration { "xros*" }
linkoptions {
"-lc++",
}
buildoptions {
"-Wfatal-errors",
"-Wunused-value",
"-Wundef",
}
includedirs { path.join(bxDir, "include/compat/ios") }

configuration { "xros-arm64" }
targetdir (path.join(_buildDir, "xros-arm64/bin"))
objdir (path.join(_buildDir, "xros-arm64/obj"))
libdirs { path.join(_libDir, "lib/xros-arm64") }
linkoptions {
"--sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/XROS.platform/Developer/SDKs/XROS" ..xrosPlatform.. ".sdk",
"-L/Applications/Xcode.app/Contents/Developer/Platforms/XROS.platform/Developer/SDKs/XROS" ..xrosPlatform .. ".sdk/usr/lib/system",
"-F/Applications/Xcode.app/Contents/Developer/Platforms/XROS.platform/Developer/SDKs/XROS" ..xrosPlatform .. ".sdk/System/Library/Frameworks",
"-F/Applications/Xcode.app/Contents/Developer/Platforms/XROS.platform/Developer/SDKs/XROS" ..xrosPlatform .. ".sdk/System/Library/PrivateFrameworks",
}
buildoptions {
"--sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/XROS.platform/Developer/SDKs/XROS" ..tvosPlatform .. ".sdk",
}

configuration { "xros-simulator" }
targetdir (path.join(_buildDir, "xros-simulator/bin"))
objdir (path.join(_buildDir, "xros-simulator/obj"))
libdirs { path.join(_libDir, "lib/xros-simulator") }

linkoptions {
"--sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/XRSimulator.platform/Developer/SDKs/XRSimulator" ..xrosPlatform.. ".sdk",
"-L/Applications/Xcode.app/Contents/Developer/Platforms/XRSimulator.platform/Developer/SDKs/XRSimulator" ..xrosPlatform .. ".sdk/usr/lib/system",
"-F/Applications/Xcode.app/Contents/Developer/Platforms/XRSimulator.platform/Developer/SDKs/XRSimulator" ..xrosPlatform .. ".sdk/System/Library/Frameworks",
}
buildoptions {
"--sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/XRSimulator.platform/Developer/SDKs/XRSimulator" ..xrosPlatform .. ".sdk",
}

configuration { "tvos*" }
linkoptions {
"-lc++",
Expand Down
5 changes: 3 additions & 2 deletions src/debug.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
|| BX_PLATFORM_WINRT \
|| BX_PLATFORM_XBOXONE
extern "C" __declspec(dllimport) void __stdcall OutputDebugStringA(const char* _str);
#elif BX_PLATFORM_IOS || BX_PLATFORM_OSX
#elif BX_PLATFORM_IOS || BX_PLATFORM_OSX || BX_PLATFORM_VISIONOS
# if defined(__OBJC__)
# import <Foundation/NSObjCRuntime.h>
# else
Expand Down Expand Up @@ -73,7 +73,8 @@ namespace bx
|| BX_PLATFORM_XBOXONE
OutputDebugStringA(_out);
#elif BX_PLATFORM_IOS \
|| BX_PLATFORM_OSX
|| BX_PLATFORM_OSX \
|| BX_PLATFORM_VISIONOS
# if defined(__OBJC__)
NSLog(@"%s", _out);
# else
Expand Down
3 changes: 2 additions & 1 deletion src/file.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,8 @@ namespace bx
|| BX_PLATFORM_ANDROID \
|| BX_PLATFORM_EMSCRIPTEN \
|| BX_PLATFORM_IOS \
|| BX_PLATFORM_OSX
|| BX_PLATFORM_OSX \
|| BX_PLATFORM_VISIONOS
# define fseeko64 fseeko
# define ftello64 ftello
# elif BX_PLATFORM_PS4
Expand Down
3 changes: 2 additions & 1 deletion src/mutex.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,8 @@
|| BX_PLATFORM_OSX \
|| BX_PLATFORM_PS4 \
|| BX_PLATFORM_RPI \
|| BX_PLATFORM_NX
|| BX_PLATFORM_NX \
|| BX_PLATFORM_VISIONOS
# include <pthread.h>
#elif BX_PLATFORM_WINDOWS \
|| BX_PLATFORM_WINRT \
Expand Down
6 changes: 4 additions & 2 deletions src/os.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -26,11 +26,13 @@
|| BX_PLATFORM_NX \
|| BX_PLATFORM_OSX \
|| BX_PLATFORM_PS4 \
|| BX_PLATFORM_RPI
|| BX_PLATFORM_RPI \
|| BX_PLATFORM_VISIONOS
# include <sched.h> // sched_yield
# if BX_PLATFORM_IOS \
|| BX_PLATFORM_OSX \
|| BX_PLATFORM_PS4
|| BX_PLATFORM_PS4 \
|| BX_PLATFORM_VISIONOS
# include <pthread.h> // mach_port_t
# endif // BX_PLATFORM_*

Expand Down
9 changes: 6 additions & 3 deletions src/semaphore.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@

#if BX_CRT_NONE
#elif BX_PLATFORM_OSX \
|| BX_PLATFORM_IOS
|| BX_PLATFORM_IOS \
|| BX_PLATFORM_VISIONOS
# include <dispatch/dispatch.h>
#elif BX_PLATFORM_POSIX
# include <errno.h>
Expand All @@ -36,7 +37,8 @@ namespace bx
#if BX_CRT_NONE

#elif BX_PLATFORM_OSX \
|| BX_PLATFORM_IOS
|| BX_PLATFORM_IOS \
|| BX_PLATFORM_VISIONOS
dispatch_semaphore_t m_handle;
#elif BX_PLATFORM_POSIX
pthread_mutex_t m_mutex;
Expand Down Expand Up @@ -70,7 +72,8 @@ namespace bx
return false;
}
#elif BX_PLATFORM_OSX \
|| BX_PLATFORM_IOS
|| BX_PLATFORM_IOS \
|| BX_PLATFORM_VISIONOS

Semaphore::Semaphore()
{
Expand Down
6 changes: 4 additions & 2 deletions src/thread.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@
|| BX_PLATFORM_OSX \
|| BX_PLATFORM_PS4 \
|| BX_PLATFORM_RPI \
|| BX_PLATFORM_NX
|| BX_PLATFORM_NX \
|| BX_PLATFORM_VISIONOS
# include <pthread.h>
# if BX_PLATFORM_LINUX && (BX_CRT_GLIBC < 21200)
# include <sys/prctl.h>
Expand Down Expand Up @@ -243,7 +244,8 @@ namespace bx
#if BX_CRT_NONE
BX_UNUSED(_name);
#elif BX_PLATFORM_OSX \
|| BX_PLATFORM_IOS
|| BX_PLATFORM_IOS \
|| BX_PLATFORM_VISIONOS
pthread_setname_np(_name);
#elif (BX_CRT_GLIBC >= 21200)
pthread_setname_np(ti->m_handle, _name);
Expand Down

0 comments on commit f8dc714

Please sign in to comment.