[libc-commits] [libc] e4767a6 - [libc] Add fully-qualified target names.

Siva Chandra Reddy via libc-commits libc-commits at lists.llvm.org
Fri Apr 10 18:02:22 PDT 2020


Author: Siva Chandra Reddy
Date: 2020-04-10T18:01:52-07:00
New Revision: e4767a6f1435164e6eb65c71a0a847812390a55e

URL: https://github.com/llvm/llvm-project/commit/e4767a6f1435164e6eb65c71a0a847812390a55e
DIFF: https://github.com/llvm/llvm-project/commit/e4767a6f1435164e6eb65c71a0a847812390a55e.diff

LOG: [libc] Add fully-qualified target names.

Only targets setup by the special LLVM libc rules now have fully
qualified names. The naming style is similar to fully qualified names in
Python.

Reviewers: abrachet, PaulkaToast, phosek

Differential Revision: https://reviews.llvm.org/D77340

Added: 
    libc/cmake/modules/LLVMLibCTargetNameUtils.cmake

Modified: 
    libc/CMakeLists.txt
    libc/cmake/modules/LLVMLibCRules.cmake
    libc/config/linux/CMakeLists.txt
    libc/fuzzing/string/CMakeLists.txt
    libc/include/CMakeLists.txt
    libc/lib/CMakeLists.txt
    libc/loader/linux/CMakeLists.txt
    libc/loader/linux/x86_64/CMakeLists.txt
    libc/src/__support/CMakeLists.txt
    libc/src/assert/CMakeLists.txt
    libc/src/signal/CMakeLists.txt
    libc/src/signal/linux/CMakeLists.txt
    libc/src/stdlib/CMakeLists.txt
    libc/src/stdlib/linux/CMakeLists.txt
    libc/src/string/CMakeLists.txt
    libc/src/string/memory_utils/CMakeLists.txt
    libc/src/sys/mman/CMakeLists.txt
    libc/src/sys/mman/linux/CMakeLists.txt
    libc/src/threads/CMakeLists.txt
    libc/src/threads/linux/CMakeLists.txt
    libc/test/config/linux/x86_64/CMakeLists.txt
    libc/test/loader/CMakeLists.txt
    libc/test/loader/linux/CMakeLists.txt
    libc/test/src/assert/CMakeLists.txt
    libc/test/src/errno/CMakeLists.txt
    libc/test/src/signal/CMakeLists.txt
    libc/test/src/stdlib/CMakeLists.txt
    libc/test/src/string/CMakeLists.txt
    libc/test/src/string/memory_utils/CMakeLists.txt
    libc/test/src/sys/mman/linux/CMakeLists.txt
    libc/test/src/threads/CMakeLists.txt
    libc/utils/UnitTest/CMakeLists.txt

Removed: 
    


################################################################################
diff  --git a/libc/CMakeLists.txt b/libc/CMakeLists.txt
index 6ec62483d32a..d64665361513 100644
--- a/libc/CMakeLists.txt
+++ b/libc/CMakeLists.txt
@@ -23,9 +23,9 @@ include(CMakeParseArguments)
 include(LLVMLibCRules)
 include(LLVMLibCCheckCpuFeatures)
 
-add_subdirectory(src)
-add_subdirectory(config)
 add_subdirectory(include)
+add_subdirectory(config)
+add_subdirectory(src)
 add_subdirectory(utils)
 
 # The loader can potentially depend on the library components so add it

diff  --git a/libc/cmake/modules/LLVMLibCRules.cmake b/libc/cmake/modules/LLVMLibCRules.cmake
index 897ec8438d94..d604da8e4c9c 100644
--- a/libc/cmake/modules/LLVMLibCRules.cmake
+++ b/libc/cmake/modules/LLVMLibCRules.cmake
@@ -1,3 +1,4 @@
+include(LLVMLibCTargetNameUtils)
 
 # A rule for self contained header file targets.
 # This rule merely copies the header file from the current source directory to
@@ -12,7 +13,7 @@ function(add_header target_name)
     "ADD_HEADER"
     ""    # No optional arguments
     "HDR" # Single value arguments
-    "DEPENDS"    # No multi value arguments
+    "DEPENDS"
     ${ARGN}
   )
   if(NOT ADD_HEADER_HDR)
@@ -28,15 +29,17 @@ function(add_header target_name)
     DEPENDS ${src_file}
   )
 
+  get_fq_target_name(${target_name} fq_target_name)
   add_custom_target(
-    ${target_name}
+    ${fq_target_name}
     DEPENDS ${dest_file}
   )
 
   if(ADD_HEADER_DEPENDS)
-  add_dependencies(
-    ${target_name} ${ADD_HEADER_DEPENDS}
-  )
+    get_fq_deps_list(fq_deps_list ${ADD_HEADER_DEPENDS})
+    add_dependencies(
+      ${fq_target_name} ${fq_deps_list}
+    )
   endif()
 endfunction(add_header)
 
@@ -88,9 +91,13 @@ function(add_gen_header target_name)
     DEPENDS ${in_file} ${fq_data_files} ${LIBC_SOURCE_DIR}/config/${LIBC_TARGET_OS}/api.td libc-hdrgen
   )
 
+  get_fq_target_name(${target_name} fq_target_name)
+  if(ADD_GEN_HDR_DEPENDS)
+    get_fq_deps_list(fq_deps_list ${ADD_GEN_HDR_DEPENDS})
+  endif()
   add_custom_target(
-    ${target_name}
-    DEPENDS ${out_file} ${ADD_GEN_HDR_DEPENDS}
+    ${fq_target_name}
+    DEPENDS ${out_file} ${fq_deps_list}
   )
 endfunction(add_gen_header)
 
@@ -118,32 +125,34 @@ function(add_object_library target_name)
     message(FATAL_ERROR "'add_object_library' rule requires SRCS to be specified.")
   endif()
 
+  get_fq_target_name(${target_name} fq_target_name)
   add_library(
-    ${target_name}
+    ${fq_target_name}
     OBJECT
     ${ADD_OBJECT_SRCS}
     ${ADD_OBJECT_HDRS}
   )
   target_include_directories(
-    ${target_name}
+    ${fq_target_name}
     PRIVATE
       "${LIBC_BUILD_DIR}/include;${LIBC_SOURCE_DIR};${LIBC_BUILD_DIR}"
   )
   if(ADD_OBJECT_COMPILE_OPTIONS)
     target_compile_options(
-      ${target_name}
+      ${fq_target_name}
       PRIVATE ${ADD_OBJECT_COMPILE_OPTIONS}
     )
   endif()
 
-  set(all_object_files $<TARGET_OBJECTS:${target_name}>)
+  set(all_object_files $<TARGET_OBJECTS:${fq_target_name}>)
   if(ADD_OBJECT_DEPENDS)
+    get_fq_deps_list(fq_deps_list ${ADD_OBJECT_DEPENDS})
     add_dependencies(
-      ${target_name}
-      ${ADD_OBJECT_DEPENDS}
+      ${fq_target_name}
+      ${fq_deps_list}
     )
-    foreach(obj_target IN LISTS ADD_OBJECT_DEPENDS)
-      if(NOT TARGET ${obj_target})
+    foreach(obj_target IN LISTS fq_deps_list)
+      if(NOT TARGET obj_target)
         # Not all targets will be visible. So, we will ignore those which aren't
         # visible yet.
         continue()
@@ -161,7 +170,7 @@ function(add_object_library target_name)
   list(REMOVE_DUPLICATES all_object_files)
 
   set_target_properties(
-    ${target_name}
+    ${fq_target_name}
     PROPERTIES
       "TARGET_TYPE" ${OBJECT_LIBRARY_TARGET_TYPE}
       "OBJECT_FILES" "${all_object_files}"
@@ -174,7 +183,7 @@ set(ENTRYPOINT_OBJ_TARGET_TYPE "ENTRYPOINT_OBJ")
 # Usage:
 #     add_entrypoint_object(
 #       <target_name>
-#       [REDIRECTED] # Specified if the entrypoint is redirected.
+#       [ALIAS|REDIRECTED] # Specified if the entrypoint is redirected or an alias.
 #       [NAME] <the C name of the entrypoint if 
diff erent from target_name>
 #       SRCS <list of .cpp files>
 #       HDRS <list of .h files>
@@ -185,11 +194,48 @@ set(ENTRYPOINT_OBJ_TARGET_TYPE "ENTRYPOINT_OBJ")
 function(add_entrypoint_object target_name)
   cmake_parse_arguments(
     "ADD_ENTRYPOINT_OBJ"
-    "REDIRECTED" # Optional argument
+    "ALIAS;REDIRECTED" # Optional argument
     "NAME" # Single value arguments
     "SRCS;HDRS;DEPENDS;COMPILE_OPTIONS"  # Multi value arguments
     ${ARGN}
   )
+
+  get_fq_target_name(${target_name} fq_target_name)
+
+  if(ADD_ENTRYPOINT_OBJ_ALIAS)
+    # Alias targets help one add aliases to other entrypoint object targets.
+    # One can use alias targets setup OS/machine independent entrypoint targets.
+    list(LENGTH ADD_ENTRYPOINT_OBJ_DEPENDS deps_size)
+    if(NOT (${deps_size} EQUAL "1"))
+      message(FATAL_ERROR "An entrypoint alias should have exactly one dependency.")
+    endif()
+    list(GET ADD_ENTRYPOINT_OBJ_DEPENDS 0 dep_target)
+    get_fq_dep_name(fq_dep_name ${dep_target})
+    if(NOT TARGET ${fq_dep_name})
+      message(WARNING "Aliasee ${fq_dep_name} for entrypoint alias ${target_name} missing; "
+                      "Target ${target_name} will be ignored.")
+      return()
+    endif()
+
+    get_target_property(obj_type ${fq_dep_name} "TARGET_TYPE")
+    if((NOT obj_type) OR (NOT (${obj_type} STREQUAL ${ENTRYPOINT_OBJ_TARGET_TYPE})))
+      message(FATAL_ERROR "The aliasee of an entrypoint alias should be an entrypoint.")
+    endif()
+
+    add_custom_target(${fq_target_name})
+    add_dependencies(${fq_target_name} ${fq_dep_name})
+    get_target_property(all_objects ${fq_dep_name} "OBJECT_FILES")
+    get_target_property(all_objects_raw ${fq_dep_name} "OBJECT_FILES_RAW")
+    set_target_properties(
+      ${fq_target_name}
+      PROPERTIES
+        "TARGET_TYPE" ${ENTRYPOINT_OBJ_TARGET_TYPE}
+        "OBJECT_FILES" "${all_objects}"
+        "OBJECT_FILES_RAW" "${all_objects_raw}"
+    )
+    return()
+  endif()
+
   if(NOT ADD_ENTRYPOINT_OBJ_SRCS)
     message(FATAL_ERROR "`add_entrypoint_object` rule requires SRCS to be specified.")
   endif()
@@ -202,8 +248,10 @@ function(add_entrypoint_object target_name)
     set(entrypoint_name ${ADD_ENTRYPOINT_OBJ_NAME})
   endif()
 
+  set(objects_target_name "${fq_target_name}_objects")
+
   add_library(
-    "${target_name}_objects"
+    ${objects_target_name}
     # We want an object library as the objects will eventually get packaged into
     # an archive (like libc.a).
     OBJECT
@@ -211,27 +259,28 @@ function(add_entrypoint_object target_name)
     ${ADD_ENTRYPOINT_OBJ_HDRS}
   )
   target_compile_options(
-    ${target_name}_objects
+    ${objects_target_name}
     BEFORE
     PRIVATE
       -fpie ${LLVM_CXX_STD_default}
   )
   target_include_directories(
-    ${target_name}_objects
+    ${objects_target_name}
     PRIVATE
       "${LIBC_BUILD_DIR}/include;${LIBC_SOURCE_DIR};${LIBC_BUILD_DIR}"
   )
   add_dependencies(
-    ${target_name}_objects
-    support_common_h
+    ${objects_target_name}
+    libc.src.__support.common
   )
   set(dep_objects "")
   if(ADD_ENTRYPOINT_OBJ_DEPENDS)
+    get_fq_deps_list(fq_deps_list ${ADD_ENTRYPOINT_OBJ_DEPENDS})
     add_dependencies(
-      ${target_name}_objects
-      ${ADD_ENTRYPOINT_OBJ_DEPENDS}
+      ${objects_target_name}
+      ${fq_deps_list}
     )
-    foreach(dep_target IN LISTS ADD_ENTRYPOINT_OBJ_DEPENDS)
+    foreach(dep_target IN LISTS fq_deps_list)
       if(NOT TARGET ${dep_target})
         # Not all targets will be visible. So, we will ignore those which aren't
         # visible yet.
@@ -255,7 +304,7 @@ function(add_entrypoint_object target_name)
 
   if(ADD_ENTRYPOINT_OBJ_COMPILE_OPTIONS)
     target_compile_options(
-      ${target_name}_objects
+      ${objects_target_name}
       PRIVATE ${ADD_ENTRYPOINT_OBJ_COMPILE_OPTIONS}
     )
   endif()
@@ -263,7 +312,7 @@ function(add_entrypoint_object target_name)
   set(object_file_raw "${CMAKE_CURRENT_BINARY_DIR}/${target_name}_raw.o")
   set(object_file "${CMAKE_CURRENT_BINARY_DIR}/${target_name}.o")
 
-  set(input_objects $<TARGET_OBJECTS:${target_name}_objects>)
+  set(input_objects $<TARGET_OBJECTS:${objects_target_name}>)
   add_custom_command(
     OUTPUT ${object_file_raw}
     DEPENDS ${input_objects}
@@ -283,7 +332,7 @@ function(add_entrypoint_object target_name)
   )
 
   add_custom_target(
-    ${target_name}
+    ${fq_target_name}
     ALL
     DEPENDS ${object_file}
   )
@@ -292,7 +341,7 @@ function(add_entrypoint_object target_name)
   set(all_objects_raw ${object_file_raw})
   list(APPEND all_objects_raw ${dep_objects})
   set_target_properties(
-    ${target_name}
+    ${fq_target_name}
     PROPERTIES
       "TARGET_TYPE" ${ENTRYPOINT_OBJ_TARGET_TYPE}
       "OBJECT_FILES" "${all_objects}"
@@ -432,7 +481,8 @@ function(add_libc_unittest target_name)
   endif()
 
   set(library_deps "")
-  foreach(dep IN LISTS LIBC_UNITTEST_DEPENDS)
+  get_fq_deps_list(fq_deps_list ${LIBC_UNITTEST_DEPENDS})
+  foreach(dep IN LISTS fq_deps_list)
     get_target_property(dep_type ${dep} "TARGET_TYPE")
     if(${dep_type} STREQUAL ${ENTRYPOINT_OBJ_TARGET_TYPE})
       get_target_property(obj_files ${dep} "OBJECT_FILES_RAW")
@@ -446,14 +496,15 @@ function(add_libc_unittest target_name)
   endforeach(dep)
   list(REMOVE_DUPLICATES library_deps)
 
+  get_fq_target_name(${target_name} fq_target_name)
   add_executable(
-    ${target_name}
+    ${fq_target_name}
     EXCLUDE_FROM_ALL
     ${LIBC_UNITTEST_SRCS}
     ${LIBC_UNITTEST_HDRS}
   )
   target_include_directories(
-    ${target_name}
+    ${fq_target_name}
     PRIVATE
       ${LIBC_SOURCE_DIR}
       ${LIBC_BUILD_DIR}
@@ -467,27 +518,27 @@ function(add_libc_unittest target_name)
   endif()
 
   if(library_deps)
-    target_link_libraries(${target_name} PRIVATE ${library_deps})
+    target_link_libraries(${fq_target_name} PRIVATE ${library_deps})
   endif()
 
-  set_target_properties(${target_name} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+  set_target_properties(${fq_target_name} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
 
   add_dependencies(
-    ${target_name}
-    ${LIBC_UNITTEST_DEPENDS}
+    ${fq_target_name}
+    ${fq_deps_list}
   )
 
-  target_link_libraries(${target_name} PRIVATE LibcUnitTest libc_test_utils)
+  target_link_libraries(${fq_target_name} PRIVATE LibcUnitTest libc_test_utils)
 
   add_custom_command(
-    TARGET ${target_name}
+    TARGET ${fq_target_name}
     POST_BUILD
-    COMMAND $<TARGET_FILE:${target_name}>
+    COMMAND $<TARGET_FILE:${fq_target_name}>
   )
   if(LIBC_UNITTEST_SUITE)
     add_dependencies(
       ${LIBC_UNITTEST_SUITE}
-      ${target_name}
+      ${fq_target_name}
     )
   endif()
 endfunction(add_libc_unittest)
@@ -520,8 +571,9 @@ function(add_libc_fuzzer target_name)
     message(FATAL_ERROR "'add_libc_fuzzer' target requires a DEPENDS list of 'add_entrypoint_object' targets.")
   endif()
 
+  get_fq_deps_list(fq_deps_list ${LIBC_FUZZER_DEPENDS})
   set(library_deps "")
-  foreach(dep IN LISTS LIBC_FUZZER_DEPENDS)
+  foreach(dep IN LISTS fq_deps_list)
     get_target_property(dep_type ${dep} "TARGET_TYPE")
     if (dep_type)
       string(COMPARE EQUAL ${dep_type} ${ENTRYPOINT_OBJ_TARGET_TYPE} dep_is_entrypoint)
@@ -535,14 +587,15 @@ function(add_libc_fuzzer target_name)
     # to the list of library_deps.
   endforeach(dep)
 
+  get_fq_target_name(${target_name} fq_target_name)
   add_executable(
-    ${target_name}
+    ${fq_target_name}
     EXCLUDE_FROM_ALL
     ${LIBC_FUZZER_SRCS}
     ${LIBC_FUZZER_HDRS}
   )
   target_include_directories(
-    ${target_name}
+    ${fq_target_name}
     PRIVATE
       ${LIBC_SOURCE_DIR}
       ${LIBC_BUILD_DIR}
@@ -550,16 +603,16 @@ function(add_libc_fuzzer target_name)
   )
 
   if(library_deps)
-    target_link_libraries(${target_name} PRIVATE ${library_deps})
+    target_link_libraries(${fq_target_name} PRIVATE ${library_deps})
   endif()
 
-  set_target_properties(${target_name} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+  set_target_properties(${fq_target_name} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
 
   add_dependencies(
-    ${target_name}
-    ${LIBC_FUZZER_DEPENDS}
+    ${fq_target_name}
+    ${fq_deps_list}
   )
-  add_dependencies(libc-fuzzer ${target_name})
+  add_dependencies(libc-fuzzer ${fq_target_name})
 endfunction(add_libc_fuzzer)
 
 # Rule to add header only libraries.
@@ -582,6 +635,8 @@ function(add_header_library target_name)
     message(FATAL_ERROR "'add_header_library' target requires a HDRS list of .h files.")
   endif()
 
+  get_fq_target_name(${target_name} fq_target_name)
+
   set(FULL_HDR_PATHS "")
   # TODO: Remove this foreach block when we can switch to the new
   # version of the CMake policy CMP0076.
@@ -589,18 +644,19 @@ function(add_header_library target_name)
     list(APPEND FULL_HDR_PATHS ${CMAKE_CURRENT_SOURCE_DIR}/${hdr})
   endforeach()
 
-  set(interface_target_name "${target_name}_header_library__")
+  set(interface_target_name "${fq_target_name}_header_library__")
 
   add_library(${interface_target_name} INTERFACE)
   target_sources(${interface_target_name} INTERFACE ${FULL_HDR_PATHS})
   if(ADD_HEADER_DEPENDS)
-    add_dependencies(${interface_target_name} ${ADD_HEADER_DEPENDS})
+    get_fq_deps_list(fq_deps_list ${ADD_HEADER_DEPENDS})
+    add_dependencies(${interface_target_name} ${fq_deps_list})
   endif()
 
-  add_custom_target(${target_name})
-  add_dependencies(${target_name} ${interface_target_name})
+  add_custom_target(${fq_target_name})
+  add_dependencies(${fq_target_name} ${interface_target_name})
   set_target_properties(
-    ${target_name}
+    ${fq_target_name}
     PROPERTIES
       "TARGET_TYPE" "HDR_LIBRARY"
   )

diff  --git a/libc/cmake/modules/LLVMLibCTargetNameUtils.cmake b/libc/cmake/modules/LLVMLibCTargetNameUtils.cmake
new file mode 100644
index 000000000000..4fbc06b4e858
--- /dev/null
+++ b/libc/cmake/modules/LLVMLibCTargetNameUtils.cmake
@@ -0,0 +1,32 @@
+function(get_fq_target_name local_name target_name_var)
+  file(RELATIVE_PATH rel_path ${LIBC_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR})
+  string(REPLACE "/" "." fq_name "libc.${rel_path}.${local_name}")
+  set(${target_name_var} ${fq_name} PARENT_SCOPE)
+endfunction(get_fq_target_name)
+
+function(is_relative_target_name target_name output_var)
+  string(FIND ${target_name} "." dot_loc)
+  string(COMPARE EQUAL "0" ${dot_loc} is_relative)
+  set(${output_var} ${is_relative} PARENT_SCOPE)
+endfunction(is_relative_target_name)
+
+function(get_fq_dep_name fq_name name)
+  is_relative_target_name(${name} "is_relative")
+  if(is_relative)
+    # Skip over the first '.' character.
+    string(SUBSTRING ${name} 1 -1 local_name)
+    get_fq_target_name(${local_name} fully_qualified_name)
+    set(${fq_name} ${fully_qualified_name} PARENT_SCOPE)
+  else()
+    set(${fq_name} ${name} PARENT_SCOPE)
+  endif()
+endfunction(get_fq_dep_name)
+
+function(get_fq_deps_list output_list)
+  set(fq_dep_name_list "")
+  foreach(dep IN LISTS ARGN)
+    get_fq_dep_name(fq_dep_name ${dep})
+    list(APPEND fq_dep_name_list ${fq_dep_name})
+  endforeach(dep)
+  set(${output_list} ${fq_dep_name_list} PARENT_SCOPE)
+endfunction(get_fq_deps_list)

diff  --git a/libc/config/linux/CMakeLists.txt b/libc/config/linux/CMakeLists.txt
index 91135bedcd50..6fdfb8cc555c 100644
--- a/libc/config/linux/CMakeLists.txt
+++ b/libc/config/linux/CMakeLists.txt
@@ -7,7 +7,7 @@ add_gen_header(
   DATA_FILES
     ${LIBC_TARGET_MACHINE}/syscall.h.inc
   DEPENDS
-    support_common_h
+    libc.src.__support.common
 )
 
 add_subdirectory(x86_64)

diff  --git a/libc/fuzzing/string/CMakeLists.txt b/libc/fuzzing/string/CMakeLists.txt
index e70e91c0df99..326bf9c07175 100644
--- a/libc/fuzzing/string/CMakeLists.txt
+++ b/libc/fuzzing/string/CMakeLists.txt
@@ -3,7 +3,7 @@ add_libc_fuzzer(
   SRCS
     strcpy_fuzz.cpp
   DEPENDS
-    strcpy
-    strlen
-    memcpy
+    libc.src.string.memcpy
+    libc.src.string.strcpy
+    libc.src.string.strlen
 )

diff  --git a/libc/include/CMakeLists.txt b/libc/include/CMakeLists.txt
index 8e48a636a8ea..28b7ee0cd51b 100644
--- a/libc/include/CMakeLists.txt
+++ b/libc/include/CMakeLists.txt
@@ -6,25 +6,25 @@ add_header(
 )
 
 add_header(
-  libc_posix_types_h
+  libc_posix_types
   HDR
     __posix-types.h
 )
 
 add_header(
-  ctype_h
+  ctype
   HDR
    ctype.h
   DEPENDS
-    llvm_libc_common_h
+    .llvm_libc_common_h
 )
 
 add_gen_header(
-  math_h
+  math
   DEF_FILE math.h.def
   GEN_HDR math.h
   DEPENDS
-    llvm_libc_common_h
+    .llvm_libc_common_h
 )
 
 add_gen_header(
@@ -32,31 +32,31 @@ add_gen_header(
   DEF_FILE assert.h.def
   GEN_HDR assert.h
   DEPENDS
-    llvm_libc_common_h
+    .llvm_libc_common_h
 )
 
 add_gen_header(
-  string_h
+  string
   DEF_FILE string.h.def
   GEN_HDR string.h
   DEPENDS
-    llvm_libc_common_h
+    .llvm_libc_common_h
 )
 
 add_gen_header(
-  threads_h
+  threads
   DEF_FILE threads.h.def
   GEN_HDR threads.h
   PARAMS
     platform_threads=../config/${LIBC_TARGET_OS}/threads.h.in
   DEPENDS
-    llvm_libc_common_h
+    .llvm_libc_common_h
   DATA_FILES
     ../config/${LIBC_TARGET_OS}/threads.h.in
 )
 
 add_gen_header(
-  errno_h
+  errno
   DEF_FILE errno.h.def
   PARAMS
     platform_errno=../config/${LIBC_TARGET_OS}/errno.h.in
@@ -66,7 +66,7 @@ add_gen_header(
 )
 
 add_gen_header(
-  signal_h
+  signal
   DEF_FILE signal.h.def
   PARAMS
     platform_signal=../config/${LIBC_TARGET_OS}/signal.h.in
@@ -76,11 +76,11 @@ add_gen_header(
 )
 
 add_gen_header(
-  stdlib_h
+  stdlib
   DEF_FILE stdlib.h.def
   GEN_HDR stdlib.h
   DEPENDS
-    llvm_libc_common_h
+    .llvm_libc_common_h
 )
 
 # TODO: Not all platforms will have a include/sys directory. Add the sys
@@ -89,16 +89,16 @@ add_gen_header(
 file(MAKE_DIRECTORY "sys")
 
 add_gen_header(
-  sys_mman_h
+  sys_mman
   DEF_FILE sys/mman.h.def
   GEN_HDR sys/mman.h
   DEPENDS
-    libc_posix_types_h
-    llvm_libc_common_h
+    .libc_posix_types
+    .llvm_libc_common_h
 )
 
 add_gen_header(
-  sys_syscall_h
+  sys_syscall
   DEF_FILE sys/syscall.h.def
   GEN_HDR sys/syscall.h
   PARAMS

diff  --git a/libc/lib/CMakeLists.txt b/libc/lib/CMakeLists.txt
index 748dac161043..79456c938e6e 100644
--- a/libc/lib/CMakeLists.txt
+++ b/libc/lib/CMakeLists.txt
@@ -3,45 +3,45 @@ add_entrypoint_library(
   llvmlibc
   DEPENDS
     # assert.h entrypoints
-    __assert_fail
+    libc.src.assert.__assert_fail
 
     # errno.h entrypoints
-    __errno_location
-
-    # string.h entrypoints
-    strcpy
-    strcat
-    memcpy
-
-    # sys/mman.h entrypoints
-    mmap
-    munmap
+    libc.src.errno.__errno_location
 
     # signal.h entrypoints
-    raise
-    sigaction
-    sigaddset
-    sigemptyset
-    sigprocmask
-    signal
+    libc.src.signal.raise
+    libc.src.signal.sigaction
+    libc.src.signal.sigaddset
+    libc.src.signal.sigemptyset
+    libc.src.signal.sigprocmask
+    libc.src.signal.signal
 
     # stdlib.h entrypoints
-    _Exit
-    abort
+    libc.src.stdlib._Exit
+    libc.src.stdlib.abort
+
+    # string.h entrypoints
+    libc.src.string.memcpy
+    libc.src.string.strcpy
+    libc.src.string.strcat
+
+    # sys/mman.h entrypoints
+    libc.src.sys.mman.mmap
+    libc.src.sys.mman.munmap
 
     # threads.h entrypoints
-    mtx_init
-    mtx_lock
-    mtx_unlock
-    thrd_create
-    thrd_join
+    libc.src.threads.mtx_init
+    libc.src.threads.mtx_lock
+    libc.src.threads.mtx_unlock
+    libc.src.threads.thrd_create
+    libc.src.threads.thrd_join
 )
 
 add_entrypoint_library(
   llvmlibm
   DEPENDS
     # math.h entrypoints
-    round
+    libc.src.math.round
 )
 
 add_redirector_library(

diff  --git a/libc/loader/linux/CMakeLists.txt b/libc/loader/linux/CMakeLists.txt
index 9df1b17f831a..f58603f1f838 100644
--- a/libc/loader/linux/CMakeLists.txt
+++ b/libc/loader/linux/CMakeLists.txt
@@ -1,13 +1,36 @@
 function(add_loader_object name)
   cmake_parse_arguments(
     "ADD_LOADER_OBJECT"
-    ""    # No option arguments
-    "SRC" # Single value arguments
+    "ALIAS" # Option argument
+    "SRC"   # Single value arguments
     "DEPENDS;COMPILE_OPTIONS" # Multi value arguments
     ${ARGN}
   )
+
+  get_fq_target_name(${name} fq_target_name)
+
+  if(ADD_LOADER_OBJECT_ALIAS)
+    list(LENGTH ADD_LOADER_OBJECT_DEPENDS deps_size)
+    if(NOT (${deps_size} EQUAL "1"))
+      message(FATAL_ERROR "A loader object alias should have exactly one dependency.")
+    endif()
+    list(GET ADD_LOADER_OBJECT_DEPENDS 0 dep)
+    get_fq_dep_name(fq_dep_name ${dep})
+
+    add_custom_target(${fq_target_name})
+    add_dependencies(${fq_target_name} ${fq_dep_name})
+    get_target_property(dep_objfile ${fq_dep_name} OBJECT_FILES)
+    set_target_properties(
+      ${fq_target_name}
+      PROPERTIES
+        "TARGET_TYPE" "LOADER_OBJECT"
+        "OBJECT_FILES" ${dep_objfile}
+    )
+    return()
+  endif()
+
   add_object_library(
-    ${name}_object
+    ${name}_objects
     SRCS ${ADD_LOADER_OBJECT_SRC}
     DEPENDS ${ADD_LOADER_OBJECT_DEPENDS}
     COMPILE_OPTIONS ${ADD_LOADER_OBJECT_COMPILE_OPTIONS}
@@ -16,15 +39,15 @@ function(add_loader_object name)
   set(objfile ${LIBC_BUILD_DIR}/lib/${name}.o)
   add_custom_command(
     OUTPUT ${objfile}
-    COMMAND cp $<TARGET_OBJECTS:${name}_object> ${objfile}
-    DEPENDS $<TARGET_OBJECTS:${name}_object>
+    COMMAND cp $<TARGET_OBJECTS:${fq_target_name}_objects> ${objfile}
+    DEPENDS $<TARGET_OBJECTS:${fq_target_name}_objects>
   )
   add_custom_target(
-    ${name}
+    ${fq_target_name}
     DEPENDS ${objfile}
   )
   set_target_properties(
-    ${name}
+    ${fq_target_name}
     PROPERTIES
       "TARGET_TYPE" "LOADER_OBJECT"
       "OBJECT_FILES" ${objfile}
@@ -32,3 +55,10 @@ function(add_loader_object name)
 endfunction()
 
 add_subdirectory(${LIBC_TARGET_MACHINE})
+
+add_loader_object(
+  crt1
+  ALIAS
+  DEPENDS
+    .${LIBC_TARGET_MACHINE}.crt1
+)

diff  --git a/libc/loader/linux/x86_64/CMakeLists.txt b/libc/loader/linux/x86_64/CMakeLists.txt
index e7d7ee563701..aa118167a06a 100644
--- a/libc/loader/linux/x86_64/CMakeLists.txt
+++ b/libc/loader/linux/x86_64/CMakeLists.txt
@@ -3,8 +3,8 @@ add_loader_object(
   SRC
     start.cpp
   DEPENDS
-    linux_syscall_h
-    sys_syscall_h
+    libc.config.linux.linux_syscall_h
+    libc.include.sys_syscall
   COMPILE_OPTIONS
     -fno-omit-frame-pointer
     -ffreestanding # To avoid compiler warnings about calling the main function.

diff  --git a/libc/src/__support/CMakeLists.txt b/libc/src/__support/CMakeLists.txt
index 1db25102a969..c1ee46cd62cf 100644
--- a/libc/src/__support/CMakeLists.txt
+++ b/libc/src/__support/CMakeLists.txt
@@ -1,5 +1,5 @@
 add_gen_header(
-  support_common_h
+  common
   DEF_FILE common.h.def
   PARAMS
     platform_defs=../../config/${LIBC_TARGET_OS}/platfrom_defs.h.inc

diff  --git a/libc/src/assert/CMakeLists.txt b/libc/src/assert/CMakeLists.txt
index 4c39b0f93be2..69c54b505e5c 100644
--- a/libc/src/assert/CMakeLists.txt
+++ b/libc/src/assert/CMakeLists.txt
@@ -5,9 +5,9 @@ add_entrypoint_object(
   HDRS
     assert.h
   DEPENDS
-    abort
     # These two dependencies are temporary and should be replaced by fprintf
     # later.
-    sys_syscall_h
-    linux_syscall_h
+    libc.config.linux.linux_syscall_h
+    libc.include.sys_syscall
+    libc.src.stdlib.abort
 )

diff  --git a/libc/src/signal/CMakeLists.txt b/libc/src/signal/CMakeLists.txt
index d1a13bf1a3f4..2036be12a128 100644
--- a/libc/src/signal/CMakeLists.txt
+++ b/libc/src/signal/CMakeLists.txt
@@ -1,4 +1,59 @@
-
 if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${LIBC_TARGET_OS})
-  add_subdirectory(${LIBC_TARGET_OS})
+  add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/${LIBC_TARGET_OS})
 endif()
+
+add_entrypoint_object(
+  raise
+  ALIAS
+  DEPENDS
+    .${LIBC_TARGET_OS}.raise
+)
+
+add_entrypoint_object(
+  sigaction
+  ALIAS
+  DEPENDS
+    .${LIBC_TARGET_OS}.sigaction
+)
+
+add_entrypoint_object(
+  sigprocmask
+  ALIAS
+  DEPENDS
+    .${LIBC_TARGET_OS}.sigprocmask
+)
+
+add_entrypoint_object(
+  sigemptyset
+  ALIAS
+  DEPENDS
+    .${LIBC_TARGET_OS}.sigemptyset
+)
+
+add_entrypoint_object(
+  sigaddset
+  ALIAS
+  DEPENDS
+    .${LIBC_TARGET_OS}.sigaddset
+)
+
+add_entrypoint_object(
+  signal
+  ALIAS
+  DEPENDS
+    .${LIBC_TARGET_OS}.signal
+)
+
+add_entrypoint_object(
+  sigfillset
+  ALIAS
+  DEPENDS
+    .${LIBC_TARGET_OS}.sigfillset
+)
+
+add_entrypoint_object(
+  sigdelset
+  ALIAS
+  DEPENDS
+    .${LIBC_TARGET_OS}.sigdelset
+)

diff  --git a/libc/src/signal/linux/CMakeLists.txt b/libc/src/signal/linux/CMakeLists.txt
index 0c71f9095a8e..33f50714da0f 100644
--- a/libc/src/signal/linux/CMakeLists.txt
+++ b/libc/src/signal/linux/CMakeLists.txt
@@ -7,9 +7,9 @@ add_entrypoint_object(
     signal.h
     ../raise.h
   DEPENDS
-    sys_syscall_h
-    linux_syscall_h
-    signal_h
+    libc.config.linux.linux_syscall_h
+    libc.include.signal
+    libc.include.sys_syscall
 )
 
 add_object_library(
@@ -25,8 +25,8 @@ add_object_library(
     # asan creates asan.module_ctor which uses stack space, causing warnings.
     -fno-sanitize=address
   DEPENDS
-    linux_syscall_h
-    sys_syscall_h
+    libc.config.linux.linux_syscall_h
+    libc.include.sys_syscall
 )
 
 add_entrypoint_object(
@@ -37,10 +37,10 @@ add_entrypoint_object(
     signal.h
     ../sigaction.h
   DEPENDS
-    __restore
-    sys_syscall_h
-    linux_syscall_h
-    signal_h
+    .__restore
+    libc.config.linux.linux_syscall_h
+    libc.include.signal
+    libc.include.sys_syscall
 )
 
 add_entrypoint_object(
@@ -51,10 +51,10 @@ add_entrypoint_object(
     signal.h
     ../sigprocmask.h
   DEPENDS
-    sys_syscall_h
-    linux_syscall_h
-    __errno_location
-    signal_h
+    libc.config.linux.linux_syscall_h
+    libc.include.signal
+    libc.include.sys_syscall
+    libc.src.errno.__errno_location
 )
 
 add_entrypoint_object(
@@ -65,9 +65,9 @@ add_entrypoint_object(
     signal.h
     ../sigemptyset.h
   DEPENDS
-    __errno_location
-    errno_h
-    signal_h
+    libc.include.errno
+    libc.include.signal
+    libc.src.errno.__errno_location
 )
 
 add_entrypoint_object(
@@ -78,9 +78,9 @@ add_entrypoint_object(
     signal.h
     ../sigaddset.h
   DEPENDS
-    __errno_location
-    errno_h
-    signal_h
+    libc.include.errno
+    libc.include.signal
+    libc.src.errno.__errno_location
 )
 
 add_entrypoint_object(
@@ -91,8 +91,8 @@ add_entrypoint_object(
     signal.h
     ../signal.h
   DEPENDS
-    sigaction
-    signal_h
+    .sigaction
+    libc.include.signal
 )
 
 add_entrypoint_object(
@@ -103,9 +103,9 @@ add_entrypoint_object(
     signal.h
     ../sigfillset.h
   DEPENDS
-    __errno_location
-    errno_h
-    signal_h
+    libc.include.errno
+    libc.include.signal
+    libc.src.errno.__errno_location
 )
 
 add_entrypoint_object(
@@ -116,7 +116,7 @@ add_entrypoint_object(
     signal.h
     ../sigdelset.h
   DEPENDS
-    __errno_location
-    errno_h
-    signal_h
+    libc.include.errno
+    libc.include.signal
+    libc.src.errno.__errno_location
 )

diff  --git a/libc/src/stdlib/CMakeLists.txt b/libc/src/stdlib/CMakeLists.txt
index 52beeb1ab135..50b7421944dd 100644
--- a/libc/src/stdlib/CMakeLists.txt
+++ b/libc/src/stdlib/CMakeLists.txt
@@ -1,7 +1,14 @@
 if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${LIBC_TARGET_OS})
-  add_subdirectory(${LIBC_TARGET_OS})
+  add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/${LIBC_TARGET_OS})
 endif()
 
+add_entrypoint_object(
+  _Exit
+  ALIAS
+  DEPENDS
+    .${LIBC_TARGET_OS}._Exit
+)
+
 add_entrypoint_object(
   abort
   SRCS
@@ -9,7 +16,7 @@ add_entrypoint_object(
   HDRS
     abort.h
   DEPENDS
-    raise
-    _Exit
-    stdlib_h
+    libc.include.stdlib
+    libc.src.signal.raise
+    ._Exit
 )

diff  --git a/libc/src/stdlib/linux/CMakeLists.txt b/libc/src/stdlib/linux/CMakeLists.txt
index 854d45f2ee97..27e00a35c70f 100644
--- a/libc/src/stdlib/linux/CMakeLists.txt
+++ b/libc/src/stdlib/linux/CMakeLists.txt
@@ -5,7 +5,7 @@ add_entrypoint_object(
   HDRS
     ../_Exit.h
   DEPENDS
-    sys_syscall_h
-    linux_syscall_h
-    stdlib_h
+    libc.include.sys_syscall
+    libc.config.linux.linux_syscall_h
+    libc.include.stdlib
 )

diff  --git a/libc/src/string/CMakeLists.txt b/libc/src/string/CMakeLists.txt
index a22298a8cf52..176800f9c30a 100644
--- a/libc/src/string/CMakeLists.txt
+++ b/libc/src/string/CMakeLists.txt
@@ -7,9 +7,9 @@ add_entrypoint_object(
   HDRS
     strcat.h
   DEPENDS
-    strcpy
-    string_h
-    strlen
+    .strcpy
+    .strlen
+    libc.include.string
 )
 
 add_entrypoint_object(
@@ -19,9 +19,9 @@ add_entrypoint_object(
   HDRS
     strcpy.h
   DEPENDS
-    string_h
-    strlen
-    memcpy
+    .memcpy
+    .strlen
+    libc.include.string
 )
 
 add_entrypoint_object(
@@ -31,7 +31,7 @@ add_entrypoint_object(
   HDRS
     strlen.h
   DEPENDS
-    string_h
+    libc.include.string
 )
 
 # ------------------------------------------------------------------------------
@@ -79,18 +79,19 @@ function(add_memcpy 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
+      .memory_utils.memory_utils
+      .memcpy_arch_specific
+      libc.include.string
     COMPILE_OPTIONS
       -fno-builtin-memcpy
       ${flags}
   )
-  set_target_properties(${memcpy_name} PROPERTIES REQUIRE_CPU_FEATURES "${ADD_MEMCPY_REQUIRE}")
+  get_fq_target_name(${memcpy_name} fq_target_name)
+  set_target_properties(${fq_target_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})
+include(${LIBC_MEMCPY_IMPL_FOLDER}/CMakeLists.txt)
 add_memcpy(memcpy MARCH native)

diff  --git a/libc/src/string/memory_utils/CMakeLists.txt b/libc/src/string/memory_utils/CMakeLists.txt
index b826f1f68707..be9e09589b11 100644
--- a/libc/src/string/memory_utils/CMakeLists.txt
+++ b/libc/src/string/memory_utils/CMakeLists.txt
@@ -16,5 +16,5 @@ add_header_library(
     utils.h
     memcpy_utils.h
   DEPENDS
-    cacheline_size
+    .cacheline_size
 )

diff  --git a/libc/src/sys/mman/CMakeLists.txt b/libc/src/sys/mman/CMakeLists.txt
index b4bbe81c92ff..8479d2f7183f 100644
--- a/libc/src/sys/mman/CMakeLists.txt
+++ b/libc/src/sys/mman/CMakeLists.txt
@@ -1,3 +1,17 @@
 if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${LIBC_TARGET_OS})
-  add_subdirectory(${LIBC_TARGET_OS})
+  add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/${LIBC_TARGET_OS})
 endif()
+
+add_entrypoint_object(
+  mmap
+  ALIAS
+  DEPENDS
+    .${LIBC_TARGET_OS}.mmap
+)
+
+add_entrypoint_object(
+  munmap
+  ALIAS
+  DEPENDS
+    .${LIBC_TARGET_OS}.munmap
+)

diff  --git a/libc/src/sys/mman/linux/CMakeLists.txt b/libc/src/sys/mman/linux/CMakeLists.txt
index 527da6471900..7bf7c2f96d2d 100644
--- a/libc/src/sys/mman/linux/CMakeLists.txt
+++ b/libc/src/sys/mman/linux/CMakeLists.txt
@@ -5,10 +5,10 @@ add_entrypoint_object(
   HDRS
     ../mmap.h
   DEPENDS
-    sys_mman_h
-    sys_syscall_h
-    linux_syscall_h
-    __errno_location
+    libc.config.linux.linux_syscall_h
+    libc.include.sys_mman
+    libc.include.sys_syscall
+    libc.src.errno.__errno_location
 )
 
 add_entrypoint_object(
@@ -18,8 +18,8 @@ add_entrypoint_object(
   HDRS
     ../munmap.h
   DEPENDS
-    sys_mman_h
-    sys_syscall_h
-    linux_syscall_h
-    __errno_location
+    libc.config.linux.linux_syscall_h
+    libc.include.sys_mman
+    libc.include.sys_syscall
+    libc.src.errno.__errno_location
 )

diff  --git a/libc/src/threads/CMakeLists.txt b/libc/src/threads/CMakeLists.txt
index b4bbe81c92ff..966e41ec9d55 100644
--- a/libc/src/threads/CMakeLists.txt
+++ b/libc/src/threads/CMakeLists.txt
@@ -1,3 +1,38 @@
 if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${LIBC_TARGET_OS})
   add_subdirectory(${LIBC_TARGET_OS})
 endif()
+
+add_entrypoint_object(
+  thrd_create
+  ALIAS
+  DEPENDS
+    .${LIBC_TARGET_OS}.thrd_create
+)
+
+add_entrypoint_object(
+  thrd_join
+  ALIAS
+  DEPENDS
+    .${LIBC_TARGET_OS}.thrd_join
+)
+
+add_entrypoint_object(
+  mtx_init
+  ALIAS
+  DEPENDS
+    .${LIBC_TARGET_OS}.mtx_init
+)
+
+add_entrypoint_object(
+  mtx_lock
+  ALIAS
+  DEPENDS
+    .${LIBC_TARGET_OS}.mtx_lock
+)
+
+add_entrypoint_object(
+  mtx_unlock
+  ALIAS
+  DEPENDS
+    .${LIBC_TARGET_OS}.mtx_unlock
+)

diff  --git a/libc/src/threads/linux/CMakeLists.txt b/libc/src/threads/linux/CMakeLists.txt
index cace4cc19be3..844f5d3e07cf 100644
--- a/libc/src/threads/linux/CMakeLists.txt
+++ b/libc/src/threads/linux/CMakeLists.txt
@@ -13,7 +13,7 @@ add_header_library(
   HDRS
     thread_utils.h
   DEPENDS
-    thread_start_args_h
+    .thread_start_args_h
 )
 
 add_entrypoint_object(
@@ -23,14 +23,14 @@ add_entrypoint_object(
   HDRS
     ../thrd_create.h
   DEPENDS
-    errno_h
-    linux_syscall_h
-    mmap
-    support_common_h
-    sys_syscall_h
-    threads_h
-    threads_utils
-    __errno_location
+    .threads_utils
+    libc.config.linux.linux_syscall_h
+    libc.include.errno
+    libc.include.sys_syscall
+    libc.include.threads
+    libc.src.__support.common
+    libc.src.errno.__errno_location
+    libc.src.sys.mman.mmap
   COMPILE_OPTIONS
     -fno-omit-frame-pointer # This allows us to sniff out the thread args from
                             # the new thread's stack reliably.
@@ -43,12 +43,12 @@ add_entrypoint_object(
   HDRS
     ../thrd_join.h
   DEPENDS
-    linux_syscall_h
-    munmap
-    support_common_h
-    sys_syscall_h
-    threads_h
-    threads_utils
+    .threads_utils
+    libc.config.linux.linux_syscall_h
+    libc.include.sys_syscall
+    libc.include.threads
+    libc.src.sys.mman.mmap
+    libc.src.__support.common
 )
 
 add_entrypoint_object(
@@ -58,8 +58,8 @@ add_entrypoint_object(
   HDRS
     ../mtx_init.h
   DEPENDS
-    threads_h
-    threads_utils
+    .threads_utils
+    libc.include.threads
 )
 
 add_entrypoint_object(
@@ -69,10 +69,10 @@ add_entrypoint_object(
   HDRS
     ../mtx_lock.h
   DEPENDS
-    linux_syscall_h
-    sys_syscall_h
-    threads_h
-    threads_utils
+    .threads_utils
+    libc.config.linux.linux_syscall_h
+    libc.include.sys_syscall
+    libc.include.threads
 )
 
 add_entrypoint_object(
@@ -82,8 +82,8 @@ add_entrypoint_object(
   HDRS
     ../mtx_unlock.h
   DEPENDS
-    linux_syscall_h
-    sys_syscall_h
-    threads_h
-    threads_utils
+    .threads_utils
+    libc.config.linux.linux_syscall_h
+    libc.include.sys_syscall
+    libc.include.threads
 )

diff  --git a/libc/test/config/linux/x86_64/CMakeLists.txt b/libc/test/config/linux/x86_64/CMakeLists.txt
index 23f82b27c9bd..0436736eefd0 100644
--- a/libc/test/config/linux/x86_64/CMakeLists.txt
+++ b/libc/test/config/linux/x86_64/CMakeLists.txt
@@ -3,6 +3,5 @@ add_libc_unittest(
   SUITE libc_linux_tests
   SRCS syscall_test.cpp
   DEPENDS
-   linux_syscall_h
-   support_common_h
+   libc.config.linux.linux_syscall_h
 )

diff  --git a/libc/test/loader/CMakeLists.txt b/libc/test/loader/CMakeLists.txt
index 2918d22193ff..457c7a83ebb8 100644
--- a/libc/test/loader/CMakeLists.txt
+++ b/libc/test/loader/CMakeLists.txt
@@ -20,18 +20,20 @@ function(add_loader_test target_name)
     ${ARGN}
   )
 
+  get_fq_target_name(${target_name} fq_target_name)
   add_executable(
-    ${target_name}
+    ${fq_target_name}
     EXCLUDE_FROM_ALL
     ${ADD_LOADER_TEST_SRC}
   )
 
-  set_target_properties(${target_name} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+  set_target_properties(${fq_target_name} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
 
   set(dep_objects "")
   if(ADD_LOADER_TEST_DEPENDS)
-    add_dependencies(${target_name} ${ADD_LOADER_TEST_DEPENDS})
-    foreach(dep IN LISTS ADD_LOADER_TEST_DEPENDS)
+    get_fq_deps_list(fq_deps_list ${ADD_LOADER_TEST_DEPENDS})
+    add_dependencies(${fq_target_name} ${fq_deps_list})
+    foreach(dep IN LISTS fq_deps_list)
       get_target_property(objfile ${dep} "OBJECT_FILES")
       if(NOT objfile)
         message(
@@ -45,28 +47,28 @@ function(add_loader_test target_name)
   endif()
 
   target_include_directories(
-    ${target_name}
+    ${fq_target_name}
     PRIVATE
       ${LIBC_SOURCE_DIR}
       ${LIBC_BUILD_DIR}
       ${LIBC_BUILD_DIR}/include
   )
 
-  target_link_libraries(${target_name} ${dep_objects})
+  target_link_libraries(${fq_target_name} ${dep_objects})
 
   target_link_options(
-    ${target_name}
+    ${fq_target_name}
     BEFORE PRIVATE
     -nostdlib
   )
 
   add_custom_command(
-    TARGET ${target_name}
+    TARGET ${fq_target_name}
     POST_BUILD
-    COMMAND ${ADD_LOADER_TEST_ENV} $<TARGET_FILE:${target_name}> ${ADD_LOADER_TEST_ARGS}
+    COMMAND ${ADD_LOADER_TEST_ENV} $<TARGET_FILE:${fq_target_name}> ${ADD_LOADER_TEST_ARGS}
   )
 
-  add_dependencies(libc_loader_tests ${target_name})
+  add_dependencies(libc_loader_tests ${fq_target_name})
 endfunction(add_loader_test)
 
 if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${LIBC_TARGET_OS})

diff  --git a/libc/test/loader/linux/CMakeLists.txt b/libc/test/loader/linux/CMakeLists.txt
index 004d1673cff7..887f9efe603a 100644
--- a/libc/test/loader/linux/CMakeLists.txt
+++ b/libc/test/loader/linux/CMakeLists.txt
@@ -3,11 +3,11 @@ add_loader_test(
   SRC
     args_test.cpp
   DEPENDS
-    __assert_fail
-    _Exit
-    abort
-    crt1
-    raise
+    libc.loader.linux.crt1
+    libc.src.assert.__assert_fail
+    libc.src.signal.raise
+    libc.src.stdlib._Exit
+    libc.src.stdlib.abort
   ARGS
     1 2 3
   ENV
@@ -20,7 +20,7 @@ add_loader_test(
   SRC
     main_without_envp.cpp
   DEPENDS
-    crt1
+    libc.loader.linux.crt1
 )
 
 add_loader_test(
@@ -28,5 +28,5 @@ add_loader_test(
   SRC
     main_without_args.cpp
   DEPENDS
-    crt1
+    libc.loader.linux.crt1
 )

diff  --git a/libc/test/src/assert/CMakeLists.txt b/libc/test/src/assert/CMakeLists.txt
index c79c76c4c2e4..f67223091027 100644
--- a/libc/test/src/assert/CMakeLists.txt
+++ b/libc/test/src/assert/CMakeLists.txt
@@ -7,9 +7,9 @@ add_libc_unittest(
   SRCS
     assert_test.cpp
   DEPENDS
-    __assert_fail
+    libc.src.assert.__assert_fail
     # These are necessary for now because dependencies are not properly added.
-    abort
-    raise
-    _Exit
+    libc.src.signal.raise
+    libc.src.stdlib._Exit
+    libc.src.stdlib.abort
 )

diff  --git a/libc/test/src/errno/CMakeLists.txt b/libc/test/src/errno/CMakeLists.txt
index 1e361790e20a..61a3094ea021 100644
--- a/libc/test/src/errno/CMakeLists.txt
+++ b/libc/test/src/errno/CMakeLists.txt
@@ -7,5 +7,5 @@ add_libc_unittest(
   SRCS
     errno_test.cpp
   DEPENDS
-    __errno_location
+    libc.src.errno.__errno_location
 )

diff  --git a/libc/test/src/signal/CMakeLists.txt b/libc/test/src/signal/CMakeLists.txt
index 67219c85227a..2a9dce860f6e 100644
--- a/libc/test/src/signal/CMakeLists.txt
+++ b/libc/test/src/signal/CMakeLists.txt
@@ -7,8 +7,8 @@ add_libc_unittest(
   SRCS
     raise_test.cpp
   DEPENDS
-    raise
-    signal_h
+    libc.include.signal
+    libc.src.signal.raise
 )
 
 add_libc_unittest(
@@ -18,11 +18,11 @@ add_libc_unittest(
   SRCS
     sigaction_test.cpp
   DEPENDS
-    sigaction
-    raise
-    signal_h
-    errno_h
-    __errno_location
+    libc.src.signal.sigaction
+    libc.src.signal.raise
+    libc.include.signal
+    libc.include.errno
+    libc.src.errno.__errno_location
 )
 
 add_libc_unittest(
@@ -32,12 +32,12 @@ add_libc_unittest(
   SRCS
     sigprocmask_test.cpp
   DEPENDS
-    raise
-    sigprocmask
-    sigaddset
-    sigemptyset
-    signal_h
-    __errno_location
+    libc.include.signal
+    libc.src.errno.__errno_location
+    libc.src.signal.raise
+    libc.src.signal.sigprocmask
+    libc.src.signal.sigaddset
+    libc.src.signal.sigemptyset
 )
 
 add_libc_unittest(
@@ -47,9 +47,9 @@ add_libc_unittest(
   SRCS
     sigaddset_test.cpp
   DEPENDS
-    sigaddset
-    signal_h
-    __errno_location
+    libc.include.signal
+    libc.src.errno.__errno_location
+    libc.src.signal.sigaddset
 )
 
 add_libc_unittest(
@@ -59,12 +59,12 @@ add_libc_unittest(
   SRCS
     signal_test.cpp
   DEPENDS
-    signal
-    signal_h
-    sigaction
-    raise
-    __errno_location
-    errno_h
+    libc.include.errno
+    libc.include.signal
+    libc.src.errno.__errno_location
+    libc.src.signal.raise
+    libc.src.signal.sigaction
+    libc.src.signal.signal
 )
 
 add_libc_unittest(
@@ -74,12 +74,12 @@ add_libc_unittest(
   SRCS
     sigfillset_test.cpp
   DEPENDS
-    sigfillset
-    sigprocmask
-    signal_h
-    raise
-    errno_h
-    __errno_location
+    libc.include.errno
+    libc.include.signal
+    libc.src.errno.__errno_location
+    libc.src.signal.raise
+    libc.src.signal.sigfillset
+    libc.src.signal.sigprocmask
 )
 
 add_libc_unittest(
@@ -89,11 +89,11 @@ add_libc_unittest(
   SRCS
     sigdelset_test.cpp
   DEPENDS
-    sigdelset
-    sigfillset
-    sigprocmask
-    signal_h
-    raise
-    errno_h
-    __errno_location
+    libc.include.errno
+    libc.include.signal
+    libc.src.errno.__errno_location
+    libc.src.signal.raise
+    libc.src.signal.sigdelset
+    libc.src.signal.sigfillset
+    libc.src.signal.sigprocmask
 )

diff  --git a/libc/test/src/stdlib/CMakeLists.txt b/libc/test/src/stdlib/CMakeLists.txt
index 6588d457e9a9..06adaa2a9954 100644
--- a/libc/test/src/stdlib/CMakeLists.txt
+++ b/libc/test/src/stdlib/CMakeLists.txt
@@ -7,8 +7,8 @@ add_libc_unittest(
   SRCS
     _Exit_test.cpp
   DEPENDS
-    stdlib_h
-    _Exit
+    libc.include.stdlib
+    libc.src.stdlib._Exit
 )
 
 add_libc_unittest(
@@ -18,9 +18,9 @@ add_libc_unittest(
   SRCS
     abort_test.cpp
   DEPENDS
-    stdlib_h
-    signal_h
-    abort
-    _Exit
-    raise
+    libc.include.stdlib
+    libc.include.signal
+    libc.src.stdlib.abort
+    libc.src.stdlib._Exit
+    libc.src.signal.raise
 )

diff  --git a/libc/test/src/string/CMakeLists.txt b/libc/test/src/string/CMakeLists.txt
index fe15145348cd..6ba4b91f457f 100644
--- a/libc/test/src/string/CMakeLists.txt
+++ b/libc/test/src/string/CMakeLists.txt
@@ -9,11 +9,11 @@ add_libc_unittest(
   SRCS
     strcat_test.cpp
   DEPENDS
-    strcat
-    strcpy
-    strlen
-# TODO (sivachandra): remove redundant deps.
-    memcpy
+    # TODO (sivachandra): remove redundant deps.
+    libc.src.string.memcpy
+    libc.src.string.strcat
+    libc.src.string.strcpy
+    libc.src.string.strlen
 )
 
 add_libc_unittest(
@@ -23,10 +23,10 @@ add_libc_unittest(
   SRCS
     strcpy_test.cpp
   DEPENDS
-    strcpy
-    strlen
-# TODO (sivachandra): remove redundant deps.
-    memcpy
+    # TODO (sivachandra): remove redundant deps.
+    libc.src.string.memcpy
+    libc.src.string.strcpy
+    libc.src.string.strlen
 )
 
 add_libc_unittest(
@@ -36,13 +36,13 @@ add_libc_unittest(
   SRCS
     strlen_test.cpp
   DEPENDS
-    strlen
+    libc.src.string.strlen
 )
 
 # Tests all implementations of memcpy that can run on the host.
 get_property(memcpy_implementations GLOBAL PROPERTY memcpy_implementations)
 foreach(memcpy_config_name IN LISTS memcpy_implementations)
-  get_target_property(require_cpu_features ${memcpy_config_name} REQUIRE_CPU_FEATURES)
+  get_target_property(require_cpu_features libc.src.string.${memcpy_config_name} REQUIRE_CPU_FEATURES)
   host_supports(can_run "${require_cpu_features}")
   if(can_run)
     add_libc_unittest(
@@ -52,7 +52,7 @@ foreach(memcpy_config_name IN LISTS memcpy_implementations)
       SRCS
         memcpy_test.cpp
       DEPENDS
-        ${memcpy_config_name}
+        libc.src.string.${memcpy_config_name}
     )
   else()
     message(STATUS "Skipping test for '${memcpy_config_name}' insufficient host cpu features")

diff  --git a/libc/test/src/string/memory_utils/CMakeLists.txt b/libc/test/src/string/memory_utils/CMakeLists.txt
index c02fa865fcaa..068a9ec18035 100644
--- a/libc/test/src/string/memory_utils/CMakeLists.txt
+++ b/libc/test/src/string/memory_utils/CMakeLists.txt
@@ -6,12 +6,12 @@ add_libc_unittest(
     utils_test.cpp
     memcpy_utils_test.cpp
   DEPENDS
-    memory_utils
-    standalone_cpp
+    libc.src.string.memory_utils.memory_utils
+    libc.utils.CPP.standalone_cpp
 )
 
 target_compile_definitions(
-  utils_test
+  libc.test.src.string.memory_utils.utils_test
   PRIVATE
   LLVM_LIBC_MEMCPY_MONITOR=memcpy_monitor
 )

diff  --git a/libc/test/src/sys/mman/linux/CMakeLists.txt b/libc/test/src/sys/mman/linux/CMakeLists.txt
index 3fcc8fff3c29..3c53e4b60107 100644
--- a/libc/test/src/sys/mman/linux/CMakeLists.txt
+++ b/libc/test/src/sys/mman/linux/CMakeLists.txt
@@ -7,9 +7,9 @@ add_libc_unittest(
   SRCS
     mmap_test.cpp
   DEPENDS
-    errno_h
-    sys_mman_h
-    mmap
-    munmap
-    __errno_location
+    libc.include.errno
+    libc.include.sys_mman
+    libc.src.errno.__errno_location
+    libc.src.sys.mman.mmap
+    libc.src.sys.mman.munmap
 )

diff  --git a/libc/test/src/threads/CMakeLists.txt b/libc/test/src/threads/CMakeLists.txt
index 75831159201b..de56a3f031ba 100644
--- a/libc/test/src/threads/CMakeLists.txt
+++ b/libc/test/src/threads/CMakeLists.txt
@@ -7,12 +7,12 @@ add_libc_unittest(
   SRCS
     thrd_test.cpp
   DEPENDS
-    __errno_location
-    mmap
-    munmap
-    threads_h
-    thrd_create
-    thrd_join
+    libc.include.threads
+    libc.src.errno.__errno_location
+    libc.src.sys.mman.munmap
+    libc.src.sys.mman.mmap
+    libc.src.threads.thrd_create
+    libc.src.threads.thrd_join
 )
 
 add_libc_unittest(
@@ -22,13 +22,13 @@ add_libc_unittest(
   SRCS
     mtx_test.cpp
   DEPENDS
-    __errno_location
-    mmap
-    munmap
-    mtx_init
-    mtx_lock
-    mtx_unlock
-    thrd_create
-    thrd_join
-    threads_h
+    libc.include.threads
+    libc.src.errno.__errno_location
+    libc.src.sys.mman.mmap
+    libc.src.sys.mman.munmap
+    libc.src.threads.mtx_init
+    libc.src.threads.mtx_lock
+    libc.src.threads.mtx_unlock
+    libc.src.threads.thrd_create
+    libc.src.threads.thrd_join
 )

diff  --git a/libc/utils/UnitTest/CMakeLists.txt b/libc/utils/UnitTest/CMakeLists.txt
index 85630075582d..0837f3d8895f 100644
--- a/libc/utils/UnitTest/CMakeLists.txt
+++ b/libc/utils/UnitTest/CMakeLists.txt
@@ -6,5 +6,5 @@ add_llvm_library(
   LINK_COMPONENTS Support
 )
 target_include_directories(LibcUnitTest PUBLIC ${LIBC_SOURCE_DIR})
-add_dependencies(LibcUnitTest standalone_cpp)
+add_dependencies(LibcUnitTest libc.utils.CPP.standalone_cpp)
 target_link_libraries(LibcUnitTest PUBLIC libc_test_utils)


        


More information about the libc-commits mailing list