206 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			CMake
		
	
	
	
			
		
		
	
	
			206 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			CMake
		
	
	
	
# 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()
 |