1 include(CMakeParseArguments)
2 include(CompilerRTUtils)
4 function(get_aix_libatomic_default_link_flags link_flags export_list)
7 -Wl,-T512 -Wl,-bhalt:4 -Wl,-bernotok
8 -Wl,-bnoentry -Wl,-bexport:${export_list}
9 -Wl,-bmodtype:SRE -Wl,-lc)
10 # Add `-Wl,-G`. Quoted from release notes of cmake-3.16.0
11 # > On AIX, runtime linking is no longer enabled by default.
12 # See https://cmake.org/cmake/help/latest/release/3.16.html
13 if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.16.0")
14 set(linkopts -Wl,-G ${linkopts})
16 set(${link_flags} ${linkopts} PARENT_SCOPE)
19 function(get_aix_libatomic_type type)
20 if(${CMAKE_VERSION} VERSION_LESS "3.16.0")
21 set(${type} SHARED PARENT_SCOPE)
23 set(${type} MODULE PARENT_SCOPE)
27 macro(archive_aix_libatomic name libname)
28 cmake_parse_arguments(LIB
33 set(objects_to_archive "")
34 foreach (arch ${LIB_ARCHS})
35 if(CAN_TARGET_${arch})
36 set(output_dir "${CMAKE_CURRENT_BINARY_DIR}/${libname}-${arch}.dir")
37 # FIXME: Target name should be kept consistent with definition
38 # in AddCompilerRT.cmake added by
39 # add_compiler_rt_runtime(<name> SHARED ...)
40 set(target ${name}-dynamic-${arch})
42 file(MAKE_DIRECTORY ${output_dir})
43 add_custom_command(OUTPUT "${output_dir}/libatomic.so.1"
45 COMMAND ${CMAKE_COMMAND} -E
46 copy "$<TARGET_FILE:${target}>"
47 "${output_dir}/libatomic.so.1"
48 # If built with MODULE, F_LOADONLY is set.
49 # We have to remove this flag at POST_BUILD.
50 COMMAND ${CMAKE_STRIP} -X32_64 -E
51 "${output_dir}/libatomic.so.1"
53 list(APPEND objects_to_archive "${output_dir}/libatomic.so.1")
57 if(objects_to_archive)
60 # If LLVM defines top level library directory, we want to deliver
61 # libatomic.a at top level. See `llvm/cmake/modules/AddLLVM.cmake'
62 # setting _install_rpath on AIX for reference.
63 if(LLVM_LIBRARY_OUTPUT_INTDIR AND CMAKE_INSTALL_PREFIX)
64 set(output_dir "${LLVM_LIBRARY_OUTPUT_INTDIR}")
65 set(install_dir "${CMAKE_INSTALL_PREFIX}/lib${LLVM_LIBDIR_SUFFIX}")
67 get_compiler_rt_output_dir(${COMPILER_RT_DEFAULT_TARGET_ARCH} output_dir)
68 get_compiler_rt_install_dir(${COMPILER_RT_DEFAULT_TARGET_ARCH} install_dir)
70 add_custom_command(OUTPUT "${output_dir}/${libname}.a"
71 COMMAND ${CMAKE_AR} -X32_64 r "${output_dir}/${libname}.a"
73 DEPENDS ${objects_to_archive})
74 install(FILES "${output_dir}/${libname}.a"
75 DESTINATION ${install_dir})
76 add_custom_target(aix-${libname}
77 DEPENDS "${output_dir}/${libname}.a")
78 add_dependencies(${LIB_PARENT_TARGET} aix-${libname})