add support for building Android version

This commit is contained in:
jettis
2025-09-23 00:27:56 +03:00
parent 62a7f58342
commit 6210fa9c7b
31 changed files with 6614 additions and 59 deletions

123
CMakeLists.txt Normal file
View File

@@ -0,0 +1,123 @@
cmake_minimum_required(VERSION 3.16)
project(Rousku LANGUAGES CXX)
if(${CMAKE_SYSTEM_NAME} STREQUAL "Android")
set(TARGET_PLATFORM_ANDROID TRUE)
else()
set(TARGET_PLATFORM_LINUX TRUE)
endif()
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# Include compile flags
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -g")
if(TARGET_PLATFORM_ANDROID)
# These will find .aar packages in android build environment.
# SDL3 needs to be build by yourself as we are not using Android Activity, so not using .aar.
#find_package(SDL3 CONFIG REQUIRED)
find_package(SDL3_image CONFIG REQUIRED)
find_package(SDL3_ttf CONFIG REQUIRED)
# These are needed for SDL3 when not using .aar.
include_directories(/SDL/include)
add_library(SDL3 STATIC IMPORTED)
set_target_properties(SDL3 PROPERTIES IMPORTED_LOCATION /SDL/build-android/libSDL3.so)
#include_directories(${SDL3_INCLUDE_DIRS})
#link_libraries(${SDL3_LIBRARIES})
else()
# Get SDL3 and friends using pkg-config
find_package(PkgConfig REQUIRED)
pkg_check_modules(SDL3 REQUIRED sdl3 sdl3-ttf sdl3-image)
endif()
# Define sources
set(NEW_DIALOG_OBJECTS
Dialog
Item
Button
Checkbox
DropDownList
Scrollbar
Listbox
Frame
DlgDropDownList
DlgMainMenu
)
list(TRANSFORM NEW_DIALOG_OBJECTS PREPEND "NewDialogs/")
set(SOURCES
main.cpp
Animal.cpp
Sound.cpp
)
foreach(src ${NEW_DIALOG_OBJECTS})
list(APPEND SOURCES "${src}.cpp")
endforeach()
# Generate embed_data.h
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/embed_data.h
COMMAND ${CMAKE_COMMAND} -E echo "Generating embed_data.h..."
COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}
COMMAND /bin/sh -c "> ${CMAKE_CURRENT_BINARY_DIR}/embed_data.h && \
find ${CMAKE_SOURCE_DIR}/skin -name '*.png' -o -name '*.wav' -o -name '*.tsk' | \
while read file; do \
xxd -i \"\$file\" >> ${CMAKE_CURRENT_BINARY_DIR}/embed_data.h; \
done"
DEPENDS ${CMAKE_SOURCE_DIR}/skin
VERBATIM
)
# Generate menu_png.h
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/menu_png.h
COMMAND xxd -i ${CMAKE_SOURCE_DIR}/menu.png > ${CMAKE_CURRENT_BINARY_DIR}/menu_png.h
DEPENDS ${CMAKE_SOURCE_DIR}/menu.png
VERBATIM
)
# Add custom headers to build
add_custom_target(generate_headers
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/embed_data.h ${CMAKE_CURRENT_BINARY_DIR}/menu_png.h
)
if(TARGET_PLATFORM_ANDROID)
# Add executable
add_library(main SHARED ${SOURCES})
# Include generated headers
add_dependencies(main generate_headers)
target_include_directories(main PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
# These are got from .aar package. SDL3 is build by ourselves so not including it.
#target_link_libraries(main PRIVATE SDL3::SDL3)
target_link_libraries(main PRIVATE SDL3 SDL3_image::SDL3_image SDL3_ttf::SDL3_ttf android log OpenSLES EGL GLESv2)
# Install instructions
install(TARGETS main DESTINATION bin)
else()
# Add executable
add_executable(Rousku ${SOURCES})
# Include generated headers
add_dependencies(Rousku generate_headers)
target_include_directories(Rousku PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
# Link libraries
target_link_libraries(Rousku ${SDL3_LIBRARIES})
# Install instructions
install(TARGETS Rousku DESTINATION bin)
endif()
install(FILES skin/Tavallinen/paikka/1.png DESTINATION share/icons RENAME rousku.png)
# Custom clean
set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES
"${CMAKE_CURRENT_BINARY_DIR}/embed_data.h;${CMAKE_CURRENT_BINARY_DIR}/menu_png.h"
)