Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/lwjgl3
Path: blob/wip/rebase_3.3.3/ci_build_android.bash
2570 views
1
#!/bin/bash
2
set -e
3
export LIBFFI_VERSION=3.4.6
4
export ANDROID=1 LWJGL_BUILD_OFFLINE=1
5
#export LWJGL_BUILD_ARCH=arm64
6
7
# Setup env
8
if [ "$LWJGL_BUILD_ARCH" == "arm64" ]; then
9
export NDK_ABI=arm64-v8a NDK_TARGET=aarch64
10
elif [ "$LWJGL_BUILD_ARCH" == "arm32" ]; then
11
export NDK_ABI=armeabi-v7a NDK_TARGET=armv7a NDK_SUFFIX=eabi
12
elif [ "$LWJGL_BUILD_ARCH" == "x86" ]; then
13
export NDK_ABI=x86 NDK_TARGET=i686
14
# Workaround: LWJGL 3 lacks of x86 Linux libraries
15
mkdir -p bin/libs/native/linux/x86/org/lwjgl/{freetype,glfw}
16
touch bin/libs/native/linux/x86/org/lwjgl/{freetype/libfreetype.so,glfw/libglfw.so}
17
elif [ "$LWJGL_BUILD_ARCH" == "x64" ]; then
18
export NDK_ABI=x86_64 NDK_TARGET=x86_64
19
fi
20
21
export TARGET=$NDK_TARGET-linux-android$NDK_SUFFIX
22
export PATH=$PATH:$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin
23
24
LWJGL_NATIVE=bin/libs/native/linux/$LWJGL_BUILD_ARCH/org/lwjgl
25
mkdir -p $LWJGL_NATIVE
26
27
if [ "$SKIP_LIBFFI" != "1" ]; then
28
# Get libffi
29
if [ ! -d libffi ]; then
30
wget https://github.com/libffi/libffi/releases/download/v$LIBFFI_VERSION/libffi-$LIBFFI_VERSION.tar.gz
31
tar xvf libffi-$LIBFFI_VERSION.tar.gz
32
mv libffi-$LIBFFI_VERSION libffi
33
fi
34
cd libffi
35
36
# Build libffi
37
bash configure --host=$TARGET --prefix=$PWD/$NDK_TARGET-unknown-linux-android$NDK_SUFFIX CC=${TARGET}21-clang CXX=${TARGET}21-clang++
38
make -j4
39
cd ..
40
41
# Copy libffi
42
cp libffi/$NDK_TARGET-linux-android$NDK_SUFFIX/.libs/libffi.a $LWJGL_NATIVE/
43
fi
44
45
if [ "$SKIP_FREETYPE" != "1" ]; then
46
#!/bin/bash
47
export BUILD_FREETYPE_VERSION=2.13.2
48
wget https://downloads.sourceforge.net/project/freetype/freetype2/$BUILD_FREETYPE_VERSION/freetype-$BUILD_FREETYPE_VERSION.tar.gz
49
tar xf freetype-$BUILD_FREETYPE_VERSION.tar.gz
50
rm freetype-$BUILD_FREETYPE_VERSION.tar.gz
51
cd freetype-$BUILD_FREETYPE_VERSION
52
53
export CC=$NDK_TARGET-linux-android${NDK_SUFFIX}21-clang
54
55
./configure \
56
--host=$TARGET \
57
--prefix=`pwd`/build_android-$LWJGL_BUILD_ARCH \
58
--without-zlib \
59
--with-brotli=no \
60
--with-bzip2=no \
61
--with-png=no \
62
--with-harfbuzz=no \
63
--enable-static=no \
64
--enable-shared=yes
65
66
make -j4
67
make install
68
llvm-strip ./build_android-$LWJGL_BUILD_ARCH/lib/libfreetype.so
69
70
cd ..
71
cp freetype-$BUILD_FREETYPE_VERSION/build_android-$LWJGL_BUILD_ARCH/lib/libfreetype.so $LWJGL_NATIVE/
72
rm -rf freetype-$BUILD_FREETYPE_VERSION
73
unset BUILD_FREETYPE_VERSION
74
unset CC
75
fi
76
77
# Download libraries
78
POJAV_NATIVES="https://github.com/PojavLauncherTeam/PojavLauncher/raw/v3_openjdk/app_pojavlauncher/src/main/jniLibs/$NDK_ABI"
79
wget -nc $POJAV_NATIVES/libopenal.so -P $LWJGL_NATIVE/openal
80
wget -nc "https://github.com/PojavLauncherTeam/shaderc/releases/download/v2024.2-pojav/libshaderc-$NDK_ABI.zip"
81
unzip -o libshaderc-$NDK_ABI.zip -d $LWJGL_NATIVE/shaderc
82
83
# HACK: Skip compiling and running the generator to save time and keep LWJGLX functions
84
mkdir -p bin/classes/{generator,templates/META-INF}
85
touch bin/classes/{generator,templates}/touch.txt bin/classes/generator/generated-touch.txt
86
87
# Build LWJGL 3
88
ant -version
89
yes | ant -Dplatform.linux=true \
90
-Dbinding.assimp=false \
91
-Dbinding.bgfx=false \
92
-Dbinding.cuda=false \
93
-Dbinding.egl=false \
94
-Dbinding.fmod=false \
95
-Dbinding.harfbuzz=false \
96
-Dbinding.hwloc=false \
97
-Dbinding.jawt=false \
98
-Dbinding.jemalloc=false \
99
-Dbinding.ktx=false \
100
-Dbinding.libdivide=false \
101
-Dbinding.llvm=false \
102
-Dbinding.lmdb=false \
103
-Dbinding.lz4=false \
104
-Dbinding.meow=false \
105
-Dbinding.meshoptimizer=false \
106
-Dbinding.nfd=false \
107
-Dbinding.nuklear=false \
108
-Dbinding.odbc=false \
109
-Dbinding.opencl=false \
110
-Dbinding.openvr=false \
111
-Dbinding.openxr=false \
112
-Dbinding.opus=false \
113
-Dbinding.par=false \
114
-Dbinding.remotery=false \
115
-Dbinding.rpmalloc=false \
116
-Dbinding.spvc=false \
117
-Dbinding.sse=false \
118
-Dbinding.tinyexr=false \
119
-Dbinding.tootle=false \
120
-Dbinding.xxhash=false \
121
-Dbinding.yoga=false \
122
-Dbinding.zstd=false \
123
-Dbuild.type=release/3.3.3 \
124
-Djavadoc.skip=true \
125
-Dnashorn.args="--no-deprecation-warning" \
126
compile compile-native release
127
128
# Copy native libraries
129
rm -rf bin/out; mkdir bin/out
130
find $LWJGL_NATIVE -name 'liblwjgl*.so' -exec cp {} bin/out/ \;
131
cp $LWJGL_NATIVE/shaderc/libshaderc.so bin/out/
132
if [ -e "$LWJGL_NATIVE/libfreetype.so" ]; then
133
cp $LWJGL_NATIVE/libfreetype.so bin/out/
134
fi
135
136
# Cleanup unused output jar files
137
find bin/RELEASE \( -name '*-natives-*' -o -name '*-sources.jar' \) -delete
138
139