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" )