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)