add_subdirectory(memory_utils)

add_entrypoint_object(
  strcat
  SRCS
    strcat.cpp
  HDRS
    strcat.h
  DEPENDS
    strcpy
    string_h
    strlen
)

add_entrypoint_object(
  strcpy
  SRCS
    strcpy.cpp
  HDRS
    strcpy.h
  DEPENDS
    string_h
    strlen
    memcpy
)

add_entrypoint_object(
  strlen
  SRCS
    strlen.cpp
  HDRS
    strlen.h
  DEPENDS
    string_h
)

# ------------------------------------------------------------------------------
# memcpy
# ------------------------------------------------------------------------------

# include the relevant architecture specific implementations
if(${LIBC_TARGET_MACHINE} STREQUAL "x86_64")
  set(LIBC_MEMCPY_IMPL_FOLDER "x86")
else()
  set(LIBC_MEMCPY_IMPL_FOLDER ${LIBC_TARGET_MACHINE})
endif()

add_gen_header(
  memcpy_arch_specific
  DEF_FILE
    memcpy_arch_specific.h.def
  GEN_HDR
    memcpy_arch_specific.h
  PARAMS
    memcpy_arch_specific=${LIBC_MEMCPY_IMPL_FOLDER}/memcpy_arch_specific.h.inc
  DATA_FILES
    ${LIBC_MEMCPY_IMPL_FOLDER}/memcpy_arch_specific.h.inc
)

# Helper to define an implementation of memcpy.
# - Computes flags to satisfy required/rejected features and arch,
# - Declares an entry point,
# - Attach the REQUIRE_CPU_FEATURES property to the target,
# - Add the target to `memcpy_implementations` global property for tests.
function(add_memcpy memcpy_name)
  cmake_parse_arguments(
    "ADD_MEMCPY"
    "" # Optional arguments
    "MARCH" # Single value arguments
    "REQUIRE;REJECT" # Multi value arguments
    ${ARGN})
  compute_flags(flags
    MARCH ${ADD_MEMCPY_MARCH}
    REQUIRE ${ADD_MEMCPY_REQUIRE}
    REJECT ${ADD_MEMCPY_REJECT}
  )
  add_entrypoint_object(
    ${memcpy_name}
    SRCS ${LIBC_SOURCE_DIR}/src/string/memcpy.cpp
    HDRS ${LIBC_SOURCE_DIR}/src/string/memcpy.h
    DEPENDS
      string_h
      memory_utils
      memcpy_arch_specific
    COMPILE_OPTIONS
      -fno-builtin-memcpy
      ${flags}
  )
  set_target_properties(${memcpy_name} PROPERTIES REQUIRE_CPU_FEATURES "${ADD_MEMCPY_REQUIRE}")
  get_property(all GLOBAL PROPERTY memcpy_implementations)
  list(APPEND all ${memcpy_name})
  set_property(GLOBAL PROPERTY memcpy_implementations "${all}")
endfunction()

add_subdirectory(${LIBC_MEMCPY_IMPL_FOLDER})
add_memcpy(memcpy MARCH native)
