CMakeLists.txt   [plain text]


# Build for the runtime interception helper library.

set(INTERCEPTION_SOURCES
  interception_linux.cc
  interception_mac.cc
  interception_win.cc
  )

set(MACH_OVERRIDE_SOURCES
  mach_override/mach_override.c
  )

# Only add this C file if we're building on a Mac. Other source files can be
# harmlessly compiled on any platform, but the C file is complained about due
# to pedantic rules about empty translation units.
if (APPLE)
  list(APPEND INTERCEPTION_SOURCES ${MACH_OVERRIDE_SOURCES})
  set_source_files_properties(${MACH_OVERRIDE_SOURCES} PROPERTIES COMPILE_FLAGS "-std=c99 ${INTERCEPTION_CFLAGS}")
endif ()

set(INTERCEPTION_CFLAGS ${SANITIZER_COMMON_CFLAGS})

if(APPLE)
  # Build universal binary on APPLE.
  add_library(RTInterception.osx OBJECT ${INTERCEPTION_SOURCES})
  set_target_compile_flags(RTInterception.osx ${INTERCEPTION_CFLAGS})
  filter_available_targets(INTERCEPTION_TARGETS x86_64 i386)
  set_target_properties(RTInterception.osx PROPERTIES
    OSX_ARCHITECTURES "${INTERCEPTION_TARGETS}")
else()
  # Otherwise, build separate libraries for each target.
  if(CAN_TARGET_X86_64)
    add_library(RTInterception.x86_64 OBJECT ${INTERCEPTION_SOURCES})
    set_target_compile_flags(RTInterception.x86_64
      ${INTERCEPTION_CFLAGS} ${TARGET_X86_64_CFLAGS})
  endif()
  if(CAN_TARGET_I386)
    add_library(RTInterception.i386 OBJECT ${INTERCEPTION_SOURCES})
    set_target_compile_flags(RTInterception.i386
      ${INTERCEPTION_CFLAGS} ${TARGET_I386_CFLAGS})
  endif()
  if(ANDROID)
    add_library(RTInterception.arm.android OBJECT ${INTERCEPTION_SOURCES})
    set_target_compile_flags(RTInterception.arm.android
      ${INTERCEPTION_CFLAGS})
  endif()
endif()