diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index cc1a2608..48a40e45 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -73,6 +73,12 @@ jobs: - name: Build (tomato) run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} -j 4 -t tomato + #- name: Build (all) + # run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} -j 4 + + - name: Build (apk) + run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} -j 4 -t SDL3-jar -t tomato-jar -t tomato-dex --verbose + macos: timeout-minutes: 10 diff --git a/CMakeLists.txt b/CMakeLists.txt index 2436386c..a79beb6f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -70,3 +70,136 @@ endif() add_subdirectory(./src) +# TODO: move to src +if (ANDROID AND TARGET SDL3::Jar) + message("II building for ANDROID!!!") + + 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 android/app/res) + + #god + + #set(ANDROID_MANIFEST_APP_NAME "${TEST}") + #set(ANDROID_MANIFEST_LABEL "${TEST}") + #set(ANDROID_MANIFEST_LIB_NAME "$") + 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}/android/app/java/${JAVA_PACKAGE_DIR}") + #configure_file(android/cmake/SDLEntryTestActivity.java.cmake "${JAVA_PACKAGE_DIR}/SDLEntryTestActivity.java" @ONLY) + #configure_file(android/cmake/SDLTestActivity.java.cmake "${JAVA_PACKAGE_DIR}/SDLTestActivity.java" @ONLY) + #configure_file(android/cmake/res/values/strings.xml.cmake android/res/values/strings-${TEST}.xml @ONLY) + #configure_file(android/cmake/res/xml/shortcuts.xml.cmake "${GENERATED_RES_FOLDER}/xml/shortcuts.xml" @ONLY) + #configure_file(android/cmake/AndroidManifest.xml.cmake "${generated_manifest_path}" @ONLY) + #file(GENERATE + # OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/android/${TEST}-$/res/values/strings.xml" + # INPUT "${CMAKE_CURRENT_BINARY_DIR}/android/res/values/strings-${TEST}.xml" + #) + + #sdl_android_compile_resources(${TEST}-resources + # RESOURCES + # "${CMAKE_CURRENT_BINARY_DIR}/android/${TEST}-$/res/values/strings.xml" + # "${GENERATED_RES_FOLDER}/xml/shortcuts.xml" + #) + + sdl_android_link_resources(tomato-apk-linked + MANIFEST "android/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") + 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}") + 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}") + + #[[ + sdl_add_to_apk_unaligned(${TEST}-unaligned-apk + APK_IN ${TEST}-apk-linked + OUTDIR "${CMAKE_CURRENT_BINARY_DIR}/intermediates" + ASSETS ${RESOURCE_FILES} + NATIVE_LIBS SDL3::SDL3-shared ${TEST} + DEX ${TEST}-dex + ) + + sdl_apk_align(${TEST}-aligned-apk ${TEST}-unaligned-apk + OUTDIR "${CMAKE_CURRENT_BINARY_DIR}/intermediates" + ) + sdl_apk_sign(${TEST}-apk ${TEST}-aligned-apk + KEYSTORE SDL_test-debug-keystore + ) + add_dependencies(sdl-test-apks ${TEST}-apk) + + if(TARGET SdlAndroid::adb) + add_custom_target(install-${TEST} + COMMAND "${CMAKE_COMMAND}" -DACTION=install "-DAPKS=$" -P "${SDL3_SOURCE_DIR}/cmake/android/SdlAndroidScript.cmake" + DEPENDS "${TEST}-apk" + ) + add_custom_target(start-${TEST} + COMMAND "${ADB_BIN}" shell am start-activity -S "${ANDROID_MANIFEST_PACKAGE}/.SDLTestActivity" + ) + add_custom_target(build-install-start-${TEST} + COMMAND "${CMAKE_COMMAND}" -DACTION=build-install-run "-DEXECUTABLES=${TEST}" "-DBUILD_FOLDER=${CMAKE_BINARY_DIR}" -P "${SDL3_SOURCE_DIR}/cmake/android/SdlAndroidScript.cmake" + ) + endif() + + list(APPEND packages "${ANDROID_MANIFEST_PACKAGE}") + list(APPEND install_targets install-${TEST}) + ]] + + else() + message("FF SdlAndroid module not found") + endif() +endif() + diff --git a/android/app/AndroidManifest.xml b/android/app/AndroidManifest.xml new file mode 100644 index 00000000..b1c1bc8d --- /dev/null +++ b/android/app/AndroidManifest.xml @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/android/app/java/org/libsdl/app/tomato/TomatoActivity.java b/android/app/java/org/libsdl/app/tomato/TomatoActivity.java new file mode 100644 index 00000000..a9c32c9e --- /dev/null +++ b/android/app/java/org/libsdl/app/tomato/TomatoActivity.java @@ -0,0 +1,7 @@ +package org.libsdl.app.tomato; + +import org.libsdl.app.SDLActivity; + +// TODO: overload lib names +public class TomatoActivity extends SDLActivity { } + diff --git a/android/app/res/mipmap-hdpi/ic_launcher.png b/android/app/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 00000000..d50bdaae Binary files /dev/null and b/android/app/res/mipmap-hdpi/ic_launcher.png differ diff --git a/android/app/res/mipmap-mdpi/ic_launcher.png b/android/app/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 00000000..0a299eb3 Binary files /dev/null and b/android/app/res/mipmap-mdpi/ic_launcher.png differ diff --git a/android/app/res/mipmap-xhdpi/ic_launcher.png b/android/app/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 00000000..a336ad5c Binary files /dev/null and b/android/app/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/android/app/res/mipmap-xxhdpi/ic_launcher.png b/android/app/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 00000000..d423dac2 Binary files /dev/null and b/android/app/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/android/app/res/mipmap-xxxhdpi/ic_launcher.png b/android/app/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 00000000..959c384b Binary files /dev/null and b/android/app/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/android/app/res/values/colors.xml b/android/app/res/values/colors.xml new file mode 100644 index 00000000..3ab3e9cb --- /dev/null +++ b/android/app/res/values/colors.xml @@ -0,0 +1,6 @@ + + + #3F51B5 + #303F9F + #FF4081 + diff --git a/android/app/res/values/strings.xml b/android/app/res/values/strings.xml new file mode 100644 index 00000000..fb573710 --- /dev/null +++ b/android/app/res/values/strings.xml @@ -0,0 +1,3 @@ + + Tomato + diff --git a/android/app/res/values/styles.xml b/android/app/res/values/styles.xml new file mode 100644 index 00000000..22248d50 --- /dev/null +++ b/android/app/res/values/styles.xml @@ -0,0 +1,10 @@ + + + + + + + + diff --git a/external/sdl/CMakeLists.txt b/external/sdl/CMakeLists.txt index f461a7fa..8deb3ec3 100644 --- a/external/sdl/CMakeLists.txt +++ b/external/sdl/CMakeLists.txt @@ -6,16 +6,21 @@ if (NOT TARGET SDL3::SDL3) set(SDL_SHARED OFF CACHE INTERNAL "") set(SDL_STATIC ON CACHE INTERNAL "") #TODO: pic ? + set(SDL_DISABLE_ANDROID_JAR OFF CACHE INTERNAL "") FetchContent_Declare(SDL3 - GIT_REPOSITORY https://github.com/libsdl-org/SDL + #GIT_REPOSITORY https://github.com/libsdl-org/SDL #GIT_TAG 0429f5d6a36fc35b551bcc2acd4a40c2db6dab82 # tip when looking #GIT_TAG 14f584a94bfd49cf1524db75bf3c419fdf9436cd # tip 26-04-2024 #GIT_TAG 06d6f2cb2518622593570985589700910cf4399f # 13-05-2024 - before # made changes that break imgui release 1.90.6 #GIT_TAG 1103294d33f47ab4c697bb22a9cf27c79c658630 # tip 15-05-2024 #GIT_TAG aacafd62336363077470f678b6217214b3b49473 # tip 28-05-2024 - GIT_TAG 5fa9432b7d1c1722de93e1ab46e7a9569a47071e # tip 27-05-2024 - before changes made breaking sdl_image + #GIT_TAG 5fa9432b7d1c1722de93e1ab46e7a9569a47071e # tip 27-05-2024 - before changes made breaking sdl_image + + GIT_REPOSITORY https://github.com/Green-Sky/SDL.git + GIT_TAG android_stuff1 + FIND_PACKAGE_ARGS # for the future ) FetchContent_MakeAvailable(SDL3)