set(RSTD_PRIVATE_SOURCES)
set(RSTD_PRIVATE_MODULE_SOURCES)
set(RSTD_SYS_SOURCES)
set(RSTD_IO_SOURCES)
set(RSTD_THREAD_SOURCES)
set(RSTD_SYNC_SOURCES)
set(RSTD_ASYNC_SOURCES)
set(RSTD_BYTES_SOURCES)
set(RSTD_NET_SOURCES)
set(RSTD_OS_SOURCES)

add_subdirectory(sys)
add_subdirectory(io)
add_subdirectory(thread)
add_subdirectory(sync)
add_subdirectory(async)
add_subdirectory(bytes)
add_subdirectory(net)
add_subdirectory(os)

add_library(rstd.std STATIC)
target_compile_features(rstd.std PUBLIC cxx_std_20)
target_link_libraries(rstd.std PUBLIC rstd.core rstd.alloc)
set_target_properties(rstd.std PROPERTIES OUTPUT_NAME rstd)

target_sources(
  rstd.std
  PUBLIC FILE_SET
         modules
         TYPE
         CXX_MODULES
         FILES
         mod.cppm
         time.cppm
         time/calendar.cppm
         alloc.cppm
         forward.cppm
         error.cppm
         panicking.cppm
         process/mod.cppm
         process/exit_status.cppm
         process/command.cppm
         env.cppm
         path.cppm
         fs/types.cppm
         fs.cppm
         ffi/mod.cppm
         ffi/os_str.cppm
         ${RSTD_OS_SOURCES}
         ${RSTD_SYS_SOURCES}
         ${RSTD_IO_SOURCES}
         ${RSTD_THREAD_SOURCES}
         ${RSTD_SYNC_SOURCES}
         ${RSTD_ASYNC_SOURCES}
         ${RSTD_BYTES_SOURCES}
         ${RSTD_NET_SOURCES})

target_sources(
  rstd.std
  PRIVATE FILE_SET private_modules TYPE CXX_MODULES FILES
          ${RSTD_PRIVATE_MODULE_SOURCES})

target_sources(rstd.std PRIVATE ${RSTD_PRIVATE_SOURCES} mod.cpp process/process.cpp fs.cpp env.cpp
                                os/fd.cpp)
