blob: f3309194072bc44ec51a1ad7caa54e31a2247102 [file] [log] [blame]
# *-* Mode: cmake; *-*
cmake_minimum_required(VERSION 2.8.5)
project(rr)
enable_testing()
set(BUILD_SHARED_LIBS ON)
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)
# CAREFUL! "-" is an invalid character in RPM package names, while
# debian is happy with it. However, "_" is illegal in debs, while RPM
# is cool with it. Sigh.
set(rr_VERSION_MAJOR 0)
set(rr_VERSION_MINOR 5)
set(rr_VERSION_PATCH 0)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pthread -O0 -g3 -Wall -Werror -m32 -Wstrict-prototypes")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x -pthread -O0 -g3 -Wall -Werror -m32")
# Disable PIC.
string(REGEX REPLACE "-fPIC" ""
CMAKE_SHARED_LIBRARY_C_FLAGS "${CMAKE_SHARED_LIBRARY_C_FLAGS}")
include_directories("${PROJECT_SOURCE_DIR}/include")
add_library(rrpreload
src/preload/preload.c
)
add_executable(rr
src/debugger_gdb.cc
src/hpc.cc
src/main.cc
src/recorder.cc
src/recorder_sched.cc
src/record_signal.cc
src/record_syscall.cc
src/replayer.cc
src/replay_syscall.cc
src/task.cc
src/trace.cc
src/util.cc
)
# TODO remove this when we can manage pfm and disasm dependencies
# properly
target_link_libraries(rr
-lrt
libpfm.a
libdisasm.a
)
target_link_libraries(rrpreload
-ldl
)
install(TARGETS rr rrpreload
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib)
##--------------------------------------------------
## Testing
# A "basic test" consists of a foo.c source file and a foo.run driver
# script. See src/test/util.sh to learn how the .run files work.
#
# NB: you must update this variable when adding a new test source
# file. The list is not generated automatically.
#
# Alphabetical, please.
set(BASIC_TESTS
abort_nonmain
accept
alarm
args
async_segv
async_signal_syscalls
async_usr1
at_threadexit
bad_ip
bad_syscall
barrier
big_buffers
block
block_intr_sigchld
breakpoint
chew_cpu
clock
clone
condvar_stress
crash
exec_self
exit_group
fadvise
fault_in_code_page
fcntl_owner_ex
flock
fork_child_crash
fork_syscalls
getcwd
goto_event
hello
ignored_async_usr1
immediate_restart
int3
interrupt
intr_futex_wait_restart
intr_poll
intr_ptrace_decline
intr_read_no_restart
intr_read_restart
intr_sleep
intr_sleep_no_restart
io
link
madvise
map_fixed
mmap_discontinuous
mmap_private
mmap_ro
mmap_shared
mmap_shared_subpage
mmap_tmpfs
mmap_write
mprotect
mprotect_stack
mremap
msg
msync
munmap_discontinuous
mutex_pi_stress
nanosleep
perf_event
poll_sig_race
prctl
prctl_name
priority
prw
ptrace
rdtsc
save_data_fd
sched_setaffinity
sched_yield
scm_rights
segfault
sigchld_interrupt_signal
sigill
sigprocmask
sigrt
sigtrap
simple
sioc
splice
statfs
step_thread
strict_priorities
switch_read
syscallbuf_timeslice
sysconf
target_fork
target_process
tcgets
term_nonmain
tgkill
thread_stress
threaded_syscall_spam
threads
tiocinq
tiocgwinsz
truncate
uname
unjoined_thread
user_ignore_sig
vfork
)
# A "custom test" is a foo.run driver script only, which does
# something with one of the basic-test executables above.
#
# NB: you must update this variable when adding a new test source
# file. The list is not generated automatically.
#
# Alphabetical, please.
set(CUSTOM_TESTS
async_signal_syscalls_100
async_signal_syscalls_1000
break_block
break_clock
break_clone
break_exec
break_int3
break_mmap_private
break_msg
break_ptrace
break_rdtsc
break_sigreturn
break_sync_signal
break_thread
break_time_slice
cont_signal
dead_thread_target
deliver_async_signal_during_syscalls
execp
fork_exec_info_thr
get_thread_list
parent_no_break_child_bkpt
parent_no_stop_child_crash
read_bad_mem
sanity
signal_stop
step1
step_signal
subprocess_exit_ends_session
syscallbuf_timeslice_250
term_trace_cpu
term_trace_syscall
)
foreach(test ${BASIC_TESTS})
add_executable(${test} src/test/${test}.c)
target_link_libraries(${test} -lrt)
endforeach(test)
foreach(test ${BASIC_TESTS} ${CUSTOM_TESTS})
add_test(${test}
bash ${CMAKE_SOURCE_DIR}/src/test/${test}.run -b ${PROJECT_BINARY_DIR})
set_tests_properties(${test}
PROPERTIES FAIL_REGULAR_EXPRESSION "FAILED")
add_test(${test}-no-syscallbuf
bash ${CMAKE_SOURCE_DIR}/src/test/${test}.run -n ${PROJECT_BINARY_DIR})
set_tests_properties(${test}-no-syscallbuf
PROPERTIES FAIL_REGULAR_EXPRESSION "FAILED")
endforeach(test)
include(ProcessorCount)
ProcessorCount(N)
if(NOT N EQUAL 0)
set(JFLAG -j${N})
endif()
add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND} --verbose ${JFLAG})
##--------------------------------------------------
## Package configuration
include (InstallRequiredSystemLibraries)
set(CPACK_PACKAGE_NAME "rr")
set(CPACK_PACKAGE_VERSION_MAJOR "${rr_VERSION_MAJOR}")
set(CPACK_PACKAGE_VERSION_MINOR "${rr_VERSION_MINOR}")
set(CPACK_PACKAGE_VERSION_PATCH "${rr_VERSION_PATCH}")
set(CPACK_SYSTEM_NAME "${CMAKE_SYSTEM_NAME}-${CMAKE_SYSTEM_PROCESSOR}")
set(CPACK_OUTPUT_FILE_PREFIX dist)
set(CPACK_GENERATOR "TGZ;RPM;DEB")
set(CPACK_SOURCE_GENERATOR "TGZ")
set(CPACK_BINARY_DIR "${PROJECT_BINARY_DIR}")
set(CPACK_STRIP_FILES TRUE)
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/LICENSE")
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY
"Lightweight tool for recording and replaying execution of applications (trees of processes and threads)")
set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_SOURCE_DIR}/README.md")
set(CPACK_PACKAGE_VENDOR "Mozilla Foundation")
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Mozilla Foundation")
set(CPACK_DEBIAN_PACKAGE_SECTION "devel")
#set(CPACK_DEBIAN_PACKAGE_DEPENDS "pfm, disasm")
# XXX Cmake 2.8.7 doesn't know how to avoid specifiying /usr,
# /usr/bin, etc, as files to be installed, but distros are finicky
# about their specification. We want to manually filter those paths
# out of our install list but 2.8.7 also isn't capable of that.
set(CPACK_RPM_USER_BINARY_SPECFILE "${CMAKE_SOURCE_DIR}/rr.spec")
set(CPACK_RPM_PACKAGE_RELEASE 1)
set(CPACK_RPM_PACKAGE_GROUP "Development/Debuggers")
set(CPACK_RPM_PACKAGE_LICENSE "MIT and BSD")
#set(CPACK_RPM_PACKAGE_REQUIRES "Requires: pfm, disasm")
include (CPack)
##--------------------------------------------------
## Misc
add_custom_target(setup-travis COMMAND src/script/setup_travis.sh)