brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.8 KiB · 2040001 Raw
72 lines · plain
1include(CompilerRTUtils)2 3function(get_aix_libatomic_default_link_flags link_flags export_list)4set(linkopts5  -Wl,-H512 -Wl,-D06  -Wl,-T512 -Wl,-bhalt:4 -Wl,-bernotok7  -Wl,-bnoentry -Wl,-bexport:${export_list}8  -Wl,-bmodtype:SRE -Wl,-lc)9  # Add `-Wl,-G`. Quoted from release notes of cmake-3.16.010  # > On AIX, runtime linking is no longer enabled by default.11  # See https://cmake.org/cmake/help/latest/release/3.16.html12  set(linkopts -Wl,-G ${linkopts})13  set(${link_flags} ${linkopts} PARENT_SCOPE)14endfunction()15 16function(get_aix_libatomic_type type)17  set(${type} MODULE PARENT_SCOPE)18endfunction()19 20macro(archive_aix_libatomic name libname)21  cmake_parse_arguments(LIB22    ""23    ""24    "ARCHS;PARENT_TARGET"25    ${ARGN})26  set(objects_to_archive "")27  foreach (arch ${LIB_ARCHS})28    if(CAN_TARGET_${arch})29      set(output_dir "${CMAKE_CURRENT_BINARY_DIR}/${libname}-${arch}.dir")30      # FIXME: Target name should be kept consistent with definition31      # in AddCompilerRT.cmake added by32      # add_compiler_rt_runtime(<name> SHARED ...)33      set(target ${name}-dynamic-${arch})34      if(TARGET ${target})35        file(MAKE_DIRECTORY ${output_dir})36        add_custom_command(OUTPUT "${output_dir}/libatomic.so.1"37                           COMMAND ${CMAKE_COMMAND} -E38                           copy "$<TARGET_FILE:${target}>"39                                "${output_dir}/libatomic.so.1"40                           # If built with MODULE, F_LOADONLY is set.41                           COMMAND ${CMAKE_STRIP} -X32_64 -E42                                "${output_dir}/libatomic.so.1"43                           DEPENDS ${target})44        list(APPEND objects_to_archive "${output_dir}/libatomic.so.1")45      endif()46    endif()47  endforeach()48  if(objects_to_archive)49    set(output_dir "")50    set(install_dir "")51    # If LLVM defines top level library directory, we want to deliver52    # libatomic.a at top level. See `llvm/cmake/modules/AddLLVM.cmake'53    # setting _install_rpath on AIX for reference.54    if(LLVM_LIBRARY_OUTPUT_INTDIR AND CMAKE_INSTALL_PREFIX)55      set(output_dir "${LLVM_LIBRARY_OUTPUT_INTDIR}")56      set(install_dir "${CMAKE_INSTALL_PREFIX}/lib${LLVM_LIBDIR_SUFFIX}")57    else()58      get_compiler_rt_output_dir(${COMPILER_RT_DEFAULT_TARGET_ARCH} output_dir)59      get_compiler_rt_install_dir(${COMPILER_RT_DEFAULT_TARGET_ARCH} install_dir)60    endif()61    add_custom_command(OUTPUT "${output_dir}/${libname}.a"62                       COMMAND ${CMAKE_AR} -X32_64 r "${output_dir}/${libname}.a"63                       ${objects_to_archive}64                       DEPENDS ${objects_to_archive})65    install(FILES "${output_dir}/${libname}.a"66            DESTINATION ${install_dir})67    add_custom_target(aix-${libname}68                      DEPENDS "${output_dir}/${libname}.a")69    add_dependencies(${LIB_PARENT_TARGET} aix-${libname})70  endif()71endmacro()72