diff options
| -rw-r--r-- | compiler-rt/cmake/Modules/CompilerRTDarwinUtils.cmake | 35 | ||||
| -rw-r--r-- | compiler-rt/cmake/Modules/CompilerRTUtils.cmake | 29 | ||||
| -rw-r--r-- | compiler-rt/lib/builtins/CMakeLists.txt | 12 | 
3 files changed, 38 insertions, 38 deletions
diff --git a/compiler-rt/cmake/Modules/CompilerRTDarwinUtils.cmake b/compiler-rt/cmake/Modules/CompilerRTDarwinUtils.cmake index f646975475b..7fdb111fe78 100644 --- a/compiler-rt/cmake/Modules/CompilerRTDarwinUtils.cmake +++ b/compiler-rt/cmake/Modules/CompilerRTDarwinUtils.cmake @@ -243,35 +243,6 @@ function(darwin_lipo_libs name)    endif()  endfunction() -# Filter out generic versions of routines that are re-implemented in -# architecture specific manner.  This prevents multiple definitions of the -# same symbols, making the symbol selection non-deterministic. -function(darwin_filter_builtin_sources output_var exclude_or_include excluded_list) -  if(exclude_or_include STREQUAL "EXCLUDE") -    set(filter_action GREATER) -    set(filter_value -1) -  elseif(exclude_or_include STREQUAL "INCLUDE") -    set(filter_action LESS) -    set(filter_value 0) -  else() -    message(FATAL_ERROR "darwin_filter_builtin_sources called without EXCLUDE|INCLUDE") -  endif() - -  set(intermediate ${ARGN}) -  foreach (_file ${intermediate}) -    get_filename_component(_name_we ${_file} NAME_WE) -    list(FIND ${excluded_list} ${_name_we} _found) -    if(_found ${filter_action} ${filter_value}) -      list(REMOVE_ITEM intermediate ${_file}) -    elseif(${_file} MATCHES ".*/.*\\.S" OR ${_file} MATCHES ".*/.*\\.c") -      get_filename_component(_name ${_file} NAME) -      string(REPLACE ".S" ".c" _cname "${_name}") -      list(REMOVE_ITEM intermediate ${_cname}) -    endif () -  endforeach () -  set(${output_var} ${intermediate} PARENT_SCOPE) -endfunction() -  # Generates builtin libraries for all operating systems specified in ARGN. Each  # OS library is constructed by lipo-ing together single-architecture libraries.  macro(darwin_add_builtin_libraries) @@ -294,7 +265,7 @@ macro(darwin_add_builtin_libraries)                                ARCH ${arch}                                MIN_VERSION ${DARWIN_${os}_BUILTIN_MIN_VER}) -      darwin_filter_builtin_sources(filtered_sources +      filter_builtin_sources(filtered_sources          EXCLUDE ${arch}_${os}_EXCLUDED_BUILTINS          ${${arch}_SOURCES}) @@ -316,7 +287,7 @@ macro(darwin_add_builtin_libraries)                                OS ${os}                                ARCH ${arch}) -        darwin_filter_builtin_sources(filtered_sources +        filter_builtin_sources(filtered_sources            EXCLUDE ${arch}_${os}_EXCLUDED_BUILTINS            ${${arch}_SOURCES}) @@ -411,7 +382,7 @@ macro(darwin_add_embedded_builtin_libraries)      set(x86_64_FUNCTIONS ${common_FUNCTIONS})      foreach(arch ${DARWIN_macho_embedded_ARCHS}) -      darwin_filter_builtin_sources(${arch}_filtered_sources +      filter_builtin_sources(${arch}_filtered_sources          INCLUDE ${arch}_FUNCTIONS          ${${arch}_SOURCES})        if(NOT ${arch}_filtered_sources) diff --git a/compiler-rt/cmake/Modules/CompilerRTUtils.cmake b/compiler-rt/cmake/Modules/CompilerRTUtils.cmake index 36df49fccdf..63b225260cc 100644 --- a/compiler-rt/cmake/Modules/CompilerRTUtils.cmake +++ b/compiler-rt/cmake/Modules/CompilerRTUtils.cmake @@ -270,3 +270,32 @@ macro(construct_compiler_rt_default_triple)      set(COMPILER_RT_HAS_EXPLICIT_DEFAULT_TARGET_TRIPLE FALSE)    endif()  endmacro() + +# Filter out generic versions of routines that are re-implemented in +# architecture specific manner.  This prevents multiple definitions of the +# same symbols, making the symbol selection non-deterministic. +function(filter_builtin_sources output_var exclude_or_include excluded_list) +  if(exclude_or_include STREQUAL "EXCLUDE") +    set(filter_action GREATER) +    set(filter_value -1) +  elseif(exclude_or_include STREQUAL "INCLUDE") +    set(filter_action LESS) +    set(filter_value 0) +  else() +    message(FATAL_ERROR "filter_builtin_sources called without EXCLUDE|INCLUDE") +  endif() + +  set(intermediate ${ARGN}) +  foreach (_file ${intermediate}) +    get_filename_component(_name_we ${_file} NAME_WE) +    list(FIND ${excluded_list} ${_name_we} _found) +    if(_found ${filter_action} ${filter_value}) +      list(REMOVE_ITEM intermediate ${_file}) +    elseif(${_file} MATCHES ".*/.*\\.S" OR ${_file} MATCHES ".*/.*\\.c") +      get_filename_component(_name ${_file} NAME) +      string(REPLACE ".S" ".c" _cname "${_name}") +      list(REMOVE_ITEM intermediate ${_cname}) +    endif () +  endforeach () +  set(${output_var} ${intermediate} PARENT_SCOPE) +endfunction() diff --git a/compiler-rt/lib/builtins/CMakeLists.txt b/compiler-rt/lib/builtins/CMakeLists.txt index 650e9f91836..6128abcbf31 100644 --- a/compiler-rt/lib/builtins/CMakeLists.txt +++ b/compiler-rt/lib/builtins/CMakeLists.txt @@ -235,8 +235,8 @@ if (NOT MSVC)        x86_64/floatdixf.c        x86_64/floatundidf.S        x86_64/floatundisf.S -      x86_64/floatundixf.S -      ${GENERIC_SOURCES}) +      x86_64/floatundixf.S) +  filter_builtin_sources(x86_64_SOURCES EXCLUDE x86_64_SOURCES "${x86_64_SOURCES};${GENERIC_SOURCES}")    set(x86_64h_SOURCES ${x86_64_SOURCES})    if (WIN32) @@ -262,8 +262,8 @@ if (NOT MSVC)        i386/moddi3.S        i386/muldi3.S        i386/udivdi3.S -      i386/umoddi3.S -      ${GENERIC_SOURCES}) +      i386/umoddi3.S) +  filter_builtin_sources(i386_SOURCES EXCLUDE i386_SOURCES "${i386_SOURCES};${GENERIC_SOURCES}")    if (WIN32)      set(i386_SOURCES @@ -315,8 +315,8 @@ set(arm_SOURCES    arm/sync_fetch_and_xor_8.S    arm/udivmodsi4.S    arm/udivsi3.S -  arm/umodsi3.S -  ${GENERIC_SOURCES}) +  arm/umodsi3.S) +filter_builtin_sources(arm_SOURCES EXCLUDE arm_SOURCES "${arm_SOURCES};${GENERIC_SOURCES}")  set(thumb1_SOURCES    arm/divsi3.S  | 

