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 "$" "${JAVA_PACKAGE_DIR}/TomatoActivity.java" $ -cp "$:${SDL_ANDROID_PLATFORM_ANDROID_JAR}" -d "${classes_path}" COMMAND ${Java_JAR_EXECUTABLE} cf "${OUT_JAR}" -C "${classes_path}" . DEPENDS $ "$" ) 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 $ $ --lib "${SDL_ANDROID_PLATFORM_ANDROID_JAR}" --output "${dexworkdir}" DEPENDS $ $ ) 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()