|
Packit |
b1f7ae |
# Copyright (c) 2013-2017, Intel Corporation
|
|
Packit |
b1f7ae |
#
|
|
Packit |
b1f7ae |
# Redistribution and use in source and binary forms, with or without
|
|
Packit |
b1f7ae |
# modification, are permitted provided that the following conditions are met:
|
|
Packit |
b1f7ae |
#
|
|
Packit |
b1f7ae |
# * Redistributions of source code must retain the above copyright notice,
|
|
Packit |
b1f7ae |
# this list of conditions and the following disclaimer.
|
|
Packit |
b1f7ae |
# * Redistributions in binary form must reproduce the above copyright notice,
|
|
Packit |
b1f7ae |
# this list of conditions and the following disclaimer in the documentation
|
|
Packit |
b1f7ae |
# and/or other materials provided with the distribution.
|
|
Packit |
b1f7ae |
# * Neither the name of Intel Corporation nor the names of its contributors
|
|
Packit |
b1f7ae |
# may be used to endorse or promote products derived from this software
|
|
Packit |
b1f7ae |
# without specific prior written permission.
|
|
Packit |
b1f7ae |
#
|
|
Packit |
b1f7ae |
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
Packit |
b1f7ae |
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
Packit |
b1f7ae |
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
Packit |
b1f7ae |
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
Packit |
b1f7ae |
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
Packit |
b1f7ae |
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
Packit |
b1f7ae |
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
Packit |
b1f7ae |
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
Packit |
b1f7ae |
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
Packit |
b1f7ae |
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
Packit |
b1f7ae |
# POSSIBILITY OF SUCH DAMAGE.
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
cmake_minimum_required(VERSION 2.8.6)
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
project(PT)
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
# versioning
|
|
Packit |
b1f7ae |
#
|
|
Packit |
b1f7ae |
# the major and the minor number define the supported Intel PT set.
|
|
Packit |
b1f7ae |
#
|
|
Packit |
b1f7ae |
# a build number and a version extension can be optionally specified.
|
|
Packit |
b1f7ae |
#
|
|
Packit |
b1f7ae |
set(PT_VERSION_MAJOR 1)
|
|
Packit |
b1f7ae |
set(PT_VERSION_MINOR 6)
|
|
Packit |
b1f7ae |
set(PT_VERSION_BUILD "1" CACHE STRING "")
|
|
Packit |
b1f7ae |
set(PT_VERSION_EXT "" CACHE STRING "")
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
set(PT_VERSION "${PT_VERSION_MAJOR}.${PT_VERSION_MINOR}.${PT_VERSION_BUILD}")
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
add_definitions(
|
|
Packit |
b1f7ae |
-DPT_VERSION_MAJOR=${PT_VERSION_MAJOR}
|
|
Packit |
b1f7ae |
-DPT_VERSION_MINOR=${PT_VERSION_MINOR}
|
|
Packit |
b1f7ae |
-DPT_VERSION_BUILD=${PT_VERSION_BUILD}
|
|
Packit |
b1f7ae |
-DPT_VERSION_EXT=\"${PT_VERSION_EXT}\"
|
|
Packit |
b1f7ae |
)
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
include(GNUInstallDirs)
|
|
Packit |
b1f7ae |
include(FindUnixCommands)
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
|
|
Packit |
b1f7ae |
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
|
|
Packit |
b1f7ae |
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
|
|
Packit |
b1f7ae |
set(MAN_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/man)
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
set(CMAKE_COLOR_MAKEFILE OFF)
|
|
Packit |
b1f7ae |
set(CMAKE_VERBOSE_MAKEFILE ON)
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
set(CMAKE_MACOSX_RPATH ON)
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
option(FEATURE_THREADS "A small amount of multi-threading support." ON)
|
|
Packit |
b1f7ae |
if (FEATURE_THREADS)
|
|
Packit |
b1f7ae |
add_definitions(-DFEATURE_THREADS)
|
|
Packit |
b1f7ae |
endif (FEATURE_THREADS)
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
option(DEVBUILD "Enable compiler warnings and turn them into errors." OFF)
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
option(PTDUMP "Enable ptdump, a packet dumper")
|
|
Packit |
b1f7ae |
option(PTXED "Enable ptxed, an instruction flow dumper")
|
|
Packit |
b1f7ae |
option(PTTC "Enable pttc, a test compiler")
|
|
Packit |
b1f7ae |
option(PTUNIT "Enable ptunit, a unit test system and libipt unit tests")
|
|
Packit |
b1f7ae |
option(MAN "Enable man pages (requires pandoc)." OFF)
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
set(PTT OFF)
|
|
Packit |
b1f7ae |
if (BASH AND PTDUMP AND PTXED AND PTTC)
|
|
Packit |
b1f7ae |
set(PTT ON)
|
|
Packit |
b1f7ae |
endif ()
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
if (PTUNIT OR PTT)
|
|
Packit |
b1f7ae |
ENABLE_TESTING()
|
|
Packit |
b1f7ae |
endif()
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
include_directories(
|
|
Packit |
b1f7ae |
include
|
|
Packit |
b1f7ae |
${CMAKE_CURRENT_BINARY_DIR}/libipt/include
|
|
Packit |
b1f7ae |
)
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
if (PTUNIT)
|
|
Packit |
b1f7ae |
include_directories(
|
|
Packit |
b1f7ae |
ptunit/include
|
|
Packit |
b1f7ae |
)
|
|
Packit |
b1f7ae |
endif (PTUNIT)
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
if (CMAKE_HOST_WIN32)
|
|
Packit |
b1f7ae |
include_directories(
|
|
Packit |
b1f7ae |
include/windows
|
|
Packit |
b1f7ae |
)
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
add_definitions(
|
|
Packit |
b1f7ae |
# cl spells inline __inline in C
|
|
Packit |
b1f7ae |
#
|
|
Packit |
b1f7ae |
/Dinline=__inline
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
# cl spells strtoll _strtoi64
|
|
Packit |
b1f7ae |
#
|
|
Packit |
b1f7ae |
/Dstrtoll=_strtoi64
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
# cl spells strtoull _strtoui64
|
|
Packit |
b1f7ae |
#
|
|
Packit |
b1f7ae |
/Dstrtoull=_strtoui64
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
# avoid annoying warnings about unsecure standard functions
|
|
Packit |
b1f7ae |
#
|
|
Packit |
b1f7ae |
/D_CRT_SECURE_NO_WARNINGS
|
|
Packit |
b1f7ae |
)
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
# enable parallel build
|
|
Packit |
b1f7ae |
#
|
|
Packit |
b1f7ae |
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /MP")
|
|
Packit |
b1f7ae |
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP")
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
if (DEVBUILD)
|
|
Packit |
b1f7ae |
# compiler warnings
|
|
Packit |
b1f7ae |
#
|
|
Packit |
b1f7ae |
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W4")
|
|
Packit |
b1f7ae |
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4")
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
# warnings are errors
|
|
Packit |
b1f7ae |
#
|
|
Packit |
b1f7ae |
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /WX")
|
|
Packit |
b1f7ae |
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /WX")
|
|
Packit |
b1f7ae |
endif (DEVBUILD)
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
if (CMAKE_C_COMPILER_ID MATCHES "MSVC")
|
|
Packit |
b1f7ae |
# prevent complaints on:
|
|
Packit |
b1f7ae |
# - do {} while(0) constructs
|
|
Packit |
b1f7ae |
# - int arr[] constructs
|
|
Packit |
b1f7ae |
#
|
|
Packit |
b1f7ae |
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /wd4127")
|
|
Packit |
b1f7ae |
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /wd4200")
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
endif (CMAKE_C_COMPILER_ID MATCHES "MSVC")
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
if (CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
|
|
Packit |
b1f7ae |
# prevent complaints on:
|
|
Packit |
b1f7ae |
# - do {} while(0) constructs
|
|
Packit |
b1f7ae |
# - int arr[] constructs
|
|
Packit |
b1f7ae |
#
|
|
Packit |
b1f7ae |
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4127")
|
|
Packit |
b1f7ae |
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4200")
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
endif (CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
endif (CMAKE_HOST_WIN32)
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
if (CMAKE_HOST_UNIX)
|
|
Packit |
b1f7ae |
include_directories(
|
|
Packit |
b1f7ae |
include/posix
|
|
Packit |
b1f7ae |
)
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
if (CMAKE_C_COMPILER_ID MATCHES "Clang")
|
|
Packit |
b1f7ae |
add_definitions(
|
|
Packit |
b1f7ae |
# make asm directive work in c99 mode.
|
|
Packit |
b1f7ae |
#
|
|
Packit |
b1f7ae |
# from the clang user manual:
|
|
Packit |
b1f7ae |
# "The parser recognizes "asm" and "typeof" as keywords in gnu* modes;
|
|
Packit |
b1f7ae |
# the variants "__asm__" and "__typeof__" are recognized in all
|
|
Packit |
b1f7ae |
# modes."
|
|
Packit |
b1f7ae |
-Dasm=__asm__
|
|
Packit |
b1f7ae |
)
|
|
Packit |
b1f7ae |
endif (CMAKE_C_COMPILER_ID MATCHES "Clang")
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
option(GCOV "Compile for GNU code coverage analysis." OFF)
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
if (GCOV)
|
|
Packit |
b1f7ae |
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fprofile-arcs")
|
|
Packit |
b1f7ae |
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ftest-coverage")
|
|
Packit |
b1f7ae |
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-arcs")
|
|
Packit |
b1f7ae |
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ftest-coverage")
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
link_libraries(gcov)
|
|
Packit |
b1f7ae |
endif (GCOV)
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
if (FEATURE_THREADS)
|
|
Packit |
b1f7ae |
link_libraries(pthread)
|
|
Packit |
b1f7ae |
endif (FEATURE_THREADS)
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
# set the language
|
|
Packit |
b1f7ae |
#
|
|
Packit |
b1f7ae |
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99")
|
|
Packit |
b1f7ae |
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
# windows-like dll export model
|
|
Packit |
b1f7ae |
#
|
|
Packit |
b1f7ae |
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden")
|
|
Packit |
b1f7ae |
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden")
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
if (DEVBUILD)
|
|
Packit |
b1f7ae |
# compiler warnings
|
|
Packit |
b1f7ae |
#
|
|
Packit |
b1f7ae |
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall")
|
|
Packit |
b1f7ae |
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wextra")
|
|
Packit |
b1f7ae |
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pedantic")
|
|
Packit |
b1f7ae |
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
|
|
Packit |
b1f7ae |
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wextra")
|
|
Packit |
b1f7ae |
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic")
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
# warnings are errors
|
|
Packit |
b1f7ae |
#
|
|
Packit |
b1f7ae |
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror")
|
|
Packit |
b1f7ae |
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror")
|
|
Packit |
b1f7ae |
endif (DEVBUILD)
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
endif (CMAKE_HOST_UNIX)
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
function(add_ptunit_test_base name)
|
|
Packit |
b1f7ae |
if (PTUNIT)
|
|
Packit |
b1f7ae |
add_executable(${name} ${ARGN})
|
|
Packit |
b1f7ae |
target_link_libraries(${name} ptunit)
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
add_test(NAME ${name} COMMAND ${name})
|
|
Packit |
b1f7ae |
endif (PTUNIT)
|
|
Packit |
b1f7ae |
endfunction(add_ptunit_test_base)
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
function(add_ptunit_c_test name)
|
|
Packit |
b1f7ae |
add_ptunit_test_base(ptunit-${name} test/src/ptunit-${name}.c ${ARGN})
|
|
Packit |
b1f7ae |
endfunction(add_ptunit_c_test)
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
function(add_ptunit_cpp_test name)
|
|
Packit |
b1f7ae |
add_ptunit_test_base(ptunit-${name} test/src/ptunit-${name}.cpp ${ARGN})
|
|
Packit |
b1f7ae |
endfunction(add_ptunit_cpp_test)
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
function(add_ptunit_libraries name)
|
|
Packit |
b1f7ae |
if (PTUNIT)
|
|
Packit |
b1f7ae |
target_link_libraries(ptunit-${name} ${ARGN})
|
|
Packit |
b1f7ae |
endif (PTUNIT)
|
|
Packit |
b1f7ae |
endfunction(add_ptunit_libraries)
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
add_subdirectory(libipt)
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
if (PTDUMP)
|
|
Packit |
b1f7ae |
add_subdirectory(ptdump)
|
|
Packit |
b1f7ae |
endif (PTDUMP)
|
|
Packit |
b1f7ae |
if (PTXED)
|
|
Packit |
b1f7ae |
add_subdirectory(ptxed)
|
|
Packit |
b1f7ae |
endif (PTXED)
|
|
Packit |
b1f7ae |
if (PTTC)
|
|
Packit |
b1f7ae |
add_subdirectory(pttc)
|
|
Packit |
b1f7ae |
endif (PTTC)
|
|
Packit |
b1f7ae |
if (PTUNIT)
|
|
Packit |
b1f7ae |
add_subdirectory(ptunit)
|
|
Packit |
b1f7ae |
endif (PTUNIT)
|
|
Packit |
b1f7ae |
if (PTT)
|
|
Packit |
b1f7ae |
add_subdirectory(test)
|
|
Packit |
b1f7ae |
endif (PTT)
|
|
Packit |
b1f7ae |
if (MAN)
|
|
Packit |
b1f7ae |
add_subdirectory(doc/man)
|
|
Packit |
b1f7ae |
endif (MAN)
|