| # Build for the Memory Profiler runtime support library. |
| |
| set(MEMPROF_SOURCES |
| memprof_allocator.cpp |
| memprof_descriptions.cpp |
| memprof_flags.cpp |
| memprof_interceptors.cpp |
| memprof_interceptors_memintrinsics.cpp |
| memprof_linux.cpp |
| memprof_malloc_linux.cpp |
| memprof_mibmap.cpp |
| memprof_posix.cpp |
| memprof_rawprofile.cpp |
| memprof_rtl.cpp |
| memprof_shadow_setup.cpp |
| memprof_stack.cpp |
| memprof_stats.cpp |
| memprof_thread.cpp |
| ) |
| |
| set(MEMPROF_CXX_SOURCES |
| memprof_new_delete.cpp |
| ) |
| |
| set(MEMPROF_PREINIT_SOURCES |
| memprof_preinit.cpp |
| ) |
| |
| SET(MEMPROF_HEADERS |
| memprof_allocator.h |
| memprof_descriptions.h |
| memprof_flags.h |
| memprof_flags.inc |
| memprof_init_version.h |
| memprof_interceptors.h |
| memprof_interceptors_memintrinsics.h |
| memprof_interface_internal.h |
| memprof_internal.h |
| memprof_mapping.h |
| memprof_meminfoblock.h |
| memprof_mibmap.h |
| memprof_rawprofile.h |
| memprof_stack.h |
| memprof_stats.h |
| memprof_thread.h |
| ) |
| |
| include_directories(..) |
| include_directories(../../include) |
| |
| set(MEMPROF_CFLAGS ${SANITIZER_COMMON_CFLAGS}) |
| set(MEMPROF_COMMON_DEFINITIONS "") |
| |
| # Too many existing bugs, needs cleanup. |
| append_list_if(COMPILER_RT_HAS_WNO_FORMAT -Wno-format MEMPROF_CFLAGS) |
| |
| append_rtti_flag(OFF MEMPROF_CFLAGS) |
| |
| set(MEMPROF_DYNAMIC_LINK_FLAGS ${SANITIZER_COMMON_LINK_FLAGS}) |
| |
| set(MEMPROF_DYNAMIC_DEFINITIONS |
| ${MEMPROF_COMMON_DEFINITIONS} MEMPROF_DYNAMIC=1) |
| |
| set(MEMPROF_DYNAMIC_CFLAGS ${MEMPROF_CFLAGS}) |
| append_list_if(COMPILER_RT_HAS_FTLS_MODEL_INITIAL_EXEC |
| -ftls-model=initial-exec MEMPROF_DYNAMIC_CFLAGS) |
| |
| set(MEMPROF_DYNAMIC_LIBS ${SANITIZER_CXX_ABI_LIBRARIES} ${SANITIZER_COMMON_LINK_LIBS}) |
| |
| append_list_if(COMPILER_RT_HAS_LIBDL dl MEMPROF_DYNAMIC_LIBS) |
| append_list_if(COMPILER_RT_HAS_LIBRT rt MEMPROF_DYNAMIC_LIBS) |
| append_list_if(COMPILER_RT_HAS_LIBM m MEMPROF_DYNAMIC_LIBS) |
| append_list_if(COMPILER_RT_HAS_LIBPTHREAD pthread MEMPROF_DYNAMIC_LIBS) |
| append_list_if(COMPILER_RT_HAS_LIBLOG log MEMPROF_DYNAMIC_LIBS) |
| |
| # Compile MemProf sources into an object library. |
| |
| add_compiler_rt_object_libraries(RTMemprof_dynamic |
| OS ${SANITIZER_COMMON_SUPPORTED_OS} |
| ARCHS ${MEMPROF_SUPPORTED_ARCH} |
| SOURCES ${MEMPROF_SOURCES} ${MEMPROF_CXX_SOURCES} |
| ADDITIONAL_HEADERS ${MEMPROF_HEADERS} |
| CFLAGS ${MEMPROF_DYNAMIC_CFLAGS} |
| DEFS ${MEMPROF_DYNAMIC_DEFINITIONS} |
| DEPS ${MEMPROF_DEPS}) |
| |
| add_compiler_rt_object_libraries(RTMemprof |
| ARCHS ${MEMPROF_SUPPORTED_ARCH} |
| SOURCES ${MEMPROF_SOURCES} |
| ADDITIONAL_HEADERS ${MEMPROF_HEADERS} |
| CFLAGS ${MEMPROF_CFLAGS} |
| DEFS ${MEMPROF_COMMON_DEFINITIONS} |
| DEPS ${MEMPROF_DEPS}) |
| add_compiler_rt_object_libraries(RTMemprof_cxx |
| ARCHS ${MEMPROF_SUPPORTED_ARCH} |
| SOURCES ${MEMPROF_CXX_SOURCES} |
| ADDITIONAL_HEADERS ${MEMPROF_HEADERS} |
| CFLAGS ${MEMPROF_CFLAGS} |
| DEFS ${MEMPROF_COMMON_DEFINITIONS} |
| DEPS ${MEMPROF_DEPS}) |
| add_compiler_rt_object_libraries(RTMemprof_preinit |
| ARCHS ${MEMPROF_SUPPORTED_ARCH} |
| SOURCES ${MEMPROF_PREINIT_SOURCES} |
| ADDITIONAL_HEADERS ${MEMPROF_HEADERS} |
| CFLAGS ${MEMPROF_CFLAGS} |
| DEFS ${MEMPROF_COMMON_DEFINITIONS} |
| DEPS ${MEMPROF_DEPS}) |
| |
| file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/dummy.cpp "") |
| add_compiler_rt_object_libraries(RTMemprof_dynamic_version_script_dummy |
| ARCHS ${MEMPROF_SUPPORTED_ARCH} |
| SOURCES ${CMAKE_CURRENT_BINARY_DIR}/dummy.cpp |
| CFLAGS ${MEMPROF_DYNAMIC_CFLAGS} |
| DEFS ${MEMPROF_DYNAMIC_DEFINITIONS} |
| DEPS ${MEMPROF_DEPS}) |
| |
| # Build MemProf runtimes shipped with Clang. |
| add_compiler_rt_component(memprof) |
| |
| # Build separate libraries for each target. |
| |
| set(MEMPROF_COMMON_RUNTIME_OBJECT_LIBS |
| RTInterception |
| RTSanitizerCommon |
| RTSanitizerCommonLibc |
| RTSanitizerCommonCoverage |
| RTSanitizerCommonSymbolizer) |
| |
| add_compiler_rt_runtime(clang_rt.memprof |
| STATIC |
| ARCHS ${MEMPROF_SUPPORTED_ARCH} |
| OBJECT_LIBS RTMemprof_preinit |
| RTMemprof |
| ${MEMPROF_COMMON_RUNTIME_OBJECT_LIBS} |
| CFLAGS ${MEMPROF_CFLAGS} |
| DEFS ${MEMPROF_COMMON_DEFINITIONS} |
| PARENT_TARGET memprof) |
| |
| add_compiler_rt_runtime(clang_rt.memprof_cxx |
| STATIC |
| ARCHS ${MEMPROF_SUPPORTED_ARCH} |
| OBJECT_LIBS RTMemprof_cxx |
| CFLAGS ${MEMPROF_CFLAGS} |
| DEFS ${MEMPROF_COMMON_DEFINITIONS} |
| PARENT_TARGET memprof) |
| |
| add_compiler_rt_runtime(clang_rt.memprof-preinit |
| STATIC |
| ARCHS ${MEMPROF_SUPPORTED_ARCH} |
| OBJECT_LIBS RTMemprof_preinit |
| CFLAGS ${MEMPROF_CFLAGS} |
| DEFS ${MEMPROF_COMMON_DEFINITIONS} |
| PARENT_TARGET memprof) |
| |
| foreach(arch ${MEMPROF_SUPPORTED_ARCH}) |
| if (UNIX) |
| add_sanitizer_rt_version_list(clang_rt.memprof-dynamic-${arch} |
| LIBS clang_rt.memprof-${arch} clang_rt.memprof_cxx-${arch} |
| EXTRA memprof.syms.extra) |
| set(VERSION_SCRIPT_FLAG |
| -Wl,--version-script,${CMAKE_CURRENT_BINARY_DIR}/clang_rt.memprof-dynamic-${arch}.vers) |
| set_property(SOURCE |
| ${CMAKE_CURRENT_BINARY_DIR}/dummy.cpp |
| APPEND PROPERTY |
| OBJECT_DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/clang_rt.memprof-dynamic-${arch}.vers) |
| else() |
| set(VERSION_SCRIPT_FLAG) |
| endif() |
| |
| set(MEMPROF_DYNAMIC_WEAK_INTERCEPTION) |
| |
| add_compiler_rt_runtime(clang_rt.memprof |
| SHARED |
| ARCHS ${arch} |
| OBJECT_LIBS ${MEMPROF_COMMON_RUNTIME_OBJECT_LIBS} |
| RTMemprof_dynamic |
| # The only purpose of RTMemprof_dynamic_version_script_dummy is to |
| # carry a dependency of the shared runtime on the version script. |
| # Replacing it with a straightforward |
| # add_dependencies(clang_rt.memprof-dynamic-${arch} clang_rt.memprof-dynamic-${arch}-version-list) |
| # generates an order-only dependency in ninja. |
| RTMemprof_dynamic_version_script_dummy |
| ${MEMPROF_DYNAMIC_WEAK_INTERCEPTION} |
| CFLAGS ${MEMPROF_DYNAMIC_CFLAGS} |
| LINK_FLAGS ${MEMPROF_DYNAMIC_LINK_FLAGS} |
| ${VERSION_SCRIPT_FLAG} |
| LINK_LIBS ${MEMPROF_DYNAMIC_LIBS} |
| DEFS ${MEMPROF_DYNAMIC_DEFINITIONS} |
| PARENT_TARGET memprof) |
| |
| if (SANITIZER_USE_SYMBOLS) |
| add_sanitizer_rt_symbols(clang_rt.memprof_cxx |
| ARCHS ${arch}) |
| add_dependencies(memprof clang_rt.memprof_cxx-${arch}-symbols) |
| add_sanitizer_rt_symbols(clang_rt.memprof |
| ARCHS ${arch} |
| EXTRA memprof.syms.extra) |
| add_dependencies(memprof clang_rt.memprof-${arch}-symbols) |
| endif() |
| endforeach() |
| |
| |
| if(COMPILER_RT_INCLUDE_TESTS) |
| add_subdirectory(tests) |
| endif() |