Skip to content

Commit 7f51d44

Browse files
authored
Merge pull request #31 from gilzoide/feature/amalgamate-source
Use amalgamated C++ code instead of prebuilt libs for Apple platforms
2 parents a63fa8d + 7d45780 commit 7f51d44

19 files changed

+9769
-306
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
Samples
22
Samples.meta
3+
*.o~

Editor/XCodeEmbedLibrary.cs

-61
This file was deleted.

Editor/XCodeEmbedLibrary.cs.meta

-11
This file was deleted.

Plugins/Makefile

+27-27
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
STRIP ?= strip
2-
EMCXX ?= em++
32
SED ?= sed
3+
# WebGL toolchain
4+
EMAR ?= emar
5+
EMCXX ?= em++
6+
# Android setup
47
ANDROID_NDK_ROOT ?=
8+
# macOS
59
CODESIGN ?= codesign
610
MACOS_CODESIGN_SIGNATURE ?=
711

812
LINKFLAGS += -shared
9-
CXXFLAGS += -Iyoga~ -std=c++20 -fvisibility=hidden
13+
CXXFLAGS += -std=c++20 -fvisibility=hidden
1014
ifeq ($(DEBUG),1)
1115
CXXFLAGS += -O0 -g
1216
else
@@ -16,24 +20,37 @@ endif
1620
BUILD_DIRS = \
1721
build/windows/x86_64 build/windows/x86 \
1822
build/linux/x86_64 \
19-
build/macos build/ios build/tvos build/visionos \
23+
build/macos \
2024
build/android/arm64 build/android/arm32 build/android/x86 build/android/x86_64 \
2125
build/webgl
2226

2327
# Misc
2428
$(BUILD_DIRS):
2529
mkdir -p $@
2630

27-
%/flex-ui.dll: src~/flex-ui.cpp | %
31+
# Requires `cpp-amalgamate`, install with `cargo install cpp-amalgamate`
32+
# Reference: https://github.com/Felerius/cpp-amalgamate
33+
#
34+
# The sed script prepends an underscore to all Yoga symbols to avoid symbol clashes with
35+
# the version of Yoga embedded within Unity, fixing iOS / tvOS / visionOS / WebGL builds.
36+
flex-ui-amalgamated.cpp: src~/flex-ui.cpp yoga~
37+
cpp-amalgamate -d yoga~ $< | $(SED) 's/\bYG/_YG/g' > $@
38+
39+
%/flex-ui-amalgamated.o~: flex-ui-amalgamated.cpp | %
40+
$(CXX) -c -o $@ $< $(CXXFLAGS)
41+
%/libflex-ui.a: %/flex-ui-amalgamated.o~
42+
$(AR) r $@ $<
43+
44+
%/flex-ui.dll: flex-ui-amalgamated.cpp | %
2845
$(CXX) -o $@ $< $(CXXFLAGS) $(LINKFLAGS)
2946
$(STRIP) -x $@
3047

3148
%/libflex-ui.so: CXXFLAGS += -fPIC
32-
%/libflex-ui.so: src~/flex-ui.cpp | %
49+
%/libflex-ui.so: flex-ui-amalgamated.cpp | %
3350
$(CXX) -o $@ $< $(CXXFLAGS) $(LINKFLAGS)
3451
$(STRIP) -x $@
3552

36-
%/libflex-ui.dylib: src~/flex-ui.cpp | %
53+
%/libflex-ui.dylib: flex-ui-amalgamated.cpp | %
3754
$(CXX) -o $@ $< $(CXXFLAGS) $(LINKFLAGS)
3855
install_name_tool -id @rpath/$(@F) $@
3956
$(STRIP) -x $@
@@ -44,15 +61,6 @@ endif
4461
# macOS
4562
build/macos/libflex-ui.dylib: CXXFLAGS += -arch x86_64 -arch arm64
4663

47-
# iOS
48-
build/ios/libflex-ui.dylib: CXXFLAGS += -arch arm64 -isysroot $(shell xcrun --show-sdk-path --sdk iphoneos)
49-
50-
# tvOS
51-
build/tvos/libflex-ui.dylib: CXXFLAGS += -arch arm64 -isysroot $(shell xcrun --show-sdk-path --sdk appletvos)
52-
53-
# visionOS
54-
build/visionos/libflex-ui.dylib: CXXFLAGS += -arch arm64 -isysroot $(shell xcrun --show-sdk-path --sdk xros)
55-
5664
# Android
5765
check-ndk-root:
5866
ifndef ANDROID_NDK_ROOT
@@ -72,13 +80,8 @@ build/android/x86/libflex-ui.so: CXX = $(wildcard $(ANDROID_NDK_ROOT)/toolchains
7280
build/android/x86/libflex-ui.so: check-ndk-root
7381

7482
# WebGL
75-
build/webgl/libflex-ui.bc: src~/flex-ui.cpp | build/webgl
76-
# Workaround: prepend Yoga symbols with a '_' to avoid build errors,
77-
# since Unity already exports some of them (used by UI Toolkit).
78-
# C++ -> LLVM IR -> rename functions in text -> LLVM Bitcode
79-
$(EMCXX) -c $< $(CXXFLAGS) -emit-llvm -S -o - \
80-
| $(SED) -e 's/@YG/@_YG/' \
81-
| $(EMCXX) -o $@ -c -emit-llvm -x ir -
83+
build/webgl/libflex-ui.a: CXX = $(EMCXX)
84+
build/webgl/libflex-ui.a: AR = $(EMAR)
8285

8386
# Targets
8487
windows-x86_64: build/windows/x86_64/flex-ui.dll
@@ -100,18 +103,15 @@ linux-x86_64: build/linux/x86_64/libflex-ui.so
100103
all-linux: linux-x86_64
101104

102105
macos-universal: build/macos/libflex-ui.dylib
103-
ios-arm64: build/ios/libflex-ui.dylib
104-
tvos-arm64: build/tvos/libflex-ui.dylib
105-
visionos-arm64: build/visionos/libflex-ui.dylib
106-
all-apple: macos-universal ios-arm64 tvos-arm64 visionos-arm64
106+
all-apple: macos-universal
107107

108108
android-arm64: build/android/arm64/libflex-ui.so
109109
android-arm32: build/android/arm32/libflex-ui.so
110110
android-x86_64: build/android/x86_64/libflex-ui.so
111111
android-x86: build/android/x86/libflex-ui.so
112112
all-android: android-arm64 android-arm32 android-x86_64 android-x86
113113

114-
webgl: build/webgl/libflex-ui.bc
114+
webgl: build/webgl/libflex-ui.a
115115
all-webgl: webgl
116116

117117
# Dockerized builds

Plugins/build/ios.meta

-8
This file was deleted.

Plugins/build/ios/libflex-ui.dylib

-151 KB
Binary file not shown.

Plugins/build/ios/libflex-ui.dylib.meta

-81
This file was deleted.

Plugins/build/tvos.meta

-8
This file was deleted.

Plugins/build/tvos/libflex-ui.dylib

-151 KB
Binary file not shown.

Plugins/build/tvos/libflex-ui.dylib.meta

-91
This file was deleted.

Plugins/build/visionos.meta

-8
This file was deleted.
-151 KB
Binary file not shown.

Plugins/build/webgl/libflex-ui.a

157 KB
Binary file not shown.

Plugins/build/webgl/libflex-ui.bc

-248 KB
Binary file not shown.

0 commit comments

Comments
 (0)