cmake_minimum_required(VERSION 3.28)
project(
  rstd.core
  VERSION 0.1.0
  LANGUAGES CXX)

add_library(rstd.core STATIC)
add_library(rstd::core ALIAS rstd.core)
target_compile_features(rstd.core PUBLIC cxx_std_20)
target_include_directories(
  rstd.core
  PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
         $<INSTALL_INTERFACE:include>)
target_link_libraries(rstd.core PUBLIC rstd.basic PRIVATE rstd.runtime)
target_compile_definitions(
  rstd.core
  PRIVATE
    "RSTD_CHECK_INTEGER_OVERFLOW=$<OR:$<CONFIG:Debug>,$<BOOL:${RSTD_CHECK_INTEGER_OVERFLOW}>>")
target_sources(
  rstd.core
  PUBLIC FILE_SET
         headers
         TYPE
         HEADERS
         BASE_DIRS
         include
         FILES
         include/rstd/enum.hpp
         include/rstd/macro.hpp)

target_sources(rstd.core PRIVATE mod.cpp)
target_sources(
  rstd.core
  PUBLIC FILE_SET
         modules
         TYPE
         CXX_MODULES
         FILES
         mod.cppm
         prelude.cppm
         core.cppm
         array.cppm
         type_id.cppm
         any.cppm
         error_trait.cppm
         error.cppm
         trait.cppm
         marker.cppm
         borrow.cppm
         convert.cppm
         clone.cppm
         clone_tuple.cppm
         option.cppm
         result.cppm
         try.cppm
         enum.cppm
         task.cppm
         future.cppm
         fmt.cppm
         fmt/float.cppm
          panic.cppm
          panicking.cppm
          choice.cppm
         hint.cppm
         memchr.cppm
         cmp.cppm
         time.cppm
         alloc/global.cppm
         alloc/layout.cppm
         alloc/mod.cppm
         intrinsics/mod.cppm
         ffi/mod.cppm
         ffi/c_str.cppm
         hash/mod.cppm
         num/types.cppm
         num/literals.cppm
         num/integer_methods.cppm
         num/convert.cppm
         num/mod.cppm
         num/bignum.cppm
         num/dec2flt.cppm
         num/flt2dec.cppm
         num/nonzero.cppm
         num/niche_types.cppm
         num/integer.cppm
         num/floating_parse.cppm
         slice/mod.cppm
         slice/ops.cppm
         str/mod.cppm
         str/str.cppm
         str/traits.cppm
         ptr/mod.cppm
         ptr/non_null.cppm
         ptr/dyn.cppm
         ptr/metadata.cppm
         ptr/ptr.cppm
         ops/mod.cppm
         ops/deref.cppm
         ops/function.cppm
         iter/mod.cppm
         iter/traits.cppm
         iter/adapters.cppm
         iter/sources.cppm
         iter/range.cppm
         iter/option_result.cppm
         mem/mod.cppm
         mem/manually_drop.cppm
         mem/maybe_uninit.cppm
         mem/drop_guard.cppm
         sync/mod.cppm
         sync/atomic.cppm
         forward/mod.cppm
         char.cppm)
