summaryrefslogtreecommitdiffstats
path: root/cmake/scripts/android
diff options
context:
space:
mode:
Diffstat (limited to 'cmake/scripts/android')
-rw-r--r--cmake/scripts/android/ArchSetup.cmake34
-rw-r--r--cmake/scripts/android/Install.cmake137
l---------cmake/scripts/android/Macros.cmake1
-rw-r--r--cmake/scripts/android/PathSetup.cmake33
4 files changed, 205 insertions, 0 deletions
diff --git a/cmake/scripts/android/ArchSetup.cmake b/cmake/scripts/android/ArchSetup.cmake
new file mode 100644
index 0000000..7b8b466
--- /dev/null
+++ b/cmake/scripts/android/ArchSetup.cmake
@@ -0,0 +1,34 @@
1if(NOT CMAKE_TOOLCHAIN_FILE)
2 message(FATAL_ERROR "CMAKE_TOOLCHAIN_FILE required for android. See ${CMAKE_SOURCE_DIR}/cmake/README.md")
3elseif(NOT SDK_PLATFORM)
4 message(FATAL_ERROR "Toolchain did not define SDK_PLATFORM. Possibly outdated depends.")
5endif()
6
7set(ARCH_DEFINES -DTARGET_POSIX -DTARGET_LINUX -D_LINUX -DTARGET_ANDROID)
8set(SYSTEM_DEFINES -D__STDC_CONSTANT_MACROS -D_LARGEFILE64_SOURCE
9 -D_FILE_OFFSET_BITS=64)
10set(PLATFORM_DIR linux)
11if(WITH_ARCH)
12 set(ARCH ${WITH_ARCH})
13else()
14 if(CPU STREQUAL armeabi-v7a)
15 set(ARCH arm)
16 set(NEON True)
17 set(NEON_FLAGS "-mfpu=neon -mvectorize-with-neon-quad")
18 elseif(CPU STREQUAL arm64-v8a)
19 set(ARCH aarch64)
20 set(NEON True)
21 elseif(CPU STREQUAL i686)
22 set(ARCH i486-linux)
23 set(NEON False)
24 else()
25 message(SEND_ERROR "Unknown CPU: ${CPU}")
26 endif()
27endif()
28
29set(ENABLE_X11 OFF CACHE BOOL "" FORCE)
30set(ENABLE_AML OFF CACHE BOOL "" FORCE)
31set(ENABLE_OPTICAL OFF CACHE BOOL "" FORCE)
32set(ENABLE_MDNS OFF CACHE BOOL "" FORCE)
33
34list(APPEND DEPLIBS android log jnigraphics mediandk androidjni)
diff --git a/cmake/scripts/android/Install.cmake b/cmake/scripts/android/Install.cmake
new file mode 100644
index 0000000..0ab7dbd
--- /dev/null
+++ b/cmake/scripts/android/Install.cmake
@@ -0,0 +1,137 @@
1# Android packaging
2
3find_program(AAPT_EXECUTABLE aapt PATHS ${SDK_BUILDTOOLS_PATH})
4if(NOT AAPT_EXECUTABLE)
5 message(FATAL_ERROR "Could NOT find aapt executable")
6endif()
7find_program(DX_EXECUTABLE dx PATHS ${SDK_BUILDTOOLS_PATH})
8if(NOT DX_EXECUTABLE)
9 message(FATAL_ERROR "Could NOT find dx executable")
10endif()
11find_program(ZIPALIGN_EXECUTABLE zipalign PATHS ${SDK_BUILDTOOLS_PATH})
12if(NOT ZIPALIGN_EXECUTABLE)
13 message(FATAL_ERROR "Could NOT find zipalign executable")
14endif()
15
16if(CMAKE_BUILD_TYPE STREQUAL Debug)
17 set(ANDROID_DEBUGGABLE true)
18else()
19 set(ANDROID_DEBUGGABLE false)
20endif()
21
22# Configure files into packaging environment.
23configure_file(${CMAKE_SOURCE_DIR}/tools/android/packaging/Makefile.in
24 ${CMAKE_BINARY_DIR}/tools/android/packaging/Makefile @ONLY)
25configure_file(${CMAKE_SOURCE_DIR}/tools/android/packaging/apksign
26 ${CMAKE_BINARY_DIR}/tools/android/packaging/apksign COPYONLY)
27configure_file(${CMAKE_SOURCE_DIR}/tools/android/packaging/make_symbols.sh
28 ${CMAKE_BINARY_DIR}/tools/android/packaging/make_symbols.sh COPYONLY)
29file(WRITE ${CMAKE_BINARY_DIR}/tools/depends/Makefile.include
30 "$(PREFIX)/lib/${APP_NAME_LC}/lib${APP_NAME_LC}.so: ;\n")
31
32set(package_files strings.xml
33 activity_main.xml
34 colors.xml
35 searchable.xml
36 AndroidManifest.xml
37 src/org/xbmc/kodi/Main.java
38 src/org/xbmc/kodi/Splash.java
39 src/org/xbmc/kodi/XBMCBroadcastReceiver.java
40 src/org/xbmc/kodi/XBMCImageContentProvider.java
41 src/org/xbmc/kodi/XBMCInputDeviceListener.java
42 src/org/xbmc/kodi/XBMCJsonRPC.java
43 src/org/xbmc/kodi/XBMCMediaContentProvider.java
44 src/org/xbmc/kodi/XBMCOnAudioFocusChangeListener.java
45 src/org/xbmc/kodi/XBMCOnFrameAvailableListener.java
46 src/org/xbmc/kodi/XBMCRecommendationBuilder.java
47 src/org/xbmc/kodi/XBMCSearchableActivity.java
48 src/org/xbmc/kodi/XBMCSettingsContentObserver.java
49 src/org/xbmc/kodi/XBMCProperties.java
50 src/org/xbmc/kodi/XBMCVideoView.java
51 )
52foreach(file IN LISTS package_files)
53 configure_file(${CMAKE_SOURCE_DIR}/tools/android/packaging/xbmc/${file}.in
54 ${CMAKE_BINARY_DIR}/tools/android/packaging/xbmc/${file} @ONLY)
55endforeach()
56
57# Copy files to the location expected by the Android packaging scripts.
58add_custom_target(bundle
59 COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/tools/android/packaging/media
60 ${CMAKE_BINARY_DIR}/tools/android/packaging/media
61 COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/tools/android/packaging/xbmc/res
62 ${CMAKE_BINARY_DIR}/tools/android/packaging/xbmc/res
63 COMMAND ${CMAKE_COMMAND} -E copy_directory ${DEPENDS_PATH}/lib/python2.7 ${libdir}/python2.7
64 COMMAND ${CMAKE_COMMAND} -E copy_directory ${DEPENDS_PATH}/share/${APP_NAME_LC} ${datadir}/${APP_NAME_LC}
65 COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:${APP_NAME_LC}>
66 ${libdir}/${APP_NAME_LC}/$<TARGET_FILE_NAME:${APP_NAME_LC}>)
67add_dependencies(bundle ${APP_NAME_LC})
68
69# This function is used to prepare a prefix expected by the Android packaging
70# scripts. It creates a bundle_files command that is added to the bundle target.
71function(add_bundle_file file destination relative)
72 if(NOT TARGET bundle_files)
73 file(REMOVE ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/BundleFiles.cmake)
74 add_custom_target(bundle_files COMMAND ${CMAKE_COMMAND} -P ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/BundleFiles.cmake)
75 add_dependencies(bundle bundle_files)
76 endif()
77
78 string(REPLACE "${relative}/" "" outfile ${file})
79 get_filename_component(file ${file} REALPATH)
80 get_filename_component(outdir ${outfile} DIRECTORY)
81 file(APPEND ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/BundleFiles.cmake
82 "file(COPY \"${file}\" DESTINATION \"${destination}/${outdir}\")\n")
83 if(file MATCHES "\\.so\\..+$")
84 get_filename_component(srcfile "${file}" NAME)
85 string(REGEX REPLACE "\\.so\\..+$" "\.so" destfile ${srcfile})
86 file(APPEND ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/BundleFiles.cmake
87 "file(RENAME \"${destination}/${outdir}/${srcfile}\" \"${destination}/${outdir}/${destfile}\")\n")
88 endif()
89endfunction()
90
91# Copy files into prefix
92foreach(file IN LISTS XBT_FILES install_data)
93 string(REPLACE "${CMAKE_BINARY_DIR}/" "" file ${file})
94 add_bundle_file(${CMAKE_BINARY_DIR}/${file} ${datarootdir}/${APP_NAME_LC} ${CMAKE_BINARY_DIR})
95endforeach()
96
97foreach(library IN LISTS LIBRARY_FILES)
98 add_bundle_file(${library} ${libdir}/${APP_NAME_LC} ${CMAKE_BINARY_DIR})
99endforeach()
100
101foreach(lib IN LISTS required_dyload dyload_optional ITEMS Shairplay)
102 string(TOUPPER ${lib} lib_up)
103 set(lib_so ${${lib_up}_SONAME})
104 if(lib_so AND EXISTS ${DEPENDS_PATH}/lib/${lib_so})
105 add_bundle_file(${DEPENDS_PATH}/lib/${lib_so} ${libdir} "")
106 endif()
107endforeach()
108add_bundle_file(${SMBCLIENT_LIBRARY} ${libdir} "")
109
110# Main targets from Makefile.in
111if(CPU MATCHES i686)
112 set(CPU x86)
113 set(ARCH x86)
114endif()
115foreach(target apk obb apk-unsigned apk-obb apk-obb-unsigned apk-noobb apk-clean apk-sign)
116 add_custom_target(${target}
117 COMMAND PATH=${NATIVEPREFIX}/bin:$ENV{PATH} ${CMAKE_MAKE_PROGRAM}
118 -C ${CMAKE_BINARY_DIR}/tools/android/packaging
119 CMAKE_SOURCE_DIR=${CMAKE_SOURCE_DIR}
120 CC=${CMAKE_C_COMPILER}
121 CPU=${CPU}
122 ARCH=${ARCH}
123 PREFIX=${prefix}
124 NDKROOT=${NDKROOT}
125 SDKROOT=${SDKROOT}
126 SDK_PLATFORM=${SDK_PLATFORM}
127 STRIP=${CMAKE_STRIP}
128 AAPT=${AAPT_EXECUTABLE}
129 DX=${DX_EXECUTABLE}
130 ZIPALIGN=${ZIPALIGN_EXECUTABLE}
131 ${target}
132 WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/tools/android/packaging
133 )
134 if(NOT target STREQUAL apk-clean)
135 add_dependencies(${target} bundle)
136 endif()
137endforeach()
diff --git a/cmake/scripts/android/Macros.cmake b/cmake/scripts/android/Macros.cmake
new file mode 120000
index 0000000..2fdbb25
--- /dev/null
+++ b/cmake/scripts/android/Macros.cmake
@@ -0,0 +1 @@
../linux/Macros.cmake \ No newline at end of file
diff --git a/cmake/scripts/android/PathSetup.cmake b/cmake/scripts/android/PathSetup.cmake
new file mode 100644
index 0000000..1274fcf
--- /dev/null
+++ b/cmake/scripts/android/PathSetup.cmake
@@ -0,0 +1,33 @@
1if(NOT prefix)
2 set(prefix ${CMAKE_BINARY_DIR}/install)
3endif()
4set(CMAKE_INSTALL_PREFIX ${prefix})
5if(NOT exec_prefix)
6 set(exec_prefix ${prefix})
7endif()
8if(NOT libdir)
9 set(libdir ${prefix}/lib)
10endif()
11if(NOT bindir)
12 set(bindir ${prefix}/bin)
13endif()
14if(NOT includedir)
15 set(includedir ${prefix}/include)
16endif()
17if(NOT datarootdir)
18 set(datarootdir ${prefix}/share)
19endif()
20if(NOT datadir)
21 set(datadir ${datarootdir})
22endif()
23
24list(APPEND final_message "-- PATH config --")
25list(APPEND final_message "Prefix: ${prefix}")
26list(APPEND final_message "Libdir: ${libdir}")
27list(APPEND final_message "Bindir: ${bindir}")
28list(APPEND final_message "Includedir: ${includedir}")
29list(APPEND final_message "Datarootdir: ${datarootdir}")
30list(APPEND final_message "Datadir: ${datadir}")
31
32set(PATH_DEFINES -DBIN_INSTALL_PATH=\"${libdir}/${APP_NAME_LC}\"
33 -DINSTALL_PATH=\"${datarootdir}/${APP_NAME_LC}\")