Skip to content

Commit

Permalink
[clang] Fix libclang linking on Solaris
Browse files Browse the repository at this point in the history
Linking `libclang.so` is currently broken on Solaris:

  ld: fatal: option --version-script requires option -z gnu-version-script-compat to be specified

While Solaris `ld` supports a considerable subset of `--version-script`,
there are some elements of the syntax that aren't.

The fix is equivalent to D78510 <https://reviews.llvm.org/D78510>.

Additionally, use of C-style comments is a GNU extension
that can easily be avoided by using `#` as comment character, which is
supported by GNU `ld`, `gold`, and `lld`.

Tested on `amd64-pc-solaris2.11`, `sparcv9-sun-solaris2.11`,
`x86_64-pc-linux-gnu`.

Differential Revision: https://reviews.llvm.org/D107559
  • Loading branch information
rorth committed Aug 7, 2021
1 parent a9a176c commit a382a74
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 14 deletions.
5 changes: 5 additions & 0 deletions clang/tools/libclang/CMakeLists.txt
Expand Up @@ -162,6 +162,11 @@ if(ENABLE_SHARED)
endif()
if (USE_VERSION_SCRIPT)
target_link_options(libclang PRIVATE "-Wl,--version-script,${CMAKE_CURRENT_SOURCE_DIR}/libclang.map")
# The Solaris 11.4 linker supports a subset of GNU ld version scripts,
# but requires a special option to enable it.
if (${CMAKE_SYSTEM_NAME} MATCHES "SunOS")
target_link_options(libclang PRIVATE "-Wl,-z,gnu-version-script-compat")
endif()
# Ensure that libclang.so gets rebuilt when the linker script changes.
set_property(SOURCE ARCMigrate.cpp APPEND PROPERTY
OBJECT_DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/libclang.map)
Expand Down
25 changes: 11 additions & 14 deletions clang/tools/libclang/libclang.map
@@ -1,10 +1,8 @@
/* If you add a symbol to this file, make sure to add it with the correct
* version. For example, if the LLVM main branch is LLVM 14.0.0, add new
* symbols with the version LLVM_14.
* On platforms where versions scripts are not used, this file will be used to
* generate a list of exports for libclang.so
*/

# If you add a symbol to this file, make sure to add it with the correct
# version. For example, if the LLVM main branch is LLVM 14.0.0, add new
# symbols with the version LLVM_14.
# On platforms where versions scripts are not used, this file will be used to
# generate a list of exports for libclang.so

LLVM_13 {
global:
Expand Down Expand Up @@ -407,10 +405,9 @@ LLVM_13 {
local: *;
};

/* Example of how to add a new symbol version entry. If you do add a new symbol
* version, please update the example to depend on the version you added.
* LLVM_X {
* global:
* clang_newsymbol;
* };
*/
# Example of how to add a new symbol version entry. If you do add a new symbol
# version, please update the example to depend on the version you added.
# LLVM_X {
# global:
# clang_newsymbol;
# };

0 comments on commit a382a74

Please sign in to comment.