[libc-commits] [libc] 545f4d9 - [libc] Remove recursion in get_object_files_for_test to improve build time. (#72351)
via libc-commits
libc-commits at lists.llvm.org
Thu Nov 16 05:55:55 PST 2023
Author: lntue
Date: 2023-11-16T08:55:51-05:00
New Revision: 545f4d985514d52dcdc0622a4b6ecc5c71b345aa
URL: https://github.com/llvm/llvm-project/commit/545f4d985514d52dcdc0622a4b6ecc5c71b345aa
DIFF: https://github.com/llvm/llvm-project/commit/545f4d985514d52dcdc0622a4b6ecc5c71b345aa.diff
LOG: [libc] Remove recursion in get_object_files_for_test to improve build time. (#72351)
Added:
Modified:
libc/cmake/modules/LLVMLibCTestRules.cmake
Removed:
################################################################################
diff --git a/libc/cmake/modules/LLVMLibCTestRules.cmake b/libc/cmake/modules/LLVMLibCTestRules.cmake
index f7ca6a2e7021141..6cae0859149d54c 100644
--- a/libc/cmake/modules/LLVMLibCTestRules.cmake
+++ b/libc/cmake/modules/LLVMLibCTestRules.cmake
@@ -15,48 +15,59 @@
function(get_object_files_for_test result skipped_entrypoints_list)
set(object_files "")
set(skipped_list "")
- foreach(dep IN LISTS ARGN)
- if (NOT TARGET ${dep})
- # Skip any tests whose dependencies have not been defined.
- list(APPEND skipped_list ${dep})
- continue()
- endif()
- get_target_property(dep_type ${dep} "TARGET_TYPE")
- if(NOT dep_type)
- # Target for which TARGET_TYPE property is not set do not
- # provide any object files.
- continue()
- endif()
+ set(checked_list "")
+ set(unchecked_list "${ARGN}")
+ list(REMOVE_DUPLICATES unchecked_list)
+ list(LENGTH unchecked_list length)
- if(${dep_type} STREQUAL ${OBJECT_LIBRARY_TARGET_TYPE})
- get_target_property(dep_object_files ${dep} "OBJECT_FILES")
- if(dep_object_files)
- list(APPEND object_files ${dep_object_files})
- endif()
- elseif(${dep_type} STREQUAL ${ENTRYPOINT_OBJ_TARGET_TYPE})
- get_target_property(is_skipped ${dep} "SKIPPED")
- if(is_skipped)
+ while(length)
+ set(indirect_list "")
+
+ foreach(dep IN LISTS unchecked_list)
+ if (NOT TARGET ${dep})
+ # Skip tests with undefined dependencies.
list(APPEND skipped_list ${dep})
continue()
endif()
- get_target_property(object_file_raw ${dep} "OBJECT_FILE_RAW")
- if(object_file_raw)
- list(APPEND object_files ${object_file_raw})
+ get_target_property(dep_type ${dep} "TARGET_TYPE")
+ if(NOT dep_type)
+ # Skip tests with no object dependencies.
+ continue()
endif()
- elseif(${dep_type} STREQUAL ${ENTRYPOINT_OBJ_VENDOR_TARGET_TYPE})
- # We skip tests for all externally implemented entrypoints.
- list(APPEND skipped_list ${dep})
- continue()
- endif()
- get_target_property(indirect_deps ${dep} "DEPS")
- get_object_files_for_test(
- indirect_objfiles indirect_skipped_list ${indirect_deps})
- list(APPEND object_files ${indirect_objfiles})
- if(indirect_skipped_list)
- list(APPEND skipped_list ${indirect_skipped_list})
- endif()
- endforeach(dep)
+ if(${dep_type} STREQUAL ${OBJECT_LIBRARY_TARGET_TYPE})
+ get_target_property(dep_object_files ${dep} "OBJECT_FILES")
+ if(dep_object_files)
+ list(APPEND object_files ${dep_object_files})
+ endif()
+ elseif(${dep_type} STREQUAL ${ENTRYPOINT_OBJ_TARGET_TYPE})
+ get_target_property(is_skipped ${dep} "SKIPPED")
+ if(is_skipped)
+ list(APPEND skipped_list ${dep})
+ continue()
+ endif()
+ get_target_property(object_file_raw ${dep} "OBJECT_FILE_RAW")
+ if(object_file_raw)
+ list(APPEND object_files ${object_file_raw})
+ endif()
+ elseif(${dep_type} STREQUAL ${ENTRYPOINT_OBJ_VENDOR_TARGET_TYPE})
+ # Skip tests for externally implemented entrypoints.
+ list(APPEND skipped_list ${dep})
+ continue()
+ endif()
+
+ get_target_property(indirect_deps ${dep} "DEPS")
+ list(APPEND indirect_list "${indirect_deps}")
+ endforeach(dep)
+
+ # Only add new indirect dependencies to check.
+ list(APPEND checked_list "${unchecked_list}")
+ list(REMOVE_DUPLICATES indirect_list)
+ list(REMOVE_ITEM indirect_list checked_list)
+ set(unchecked_list "${indirect_list}")
+ list(LENGTH unchecked_list length)
+ endwhile()
+
list(REMOVE_DUPLICATES object_files)
set(${result} ${object_files} PARENT_SCOPE)
list(REMOVE_DUPLICATES skipped_list)
More information about the libc-commits
mailing list