summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFabio Alessandrelli <fabio.alessandrelli@gmail.com>2023-05-24 16:28:34 +0200
committerGitHub <noreply@github.com>2023-05-24 16:28:34 +0200
commit6de604ffeeb5c338e02fd89d5e49c78c47c824b2 (patch)
treec2f2f63ef668235dae9b6db98e27028c067c591c
parentfbe4e06b9f3491db19351762e553d0fd08c9845e (diff)
parentf0af5f9982ea231eeeb92b4329178ea24e75e219 (diff)
downloadfork-godot-webrtc-native-6de604ffeeb5c338e02fd89d5e49c78c47c824b2.tar.gz
fork-godot-webrtc-native-6de604ffeeb5c338e02fd89d5e49c78c47c824b2.tar.bz2
fork-godot-webrtc-native-6de604ffeeb5c338e02fd89d5e49c78c47c824b2.zip
Merge pull request #94 from Faless/fix/macos_releases
[macOS] Add support for universal builds.
-rw-r--r--.github/workflows/build_release.yml12
-rw-r--r--SConstruct58
-rw-r--r--misc/webrtc.gdextension6
-rw-r--r--misc/webrtc.tres11
4 files changed, 50 insertions, 37 deletions
diff --git a/.github/workflows/build_release.yml b/.github/workflows/build_release.yml
index d6a9350..9047da3 100644
--- a/.github/workflows/build_release.yml
+++ b/.github/workflows/build_release.yml
@@ -84,17 +84,11 @@ jobs:
# macOS
- platform: macos
- arch: 'x86_64'
- gdnative_flags: 'macos_arch=x86_64 bits=64'
- sconsflags: ''
- os: 'macos-11'
- cache-name: macos-x86_64
- - platform: macos
- gdnative_flags: 'macos_arch=arm64 bits=64'
- arch: 'arm64'
+ arch: 'universal'
+ gdnative_flags: 'macos_arch=universal bits=64'
sconsflags: ''
os: 'macos-11'
- cache-name: macos-arm64
+ cache-name: macos-universal
# Windows
- platform: windows
diff --git a/SConstruct b/SConstruct
index 8317fb2..16acffc 100644
--- a/SConstruct
+++ b/SConstruct
@@ -1,6 +1,7 @@
#!python
import os, sys, platform, json, subprocess
+import SCons
def add_sources(sources, dirpath, extension):
@@ -101,14 +102,6 @@ if env["godot_version"] == "3":
else:
result_path = os.path.join("bin", "extension", "webrtc")
-# Dependencies
-for tool in ["cmake", "common", "ssl", "rtc"]:
- env.Tool(tool, toolpath=["tools"])
-
-ssl = env.BuildOpenSSL()
-env.NoCache(ssl) # Needs refactoring to properly cache generated headers.
-rtc = env.BuildLibDataChannel()
-
# Our includes and sources
env.Append(CPPPATH=["src/"])
env.Append(CPPDEFINES=["RTC_STATIC"])
@@ -126,12 +119,48 @@ else:
sources.append("src/init_gdnative.cpp")
add_sources(sources, "src/net/", "cpp")
-env.Depends(sources, [ssl, rtc])
-
-# Make the shared library
-result_name = "webrtc_native{}{}".format(env["suffix"], env["SHLIBSUFFIX"])
-library = env.SharedLibrary(target=os.path.join(result_path, "lib", result_name), source=sources)
-Default(library)
+# Since the OpenSSL build system does not support macOS universal binaries, we first need to build the two libraries
+# separately, then we join them together using lipo.
+mac_universal = env["platform"] == "macos" and env["arch"] == "universal"
+build_targets = []
+build_envs = [env]
+
+# For macOS universal builds, setup one build environment per architecture.
+if mac_universal:
+ build_envs = []
+ for arch in ["x86_64", "arm64"]:
+ benv = env.Clone()
+ benv["arch"] = arch
+ benv["CCFLAGS"] = SCons.Util.CLVar(str(benv["CCFLAGS"]).replace("-arch x86_64 -arch arm64", "-arch " + arch))
+ benv["LINKFLAGS"] = SCons.Util.CLVar(str(benv["LINKFLAGS"]).replace("-arch x86_64 -arch arm64", "-arch " + arch))
+ benv["suffix"] = benv["suffix"].replace("universal", arch)
+ benv["SHOBJSUFFIX"] = benv["suffix"] + benv["SHOBJSUFFIX"]
+ build_envs.append(benv)
+
+# Build our library and its dependencies.
+for benv in build_envs:
+ # Dependencies
+ for tool in ["cmake", "common", "ssl", "rtc"]:
+ benv.Tool(tool, toolpath=["tools"])
+
+ ssl = benv.BuildOpenSSL()
+ benv.NoCache(ssl) # Needs refactoring to properly cache generated headers.
+ rtc = benv.BuildLibDataChannel()
+
+ benv.Depends(sources, [ssl, rtc])
+
+ # Make the shared library
+ result_name = "webrtc_native{}{}".format(benv["suffix"], benv["SHLIBSUFFIX"])
+ library = benv.SharedLibrary(target=os.path.join(result_path, "lib", result_name), source=sources)
+ build_targets.append(library)
+
+Default(build_targets)
+
+# For macOS universal builds, join the libraries using lipo.
+if mac_universal:
+ result_name = "libwebrtc_native{}{}".format(env["suffix"], env["SHLIBSUFFIX"])
+ universal_target = env.Command(os.path.join(result_path, "lib", result_name), build_targets, "lipo $SOURCES -output $TARGETS -create")
+ Default(universal_target)
# GDNativeLibrary
if env["godot_version"] == "3":
@@ -143,4 +172,5 @@ if env["godot_version"] == "3":
})
else:
extfile = env.InstallAs(os.path.join(result_path, "webrtc.gdextension"), "misc/webrtc.gdextension")
+
Default(extfile)
diff --git a/misc/webrtc.gdextension b/misc/webrtc.gdextension
index 863db9a..a717d0d 100644
--- a/misc/webrtc.gdextension
+++ b/misc/webrtc.gdextension
@@ -6,8 +6,7 @@ entry_symbol = "webrtc_extension_init"
linux.debug.x86_64 = "res://webrtc/lib/libwebrtc_native.linux.template_debug.x86_64.so"
linux.debug.x86_32 = "res://webrtc/lib/libwebrtc_native.linux.template_debug.x86_32.so"
-macos.debug.x86_64 = "res://webrtc/lib/libwebrtc_native.macos.template_debug.x86_64.dylib"
-macos.debug.arm64 = "res://webrtc/lib/libwebrtc_native.macos.template_debug.arm64.dylib"
+macos.debug = "res://webrtc/lib/libwebrtc_native.macos.template_debug.universal.dylib"
windows.debug.x86_64 = "res://webrtc/lib/libwebrtc_native.windows.template_debug.x86_64.dll"
windows.debug.x86_32 = "res://webrtc/lib/libwebrtc_native.windows.template_debug.x86_32.dll"
android.debug.arm64 = "res://webrtc/lib/libwebrtc_native.android.template_debug.arm64.so"
@@ -17,8 +16,7 @@ ios.debug.x86_64 = "res://webrtc/lib/libwebrtc_native.ios.template_debug.x86_64.
linux.release.x86_64 = "res://webrtc/lib/libwebrtc_native.linux.template_release.x86_64.so"
linux.release.x86_32 = "res://webrtc/lib/libwebrtc_native.linux.template_release.x86_32.so"
-macos.release.x86_64 = "res://webrtc/lib/libwebrtc_native.macos.template_release.x86_64.dylib"
-macos.release.arm64 = "res://webrtc/lib/libwebrtc_native.macos.template_release.arm64.dylib"
+macos.release = "res://webrtc/lib/libwebrtc_native.macos.template_release.universal.dylib"
windows.release.x86_64 = "res://webrtc/lib/libwebrtc_native.windows.template_release.x86_64.dll"
windows.release.x86_32 = "res://webrtc/lib/libwebrtc_native.windows.template_release.x86_32.dll"
android.release.arm64 = "res://webrtc/lib/libwebrtc_native.android.template_release.arm64.so"
diff --git a/misc/webrtc.tres b/misc/webrtc.tres
index 53f096e..bdcb80f 100644
--- a/misc/webrtc.tres
+++ b/misc/webrtc.tres
@@ -3,8 +3,7 @@
[resource]
singleton = true
reloadable = false
-entry/OSX.64 = "res://{GDNATIVE_PATH}/lib/libwebrtc_native.osx.{TARGET}.x86_64.dylib"
-entry/OSX.arm64 = "res://{GDNATIVE_PATH}/lib/libwebrtc_native.osx.{TARGET}.arm64.dylib"
+entry/OSX.64 = "res://{GDNATIVE_PATH}/lib/libwebrtc_native.macos.{TARGET}.universal.dylib"
entry/Windows.64 = "res://{GDNATIVE_PATH}/lib/libwebrtc_native.windows.{TARGET}.x86_64.dll"
entry/Windows.32 = "res://{GDNATIVE_PATH}/lib/libwebrtc_native.windows.{TARGET}.x86_32.dll"
entry/X11.64 = "res://{GDNATIVE_PATH}/lib/libwebrtc_native.linux.{TARGET}.x86_64.so"
@@ -16,11 +15,3 @@ entry/Android.x64 = "res://{GDNATIVE_PATH}/lib/libwebrtc_native.android.{TARGET}
entry/iOS.armv7 = "res://{GDNATIVE_PATH}/lib/libwebrtc_native.ios.{TARGET}.armv32.dylib"
entry/iOS.arm64 = "res://{GDNATIVE_PATH}/lib/libwebrtc_native.ios.{TARGET}.arm64.dylib"
entry/iOS.x86_64 = "res://{GDNATIVE_PATH}/lib/libwebrtc_native.ios.{TARGET}.x86_64.simulator.dylib"
-dependency/Windows.64 = [ ]
-dependency/Windows.32 = [ ]
-dependency/X11.64 = [ ]
-dependency/X11.32 = [ ]
-dependency/Server.64 = [ ]
-dependency/Server.32 = [ ]
-dependency/Android.armeabi-v7a = [ ]
-dependency/Android.arm64-v8a = [ ]