blob: abe9787679894c1bb2575f485ab7d674d6373b51 [file] [log] [blame]
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
)
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)