diff options
author | Robert Maynard <rmaynard@nvidia.com> | 2021-02-03 17:31:08 -0500 |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2021-02-04 15:17:49 -0500 |
commit | 657fc3a9a719831f9943c552e86e58ae283dad43 (patch) | |
tree | 244511bcf923be35fe38c22aea3a19580dbf93e6 /Modules/CMakeParseLibraryArchitecture.cmake | |
parent | c28dbd7e308968089bf97df71d4fd74c99e718f1 (diff) | |
download | cmake-657fc3a9a719831f9943c552e86e58ae283dad43.tar.gz |
CMakeDetermineCompilerABI: Parse library arch from versioned paths
Teach CMake how to extract `CMAKE_<LANG>_LIBRARY_ARCHITECTURE` from
versioned paths such as `/usr/lib/gcc/x86_64-linux-gnu/9`. These kind of
paths are generated by NVHPC compilers.
Diffstat (limited to 'Modules/CMakeParseLibraryArchitecture.cmake')
-rw-r--r-- | Modules/CMakeParseLibraryArchitecture.cmake | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/Modules/CMakeParseLibraryArchitecture.cmake b/Modules/CMakeParseLibraryArchitecture.cmake new file mode 100644 index 0000000000..aa6fd741d7 --- /dev/null +++ b/Modules/CMakeParseLibraryArchitecture.cmake @@ -0,0 +1,56 @@ +# Distributed under the OSI-approved BSD 3-Clause License. See accompanying +# file Copyright.txt or https://cmake.org/licensing for details. + +cmake_policy(PUSH) +cmake_policy(SET CMP0053 NEW) +cmake_policy(SET CMP0054 NEW) + +# Function parse implicit linker options. +# This is used internally by CMake and should not be included by user +# code. + +function(cmake_parse_library_architecture implicit_dirs output_var) + unset(library_arch) + # Detect library architecture directory name. + if(CMAKE_LIBRARY_ARCHITECTURE_REGEX) + foreach(dir ${implicit_dirs}) + if("${dir}" MATCHES "/lib/${CMAKE_LIBRARY_ARCHITECTURE_REGEX}$") + get_filename_component(arch "${dir}" NAME) + set(library_arch "${arch}") + break() + endif() + endforeach() + endif() + + if(CMAKE_LIBRARY_ARCHITECTURE_REGEX_VERSIONED AND NOT library_arch) + foreach(dir ${implicit_dirs}) + if("${dir}" MATCHES "/${CMAKE_LIBRARY_ARCHITECTURE_REGEX_VERSIONED}$") + get_filename_component(arch "${dir}" DIRECTORY) + get_filename_component(arch "${arch}" NAME) + set(library_arch "${arch}") + break() + endif() + endforeach() + endif() + + if(CMAKE_CXX_COMPILER_ID STREQUAL QCC) + foreach(dir ${implicit_dirs}) + if (dir MATCHES "/lib$") + get_filename_component(assumedArchDir "${dir}" DIRECTORY) + get_filename_component(archParentDir "${assumedArchDir}" DIRECTORY) + if (archParentDir STREQUAL CMAKE_SYSROOT) + get_filename_component(archDirName "${assumedArchDir}" NAME) + set(library_arch "${archDirName}") + break() + endif() + endif() + endforeach() + endif() + + # Return results. + if(library_arch) + set(${output_var} "${library_arch}" PARENT_SCOPE) + endif() +endfunction() + +cmake_policy(POP) |