cmake_minimum_required(VERSION 3.7)
include(../../make/policies.cmake NO_POLICY_SCOPE)
add_library(drcpusim SHARED
drcpusim.cpp
options.cpp
)
configure_DynamoRIO_client(drcpusim)
use_DynamoRIO_extension(drcpusim drmgr)
use_DynamoRIO_extension(drcpusim drutil)
use_DynamoRIO_extension(drcpusim drx)
use_DynamoRIO_extension(drcpusim droption)
place_shared_lib_in_lib_dir(drcpusim)
add_dependencies(drcpusim api_headers)
if (NOT DynamoRIO_INTERNAL OR NOT "${CMAKE_GENERATOR}" MATCHES "Ninja")
add_custom_command(TARGET drcpusim
POST_BUILD
COMMAND ${CMAKE_COMMAND}
ARGS -E echo "Usage: pass to drconfig or drrun: -t drcpusim"
VERBATIM)
endif ()
install_target(drcpusim ${INSTALL_CLIENTS_LIB})
set(INSTALL_DRCPUSIM_CONFIG ${INSTALL_CLIENTS_BASE})
function (write_config_file dst bindir libdir)
if (X64)
string(REPLACE "lib64" "lib32" alt_libdir ${libdir})
set(CUR_BIT "64")
set(ALT_BIT "32")
else ()
set(CUR_BIT "32")
set(ALT_BIT "64")
string(REPLACE "lib64" "lib32" alt_libdir ${libdir})
endif ()
file(WRITE ${dst} "# drcpusim tool config file\n")
file(APPEND ${dst} "CLIENT${CUR_BIT}_REL=${libdir}/${LIB_PFX}drcpusim${LIB_EXT}\n")
file(APPEND ${dst} "CLIENT${ALT_BIT}_REL=${alt_libdir}/${LIB_PFX}drcpusim${LIB_EXT}\n")
endfunction ()
if (X64)
set(CONFIG_INSTALL ${PROJECT_BINARY_DIR}/drcpusim.drrun64)
set(CONFIG_BUILD ${PROJECT_BINARY_DIR}/tools/drcpusim.drrun64)
else (X64)
set(CONFIG_INSTALL ${PROJECT_BINARY_DIR}/drcpusim.drrun32)
set(CONFIG_BUILD ${PROJECT_BINARY_DIR}/tools/drcpusim.drrun32)
endif (X64)
set(BUILD_CLIENTS_BIN clients/${INSTALL_BIN})
set(BUILD_CLIENTS_LIB clients/${INSTALL_LIB})
write_config_file(${CONFIG_INSTALL} ${INSTALL_CLIENTS_BIN} ${INSTALL_CLIENTS_LIB})
write_config_file(${CONFIG_BUILD} ${BUILD_CLIENTS_BIN} ${BUILD_CLIENTS_LIB})
DR_install(FILES "${CONFIG_INSTALL}" DESTINATION ${INSTALL_DRCPUSIM_CONFIG})
register_tool_file("drcpusim")
add_executable(drcpusim_ops
optionlist.cpp
options.cpp)
set_target_properties(drcpusim_ops PROPERTIES COMPILE_FLAGS "${ORIG_CMAKE_CXX_FLAGS}")
if (WIN32)
append_property_string(TARGET drcpusim_ops COMPILE_FLAGS "/EHsc")
endif ()
use_DynamoRIO_extension(drcpusim_ops droption)
set(srcdoc ${CMAKE_CURRENT_SOURCE_DIR}/drcpusim.dox.in)
set(gendoc ${CMAKE_CURRENT_BINARY_DIR}/drcpusim.dox)
set(doctgt drcpusim_docs)
get_property(dox_extras GLOBAL PROPERTY DynamoRIO_dox_extras)
set_property(GLOBAL PROPERTY DynamoRIO_dox_extras ${dox_extras} ${gendoc})
get_property(dox_targets GLOBAL PROPERTY DynamoRIO_dox_targets)
set_property(GLOBAL PROPERTY DynamoRIO_dox_targets ${dox_targets} ${doctgt})
add_custom_target(${doctgt} DEPENDS ${gendoc})
add_custom_command(
OUTPUT ${gendoc}
DEPENDS ${srcdoc}
drcpusim_ops
options.h
COMMAND ${CMAKE_COMMAND}
ARGS -D src=${srcdoc}
-D dst=${gendoc}
-D CMAKE_CROSSCOMPILING=${CMAKE_CROSSCOMPILING}
-D prog=$<TARGET_FILE:drcpusim_ops>
-P ${CMAKE_CURRENT_SOURCE_DIR}/../common/gendocs.cmake
VERBATIM)