diff --git a/libc/fuzzing/string/CMakeLists.txt b/libc/fuzzing/string/CMakeLists.txt
--- a/libc/fuzzing/string/CMakeLists.txt
+++ b/libc/fuzzing/string/CMakeLists.txt
@@ -5,4 +5,5 @@
   DEPENDS
     strcpy
     strlen
+    memcpy
 )
diff --git a/libc/src/string/CMakeLists.txt b/libc/src/string/CMakeLists.txt
--- a/libc/src/string/CMakeLists.txt
+++ b/libc/src/string/CMakeLists.txt
@@ -21,6 +21,7 @@
   DEPENDS
     string_h
     strlen
+    memcpy
 )
 
 add_entrypoint_object(
diff --git a/libc/src/string/strcpy.cpp b/libc/src/string/strcpy.cpp
--- a/libc/src/string/strcpy.cpp
+++ b/libc/src/string/strcpy.cpp
@@ -8,6 +8,7 @@
 
 #include "src/string/strcpy.h"
 #include "src/string/strlen.h"
+#include "src/string/memcpy.h"
 
 #include "src/__support/common.h"
 
@@ -15,7 +16,7 @@
 
 char *LLVM_LIBC_ENTRYPOINT(strcpy)(char *dest, const char *src) {
   return reinterpret_cast<char *>(
-      ::memcpy(dest, src, __llvm_libc::strlen(src) + 1));
+      __llvm_libc::memcpy(dest, src, __llvm_libc::strlen(src) + 1));
 }
 
 } // namespace __llvm_libc
diff --git a/libc/test/src/string/CMakeLists.txt b/libc/test/src/string/CMakeLists.txt
--- a/libc/test/src/string/CMakeLists.txt
+++ b/libc/test/src/string/CMakeLists.txt
@@ -12,6 +12,8 @@
     strcat
     strcpy
     strlen
+# TODO (sivachandra): remove redundant deps.
+    memcpy
 )
 
 add_libc_unittest(
@@ -23,6 +25,8 @@
   DEPENDS
     strcpy
     strlen
+# TODO (sivachandra): remove redundant deps.
+    memcpy
 )
 
 add_libc_unittest(