101 lines
3.8 KiB
CMake
101 lines
3.8 KiB
CMake
|
cmake_minimum_required(VERSION 3.14...3.24 FATAL_ERROR)
|
||
|
|
||
|
project(tomato_android)
|
||
|
|
||
|
# here be dragons
|
||
|
|
||
|
list(APPEND CMAKE_MODULE_PATH "${SDL3_SOURCE_DIR}/cmake/android")
|
||
|
|
||
|
find_package(SdlAndroid MODULE)
|
||
|
find_package(Java)
|
||
|
find_package(SdlAndroidPlatform MODULE)
|
||
|
# the existence of SDL3::Jar usually implies platform
|
||
|
if(SdlAndroid_FOUND)
|
||
|
include(SdlAndroidFunctions)
|
||
|
sdl_create_android_debug_keystore(tomato-debug-keystore)
|
||
|
sdl_android_compile_resources(tomato-resources RESFOLDER app/res)
|
||
|
|
||
|
|
||
|
set(ANDROID_MANIFEST_PACKAGE "org.libsdl.app.tomato")
|
||
|
#set(generated_manifest_path "${CMAKE_CURRENT_BINARY_DIR}/android/${TEST}-src/AndroidManifest.xml")
|
||
|
string(REPLACE "." "/" JAVA_PACKAGE_DIR "${ANDROID_MANIFEST_PACKAGE}")
|
||
|
#set(GENERATED_SRC_FOLDER "${CMAKE_CURRENT_BINARY_DIR}/android/${TEST}-src")
|
||
|
#set(GENERATED_RES_FOLDER "${GENERATED_SRC_FOLDER}/res")
|
||
|
#set(JAVA_PACKAGE_DIR "${GENERATED_SRC_FOLDER}/${JAVA_PACKAGE_DIR}")
|
||
|
set(JAVA_PACKAGE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/app/java/${JAVA_PACKAGE_DIR}")
|
||
|
|
||
|
sdl_android_link_resources(tomato-apk-linked
|
||
|
MANIFEST "app/AndroidManifest.xml"
|
||
|
PACKAGE ${ANDROID_MANIFEST_PACKAGE}
|
||
|
RES_TARGETS tomato-resources
|
||
|
TARGET_SDK_VERSION 31
|
||
|
)
|
||
|
|
||
|
set(CMAKE_JAVA_COMPILE_FLAGS "-encoding;utf-8")
|
||
|
set(classes_path "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/tomato-java.dir/classes")
|
||
|
# Some CMake versions have a slow `cmake -E make_directory` implementation
|
||
|
if(NOT IS_DIRECTORY "${classes_path}")
|
||
|
execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory "${classes_path}")
|
||
|
endif()
|
||
|
set(OUT_JAR "${CMAKE_CURRENT_BINARY_DIR}/tomato.jar")
|
||
|
# TODO: convert to cmake's add_jar
|
||
|
add_custom_command(
|
||
|
OUTPUT "${OUT_JAR}"
|
||
|
COMMAND ${CMAKE_COMMAND} -E rm -rf "${classes_path}"
|
||
|
COMMAND ${CMAKE_COMMAND} -E make_directory "${classes_path}"
|
||
|
COMMAND ${Java_JAVAC_EXECUTABLE}
|
||
|
-source 1.8 -target 1.8
|
||
|
-bootclasspath "$<TARGET_PROPERTY:SDL3::Jar,JAR_FILE>"
|
||
|
"${JAVA_PACKAGE_DIR}/TomatoActivity.java"
|
||
|
$<TARGET_PROPERTY:tomato-apk-linked,JAVA_R>
|
||
|
-cp "$<TARGET_PROPERTY:SDL3::Jar,JAR_FILE>:${SDL_ANDROID_PLATFORM_ANDROID_JAR}"
|
||
|
-d "${classes_path}"
|
||
|
COMMAND ${Java_JAR_EXECUTABLE} cf "${OUT_JAR}" -C "${classes_path}" .
|
||
|
DEPENDS $<TARGET_PROPERTY:tomato-apk-linked,OUTPUTS> "$<TARGET_PROPERTY:SDL3::Jar,JAR_FILE>"
|
||
|
)
|
||
|
add_custom_target(tomato-jar DEPENDS "${OUT_JAR}")
|
||
|
add_dependencies(tomato-jar SDL3::Jar) # HACK: somehow their jar is not registered as an output
|
||
|
set_property(TARGET tomato-jar PROPERTY OUTPUT "${OUT_JAR}")
|
||
|
|
||
|
set(dexworkdir "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/tomato-dex.dir")
|
||
|
# Some CMake versions have a slow `cmake -E make_directory` implementation
|
||
|
if(NOT IS_DIRECTORY "${dexworkdir}")
|
||
|
execute_process(COMMAND "${CMAKE_COMMAND}" -E make_directory "${dexworkdir}")
|
||
|
endif()
|
||
|
set(classes_dex_base_name "classes.dex")
|
||
|
set(classes_dex "${dexworkdir}/${classes_dex_base_name}")
|
||
|
add_custom_command(
|
||
|
OUTPUT "${classes_dex}"
|
||
|
COMMAND SdlAndroid::d8
|
||
|
$<TARGET_PROPERTY:tomato-jar,OUTPUT>
|
||
|
$<TARGET_PROPERTY:SDL3::Jar,JAR_FILE>
|
||
|
--lib "${SDL_ANDROID_PLATFORM_ANDROID_JAR}"
|
||
|
--output "${dexworkdir}"
|
||
|
DEPENDS $<TARGET_PROPERTY:tomato-jar,OUTPUT> $<TARGET_PROPERTY:SDL3::Jar,JAR_FILE>
|
||
|
)
|
||
|
add_custom_target(tomato-dex DEPENDS "${classes_dex}")
|
||
|
set_property(TARGET tomato-dex PROPERTY OUTPUT "${classes_dex}")
|
||
|
set_property(TARGET tomato-dex PROPERTY OUTPUT_BASE_NAME "${classes_dex_base_name}")
|
||
|
|
||
|
# file(GLOB RESOURCE_FILES *.bmp *.wav *.hex moose.dat utf8.txt)
|
||
|
|
||
|
sdl_add_to_apk_unaligned(tomato-unaligned-apk
|
||
|
APK_IN tomato-apk-linked
|
||
|
OUTDIR "${CMAKE_CURRENT_BINARY_DIR}/intermediates"
|
||
|
#ASSETS ${RESOURCE_FILES}
|
||
|
#NATIVE_LIBS SDL3::SDL3-shared tomato
|
||
|
NATIVE_LIBS tomato
|
||
|
DEX tomato-dex
|
||
|
)
|
||
|
|
||
|
sdl_apk_align(tomato-aligned-apk tomato-unaligned-apk
|
||
|
OUTDIR "${CMAKE_CURRENT_BINARY_DIR}/intermediates"
|
||
|
)
|
||
|
sdl_apk_sign(tomato-apk tomato-aligned-apk
|
||
|
KEYSTORE tomato-debug-keystore
|
||
|
)
|
||
|
else()
|
||
|
message("EE SdlAndroid module not found")
|
||
|
endif()
|
||
|
|