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}" "$" ) 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}" "$" ) 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/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 $ --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()