diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index d06d4d38..f53adb03 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -31,6 +31,10 @@ include: # Linux - project: 'libretro-infrastructure/ci-templates' file: '/linux-cmake.yml' + ################################## CELLULAR ################################ + # Android + - project: 'libretro-infrastructure/ci-templates' + file: '/android-cmake.yml' # Stages for building stages: @@ -66,3 +70,44 @@ libretro-build-linux-aarch64: libx11-dev libxext-dev libxrandr-dev libxi-dev libxcursor-dev libxss-dev libxkbcommon-dev libwayland-dev wayland-protocols libudev-dev libdbus-1-dev libgcrypt20-dev + +################################### CELLULAR ################################# +# Android is a fresh target for this core: unlike the Linux job it has to build +# the whole vcpkg dependency set for a cross triplet, and none of it has run +# before - so keep these from failing the pipeline while they are brought up. +.core-defs-android: + extends: .core-defs + allow_failure: true + # Same reason as the Linux job, plus a cross toolchain on top. + timeout: 3h + variables: + # The template defaults to API 16, which is nowhere near enough for C++20. + API_LEVEL: 24 + # Cemu's CMakeLists hands the template's NDK toolchain to vcpkg as a + # chainload toolchain (see the comment there); this picks the triplet the + # ports are built for. + VCPKG_DEFAULT_TRIPLET: $VCPKG_TRIPLET + CORE_ARGS: >- + -DENABLE_LIBRETRO=ON + -DENABLE_BLUEZ=OFF + -DENABLE_FERAL_GAMEMODE=OFF + -DENABLE_WAYLAND=OFF + -DENABLE_DISCORD_RPC=OFF + -DVCPKG_TARGET_TRIPLET=$VCPKG_TRIPLET + -DVCPKG_HOST_TRIPLET=x64-linux + +# Android aarch64 +android-arm64-v8a: + extends: + - .libretro-android-cmake-arm64-v8a + - .core-defs-android + variables: + VCPKG_TRIPLET: arm64-android + +# Android x86_64 +android-x86_64: + extends: + - .libretro-android-cmake-x86_64 + - .core-defs-android + variables: + VCPKG_TRIPLET: x64-android diff --git a/CMakeLists.txt b/CMakeLists.txt index 867ca0f3..65c6a106 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -39,7 +39,19 @@ if (ENABLE_VCPKG) ) endif() - if(UNIX AND NOT APPLE) + # Android: the libretro CI template passes the NDK toolchain as + # CMAKE_TOOLCHAIN_FILE, which would bypass vcpkg entirely and leave every + # find_package() below unsatisfied. Hand it to vcpkg as a chainload + # toolchain instead and let vcpkg's own toolchain take the primary slot. + if(CMAKE_TOOLCHAIN_FILE MATCHES "android.toolchain.cmake$" AND NOT VCPKG_CHAINLOAD_TOOLCHAIN_FILE) + set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE "${CMAKE_TOOLCHAIN_FILE}" CACHE STRING "" FORCE) + unset(CMAKE_TOOLCHAIN_FILE CACHE) + set(CEMU_TARGET_ANDROID ON) + endif() + + if(CEMU_TARGET_ANDROID) + set(VCPKG_OVERLAY_PORTS "${CMAKE_CURRENT_LIST_DIR}/dependencies/vcpkg_overlay_ports") + elseif(UNIX AND NOT APPLE) set(VCPKG_OVERLAY_PORTS "${CMAKE_CURRENT_LIST_DIR}/dependencies/vcpkg_overlay_ports_linux;${CMAKE_CURRENT_LIST_DIR}/dependencies/vcpkg_overlay_ports") elseif(APPLE) set(VCPKG_OVERLAY_PORTS "${CMAKE_CURRENT_LIST_DIR}/dependencies/vcpkg_overlay_ports_mac;${CMAKE_CURRENT_LIST_DIR}/dependencies/vcpkg_overlay_ports") diff --git a/dependencies/vcpkg_overlay_ports_linux/glm/portfile.cmake b/dependencies/vcpkg_overlay_ports_linux/glm/portfile.cmake deleted file mode 100644 index 065116c2..00000000 --- a/dependencies/vcpkg_overlay_ports_linux/glm/portfile.cmake +++ /dev/null @@ -1 +0,0 @@ -set(VCPKG_POLICY_EMPTY_PACKAGE enabled) diff --git a/dependencies/vcpkg_overlay_ports_linux/glm/vcpkg.json b/dependencies/vcpkg_overlay_ports_linux/glm/vcpkg.json deleted file mode 100644 index 17f5fb1d..00000000 --- a/dependencies/vcpkg_overlay_ports_linux/glm/vcpkg.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "name": "glm", - "version": "0.9.9.8", - "port-version": 3, - "description": "OpenGL Mathematics (GLM)", - "homepage": "https://glm.g-truc.net", - "license": "MIT" -} diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 4dafe6d9..0e7f7844 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -105,7 +105,12 @@ if(ENABLE_LIBRETRO) endif() if(UNIX AND NOT APPLE) - target_link_libraries(cemu_libretro PRIVATE GL EGL X11) + if(ANDROID) + # No desktop GL and no X11 here - GLES/EGL plus the NDK libraries. + target_link_libraries(cemu_libretro PRIVATE EGL GLESv3 log android) + else() + target_link_libraries(cemu_libretro PRIVATE GL EGL X11) + endif() # Force all CemuResource symbols (imgui needs fontawesome from resource archive) target_link_options(cemu_libretro PRIVATE "LINKER:--whole-archive" $ "LINKER:--no-whole-archive") target_link_options(cemu_libretro PRIVATE -z noexecstack) diff --git a/vcpkg_installed/vcpkg/compiler-file-hash-cache.json b/vcpkg_installed/vcpkg/compiler-file-hash-cache.json new file mode 100644 index 00000000..17b1e144 --- /dev/null +++ b/vcpkg_installed/vcpkg/compiler-file-hash-cache.json @@ -0,0 +1,14 @@ +{ + "/usr/bin/c++" : + { + "hash" : "fee2b6f3203ea42c2ba4af5999c25cf8fb7b391d", + "size" : 2221704, + "timestamp" : 0 + }, + "/usr/bin/cc" : + { + "hash" : "62b2015dfd11aa851128c1d369160431085a64c8", + "size" : 2222136, + "timestamp" : 0 + } +} \ No newline at end of file