IMX6U-Game/CMakeLists.txt

218 lines
6.9 KiB
CMake

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)
<<<<<<< HEAD
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(SOURCES
src/Apps/Demo/main.cpp
src/Gfx/Asset/ObjLoader.cpp
src/Gfx/Core/DepthBuffer.cpp
src/Gfx/Core/FrameBuffer.cpp
src/Gfx/Core/Renderer.cpp
src/Gfx/Draw2D/DrawContext.cpp
src/Gfx/Rasterizer/Rasterizer.cpp
src/Gfx/Rasterizer/TriangleRasterizer.cpp
src/Gfx/Scene/Camera.cpp
src/Gfx/Shading/BlinnPhongShader.cpp
>>>>>>> 777ff96602c52c86f03d612bb4213de746f580a5
)
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/Gfx/Platform/FBDisplay.cpp)
else()
list(APPEND SOURCES src/Gfx/Platform/SDLDisplay.cpp)
endif()
add_executable(IMX6U-Game ${SOURCES})
<<<<<<< HEAD
target_include_directories(IMX6U-Game PRIVATE ${ENGINE_INCLUDE_DIRS})
=======
target_include_directories(IMX6U-Game PRIVATE
src/Gfx/Platform
src/Gfx/Asset
src/Gfx/Core
src/Gfx/Draw2D
src/Gfx/Math
src/Gfx/Rasterizer
src/Gfx/RenderData
src/Gfx/Scene
src/Gfx/Shading
assets/font
assets/sprite
)
>>>>>>> 777ff96602c52c86f03d612bb4213de746f580a5
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}"
"$<TARGET_FILE_DIR:IMX6U-Game>"
)
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}"
"$<TARGET_FILE_DIR:SpriteAnimationTest>"
)
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}"
"$<TARGET_FILE_DIR:SpriteAssetTool>"
)
add_custom_command(TARGET SpriteAssetTool POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
"${SDL2_IMAGE_DLL}"
"$<TARGET_FILE_DIR:SpriteAssetTool>"
)
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 $<TARGET_FILE:SpriteAssetTool>
--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()