|  | include(CompilerRTUtils) | 
|  |  | 
|  | function(get_aix_libatomic_default_link_flags link_flags export_list) | 
|  | set(linkopts | 
|  | -Wl,-H512 -Wl,-D0 | 
|  | -Wl,-T512 -Wl,-bhalt:4 -Wl,-bernotok | 
|  | -Wl,-bnoentry -Wl,-bexport:${export_list} | 
|  | -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 | 
|  | set(linkopts -Wl,-G ${linkopts}) | 
|  | set(${link_flags} ${linkopts} PARENT_SCOPE) | 
|  | endfunction() | 
|  |  | 
|  | function(get_aix_libatomic_type type) | 
|  | set(${type} MODULE PARENT_SCOPE) | 
|  | endfunction() | 
|  |  | 
|  | macro(archive_aix_libatomic name libname) | 
|  | cmake_parse_arguments(LIB | 
|  | "" | 
|  | "" | 
|  | "ARCHS;PARENT_TARGET" | 
|  | ${ARGN}) | 
|  | set(objects_to_archive "") | 
|  | foreach (arch ${LIB_ARCHS}) | 
|  | if(CAN_TARGET_${arch}) | 
|  | set(output_dir "${CMAKE_CURRENT_BINARY_DIR}/${libname}-${arch}.dir") | 
|  | # FIXME: Target name should be kept consistent with definition | 
|  | # in AddCompilerRT.cmake added by | 
|  | # add_compiler_rt_runtime(<name> SHARED ...) | 
|  | set(target ${name}-dynamic-${arch}) | 
|  | if(TARGET ${target}) | 
|  | file(MAKE_DIRECTORY ${output_dir}) | 
|  | add_custom_command(OUTPUT "${output_dir}/libatomic.so.1" | 
|  | POST_BUILD | 
|  | 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 objects_to_archive "${output_dir}/libatomic.so.1") | 
|  | endif() | 
|  | endif() | 
|  | endforeach() | 
|  | if(objects_to_archive) | 
|  | set(output_dir "") | 
|  | set(install_dir "") | 
|  | # If LLVM defines top level library directory, we want to deliver | 
|  | # libatomic.a at top level. See `llvm/cmake/modules/AddLLVM.cmake' | 
|  | # setting _install_rpath on AIX for reference. | 
|  | if(LLVM_LIBRARY_OUTPUT_INTDIR AND CMAKE_INSTALL_PREFIX) | 
|  | set(output_dir "${LLVM_LIBRARY_OUTPUT_INTDIR}") | 
|  | set(install_dir "${CMAKE_INSTALL_PREFIX}/lib${LLVM_LIBDIR_SUFFIX}") | 
|  | else() | 
|  | get_compiler_rt_output_dir(${COMPILER_RT_DEFAULT_TARGET_ARCH} output_dir) | 
|  | get_compiler_rt_install_dir(${COMPILER_RT_DEFAULT_TARGET_ARCH} install_dir) | 
|  | endif() | 
|  | add_custom_command(OUTPUT "${output_dir}/${libname}.a" | 
|  | COMMAND ${CMAKE_AR} -X32_64 r "${output_dir}/${libname}.a" | 
|  | ${objects_to_archive} | 
|  | DEPENDS ${objects_to_archive}) | 
|  | install(FILES "${output_dir}/${libname}.a" | 
|  | DESTINATION ${install_dir}) | 
|  | add_custom_target(aix-${libname} | 
|  | DEPENDS "${output_dir}/${libname}.a") | 
|  | add_dependencies(${LIB_PARENT_TARGET} aix-${libname}) | 
|  | endif() | 
|  | endmacro() |