cmake_minimum_required(VERSION 3.16) project(IMX6U-Game) set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED ON) option(USE_FRAMEBUFFER "Use Linux framebuffer instead of SDL2" OFF) set(ENGINE_SOURCES src/Asset/ObjLoader.cpp src/Asset/SpriteAssetLoader.cpp src/Core/DepthBuffer.cpp src/Core/FrameBuffer.cpp src/Core/Renderer.cpp game/src/app/TomGameApp.cpp game/src/components/SpriteAnimator.cpp game/src/audio/VoiceEffect.cpp game/src/audio/VoicePlayer.cpp game/src/audio/VoiceRecorder.cpp game/src/hardware/AudioInput.cpp game/src/hardware/AudioOutput.cpp game/src/hardware/ButtonInput.cpp game/src/systems/AnimationSystem.cpp src/Rasterizer/Rasterizer.cpp src/Rasterizer/SpriteRasterizer.cpp src/Rasterizer/TriangleRasterizer.cpp src/Scene/Camera.cpp src/Shading/BlinnPhongShader.cpp ) set(ENGINE_INCLUDE_DIRS src/Platform src/Asset src/Core src/Math src/Rasterizer src/RenderData src/Scene src/Shading game/src/app game/src/audio game/src/components game/src/hardware game/src/systems ) set(SOURCES src/main.cpp ${ENGINE_SOURCES} ) if(USE_FRAMEBUFFER) list(APPEND SOURCES src/Platform/FBDisplay.cpp) else() list(APPEND SOURCES src/Platform/SDLDisplay.cpp) endif() add_executable(IMX6U-Game ${SOURCES}) target_include_directories(IMX6U-Game PRIVATE ${ENGINE_INCLUDE_DIRS}) if(USE_FRAMEBUFFER) target_compile_definitions(IMX6U-Game PRIVATE USE_FRAMEBUFFER) else() target_include_directories(IMX6U-Game PRIVATE libs/Win/SDL2/include ) if(WIN32) if(CMAKE_SIZEOF_VOID_P EQUAL 8) set(SDL2_LIB_DIR "${CMAKE_CURRENT_SOURCE_DIR}/libs/Win/SDL2/lib/x64") set(SDL2_DLL "${CMAKE_CURRENT_SOURCE_DIR}/libs/Win/SDL2/lib/x64/SDL2.dll") set(SDL2_IMAGE_LIB_DIR "${CMAKE_CURRENT_SOURCE_DIR}/libs/Win/SDL_image/lib/x64") set(SDL2_IMAGE_DLL "${CMAKE_CURRENT_SOURCE_DIR}/libs/Win/SDL_image/lib/x64/SDL2_image.dll") else() set(SDL2_LIB_DIR "${CMAKE_CURRENT_SOURCE_DIR}/libs/Win/SDL2/lib/x86") set(SDL2_DLL "${CMAKE_CURRENT_SOURCE_DIR}/libs/Win/SDL2/lib/x86/SDL2.dll") set(SDL2_IMAGE_LIB_DIR "${CMAKE_CURRENT_SOURCE_DIR}/libs/Win/SDL_image/lib/x86") set(SDL2_IMAGE_DLL "${CMAKE_CURRENT_SOURCE_DIR}/libs/Win/SDL_image/lib/x86/SDL2_image.dll") endif() target_link_directories(IMX6U-Game PRIVATE ${SDL2_LIB_DIR}) target_link_libraries(IMX6U-Game PRIVATE SDL2main SDL2) add_custom_command(TARGET IMX6U-Game POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different "${SDL2_DLL}" "$" ) else() find_package(SDL2 REQUIRED) target_link_libraries(IMX6U-Game PRIVATE SDL2::SDL2) endif() find_package(SDL2_image QUIET) endif() if(UNIX) target_link_libraries(IMX6U-Game PRIVATE asound) endif() if(MSVC) target_compile_options(IMX6U-Game PRIVATE /utf-8 /W3) set_property(TARGET IMX6U-Game PROPERTY INTERPROCEDURAL_OPTIMIZATION_RELEASE TRUE) endif() if(NOT USE_FRAMEBUFFER) set(SPRITE_ANIMATION_TEST_SOURCES game/tests/manual/SpriteAnimationTest.cpp ${ENGINE_SOURCES} src/Platform/SDLDisplay.cpp ) if(WIN32) add_executable(SpriteAnimationTest ${SPRITE_ANIMATION_TEST_SOURCES}) target_include_directories(SpriteAnimationTest PRIVATE ${ENGINE_INCLUDE_DIRS} libs/Win/SDL2/include ) target_link_directories(SpriteAnimationTest PRIVATE ${SDL2_LIB_DIR}) target_link_libraries(SpriteAnimationTest PRIVATE SDL2main SDL2) add_custom_command(TARGET SpriteAnimationTest POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different "${SDL2_DLL}" "$" ) else() add_executable(SpriteAnimationTest ${SPRITE_ANIMATION_TEST_SOURCES}) target_include_directories(SpriteAnimationTest PRIVATE ${ENGINE_INCLUDE_DIRS}) target_link_libraries(SpriteAnimationTest PRIVATE SDL2::SDL2 asound) endif() if(MSVC AND TARGET SpriteAnimationTest) target_compile_options(SpriteAnimationTest PRIVATE /utf-8 /W3) endif() set(SPRITE_ASSET_TOOL_SOURCES game/tools/asset_pipeline/SpriteAssetTool.cpp src/Asset/SpriteAssetLoader.cpp ) if(WIN32) add_executable(SpriteAssetTool ${SPRITE_ASSET_TOOL_SOURCES}) target_include_directories(SpriteAssetTool PRIVATE src/Asset src/RenderData libs/Win/SDL2/include libs/Win/SDL_image/include ) target_link_directories(SpriteAssetTool PRIVATE ${SDL2_LIB_DIR} ${SDL2_IMAGE_LIB_DIR}) target_link_libraries(SpriteAssetTool PRIVATE SDL2main SDL2 SDL2_image) add_custom_command(TARGET SpriteAssetTool POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different "${SDL2_DLL}" "$" ) add_custom_command(TARGET SpriteAssetTool POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different "${SDL2_IMAGE_DLL}" "$" ) elseif(SDL2_image_FOUND) add_executable(SpriteAssetTool ${SPRITE_ASSET_TOOL_SOURCES}) target_include_directories(SpriteAssetTool PRIVATE src/Asset src/RenderData ) target_link_libraries(SpriteAssetTool PRIVATE SDL2::SDL2 SDL2_image::SDL2_image) else() message(STATUS "SpriteAssetTool disabled: SDL2_image was not found") endif() if(TARGET SpriteAssetTool) add_custom_target(ConvertTomSprites COMMAND $ --batch "${CMAKE_CURRENT_SOURCE_DIR}/game/assets/raw" "${CMAKE_CURRENT_SOURCE_DIR}/game/assets/sprites" --preset tom-800x480 DEPENDS SpriteAssetTool COMMENT "Converting PNG assets to board-ready .sprite files" VERBATIM ) endif() endif()