project(Prism)

file(GLOB_RECURSE SRC_SOURCE src/**.cpp)


# configure
set(CMAKE_POSITION_INDEPENDENT_CODE ON)

add_subdirectory(vendor/spdlog EXCLUDE_FROM_ALL)
add_subdirectory(vendor/glfw EXCLUDE_FROM_ALL)


# static library
set(STATIC_LIBRARY ${PROJECT_NAME}-static)

add_library(${STATIC_LIBRARY} STATIC ${SRC_SOURCE})

target_compile_definitions(${STATIC_LIBRARY} PRIVATE
        PRISM_STATIC
        $<$<CONFIG:Debug>:PM_ENABLE_ASSERTS>
)

target_include_directories(${STATIC_LIBRARY} PUBLIC
        $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>

)
target_link_libraries(${STATIC_LIBRARY} PRIVATE
        spdlog
        glfw
)
set_target_properties(${STATIC_LIBRARY} PROPERTIES
        OUTPUT_NAME ${PROJECT_NAME}
        ARCHIVE_OUTPUT_NAME ${PROJECT_NAME}
)


# shared library
set(SHARED_LIBRARY ${PROJECT_NAME}-shared)

add_library(${SHARED_LIBRARY} SHARED ${SRC_SOURCE})

target_compile_definitions(${SHARED_LIBRARY} PRIVATE
        PRISM_SHARED BUILD_PRISM_DLL
        $<$<CONFIG:Debug>:PM_ENABLE_ASSERTS>
)

target_include_directories(${SHARED_LIBRARY} PUBLIC
        $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>
)
target_link_libraries(${SHARED_LIBRARY} PRIVATE
        spdlog
        glfw
)

set_target_properties(${SHARED_LIBRARY} PROPERTIES
        OUTPUT_NAME ${PROJECT_NAME}d
        LIBRARY_OUTPUT_NAME ${PROJECT_NAME}d
)


# alias
add_library(Prism::static ALIAS Prism-static)
add_library(Prism::shared ALIAS Prism-shared)
add_library(Prism ALIAS Prism-shared)
