Changeset View
Standalone View
packaging/android/build_kf5.sh
- This file was added.
Property | Old Value | New Value |
---|---|---|
File Mode | null | 100755 |
1 | #!/bin/bash | ||||
---|---|---|---|---|---|
2 | | ||||
3 | # parts used from KDE/KStars project | ||||
4 | | ||||
5 | : ${QT_ANDROID?"Qt path must be set"} | ||||
6 | : ${CMAKE_ANDROID_NDK?"Android NDK path must be set"} | ||||
7 | : ${ANDROID_SDK_ROOT?"Android SDK path must be set"} | ||||
8 | : ${ANDROID_API_LEVEL?"Android API level"} | ||||
9 | : ${KRITA_ROOT?"Project root path must be set"} | ||||
10 | | ||||
11 | export ANDROID_ARCHITECTURE=arm | ||||
12 | export ANDROID_ABI=armeabi-v7a | ||||
13 | export ANDROID_TOOLCHAIN=arm-linux-androideabi | ||||
14 | export ANDROID_NATIVE_API_LEVEL=android-$ANDROID_API_LEVEL | ||||
15 | | ||||
16 | cd $KRITA_ROOT | ||||
17 | | ||||
18 | | ||||
19 | # Get the directory where the script is stored | ||||
20 | SRCDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" | ||||
21 | CURDIR="$(pwd)"/ | ||||
22 | | ||||
23 | | ||||
24 | mkdir kf5 | ||||
25 | cd kf5 | ||||
26 | git clone git://anongit.kde.org/scratch/cordlandwehr/kdesrc-conf-android.git | ||||
27 | mkdir -p extragear/kdesrc-build | ||||
28 | git clone git://anongit.kde.org/kdesrc-build extragear/kdesrc-build | ||||
29 | ln -s extragear/kdesrc-build/kdesrc-build kdesrc-build | ||||
30 | ln -s kdesrc-conf-android/kdesrc-buildrc kdesrc-buildrc | ||||
31 | | ||||
32 | | ||||
33 | # Change the build configuration | ||||
34 | sed -E -i "s|build-dir.*|build-dir $CURDIR/kf5/kde/build/${android_architecture} |g" kdesrc-conf-android/kdesrc-buildrc | ||||
apol: Please use the tooling in the Android SDK.
https://community.kde. | |||||
Yep, that would make setting up nightly builds on binary factory straightforward for this. vkrause: Yep, that would make setting up nightly builds on binary factory straightforward for this. | |||||
I did see the docker image. I couldn't pull the image because of some authorization issues. sh-zam: I did see the docker image. I couldn't pull the image because of some authorization issues.
So… | |||||
35 | sed -E -i "s|source-dir.*|source-dir $CURDIR/kf5/kde/src |g" kdesrc-conf-android/kdesrc-buildrc | ||||
36 | sed -E -i "s|kdedir.*|kdedir $CURDIR/kf5/kde/install/${android_architecture} |g" kdesrc-conf-android/kdesrc-buildrc | ||||
37 | sed -i -- 's/make-options -j8/make-options -j4 VERBOSE=1/g' kdesrc-conf-android/kdesrc-buildrc | ||||
38 | | ||||
39 | # The toolchain provided by Linux distribution can be old, use this instead | ||||
40 | ./kdesrc-build extra-cmake-modules | ||||
41 | | ||||
42 | if [ -e $qt_android_libs ] | ||||
43 | then | ||||
44 | sed -E -i "s|-DCMAKE_PREFIX_PATH=.*?\\ |-DCMAKE_PREFIX_PATH=$QT_ANDROID- -DCMAKE_ANDROID_NDK=$CMAKE_ANDROID_NDK -DECM_ADDITIONAL_FIND_ROOT_PATH=$QT_ANDROID\;$CURDIR/kf5/kde/install -DANDROID_STL=c++_static -DCMAKE_TOOLCHAIN_FILE=$CURDIR/kf5/kde/install/share/ECM/toolchain/Android.cmake -DKCONFIG_USE_DBUS=OFF|g" kdesrc-conf-android/kdesrc-buildrc | ||||
45 | else | ||||
46 | echo "Qt Android libraries path doesn't exist. Exiting." | ||||
47 | exit | ||||
48 | fi | ||||
49 | | ||||
50 | | ||||
51 | sed -E -i "s|use-modules.+|use-modules kconfig ki18n|g" kdesrc-conf-android/kdesrc-buildrc | ||||
52 | rm -rf ${kf5_android_path}/kde/build/${android_architecture}/* # clean build folders | ||||
53 | | ||||
54 | | ||||
55 | # Needs to be patched, ignore the errors | ||||
56 | ./kdesrc-build libintl-lite ki18n kcoreaddons kcompletion | ||||
57 | | ||||
58 | | ||||
59 | # patches | ||||
60 | sed -i -- 's/check_cxx_source_compiles/#check_cxx_source_compiles/g' kde/src/frameworks/ki18n/cmake/FindLibIntl.cmake | ||||
These patches are somewhat surprising, as both the CI and binary factory manage to build this just fine without needing any of this. vkrause: These patches are somewhat surprising, as both the CI and binary factory manage to build this… | |||||
sh-zam: Yes! | |||||
You were right, it was an issue with ANDROID_API. But oddly enough, __ANDROID_API__ was being added to c_flags but not to cxx_flags in CMakeCache.txt sh-zam: You were right, it was an issue with `ANDROID_API`.
But oddly enough, `__ANDROID_API__` was… | |||||
61 | sed -i -- 's/target_link_libraries(ktranscript PRIVATE Qt5::Qml Qt5::Core)/target_link_libraries(ktranscript PRIVATE Qt5::Qml Qt5::Core -l:libc.a -Wl,--exclude-libs=ALL)/g' $CURDIR/kf5/kde/src/frameworks/ki18n/src/CMakeLists.txt | ||||
62 | | ||||
63 | sed -i 's/static \(.*getpwent()\)/\1/' $CURDIR/kf5/kde/src/frameworks/kcoreaddons/src/lib/util/kuser_unix.cpp | ||||
64 | sed -i 's/static \(.*setgrent()\)/\1/' $CURDIR/kf5/kde/src/frameworks/kcoreaddons/src/lib/util/kuser_unix.cpp | ||||
65 | sed -i 's/static \(.*getgrent()\)/\1/' $CURDIR/kf5/kde/src/frameworks/kcoreaddons/src/lib/util/kuser_unix.cpp | ||||
66 | sed -i 's/static \(.*endgrent()\)/\1/' $CURDIR/kf5/kde/src/frameworks/kcoreaddons/src/lib/util/kuser_unix.cpp | ||||
67 | | ||||
68 | sed -i 's/KF5::WidgetsAddons/& -l:libc.a -Wl,--exclude-libs=ALL/' $CURDIR/kf5/kde/src/frameworks/kcompletion/src/CMakeLists.txt | ||||
69 | | ||||
70 | sed -i '/add_subdirectory(tests)/s/^/#/' $CURDIR/kf5/kde/src/frameworks/kitemmodels/CMakeLists.txt | ||||
71 | sed -i '/add_subdirectory(autotests)/s/^/#/' $CURDIR/kf5/kde/src/frameworks/kitemmodels/CMakeLists.txt | ||||
72 | | ||||
73 | | ||||
74 | | ||||
75 | ./kdesrc-build kcoreaddons \ | ||||
76 | frameworks-android \ | ||||
77 | kwidgetsaddons kcompletion \ | ||||
78 | kguiaddons ki18n \ | ||||
79 | kitemmodels kitemviews \ | ||||
80 | kwindowsystem | ||||
81 | | ||||
82 | # Fix some config files | ||||
83 | sed -i '/find_package(PythonInterp/ s/^/#/' kde/install/lib/cmake/KF5I18n/KF5I18nMacros.cmake | ||||
84 | | ||||
85 | cp /usr/lib/x86_64-linux-gnu/libexec/kf5/kconfig_compiler_kf5 $CURDIR/kf5/kde/install/lib/libexec/kf5/kconfig_compiler_kf5 | ||||
86 | | ||||
87 | cd $CURDIR | ||||
88 | |
Please use the tooling in the Android SDK.
https://community.kde.org/Android/Environment_via_Container
you can build Krita and its dependencies by running:
/opt/helpers/build-generic krita with any cmake paramaters you may need.