119 lines
3.8 KiB
CMake
119 lines
3.8 KiB
CMake
cmake_minimum_required(VERSION 3.16)
|
|
project(IMX6U-Game)
|
|
|
|
set(CMAKE_CXX_STANDARD 11)
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
|
|
if(NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE)
|
|
set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type" FORCE)
|
|
endif()
|
|
|
|
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/Platform/AlsaAudioInput.cpp
|
|
src/Core/Platform/AlsaAudioOutput.cpp
|
|
src/Core/Platform/EvdevButtonInput.cpp
|
|
src/Core/Rasterizer/Rasterizer.cpp
|
|
src/Core/Rasterizer/TriangleRasterizer.cpp
|
|
src/Core/Scene/Camera.cpp
|
|
src/Core/Shading/BlinnPhongShader.cpp
|
|
)
|
|
|
|
if(USE_FRAMEBUFFER)
|
|
list(APPEND CORE_SOURCES
|
|
src/Core/Platform/FBDisplay.cpp
|
|
)
|
|
else()
|
|
list(APPEND CORE_SOURCES
|
|
src/Core/Platform/SDLDisplay.cpp
|
|
src/Core/Platform/SdlAudioInput.cpp
|
|
src/Core/Platform/SdlAudioOutput.cpp
|
|
src/Core/Platform/SdlKeyboardButtonInput.cpp
|
|
)
|
|
endif()
|
|
|
|
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
|
|
)
|
|
|
|
add_library(imx6u_core STATIC ${CORE_SOURCES})
|
|
target_include_directories(imx6u_core PUBLIC ${CORE_INCLUDE_DIRS})
|
|
|
|
if(USE_FRAMEBUFFER)
|
|
target_compile_definitions(imx6u_core PUBLIC 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_core PUBLIC libs/Win/SDL2/include)
|
|
target_link_directories(imx6u_core PUBLIC ${SDL2_LIB_DIR})
|
|
target_link_libraries(imx6u_core PUBLIC SDL2main SDL2)
|
|
else()
|
|
find_package(SDL2 REQUIRED)
|
|
find_package(SDL2_image QUIET)
|
|
target_link_libraries(imx6u_core PUBLIC SDL2::SDL2)
|
|
endif()
|
|
endif()
|
|
|
|
if(UNIX AND NOT APPLE)
|
|
find_package(ALSA QUIET)
|
|
if(ALSA_FOUND)
|
|
target_compile_definitions(imx6u_core PUBLIC PLATFORM_HAS_ALSA)
|
|
target_include_directories(imx6u_core PUBLIC ${ALSA_INCLUDE_DIRS})
|
|
target_link_libraries(imx6u_core PUBLIC ${ALSA_LIBRARIES})
|
|
else()
|
|
message(STATUS "ALSA was not found; AlsaAudioInput and AlsaAudioOutput will be unavailable backends")
|
|
endif()
|
|
endif()
|
|
|
|
if(MSVC)
|
|
target_compile_options(imx6u_core PRIVATE /utf-8 /W3)
|
|
endif()
|
|
|
|
function(imx6u_configure_app_target target_name)
|
|
target_link_libraries(${target_name} PRIVATE imx6u_core)
|
|
|
|
if(WIN32 AND NOT USE_FRAMEBUFFER)
|
|
add_custom_command(TARGET ${target_name} POST_BUILD
|
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
|
"${SDL2_DLL}"
|
|
"$<TARGET_FILE_DIR:${target_name}>"
|
|
)
|
|
endif()
|
|
|
|
if(MSVC)
|
|
target_compile_options(${target_name} PRIVATE /utf-8 /W3)
|
|
set_property(TARGET ${target_name} PROPERTY INTERPROCEDURAL_OPTIMIZATION_RELEASE TRUE)
|
|
endif()
|
|
endfunction()
|
|
|
|
add_subdirectory(src/Apps/Game)
|
|
add_subdirectory(src/Apps/Demo)
|