mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-02-25 04:51:38 +00:00
[AIX][compiler-rt] Fix cmake build of libatomic for cmake-3.16+
cmake-3.16+ for AIX changes the default behavior of building a `SHARED` library which breaks AIX's build of libatomic, i.e., cmake-3.16+ builds `SHARED` as an archive of dynamic libraries. To fix it, we have to build `libatomic.so.1` as `MODULE` which keeps `libatomic.so.1` as an normal dynamic library. Reviewed By: jsji Differential Revision: https://reviews.llvm.org/D103786
This commit is contained in:
parent
4fc93a3a1f
commit
6393164cf2
@ -148,7 +148,7 @@ endmacro()
|
||||
# Adds static or shared runtime for a list of architectures and operating
|
||||
# systems and puts it in the proper directory in the build and install trees.
|
||||
# add_compiler_rt_runtime(<name>
|
||||
# {OBJECT|STATIC|SHARED}
|
||||
# {OBJECT|STATIC|SHARED|MODULE}
|
||||
# ARCHS <architectures>
|
||||
# OS <os list>
|
||||
# SOURCES <source files>
|
||||
@ -161,8 +161,9 @@ endmacro()
|
||||
# PARENT_TARGET <convenience parent target>
|
||||
# ADDITIONAL_HEADERS <header files>)
|
||||
function(add_compiler_rt_runtime name type)
|
||||
if(NOT type MATCHES "^(OBJECT|STATIC|SHARED)$")
|
||||
message(FATAL_ERROR "type argument must be OBJECT, STATIC or SHARED")
|
||||
if(NOT type MATCHES "^(OBJECT|STATIC|SHARED|MODULE)$")
|
||||
message(FATAL_ERROR
|
||||
"type argument must be OBJECT, STATIC, SHARED or MODULE")
|
||||
return()
|
||||
endif()
|
||||
cmake_parse_arguments(LIB
|
||||
|
@ -2,11 +2,26 @@ include(CMakeParseArguments)
|
||||
include(CompilerRTUtils)
|
||||
|
||||
function(get_aix_libatomic_default_link_flags link_flags export_list)
|
||||
set(${link_flags}
|
||||
set(linkopts
|
||||
"-Wl,-H512 -Wl,-D0 \
|
||||
-Wl,-T512 -Wl,-bhalt:4 -Wl,-bernotok \
|
||||
-Wl,-bnoentry -Wl,-bexport:${export_list} \
|
||||
-Wl,-bmodtype:SRE -Wl,-lc" PARENT_SCOPE)
|
||||
-Wl,-bmodtype:SRE -Wl,-lc")
|
||||
# Add `-Wl,-G`. Quoted from release notes of cmake-3.16.0
|
||||
# > On AIX, runtime linking is no longer enabled by default.
|
||||
# See https://cmake.org/cmake/help/latest/release/3.16.html
|
||||
if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.16.0")
|
||||
set(linkopts "-Wl,-G" "${linkopts}")
|
||||
endif()
|
||||
set(${link_flags} ${linkopts} PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
function(get_aix_libatomic_type type)
|
||||
if(${CMAKE_VERSION} VERSION_LESS "3.16.0")
|
||||
set(${type} SHARED PARENT_SCOPE)
|
||||
else()
|
||||
set(${type} MODULE PARENT_SCOPE)
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
macro(archive_aix_libatomic name)
|
||||
@ -30,6 +45,10 @@ macro(archive_aix_libatomic name)
|
||||
COMMAND ${CMAKE_COMMAND} -E
|
||||
copy "$<TARGET_FILE:${target}>"
|
||||
"${output_dir}/libatomic.so.1"
|
||||
# If built with MODULE, F_LOADONLY is set.
|
||||
# We have to remove this flag at POST_BUILD.
|
||||
COMMAND ${CMAKE_STRIP} -X32_64 -E
|
||||
"${output_dir}/libatomic.so.1"
|
||||
DEPENDS ${target})
|
||||
list(APPEND shared_libraries_to_archive "${output_dir}/libatomic.so.1")
|
||||
endif()
|
||||
|
@ -759,6 +759,7 @@ option(COMPILER_RT_BUILD_STANDALONE_LIBATOMIC
|
||||
if(COMPILER_RT_BUILD_STANDALONE_LIBATOMIC)
|
||||
add_custom_target(builtins-standalone-atomic)
|
||||
set(BUILTIN_DEPS "")
|
||||
set(BUILTIN_TYPE SHARED)
|
||||
if(${CMAKE_SYSTEM_NAME} MATCHES "AIX")
|
||||
if(NOT COMPILER_RT_LIBATOMIC_LINK_FLAGS)
|
||||
get_aix_libatomic_default_link_flags(COMPILER_RT_LIBATOMIC_LINK_FLAGS
|
||||
@ -767,11 +768,14 @@ if(COMPILER_RT_BUILD_STANDALONE_LIBATOMIC)
|
||||
# The compiler needs builtins to link any other binaries, so let
|
||||
# clang_rt.atomic be built after builtins.
|
||||
set(BUILTIN_DEPS builtins)
|
||||
# For different versions of cmake, SHARED behaves differently. For some
|
||||
# versions, we might need MODULE rather than SHARED.
|
||||
get_aix_libatomic_type(BUILTIN_TYPE)
|
||||
endif()
|
||||
foreach (arch ${BUILTIN_SUPPORTED_ARCH})
|
||||
if(CAN_TARGET_${arch})
|
||||
add_compiler_rt_runtime(clang_rt.atomic
|
||||
SHARED
|
||||
${BUILTIN_TYPE}
|
||||
ARCHS ${arch}
|
||||
SOURCES atomic.c
|
||||
LINK_FLAGS ${COMPILER_RT_LIBATOMIC_LINK_FLAGS}
|
||||
|
Loading…
x
Reference in New Issue
Block a user