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(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 ) 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}) 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 ) if(USE_FRAMEBUFFER) target_compile_definitions(IMX6U-Game PRIVATE USE_FRAMEBUFFER) else() target_include_directories(IMX6U-Game PRIVATE libs/Win/SDL2/include libs/Win/SDL_image/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} ${SDL2_IMAGE_LIB_DIR}) target_link_libraries(IMX6U-Game PRIVATE SDL2main SDL2 SDL2_image) add_custom_command(TARGET IMX6U-Game POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different "${SDL2_DLL}" "$" ) add_custom_command(TARGET IMX6U-Game POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different "${SDL2_IMAGE_DLL}" "$" ) else() find_package(SDL2 REQUIRED) 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()