diff --git a/libc/cmake/modules/LLVMLibCLibraryRules.cmake b/libc/cmake/modules/LLVMLibCLibraryRules.cmake --- a/libc/cmake/modules/LLVMLibCLibraryRules.cmake +++ b/libc/cmake/modules/LLVMLibCLibraryRules.cmake @@ -75,7 +75,9 @@ set(all_deps "") foreach(dep IN LISTS fq_deps_list) get_target_property(dep_type ${dep} "TARGET_TYPE") - if(NOT ((${dep_type} STREQUAL ${ENTRYPOINT_OBJ_TARGET_TYPE}) OR (${dep_type} STREQUAL ${ENTRYPOINT_EXT_TARGET_TYPE}))) + if(NOT ((${dep_type} STREQUAL ${ENTRYPOINT_OBJ_TARGET_TYPE}) OR + (${dep_type} STREQUAL ${ENTRYPOINT_EXT_TARGET_TYPE}) OR + (${dep_type} STREQUAL ${ENTRYPOINT_OBJ_VENDOR_TARGET_TYPE}))) message(FATAL_ERROR "Dependency '${dep}' of 'add_entrypoint_collection' is " "not an 'add_entrypoint_object' or 'add_entrypoint_external' target.") endif() diff --git a/libc/cmake/modules/LLVMLibCObjectRules.cmake b/libc/cmake/modules/LLVMLibCObjectRules.cmake --- a/libc/cmake/modules/LLVMLibCObjectRules.cmake +++ b/libc/cmake/modules/LLVMLibCObjectRules.cmake @@ -492,6 +492,7 @@ endfunction(add_object_library) set(ENTRYPOINT_OBJ_TARGET_TYPE "ENTRYPOINT_OBJ") +set(ENTRYPOINT_OBJ_VENDOR_TARGET_TYPE "ENTRYPOINT_OBJ_VENDOR") # A rule for entrypoint object targets. # Usage: @@ -509,12 +510,20 @@ function(create_entrypoint_object fq_target_name) cmake_parse_arguments( "ADD_ENTRYPOINT_OBJ" - "ALIAS;REDIRECTED" # Optional argument + "ALIAS;REDIRECTED;VENDOR" # Optional argument "NAME;CXX_STANDARD" # Single value arguments "SRCS;HDRS;DEPENDS;COMPILE_OPTIONS;FLAGS" # Multi value arguments ${ARGN} ) + set(entrypoint_target_type ${ENTRYPOINT_OBJ_TARGET_TYPE}) + if(${ADD_ENTRYPOINT_OBJ_VENDOR}) + # TODO: We currently rely on external definitions of certain math functions + # provided by GPU vendors like AMD or Nvidia. We need to mark these so we + # don't end up running tests on these. In the future all of these should be + # implemented and this can be removed. + set(entrypoint_target_type ${ENTRYPOINT_OBJ_VENDOR_TARGET_TYPE}) + endif() list(FIND TARGET_ENTRYPOINT_NAME_LIST ${ADD_ENTRYPOINT_OBJ_NAME} entrypoint_name_index) if(${entrypoint_name_index} EQUAL -1) add_custom_target(${fq_target_name}) @@ -522,7 +531,7 @@ ${fq_target_name} PROPERTIES "ENTRYPOINT_NAME" ${ADD_ENTRYPOINT_OBJ_NAME} - "TARGET_TYPE" ${ENTRYPOINT_OBJ_TARGET_TYPE} + "TARGET_TYPE" ${entrypoint_target_type} "OBJECT_FILE" "" "OBJECT_FILE_RAW" "" "DEPS" "" @@ -556,7 +565,8 @@ endif() get_target_property(obj_type ${fq_dep_name} "TARGET_TYPE") - if((NOT obj_type) OR (NOT (${obj_type} STREQUAL ${ENTRYPOINT_OBJ_TARGET_TYPE}))) + if((NOT obj_type) OR (NOT (${obj_type} STREQUAL ${ENTRYPOINT_OBJ_TARGET_TYPE} OR + ${obj_type} STREQUAL ${ENTRYPOINT_OBJ_VENDOR_TARGET_TYPE}))) message(FATAL_ERROR "The aliasee of an entrypoint alias should be an entrypoint.") endif() @@ -568,7 +578,7 @@ ${fq_target_name} PROPERTIES ENTRYPOINT_NAME ${ADD_ENTRYPOINT_OBJ_NAME} - TARGET_TYPE ${ENTRYPOINT_OBJ_TARGET_TYPE} + TARGET_TYPE ${entrypoint_target_type} IS_ALIAS "YES" OBJECT_FILE "" OBJECT_FILE_RAW "" diff --git a/libc/cmake/modules/LLVMLibCTestRules.cmake b/libc/cmake/modules/LLVMLibCTestRules.cmake --- a/libc/cmake/modules/LLVMLibCTestRules.cmake +++ b/libc/cmake/modules/LLVMLibCTestRules.cmake @@ -43,6 +43,10 @@ if(object_file_raw) list(APPEND object_files ${object_file_raw}) 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") diff --git a/libc/src/math/CMakeLists.txt b/libc/src/math/CMakeLists.txt --- a/libc/src/math/CMakeLists.txt +++ b/libc/src/math/CMakeLists.txt @@ -27,6 +27,7 @@ ALIAS DEPENDS .${LIBC_TARGET_ARCHITECTURE}.vendor.${name} + VENDOR ) return() endif() diff --git a/libc/src/math/gpu/CMakeLists.txt b/libc/src/math/gpu/CMakeLists.txt --- a/libc/src/math/gpu/CMakeLists.txt +++ b/libc/src/math/gpu/CMakeLists.txt @@ -431,4 +431,4 @@ ../truncf.h COMPILE_OPTIONS -O2 -) \ No newline at end of file +) diff --git a/libc/src/math/gpu/vendor/CMakeLists.txt b/libc/src/math/gpu/vendor/CMakeLists.txt --- a/libc/src/math/gpu/vendor/CMakeLists.txt +++ b/libc/src/math/gpu/vendor/CMakeLists.txt @@ -467,4 +467,4 @@ COMPILE_OPTIONS ${bitcode_link_flags} -O2 -) \ No newline at end of file +)