1include(CMakeParseArguments)
2include(CompilerRTUtils)
3
4function(get_aix_libatomic_default_link_flags link_flags export_list)
5  set(${link_flags}
6    "-Wl,-H512 -Wl,-D0 \
7     -Wl,-T512 -Wl,-bhalt:4 -Wl,-bernotok \
8     -Wl,-bnoentry -Wl,-bexport:${export_list} \
9     -Wl,-bmodtype:SRE -Wl,-lc" PARENT_SCOPE)
10endfunction()
11
12macro(archive_aix_libatomic name)
13  cmake_parse_arguments(LIB
14    ""
15    ""
16    "ARCHS;PARENT_TARGET"
17    ${ARGN})
18  set(shared_libraries_to_archive "")
19  foreach (arch ${LIB_ARCHS})
20    if(CAN_TARGET_${arch})
21      set(output_dir "${CMAKE_CURRENT_BINARY_DIR}/libatomic-${arch}.dir")
22      # FIXME: Target name should be kept consistent with definition
23      # in AddCompilerRT.cmake added by
24      # add_compiler_rt_runtime(<name> SHARED ...)
25      set(target ${name}-dynamic-${arch})
26      if(TARGET ${target})
27        file(MAKE_DIRECTORY ${output_dir})
28        add_custom_command(OUTPUT "${output_dir}/libatomic.so.1"
29                           POST_BUILD
30                           COMMAND ${CMAKE_COMMAND} -E
31                           copy "$<TARGET_FILE:${target}>"
32                                "${output_dir}/libatomic.so.1"
33                           DEPENDS ${target})
34        list(APPEND shared_libraries_to_archive "${output_dir}/libatomic.so.1")
35      endif()
36    endif()
37  endforeach()
38  if(shared_libraries_to_archive)
39    set(output_dir "")
40    set(install_dir "")
41    get_compiler_rt_output_dir(${COMPILER_RT_DEFAULT_TARGET_ARCH} output_dir)
42    get_compiler_rt_install_dir(${COMPILER_RT_DEFAULT_TARGET_ARCH} install_dir)
43    add_custom_command(OUTPUT "${output_dir}/libatomic.a"
44                       COMMAND ${CMAKE_AR} -X32_64 r "${output_dir}/libatomic.a"
45                       ${shared_libraries_to_archive}
46                       DEPENDS ${shared_libraries_to_archive})
47    install(FILES "${output_dir}/libatomic.a"
48            DESTINATION ${install_dir})
49    add_custom_target(aix-libatomic
50                      DEPENDS "${output_dir}/libatomic.a")
51  endif()
52  add_dependencies(${LIB_PARENT_TARGET} aix-libatomic)
53endmacro()
54