Skip to content

Commit d5a6409

Browse files
committed
Fix use xcframeworks for iOS builds
1 parent 679a333 commit d5a6409

File tree

5 files changed

+94
-23
lines changed

5 files changed

+94
-23
lines changed

.editorconfig

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,11 @@ insert_final_newline = true
1111
indent_style = tab
1212
indent_size = 4
1313

14-
[Sconstruct]
14+
[*.py]
15+
indent_style = space
16+
indent_size = 4
17+
18+
[SConstruct]
1519
indent_style = space
1620
indent_size = 4
1721

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ build/*
1515
*.dll
1616
*.dylib
1717
*.framework
18+
*.xcframework
1819
compile_commands.json
1920
addons/objectivec-gdextension/LICENSE
2021

SConstruct

Lines changed: 41 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,65 @@
1-
import os
2-
31
env = SConscript("lib/godot-cpp/SConstruct").Clone()
2+
env.Tool("apple", toolpath=["tools"])
43

54
# Add support for generating compilation database files
65
env.Tool("compilation_db")
76
compiledb = env.CompilationDatabase("compile_commands.json")
87
env.Alias("compiledb", compiledb)
98

9+
# Setup variant build dir for each setup
10+
def remove_prefix(s, prefix):
11+
return s[len(prefix):] if s.startswith(prefix) else s
12+
13+
build_dir = "build/{}".format(remove_prefix(env["suffix"], "."))
14+
VariantDir(build_dir, 'src', duplicate=False)
15+
1016
if env["platform"] in ["macos", "ios"]:
1117
# Compile flags
1218
env.Append(LINKFLAGS="-framework Foundation")
1319

14-
# Setup variant build dir for each setup
15-
def remove_prefix(s, prefix):
16-
return s[len(prefix):] if s.startswith(prefix) else s
17-
18-
build_dir = "build/{}".format(remove_prefix(env["suffix"], "."))
19-
VariantDir(build_dir, 'src', duplicate=False)
20-
2120
# Build Objective-C GDExtension
2221
source_directories = ["."]
2322
sources = [
24-
Glob("{}/{}/*.cpp".format(build_dir, directory)) + Glob("{}/{}/*.mm".format(build_dir, directory))
23+
Glob(f"{build_dir}/{directory}/*.cpp") + Glob(f"{build_dir}/{directory}/*.mm")
2524
for directory in source_directories
2625
]
27-
library = env.SharedLibrary(
28-
"addons/objc-gdextension/build/libobjcgdextension{}{}".format(env["suffix"], env["SHLIBSUFFIX"]),
29-
source=sources,
30-
)
26+
if env["platform"] == "ios":
27+
library = env.StaticLibrary(
28+
f"{build_dir}/libobjcgdextension{env["suffix"]}{env["LIBSUFFIX"]}",
29+
source=sources,
30+
)
31+
godotcpp_xcframework = env.XCFramework(
32+
f"addons/objc-gdextension/build/libgodot-cpp{env["suffix"]}.xcframework",
33+
[
34+
f"lib/godot-cpp/bin/libgodot-cpp{env["suffix"]}{env["LIBSUFFIX"]}",
35+
*map(str, Glob(f"lib/godot-cpp/bin/libgodot-cpp{env["suffix"]}*{env["LIBSUFFIX"]}")),
36+
],
37+
)
38+
luagdextension_xcframework = env.XCFramework(
39+
f"addons/objc-gdextension/build/libobjcgdextension{env["suffix"]}.xcframework",
40+
[
41+
f"{build_dir}/libobjcgdextension{env["suffix"]}{env["LIBSUFFIX"]}",
42+
*map(str, Glob(f"{build_dir}/libobjcgdextension{env["suffix"]}*{env["LIBSUFFIX"]}")),
43+
],
44+
)
45+
env.Depends(godotcpp_xcframework, library)
46+
env.Depends(luagdextension_xcframework, godotcpp_xcframework)
47+
Default(luagdextension_xcframework)
48+
else:
49+
library = env.SharedLibrary(
50+
f"addons/objc-gdextension/build/libobjcgdextension{env["suffix"]}{env["SHLIBSUFFIX"]}",
51+
source=sources,
52+
)
3153
else:
3254
dummy_env = Environment(
3355
CPPPATH="lib/gdextension-lite",
3456
CFLAGS=["-flto", "-O2"],
3557
)
3658
library = dummy_env.SharedLibrary(
37-
"addons/objc-gdextension/build/libobjcgdextension{}{}".format(env["suffix"], env["SHLIBSUFFIX"]),
38-
source=["src/dummy_main.c", "lib/gdextension-lite/gdextension-lite/gdextension-lite-one.c"]
59+
f"addons/objc-gdextension/build/libobjcgdextension{env["suffix"]}{env["SHLIBSUFFIX"]}",
60+
source=[
61+
"src/dummy_main.c",
62+
"lib/gdextension-lite/gdextension-lite/gdextension-lite-one.c",
63+
]
3964
)
4065
Default(library)
Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,14 @@
11
[configuration]
2-
32
entry_symbol = "objcgdextension_entrypoint"
43
compatibility_minimum = "4.1"
54

65
[libraries]
7-
86
macos.debug = "build/libobjcgdextension.macos.template_debug.universal.dylib"
97
macos.release = "build/libobjcgdextension.macos.template_release.universal.dylib"
10-
ios.debug = "build/libobjcgdextension.ios.template_debug.universal.dylib"
11-
ios.debug.simulator = "build/libobjcgdextension.ios.template_debug.universal.simulator.dylib"
12-
ios.release = "build/libobjcgdextension.ios.template_release.universal.dylib"
13-
ios.release.simulator = "build/libobjcgdextension.ios.template_release.universal.simulator.dylib"
8+
ios.debug = "build/libobjcgdextension.ios.template_debug.universal.xcframework"
9+
ios.debug.simulator = "build/libobjcgdextension.ios.template_debug.universal.simulator.xcframework"
10+
ios.release = "build/libobjcgdextension.ios.template_release.universal.xcframework"
11+
ios.release.simulator = "build/libobjcgdextension.ios.template_release.universal.simulator.xcframework"
1412
windows.x86_32 = "build/libobjcgdextension.windows.template_release.x86_32.dll"
1513
windows.x86_64 = "build/libobjcgdextension.windows.template_release.x86_64.dll"
1614
linux.x86_32 = "build/libobjcgdextension.linux.template_release.x86_32.so"
@@ -19,3 +17,17 @@ android.x86_32 = "build/libobjcgdextension.android.template_release.x86_32.so"
1917
android.x86_64 = "build/libobjcgdextension.android.template_release.x86_64.so"
2018
android.arm32 = "build/libobjcgdextension.android.template_release.arm32.so"
2119
android.arm64 = "build/libobjcgdextension.android.template_release.arm64.so"
20+
21+
[dependencies]
22+
ios.debug = {
23+
"build/libgodot-cpp.ios.template_debug.universal.xcframework": ""
24+
}
25+
ios.debug.simulator = {
26+
"build/libgodot-cpp.ios.template_debug.universal.simulator.xcframework": ""
27+
}
28+
ios.release = {
29+
"build/libgodot-cpp.ios.template_release.universal.xcframework": ""
30+
}
31+
ios.release.simulator = {
32+
"build/libgodot-cpp.ios.template_release.universal.simulator.xcframework": ""
33+
}

tools/apple.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import sys
2+
3+
4+
def Lipo(env, target, source):
5+
return env.Command(
6+
target,
7+
source,
8+
action=f"lipo $SOURCES -create -output $TARGET",
9+
)
10+
11+
12+
def XCFramework(env, target, source):
13+
return env.Command(
14+
target,
15+
source,
16+
action=[
17+
"rm -rf $TARGET",
18+
f"xcodebuild -create-xcframework {' '.join('-library ' + str(s) for s in source)} -output $TARGET",
19+
],
20+
)
21+
22+
23+
def exists(env):
24+
return sys.platform == "darwin"
25+
26+
27+
def generate(env):
28+
env.AddMethod(Lipo, "Lipo")
29+
env.AddMethod(XCFramework, "XCFramework")

0 commit comments

Comments
 (0)