Skip to content

Commit ee823e5

Browse files
authored
Merge pull request #3 from godotengine/mono-ios
Mono: Add support for iOS
2 parents 1da72c7 + 0341022 commit ee823e5

File tree

3 files changed

+83
-21
lines changed

3 files changed

+83
-21
lines changed

build-ios/build.sh

Lines changed: 54 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,14 @@ set -e
66

77
export BUILD_NAME=official
88
export SCONS="scons -j${NUM_CORES} verbose=yes warnings=no progress=no"
9-
export IOS_SDK="12.4"
10-
export OPTIONS="osxcross_sdk=darwin18 debug_symbols=no"
9+
export OPTIONS="debug_symbols=no"
1110
export OPTIONS_MONO="module_mono_enabled=yes mono_static=yes"
1211
export TERM=xterm
13-
export OSXCROSS_IOS=not_nothing
12+
13+
export IOS_SDK="12.4"
14+
export IOS_LIPO="/root/ioscross/arm64/bin/arm-apple-darwin11-lipo"
15+
16+
export IOS_GODOT_LIBS="libgodot libgodot_arkit_module libgodot_camera_module"
1417

1518
rm -rf godot
1619
mkdir godot
@@ -22,28 +25,61 @@ tar xf /root/godot.tar.gz --strip-components=1
2225
if [ "${CLASSICAL}" == "1" ]; then
2326
echo "Starting classical build for iOS..."
2427

25-
$SCONS platform=iphone $OPTIONS arch=arm64 tools=no target=release_debug IPHONESDK="/root/ioscross/arm64/SDK/iPhoneOS${IOS_SDK}.sdk" IPHONEPATH="/root/ioscross/arm64/" ios_triple="arm-apple-darwin11-"
26-
$SCONS platform=iphone $OPTIONS arch=arm64 tools=no target=release IPHONESDK="/root/ioscross/arm64/SDK/iPhoneOS${IOS_SDK}.sdk" IPHONEPATH="/root/ioscross/arm64/" ios_triple="arm-apple-darwin11-"
28+
$SCONS platform=iphone $OPTIONS arch=arm64 tools=no target=release_debug \
29+
osxcross_sdk=darwin18 IPHONESDK="/root/ioscross/arm64/SDK/iPhoneOS${IOS_SDK}.sdk" IPHONEPATH="/root/ioscross/arm64/" ios_triple="arm-apple-darwin11-"
30+
$SCONS platform=iphone $OPTIONS arch=arm64 tools=no target=release \
31+
osxcross_sdk=darwin18 IPHONESDK="/root/ioscross/arm64/SDK/iPhoneOS${IOS_SDK}.sdk" IPHONEPATH="/root/ioscross/arm64/" ios_triple="arm-apple-darwin11-"
2732

28-
$SCONS platform=iphone $OPTIONS arch=x86_64 tools=no target=release_debug IPHONESDK="/root/ioscross/x86_64/SDK/iPhoneOS${IOS_SDK}.sdk" IPHONEPATH="/root/ioscross/x86_64/" ios_triple="x86_64-apple-darwin11-"
29-
$SCONS platform=iphone $OPTIONS arch=x86_64 tools=no target=release IPHONESDK="/root/ioscross/x86_64/SDK/iPhoneOS${IOS_SDK}.sdk" IPHONEPATH="/root/ioscross/x86_64/" ios_triple="x86_64-apple-darwin11-"
33+
$SCONS platform=iphone $OPTIONS arch=x86_64 tools=no target=release_debug \
34+
osxcross_sdk=darwin18 IPHONESDK="/root/ioscross/x86_64/SDK/iPhoneOS${IOS_SDK}.sdk" IPHONEPATH="/root/ioscross/x86_64/" ios_triple="x86_64-apple-darwin11-"
35+
$SCONS platform=iphone $OPTIONS arch=x86_64 tools=no target=release \
36+
osxcross_sdk=darwin18 IPHONESDK="/root/ioscross/x86_64/SDK/iPhoneOS${IOS_SDK}.sdk" IPHONEPATH="/root/ioscross/x86_64/" ios_triple="x86_64-apple-darwin11-"
3037

31-
/root/ioscross/arm64/bin/arm-apple-darwin11-lipo -create bin/libgodot.iphone.opt.arm64.a bin/libgodot.iphone.opt.x86_64.a -output /root/out/libgodot.iphone.opt.fat
32-
/root/ioscross/arm64/bin/arm-apple-darwin11-lipo -create bin/libgodot.iphone.opt.debug.arm64.a bin/libgodot.iphone.opt.debug.x86_64.a -output /root/out/libgodot.iphone.opt.debug.fat
33-
34-
/root/ioscross/arm64/bin/arm-apple-darwin11-lipo -create bin/libgodot_arkit_module.iphone.opt.arm64.a bin/libgodot_arkit_module.iphone.opt.x86_64.a -output /root/out/libgodot_arkit_module.iphone.opt.fat
35-
/root/ioscross/arm64/bin/arm-apple-darwin11-lipo -create bin/libgodot_arkit_module.iphone.opt.debug.arm64.a bin/libgodot_arkit_module.iphone.opt.debug.x86_64.a -output /root/out/libgodot_arkit_module.iphone.opt.debug.fat
36-
37-
/root/ioscross/arm64/bin/arm-apple-darwin11-lipo -create bin/libgodot_camera_module.iphone.opt.arm64.a bin/libgodot_camera_module.iphone.opt.x86_64.a -output /root/out/libgodot_camera_module.iphone.opt.fat
38-
/root/ioscross/arm64/bin/arm-apple-darwin11-lipo -create bin/libgodot_camera_module.iphone.opt.debug.arm64.a bin/libgodot_camera_module.iphone.opt.debug.x86_64.a -output /root/out/libgodot_camera_module.iphone.opt.debug.fat
38+
mkdir -p /root/out/templates
39+
for lib in $IOS_GODOT_LIBS; do
40+
$IOS_LIPO -create bin/${lib}.iphone.opt.arm64.a bin/${lib}.iphone.opt.x86_64.a -output /root/out/templates/${lib}.iphone.opt.fat
41+
$IOS_LIPO -create bin/${lib}.iphone.opt.debug.arm64.a bin/${lib}.iphone.opt.debug.x86_64.a -output /root/out/templates/${lib}.iphone.opt.debug.fat
42+
done
3943
fi
4044

4145
# Mono
4246

4347
if [ "${MONO}" == "1" ]; then
44-
echo "No Mono support for iOS yet."
45-
#cp /root/mono-glue/*.cpp modules/mono/glue/
46-
#cp -r /root/mono-glue/Managed/Generated modules/mono/glue/Managed/
48+
echo "Starting Mono build for iOS..."
49+
50+
cp /root/mono-glue/*.cpp modules/mono/glue/
51+
cp -r /root/mono-glue/GodotSharp/GodotSharp/Generated modules/mono/glue/GodotSharp/GodotSharp/
52+
cp -r /root/mono-glue/GodotSharp/GodotSharpEditor/Generated modules/mono/glue/GodotSharp/GodotSharpEditor/
53+
54+
$SCONS platform=iphone $OPTIONS $OPTIONS_MONO arch=arm64 mono_prefix=/root/mono-installs/ios-arm64-release tools=no target=release_debug \
55+
osxcross_sdk=darwin18 IPHONESDK="/root/ioscross/arm64/SDK/iPhoneOS${IOS_SDK}.sdk" IPHONEPATH="/root/ioscross/arm64/" ios_triple="arm-apple-darwin11-"
56+
$SCONS platform=iphone $OPTIONS $OPTIONS_MONO arch=arm64 mono_prefix=/root/mono-installs/ios-arm64-release tools=no target=release \
57+
osxcross_sdk=darwin18 IPHONESDK="/root/ioscross/arm64/SDK/iPhoneOS${IOS_SDK}.sdk" IPHONEPATH="/root/ioscross/arm64/" ios_triple="arm-apple-darwin11-"
58+
59+
$SCONS platform=iphone $OPTIONS $OPTIONS_MONO arch=x86_64 mono_prefix=/root/mono-installs/ios-x86_64-release tools=no target=release_debug \
60+
osxcross_sdk=darwin18 IPHONESDK="/root/ioscross/x86_64/SDK/iPhoneOS${IOS_SDK}.sdk" IPHONEPATH="/root/ioscross/x86_64/" ios_triple="x86_64-apple-darwin11-"
61+
$SCONS platform=iphone $OPTIONS $OPTIONS_MONO arch=x86_64 mono_prefix=/root/mono-installs/ios-x86_64-release tools=no target=release \
62+
osxcross_sdk=darwin18 IPHONESDK="/root/ioscross/x86_64/SDK/iPhoneOS${IOS_SDK}.sdk" IPHONEPATH="/root/ioscross/x86_64/" ios_triple="x86_64-apple-darwin11-"
63+
64+
mkdir -p /root/out/templates-mono
65+
for lib in $IOS_GODOT_LIBS; do
66+
$IOS_LIPO -create bin/${lib}.iphone.opt.arm64.a bin/${lib}.iphone.opt.x86_64.a -output /root/out/templates-mono/${lib}.iphone.opt.fat
67+
$IOS_LIPO -create bin/${lib}.iphone.opt.debug.arm64.a bin/${lib}.iphone.opt.debug.x86_64.a -output /root/out/templates-mono/${lib}.iphone.opt.debug.fat
68+
done
69+
70+
mkdir -p /root/out/templates-mono/iphone-mono-libs
71+
72+
$IOS_LIPO -create bin/libmonosgen-2.0.iphone.arm64.a bin/libmonosgen-2.0.iphone.x86_64.a -output /root/out/templates-mono/iphone-mono-libs/libmonosgen-2.0.iphone.fat.a
73+
$IOS_LIPO -create bin/libmono-native.iphone.arm64.a bin/libmono-native.iphone.x86_64.a -output /root/out/templates-mono/iphone-mono-libs/libmono-native.iphone.fat.a
74+
$IOS_LIPO -create bin/libmono-profiler-log.iphone.arm64.a bin/libmono-profiler-log.iphone.x86_64.a -output /root/out/templates-mono/iphone-mono-libs/libmono-profiler-log.iphone.fat.a
75+
76+
# The Mono libraries for the interpreter are not available for simulator builds
77+
$IOS_LIPO -create bin/libmono-ee-interp.iphone.arm64.a -output /root/out/templates-mono/iphone-mono-libs/libmono-ee-interp.iphone.fat.a
78+
$IOS_LIPO -create bin/libmono-icall-table.iphone.arm64.a -output /root/out/templates-mono/iphone-mono-libs/libmono-icall-table.iphone.fat.a
79+
$IOS_LIPO -create bin/libmono-ilgen.iphone.arm64.a -output /root/out/templates-mono/iphone-mono-libs/libmono-ilgen.iphone.fat.a
80+
81+
mkdir -p /root/out/templates-mono/bcl
82+
cp -r /root/mono-installs/ios-bcl/* /root/out/templates-mono/bcl
4783
fi
4884

4985
echo "iOS build successful"

build-release.sh

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -177,8 +177,8 @@ if [ "${build_classical}" == "1" ]; then
177177
rm -rf ios_xcode
178178
cp -r git/misc/dist/ios_xcode ios_xcode
179179
for suffix in "" "_arkit_module" "_camera_module"; do
180-
cp out/ios/libgodot${suffix}.iphone.opt.fat ios_xcode/libgodot${suffix}.iphone.release.fat.a
181-
cp out/ios/libgodot${suffix}.iphone.opt.debug.fat ios_xcode/libgodot${suffix}.iphone.debug.fat.a
180+
cp out/ios/templates/libgodot${suffix}.iphone.opt.fat ios_xcode/libgodot${suffix}.iphone.release.fat.a
181+
cp out/ios/templates/libgodot${suffix}.iphone.opt.debug.fat ios_xcode/libgodot${suffix}.iphone.debug.fat.a
182182
done
183183
chmod +x ios_xcode/libgodot*.iphone.*
184184
cd ios_xcode
@@ -234,13 +234,15 @@ if [ "${build_mono}" == "1" ]; then
234234
mkdir -p ${binbasename}_64
235235
cp out/linux/x64/tools-mono/godot.x11.opt.tools.64.mono ${binbasename}_64/${binbasename}.64
236236
cp -rp out/linux/x64/tools-mono/GodotSharp ${binbasename}_64/
237+
cp -rp out/aot-compilers ${binbasename}_64/GodotSharp/Tools/
237238
zip -r -q -9 "${reldir_mono}/${binbasename}_64.zip" ${binbasename}_64
238239
rm -rf ${binbasename}_64
239240

240241
binbasename="${godot_basename}_mono_x11"
241242
mkdir -p ${binbasename}_32
242243
cp out/linux/x86/tools-mono/godot.x11.opt.tools.32.mono ${binbasename}_32/${binbasename}.32
243244
cp -rp out/linux/x86/tools-mono/GodotSharp/ ${binbasename}_32/
245+
cp -rp out/aot-compilers ${binbasename}_32/GodotSharp/Tools/
244246
zip -r -q -9 "${reldir_mono}/${binbasename}_32.zip" ${binbasename}_32
245247
rm -rf ${binbasename}_32
246248

@@ -264,6 +266,7 @@ if [ "${build_mono}" == "1" ]; then
264266
strip ${binname}/${binname}.exe
265267
sign ${binname}/${binname}.exe
266268
cp -rp out/windows/x64/tools-mono/GodotSharp ${binname}/
269+
cp -rp out/aot-compilers ${binname}/GodotSharp/Tools/
267270
zip -r -q -9 "${reldir_mono}/${binname}.zip" ${binname}
268271
rm -rf ${binname}
269272

@@ -273,6 +276,7 @@ if [ "${build_mono}" == "1" ]; then
273276
strip ${binname}/${binname}.exe
274277
sign ${binname}/${binname}.exe
275278
cp -rp out/windows/x86/tools-mono/GodotSharp ${binname}/
279+
cp -rp out/aot-compilers ${binname}/GodotSharp/Tools/
276280
zip -r -q -9 "${reldir_mono}/${binname}.zip" ${binname}
277281
rm -rf ${binname}
278282

@@ -304,6 +308,7 @@ if [ "${build_mono}" == "1" ]; then
304308
cp -rp out/macosx/x64/tools-mono/GodotSharp/Mono/lib Godot_mono.app/Contents/Frameworks/GodotSharp/Mono
305309
cp -rp out/macosx/x64/tools-mono/GodotSharp/Tools Godot_mono.app/Contents/Frameworks/GodotSharp
306310
cp -rp out/macosx/x64/tools-mono/GodotSharp/Mono/etc Godot_mono.app/Contents/Resources/GodotSharp/Mono
311+
cp -rp out/aot-compilers Godot_mono.app/Contents/Frameworks/GodotSharp/Tools/
307312
chmod +x Godot_mono.app/Contents/MacOS/Godot
308313
zip -q -9 -r "${reldir_mono}/${binname}.zip" Godot_mono.app
309314
rm -rf Godot_mono.app
@@ -327,6 +332,7 @@ if [ "${build_mono}" == "1" ]; then
327332
mkdir -p ${binbasename}_64
328333
cp out/server/x64/tools-mono/godot_server.x11.opt.tools.64.mono ${binbasename}_64/${binbasename}.64
329334
cp -rp out/server/x64/tools-mono/GodotSharp ${binbasename}_64/
335+
cp -rp out/aot-compilers ${binbasename}_64/GodotSharp/Tools/
330336
zip -r -q -9 "${reldir_mono}/${binbasename}_64.zip" ${binbasename}_64
331337
rm -rf ${binbasename}_64
332338

@@ -359,7 +365,22 @@ if [ "${build_mono}" == "1" ]; then
359365

360366
## iOS (Mono) ##
361367

362-
# Not supported yet.
368+
rm -rf ios_xcode
369+
cp -r git/misc/dist/ios_xcode ios_xcode
370+
for suffix in "" "_arkit_module" "_camera_module"; do
371+
cp out/ios/templates-mono/libgodot${suffix}.iphone.opt.fat ios_xcode/libgodot${suffix}.iphone.release.fat.a
372+
cp out/ios/templates-mono/libgodot${suffix}.iphone.opt.debug.fat ios_xcode/libgodot${suffix}.iphone.debug.fat.a
373+
done
374+
chmod +x ios_xcode/libgodot*.iphone.*
375+
cd ios_xcode
376+
zip -q -9 -r "${templatesdir_mono}/iphone.zip" *
377+
cd ..
378+
rm -rf ios_xcode
379+
380+
mkdir -p ${templatesdir_mono}/bcl
381+
cp -r out/ios/templates-mono/bcl/monotouch* ${templatesdir_mono}/bcl/
382+
383+
cp -r out/ios/templates-mono/iphone-mono-libs ${templatesdir_mono}/
363384

364385
## UWP (Mono) ##
365386

build.sh

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,11 @@ mkdir -p ${basedir}/out/logs
150150
export podman_run="${podman} run -it --rm --env NUM_CORES --env CLASSICAL=${build_classical} --env MONO=${build_mono} -v ${basedir}/godot.tar.gz:/root/godot.tar.gz -v ${basedir}/mono-glue:/root/mono-glue -w /root/"
151151
export img_version=3.2-mono-6.6.0.166
152152

153+
# Get AOT compilers from their containers.
154+
mkdir -p ${basedir}/out/aot-compilers
155+
${podman} run -it --rm -w /root -v ${basedir}/out/aot-compilers:/root/out localhost/godot-ios:${img_version} bash -c "cp -r /root/aot-compilers/* /root/out"
156+
chmod +x ${basedir}/out/aot-compilers/*/*
157+
153158
mkdir -p ${basedir}/mono-glue
154159
${podman_run} -v ${basedir}/build-mono-glue:/root/build localhost/godot-mono-glue:${img_version} bash build/build.sh 2>&1 | tee ${basedir}/out/logs/mono-glue
155160

0 commit comments

Comments
 (0)