add_subdirectory(generic)
set(ARCH_SUBDIRECTORY generic)
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${LIBC_TARGET_ARCHITECTURE})
  add_subdirectory(${LIBC_TARGET_ARCHITECTURE})
  set(ARCH_SUBDIRECTORY ${LIBC_TARGET_ARCHITECTURE})
endif()

add_entrypoint_object(
  madvise
  SRCS
    madvise.cpp
  HDRS
    ../madvise.h
  DEPENDS
    libc.include.sys_mman
    libc.include.sys_syscall
    libc.src.__support.OSUtil.osutil
    libc.src.errno.errno
)

add_entrypoint_object(
  mmap
  SRCS
    mmap.cpp
  HDRS
    ../mmap.h
  DEPENDS
    libc.include.sys_mman
    libc.include.sys_syscall
    libc.src.__support.OSUtil.osutil
    libc.src.errno.errno
)

add_entrypoint_object(
  mremap
  SRCS
    mremap.cpp
  HDRS
    ../mremap.h
  DEPENDS
    libc.include.sys_mman
    libc.include.sys_syscall
    libc.src.__support.OSUtil.osutil
    libc.src.errno.errno
)

add_entrypoint_object(
  munmap
  SRCS
    munmap.cpp
  HDRS
    ../munmap.h
  DEPENDS
    libc.include.sys_mman
    libc.include.sys_syscall
    libc.src.__support.OSUtil.osutil
    libc.src.errno.errno
)

add_header_library(
  mprotect_common
  HDRS
    mprotect_common.h
  DEPENDS
    libc.include.sys_syscall
    libc.src.__support.OSUtil.osutil
    libc.src.errno.errno
    libc.src.__support.error_or
)

add_entrypoint_object(
  mprotect
  SRCS
    mprotect.cpp
  HDRS
    ../mprotect.h
  DEPENDS
    libc.include.sys_mman
    libc.include.sys_syscall
    libc.src.__support.OSUtil.osutil
    libc.src.errno.errno
    .mprotect_common
)

add_entrypoint_object(
  posix_madvise
  SRCS
    posix_madvise.cpp
  HDRS
    ../posix_madvise.h
  DEPENDS
    libc.include.sys_mman
    libc.include.sys_syscall
    libc.src.__support.OSUtil.osutil
)

add_entrypoint_object(
  mincore
  SRCS
    mincore.cpp
  HDRS
    ../mincore.h
  DEPENDS
    libc.include.sys_mman
    libc.include.sys_syscall
    libc.src.__support.OSUtil.osutil
    libc.src.errno.errno
)

add_entrypoint_object(
  mlock
  SRCS
    mlock.cpp
  HDRS
    ../mlock.h
  DEPENDS
    libc.include.sys_mman
    libc.include.sys_syscall
    libc.src.__support.OSUtil.osutil
    libc.src.errno.errno
)

add_entrypoint_object(
  mlock2
  SRCS
    mlock2.cpp
  HDRS
    ../mlock2.h
  DEPENDS
    libc.include.sys_mman
    libc.include.sys_syscall
    libc.src.__support.OSUtil.osutil
    libc.src.errno.errno
)

add_entrypoint_object(
  munlock
  SRCS
    munlock.cpp
  HDRS
    ../munlock.h
  DEPENDS
    libc.include.sys_mman
    libc.include.sys_syscall
    libc.src.__support.OSUtil.osutil
    libc.src.errno.errno
)

add_entrypoint_object(
  mlockall
  SRCS
    mlockall.cpp
  HDRS
    ../mlockall.h
  DEPENDS
    libc.include.sys_mman
    libc.include.sys_syscall
    libc.src.__support.OSUtil.osutil
    libc.src.errno.errno
)

add_entrypoint_object(
  munlockall
  SRCS
    munlockall.cpp
  HDRS
    ../munlockall.h
  DEPENDS
    libc.include.sys_mman
    libc.include.sys_syscall
    libc.src.__support.OSUtil.osutil
    libc.src.errno.errno
)

add_entrypoint_object(
  msync
  SRCS
    msync.cpp
  HDRS
    ../msync.h
  DEPENDS
    libc.include.sys_mman
    libc.include.sys_syscall
    libc.src.__support.OSUtil.osutil
    libc.src.errno.errno
)

add_entrypoint_object(
  pkey_alloc
  SRCS
    pkey_alloc.cpp
  HDRS
    ../pkey_alloc.h
  DEPENDS
    libc.include.sys_mman
    libc.include.sys_syscall
    libc.src.__support.OSUtil.osutil
    libc.src.errno.errno
)

add_header_library(
  pkey_common
  HDRS
    pkey_common.h
  DEPENDS
    .${ARCH_SUBDIRECTORY}.pkey_common
)

add_entrypoint_object(
  pkey_free
  SRCS
    pkey_free.cpp
  HDRS
    ../pkey_free.h
  DEPENDS
    libc.include.sys_mman
    libc.include.sys_syscall
    libc.src.__support.OSUtil.osutil
    libc.src.errno.errno
)

add_entrypoint_object(
  pkey_get
  SRCS
    pkey_get.cpp
  HDRS
    ../pkey_get.h
  DEPENDS
    libc.include.sys_mman
    libc.include.sys_syscall
    libc.src.__support.OSUtil.osutil
    libc.src.errno.errno
    .pkey_common
)

add_entrypoint_object(
  pkey_mprotect
  SRCS
    pkey_mprotect.cpp
  HDRS
    ../pkey_mprotect.h
  DEPENDS
    libc.include.sys_mman
    libc.include.sys_syscall
    libc.src.__support.OSUtil.osutil
    libc.src.errno.errno
    .mprotect_common
)

add_entrypoint_object(
  pkey_set
  SRCS
    pkey_set.cpp
  HDRS
    ../pkey_set.h
  DEPENDS
    libc.include.sys_mman
    libc.include.sys_syscall
    libc.src.__support.OSUtil.osutil
    libc.src.errno.errno
    .pkey_common
)

add_entrypoint_object(
  remap_file_pages
  SRCS
    remap_file_pages.cpp
  HDRS
    ../remap_file_pages.h
  DEPENDS
    libc.include.sys_mman
    libc.include.sys_syscall
    libc.src.__support.OSUtil.osutil
    libc.src.errno.errno
)

add_header_library(
  shm_common
  HDRS
    shm_common.h
  DEPENDS
    libc.hdr.errno_macros
    libc.src.__support.CPP.array
    libc.src.__support.CPP.string_view
    libc.src.__support.error_or
    libc.src.string.memory_utils.inline_memcpy
)

add_entrypoint_object(
  shm_open
  SRCS
    shm_open.cpp
  HDRS
    ../shm_open.h
  DEPENDS
    libc.hdr.types.mode_t
    libc.src.errno.errno
    .shm_common
)

add_entrypoint_object(
  shm_unlink
  SRCS
    shm_unlink.cpp
  HDRS
    ../shm_unlink.h
  DEPENDS
    libc.src.errno.errno
    .shm_common
)
