188 lines
6.1 KiB
CMake
188 lines
6.1 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)
|
|
|
|
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}"
|
|
"$<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()
|