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