function (add_gen_events_deps target)
add_dependencies(${target} generate_syslog)
if (WIN32)
add_dependencies(${target} generate_events)
endif ()
endfunction (add_gen_events_deps)
include_directories(BEFORE
${PROJECT_SOURCE_DIR}/core/lib
${PROJECT_SOURCE_DIR}/core/win32
${PROJECT_SOURCE_DIR}/core/arch
${PROJECT_SOURCE_DIR}/core/arch/${ARCH_NAME}
${PROJECT_BINARY_DIR}
${PROJECT_SOURCE_DIR}/core/drlibc
)
if (WIN32)
include_directories(BEFORE ${PROJECT_SOURCE_DIR}/core/win32)
else (WIN32)
include_directories(BEFORE
${PROJECT_SOURCE_DIR}/core/unix)
endif (WIN32)
set(CORE_SRCS
${PROJECT_SOURCE_DIR}/core/options.c
${PROJECT_SOURCE_DIR}/core/win32/inject_shared.c
${PROJECT_SOURCE_DIR}/core/win32/module_shared.c
${PROJECT_SOURCE_DIR}/core/win32/ntdll_shared.c
${PROJECT_SOURCE_DIR}/core/win32/drmarker.c
${PROJECT_SOURCE_DIR}/core/io.c
)
set(RESOURCES ${PROJECT_SOURCE_DIR}/core/win32/resources.rc)
set(BASE_SRCS
services.c
config.c
elm.c
processes.c
utils.c
policy.c
parser.c
)
set(ROOT_SRCS
detach.c
mfapi.c
)
add_definitions(-DNOT_DYNAMORIO_CORE_PROPER -DDYNAMORIO_INTERNAL)
if (WIN32)
add_definitions(-D_CRT_SECURE_NO_WARNINGS -DUNICODE -D_UNICODE)
if (NOT HOT_PATCHING_INTERFACE)
add_definitions(-DHOT_PATCHING_INTERFACE)
endif (NOT HOT_PATCHING_INTERFACE)
set(nowarn "/wd4996 /wd4047 /wd4024 /wd4133 /wd4127 /wd4100 /wd4292 /wd4127 /wd4100")
set(libutil_cflags "/wd4996 /wd4047 /wd4024 /wd4133 /wd4127 /wd4100 /wd4292 /wd4127 /wd4100")
set(libutil_ldflags "/nodefaultlib:libc.lib")
if (DEBUG)
set(libutil_cflags "${libutil_cflags} /Zi")
set(libutil_ldflags "${libutil_ldflags} /debug")
endif (DEBUG)
add_library(policy_static STATIC ${BASE_SRCS} ${ROOT_SRCS} ${CORE_SRCS})
set_target_properties(policy_static PROPERTIES
COMPILE_FLAGS "${libutil_cflags}" COMPILE_DEFINITIONS "NOT_DYNAMORIO_CORE")
set_target_properties(policy_static PROPERTIES
LINK_FLAGS "${libutil_ldflags}")
add_gen_events_deps(policy_static)
set(DRCONFIG_SRCS dr_config.c ${BASE_SRCS} ${ROOT_SRCS} ${CORE_SRCS}
${RESOURCES})
else ()
set(DRCONFIG_SRCS dr_config.c utils.c ${PROJECT_SOURCE_DIR}/core/io.c)
if (APPLE)
else (APPLE)
set(DRCONFIG_SRCS ${DRCONFIG_SRCS} ${PROJECT_SOURCE_DIR}/core/unix/nudgesig.c)
endif ()
set(libutil_cflags "")
endif ()
if (WIN32)
set(config_lib_type SHARED)
else ()
set(config_lib_type STATIC)
endif ()
add_library(drconfiglib ${config_lib_type} ${DRCONFIG_SRCS})
set_target_properties(drconfiglib PROPERTIES
COMPILE_FLAGS "${libutil_cflags}"
COMPILE_DEFINITIONS "RC_IS_DRCONFIGLIB;NOT_DYNAMORIO_CORE"
RUNTIME_OUTPUT_DIRECTORY${location_suffix} "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}")
add_gen_events_deps(drconfiglib)
if (WIN32)
set_target_properties(drconfiglib PROPERTIES
LINK_FLAGS "${libutil_ldflags}")
add_custom_command(TARGET drconfiglib POST_BUILD COMMAND ${CMAKE_COMMAND}
ARGS -E copy "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/drconfiglib.dll"
"${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/" VERBATIM)
add_executable(dumpevts dumpevts.c elm.c ${RESOURCES})
set_target_properties(dumpevts PROPERTIES
COMPILE_FLAGS "${libutil_cflags}"
COMPILE_DEFINITIONS "RC_IS_DUMPEVTS;NOT_DYNAMORIO_CORE")
set_target_properties(dumpevts PROPERTIES
LINK_FLAGS "${libutil_ldflags}")
add_gen_events_deps(dumpevts)
if (MFAPI_ENABLED)
add_library(mfapi SHARED ${BASE_SRCS} ${ROOT_SRCS} ${CORE_SRCS}
${RESOURCES} mfapi.c mfapi.res)
set_target_properties(mfapi PROPERTIES
COMPILE_FLAGS "${libutil_cflags}"
COMPILE_DEFINITIONS "RC_IS_MFAPI;NOT_DYNAMORIO_CORE")
set_target_properties(mfapi PROPERTIES
LINK_FLAGS "${libutil_ldflags}")
add_gen_events_deps(mfapi)
endif (MFAPI_ENABLED)
endif ()
DR_export_header(${PROJECT_SOURCE_DIR}/core/lib/dr_config.h dr_config.h)
install_exported_target(drconfiglib ${INSTALL_LIB_BASE})
DR_export_target(drconfiglib)
DR_install(TARGETS drconfiglib DESTINATION ${INSTALL_BIN})
target_link_libraries(drconfiglib drfrontendlib drlibc)
if (UNIX)
target_link_libraries(drconfiglib drmemfuncs)
endif ()
if (WIN32)
set(dr_frontend_srcs dr_frontend_win.c)
else ()
set(dr_frontend_srcs dr_frontend_unix.c)
endif ()
set(dr_frontend_srcs ${dr_frontend_srcs} dr_frontend_common.c)
add_library(drfrontendlib STATIC ${dr_frontend_srcs})
if (UNIX)
target_link_libraries(drfrontendlib drlibc)
endif ()
if (UNIX)
target_link_libraries(drfrontendlib drmemfuncs)
endif ()
add_static_lib_debug_info(drfrontendlib "${INSTALL_BIN}")
DR_export_target(drfrontendlib)
install_exported_target(drfrontendlib ${INSTALL_BIN})
DR_export_header(${CMAKE_CURRENT_SOURCE_DIR}/dr_frontend.h dr_frontend.h)