include(cmake/generated.cmake)

file(GLOB_RECURSE ARTI_LIB_SOURCES "src/**.cpp")
file(GLOB_RECURSE ARTI_LIB_HEADERS "include/**.hpp")
file(GLOB_RECURSE ARTI_LIB_GEN_HEADERS "${CMAKE_CURRENT_BINARY_DIR}/include/**.hpp")

add_library(
  objs OBJECT
    ${ARTI_LIB_SOURCES}
)

set_target_properties(
  objs PROPERTIES
  POSITION_INDEPENDENT_CODE 1
)

target_compile_options(
  objs PRIVATE
    -pedantic
    -Wall
    -Wextra
    -Wold-style-cast
    -Wsign-conversion
    -Wsign-promo
    -Wstrict-null-sentinel
    -Wstrict-overflow=5
    -Wswitch-default
    -Wundef
    -Werror
    -Wno-unused
)

target_include_directories(
  objs PUBLIC
    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
    $<INSTALL_INTERFACE:>
)

add_library(
  library SHARED
    $<TARGET_OBJECTS:objs>
)

add_library(
  artichoke::library ALIAS
    library
)

set_target_properties(
  library PROPERTIES
  OUTPUT_NAME "artichoke"
)

add_library(
  library_static STATIC
    $<TARGET_OBJECTS:objs>
)

add_library(
  artichoke::library_static ALIAS
    library_static
)

set_target_properties(
  library_static PROPERTIES
  OUTPUT_NAME "artichoke"
)

set(LIB_TARGETS objs library library_static)

foreach(TGET IN LISTS LIB_TARGETS)
  target_sources(
    ${TGET} INTERFACE
    FILE_SET HEADERS
    BASE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/include
    FILES
      ${ARTI_LIB_HEADERS}
  )

  target_sources(
    ${TGET} INTERFACE
    FILE_SET HEADERS
    BASE_DIRS ${CMAKE_CURRENT_BINARY_DIR}/include
    FILES
      ${ARTI_LIB_GEN_HEADERS}
  )
endforeach()
