diff --git a/.github/workflows/build-release.yml b/.github/workflows/build-release.yml index f9a78ec..aae4af2 100644 --- a/.github/workflows/build-release.yml +++ b/.github/workflows/build-release.yml @@ -21,7 +21,7 @@ jobs: sudo dpkg --add-architecture i386 sudo apt-get update sudo apt-get install -y build-essential libc6-dev libc6-dev:i386 \ - gcc-multilib g++-multilib \ + gcc-multilib g++-multilib meson \ dos2unix - name: Setup Android SDK diff --git a/Start.sh b/Start.sh index f12782a..ee91247 100755 --- a/Start.sh +++ b/Start.sh @@ -52,6 +52,8 @@ fi ./freetype.sh bootstrap ./harfbuzz.sh ./freetype.sh +./pixman.sh +./cairo.sh ./libSDL.sh ./openssl.sh ./irrlicht.sh diff --git a/cairo.sh b/cairo.sh new file mode 100755 index 0000000..085ba65 --- /dev/null +++ b/cairo.sh @@ -0,0 +1,133 @@ +#!/bin/bash -e + +. ./sdk.sh +CAIRO_VERSION=1.18.4 + +mkdir -p output/cairo/lib/$TARGET_ABI +mkdir -p deps; cd deps + +if [ ! -d cairo-src ]; then + git clone -b $CAIRO_VERSION --depth 1 https://gitlab.freedesktop.org/cairo/cairo.git cairo-src + mkdir cairo-src/build +fi + +cd cairo-src + +FREETYPE_PREFIX="$ANDR_ROOT/output/freetype" +PNG_PREFIX="$ANDR_ROOT/output/libpng" +PIXMAN_PREFIX="$ANDR_ROOT/output/pixman" +CROSS_FILE="android-$TARGET_ABI.cross" + +mkdir -p pkgconfig + +cat > pkgconfig/freetype2.pc << EOF +prefix=$ANDR_ROOT/output/freetype +exec_prefix=\${prefix} +libdir=\${prefix}/lib/$TARGET_ABI +includedir=\${prefix}/include + +Name: FreeType 2 +Description: +Version: 26.x +Libs: -L\${libdir} -lfreetype +Cflags: -I\${includedir} +EOF + +cat > pkgconfig/pixman-1.pc << EOF +prefix=$ANDR_ROOT/output/pixman +exec_prefix=\${prefix} +libdir=\${prefix}/lib/$TARGET_ABI +includedir=\${prefix}/include + +Name: Pixman +Description: +Version: 0.42.x +Libs: -L\${libdir} -lpixman +Cflags: -I\${includedir} +EOF + +cat > pkgconfig/libpng.pc << EOF +prefix=$ANDR_ROOT/output/libpng +exec_prefix=\${prefix} +libdir=\${prefix}/lib/$TARGET_ABI +includedir=\${prefix}/include + +Name: libpng +Description: +Version: 1.6.x +Libs: -L\${libdir} -lpng +Cflags: -I\${includedir} +EOF + +cat > "$CROSS_FILE" << EOF +[binaries] +c = '$CC' +cpp = '$CXX' +ar = '$AR' +ranlib = '$RANLIB' +strip = '$STRIP' +pkg-config = 'pkg-config' + +[built-in options] +c_args = ['-O3', '-fPIC', '-D__ANDROID_MIN_SDK_VERSION__=$API', + '-I${FREETYPE_PREFIX}/include', '-I${FREETYPE_PREFIX}/include/freetype2', + '-I${PNG_PREFIX}/include', + '-I${PIXMAN_PREFIX}/include'] +c_link_args = ['-fPIC', + '-L${FREETYPE_PREFIX}/lib/${TARGET_ABI}', + '-L${PNG_PREFIX}/lib/${TARGET_ABI}', + '-L${PIXMAN_PREFIX}/lib/${TARGET_ABI}'] +cpp_args = ['-O3', '-fPIC', '-D__ANDROID_MIN_SDK_VERSION__=$API', + '-I${FREETYPE_PREFIX}/include', '-I${FREETYPE_PREFIX}/include/freetype2', + '-I${PNG_PREFIX}/include', + '-I${PIXMAN_PREFIX}/include'] +cpp_link_args = ['-fPIC', + '-L${FREETYPE_PREFIX}/lib/${TARGET_ABI}', + '-L${PNG_PREFIX}/lib/${TARGET_ABI}', + '-L${PIXMAN_PREFIX}/lib/${TARGET_ABI}'] + +[properties] +sys_root = '$TOOLCHAIN/sysroot' +needs_exe_wrapper = true +pkg_config_libdir = '$ANDR_ROOT/deps/cairo-src/pkgconfig' + +[host_machine] +system = 'android' +cpu_family = '$TARGET_CPU_FAMILY' +cpu = '$TARGET_CPU' +endian = 'little' +EOF + +meson setup build \ + --cross-file "$CROSS_FILE" \ + --wrap-mode=nodownload \ + --default-library=static \ + --buildtype=release \ + -Dprefix=/ \ + -Dfreetype=enabled \ + -Dpng=enabled \ + -Dfontconfig=disabled \ + -Dxcb=disabled \ + -Dxlib=disabled \ + -Dxlib-xcb=disabled \ + -Dzlib=disabled \ + -Dtests=disabled \ + -Dlzo=disabled \ + -Dgtk2-utils=disabled \ + -Dglib=disabled \ + -Dspectre=disabled \ + -Dsymbol-lookup=disabled \ + -Dgtk_doc=false + +ninja -C build -j$(nproc) + +# update headers +rm -rf ../../output/cairo/include +mkdir -p ../../output/cairo/include/cairo +cp src/*.h ../../output/cairo/include/cairo/ +cp build/src/*.h ../../output/cairo/include/cairo/ +# update lib +rm -f ../../output/cairo/lib/$TARGET_ABI/libcairo.a +cp build/src/libcairo.a ../../output/cairo/lib/$TARGET_ABI/libcairo.a + +echo "libcairo build successful" diff --git a/pixman.sh b/pixman.sh new file mode 100755 index 0000000..397dd8b --- /dev/null +++ b/pixman.sh @@ -0,0 +1,82 @@ +#!/bin/bash -e + +. ./sdk.sh +PIXMAN_VERSION=0.46.4 + +mkdir -p output/pixman/lib/$TARGET_ABI +mkdir -p deps; cd deps + +if [ ! -d pixman-src ]; then + git clone -b pixman-$PIXMAN_VERSION --depth 1 https://gitlab.freedesktop.org/pixman/pixman.git pixman-src + mkdir pixman-src/build +fi + +cd pixman-src + +PNG_PREFIX="$ANDR_ROOT/output/libpng" +CROSS_FILE="android-$TARGET_ABI.cross" + +mkdir -p pkgconfig + +cat > pkgconfig/libpng.pc << EOF +prefix=$ANDR_ROOT/output/libpng +exec_prefix=\${prefix} +libdir=\${prefix}/lib/$TARGET_ABI +includedir=\${prefix}/include + +Name: libpng +Description: +Version: 1.6.x +Libs: -L\${libdir} -lpng +Cflags: -I\${includedir} +EOF + +cat > "$CROSS_FILE" << EOF +[binaries] +c = '$CC' +cpp = '$CXX' +ar = '$AR' +ranlib = '$RANLIB' +strip = '$STRIP' +pkg-config = 'pkg-config' + +[built-in options] +c_args = ['-O3', '-fPIC', '-D__ANDROID_MIN_SDK_VERSION__=$API', '-I${PNG_PREFIX}/include'] +c_link_args = ['-fPIC', '-L${PNG_PREFIX}/lib/${TARGET_ABI}'] +cpp_args = ['-O3', '-fPIC', '-D__ANDROID_MIN_SDK_VERSION__=$API', '-I${PNG_PREFIX}/include'] +cpp_link_args = ['-fPIC', '-L${PNG_PREFIX}/lib/${TARGET_ABI}'] + +[properties] +sys_root = '$TOOLCHAIN/sysroot' +needs_exe_wrapper = true +pkg_config_libdir = '$ANDR_ROOT/deps/pixman-src/pkgconfig' + +[host_machine] +system = 'android' +cpu_family = '$TARGET_CPU_FAMILY' +cpu = '$TARGET_CPU' +endian = 'little' +EOF + +meson setup build \ + --cross-file "$CROSS_FILE" \ + --default-library=static \ + --buildtype=release \ + -Dprefix=/ \ + -Dgtk=disabled \ + -Dtests=disabled \ + -Ddemos=disabled \ + -Dcpu-features-path="$ANDROID_NDK/sources/android/cpufeatures" + +ninja -C build -j$(nproc) + +# update headers +rm -rf ../../output/pixman/include +mkdir -p ../../output/pixman/include +cp pixman/*.h ../../output/pixman/include/ +cp build/pixman/*.h ../../output/pixman/include/ +# update lib +rm -f ../../output/pixman/lib/$TARGET_ABI/libpixman.a +cp "build/pixman/libpixman-1.a" ../../output/pixman/lib/$TARGET_ABI/libpixman.a + +echo "libpixman build successful" diff --git a/sdk.sh b/sdk.sh index 3697c70..7dd4542 100755 --- a/sdk.sh +++ b/sdk.sh @@ -22,19 +22,25 @@ case "$ARCH" in export TARGET_ABI=armeabi-v7a export TARGET_NAME=android-arm export ANDROID_ABI="$TARGET_ABI with NEON" - export TARGET=armv7a-linux-androideabi ;; + export TARGET=armv7a-linux-androideabi + export TARGET_CPU_FAMILY=arm + export TARGET_CPU=armv7a ;; "arm64") ### toolchain config for ARM64 export TARGET_ABI=arm64-v8a export TARGET_NAME=android-arm64 export ANDROID_ABI=$TARGET_ABI - export TARGET=aarch64-linux-android ;; + export TARGET=aarch64-linux-android + export TARGET_CPU_FAMILY=aarch64 + export TARGET_CPU=armv8 ;; "x86_64") ### toolchain config for x86_64 export TARGET_ABI=x86_64 export TARGET_NAME=android-x86_64 export ANDROID_ABI=$TARGET_ABI - export TARGET=x86_64-linux-android ;; + export TARGET=x86_64-linux-android + export TARGET_CPU_FAMILY=x86_64 + export TARGET_CPU=x86_64 ;; *) echo "Don't ask to use $ARCH" exit 1 ;;