IMX6U-Game/CMakeLists.txt

139 lines
4.6 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(CORE_SOURCES
src/Core/Asset/ObjLoader.cpp
src/Core/Asset/SpriteAssetLoader.cpp
src/Core/Core/DepthBuffer.cpp
src/Core/Core/FrameBuffer.cpp
src/Core/Core/Renderer.cpp
src/Core/Draw2D/DrawContext.cpp
src/Core/Rasterizer/Rasterizer.cpp
src/Core/Rasterizer/TriangleRasterizer.cpp
src/Core/Scene/Camera.cpp
src/Core/Shading/BlinnPhongShader.cpp
)
set(CORE_INCLUDE_DIRS
src/Core/Platform
src/Core/Asset
src/Core/Core
src/Core/Draw2D
src/Core/Math
src/Core/Rasterizer
src/Core/RenderData
src/Core/Scene
src/Core/Shading
assets/font
assets/sprite
)
set(SOURCES
src/Apps/Game/Main.cpp
${CORE_SOURCES}
)
if(USE_FRAMEBUFFER)
list(APPEND SOURCES src/Core/Platform/FBDisplay.cpp)
else()
list(APPEND SOURCES src/Core/Platform/SDLDisplay.cpp)
endif()
add_executable(IMX6U-Game ${SOURCES})
target_include_directories(IMX6U-Game PRIVATE ${CORE_INCLUDE_DIRS})
if(USE_FRAMEBUFFER)
target_compile_definitions(IMX6U-Game PRIVATE USE_FRAMEBUFFER)
else()
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_include_directories(IMX6U-Game PRIVATE libs/Win/SDL2/include)
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)
find_package(SDL2_image QUIET)
target_link_libraries(IMX6U-Game PRIVATE SDL2::SDL2)
endif()
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_ASSET_TOOL_SOURCES
src/Apps/Game/tools/asset_pipeline/SpriteAssetTool.cpp
src/Core/Asset/SpriteAssetLoader.cpp
)
if(WIN32)
add_executable(SpriteAssetTool ${SPRITE_ASSET_TOOL_SOURCES})
target_include_directories(SpriteAssetTool PRIVATE
src/Core/Asset
src/Core/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/Core/Asset
src/Core/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
"src/Apps/Game/assets/raw"
"src/Apps/Game/assets/sprites"
--preset tom-800x480
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
DEPENDS SpriteAssetTool
COMMENT "Converting PNG assets to board-ready .sprite files"
VERBATIM
)
endif()
endif()