# # C extensions are required # set(CMAKE_C_STANDARD 11) set(CMAKE_C_EXTENSIONS ON) set(CMAKE_C_STANDARD_REQUIRED ON) # ------------------------------------------------------------------------------# # target sources # ------------------------------------------------------------------------------# include(cmake/platform.cmake) set(SRC_LIST src/RTcommon.c src/RTmemEmulator.c) if(PLATFORM MATCHES freebsd) list( APPEND SRC_LIST src/RTposix.c src/RTfreebsd.c src/RTheap.c src/RTheap-freebsd.c src/RTthread.c src/RTspace.S src/RTsignal.c) elseif(PLATFORM MATCHES linux) list( APPEND SRC_LIST src/RTposix.c src/RTlinux.c src/RTheap.c src/RTheap-linux.c src/RTthread.c src/RTspace.S src/RTsignal.c) list(APPEND RT_STATIC_ONLY_SRC_LIST src/RTstatic_ctors_dtors_begin.c src/RTstatic_ctors_dtors_end.c) elseif(PLATFORM MATCHES nt OR PLATFORM MATCHES windows) list(APPEND SRC_LIST src/RTheap.c src/RTheap-win.c src/RTwinnt.c src/RTthread.c src/RTthread-x86.c) endif() set(SRC_LIST_i386 src/RTthread-x86.c src/RTtlsgetaddr-x86.S) set(RT_STATIC_ONLY_SRC_LIST_i386 src/RTstatic_ctors_dtors-x86.c) set(SRC_LIST_x86_64 src/RTthread-x86-64.c src/RTtlsgetaddr-x86.S) set(RT_STATIC_ONLY_SRC_LIST_x86_64 src/RTstatic_ctors_dtors-x86.c) set(SRC_LIST_ppc32 src/RTthread-powerpc.c src/RTthread-powerpc-asm.S) set(RT_STATIC_ONLY_SRC_LIST_ppc32 src/RTstatic_ctors_dtors-ppc32.c) set(SRC_LIST_ppc64 src/RTthread-powerpc.c src/RTthread-powerpc-asm.S) set(RT_STATIC_ONLY_SRC_LIST_ppc64 src/RTstatic_ctors_dtors-ppc64.c) set(SRC_LIST_aarch64 src/RTthread-aarch64.c # src/RTthread-aarch64-asm.S ) set(RT_STATIC_ONLY_SRC_LIST_aarch64 src/RTstatic_ctors_dtors-aarch64.c) # We use gcc to compile the various assembly files, but cmake doesn't default to knowing # that gcc can handle .S. enable_language(ASM) file(GLOB SRC_ASSEMBLY "src/*.S") if(NEED_NATIVE_ASSEMBER) set_source_files_properties(${SRC_ASSEMBLY} PROPERTIES LANGUAGE ASM) else() set_source_files_properties(${SRC_ASSEMBLY} PROPERTIES LANGUAGE C) endif() # The arch-specific files other than RTthread-x86 are Unix-only. if(UNIX) if(PLATFORM MATCHES amd64 OR PLATFORM MATCHES x86_64) set(SRC_LIST_mabi ${SRC_LIST} ${SRC_LIST_i386}) set(RT_STATIC_ONLY_SRC_LIST_mabi ${RT_STATIC_ONLY_SRC_LIST} ${RT_STATIC_ONLY_SRC_LIST_i386}) list(APPEND SRC_LIST ${SRC_LIST_x86_64}) list(APPEND RT_STATIC_ONLY_SRC_LIST ${RT_STATIC_ONLY_SRC_LIST_x86_64}) elseif(PLATFORM MATCHES ppc64) set(SRC_LIST_mabi ${SRC_LIST} ${SRC_LIST_ppc32}) set(RT_STATIC_ONLY_SRC_LIST_mabi ${RT_STATIC_ONLY_SRC_LIST} ${RT_STATIC_ONLY_SRC_LIST_ppc32}) list(APPEND SRC_LIST ${SRC_LIST_ppc64}) list(APPEND RT_STATIC_ONLY_SRC_LIST ${RT_STATIC_ONLY_SRC_LIST_ppc64}) elseif(PLATFORM MATCHES i386) list(APPEND SRC_LIST ${SRC_LIST_i386}) list(APPEND RT_STATIC_ONLY_SRC_LIST ${RT_STATIC_ONLY_SRC_LIST_i386}) elseif(PLATFORM MATCHES ppc32) list(APPEND SRC_LIST ${SRC_LIST_ppc32}) list(APPEND RT_STATIC_ONLY_SRC_LIST ${RT_STATIC_ONLY_SRC_LIST_ppc32}) elseif(PLATFORM MATCHES aarch64) list(APPEND SRC_LIST ${SRC_LIST_aarch64}) list(APPEND RT_STATIC_ONLY_SRC_LIST ${RT_STATIC_ONLY_SRC_LIST_aarch64}) endif() endif() add_library(rocprofiler-systems-rt-library SHARED) add_library(rocprofiler-systems::rocprofiler-systems-rt-library ALIAS rocprofiler-systems-rt-library) target_sources(rocprofiler-systems-rt-library PRIVATE ${SRC_LIST}) target_include_directories( rocprofiler-systems-rt-library PRIVATE $ $) target_compile_definitions(rocprofiler-systems-rt-library PRIVATE ${UNIFIED_DEFINES}) target_link_libraries( rocprofiler-systems-rt-library PUBLIC $ PRIVATE rocprofiler-systems::rocprofiler-systems-threading) add_target_cxx_flag_if_avail(rocprofiler-systems-rt-library "-g3") set_target_properties( rocprofiler-systems-rt-library PROPERTIES OUTPUT_NAME ${BINARY_NAME_PREFIX}-rt VERSION ${PROJECT_VERSION} SOVERSION ${PROJECT_VERSION_MAJOR} BUILD_RPATH "\$ORIGIN" INSTALL_RPATH "\$ORIGIN") rocprofiler_systems_strip_target(rocprofiler-systems-rt-library) install(TARGETS rocprofiler-systems-rt-library DESTINATION ${CMAKE_INSTALL_LIBDIR}) if(NOT EXISTS ${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}/${PROJECT_NAME}) file(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}/${PROJECT_NAME}) endif() add_custom_target( rocprofiler-systems-rt-library-dyninstAPI_RT-symlink ALL ${CMAKE_COMMAND} -E create_symlink ../$ ${CMAKE_SHARED_LIBRARY_PREFIX}dyninstAPI_RT${CMAKE_SHARED_LIBRARY_SUFFIX} WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}/${PROJECT_NAME} DEPENDS rocprofiler-systems-rt-library COMMENT "Creating ${CMAKE_SHARED_LIBRARY_PREFIX}dyninstAPI_RT${CMAKE_SHARED_LIBRARY_SUFFIX} to rocprof-sys-rt..." ) install( FILES ${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}/${PROJECT_NAME}/${CMAKE_SHARED_LIBRARY_PREFIX}dyninstAPI_RT${CMAKE_SHARED_LIBRARY_SUFFIX} DESTINATION ${CMAKE_INSTALL_LIBDIR}/${PROJECT_NAME})