185f87cf4SRuslan Bukin# Copyright (c) 2013-2019, Intel Corporation
274fe6c29SRuslan Bukin#
374fe6c29SRuslan Bukin# Redistribution and use in source and binary forms, with or without
474fe6c29SRuslan Bukin# modification, are permitted provided that the following conditions are met:
574fe6c29SRuslan Bukin#
674fe6c29SRuslan Bukin#  * Redistributions of source code must retain the above copyright notice,
774fe6c29SRuslan Bukin#    this list of conditions and the following disclaimer.
874fe6c29SRuslan Bukin#  * Redistributions in binary form must reproduce the above copyright notice,
974fe6c29SRuslan Bukin#    this list of conditions and the following disclaimer in the documentation
1074fe6c29SRuslan Bukin#    and/or other materials provided with the distribution.
1174fe6c29SRuslan Bukin#  * Neither the name of Intel Corporation nor the names of its contributors
1274fe6c29SRuslan Bukin#    may be used to endorse or promote products derived from this software
1374fe6c29SRuslan Bukin#    without specific prior written permission.
1474fe6c29SRuslan Bukin#
1574fe6c29SRuslan Bukin# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
1674fe6c29SRuslan Bukin# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
1774fe6c29SRuslan Bukin# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
1874fe6c29SRuslan Bukin# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
1974fe6c29SRuslan Bukin# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
2074fe6c29SRuslan Bukin# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
2174fe6c29SRuslan Bukin# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
2274fe6c29SRuslan Bukin# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
2374fe6c29SRuslan Bukin# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
2474fe6c29SRuslan Bukin# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
2574fe6c29SRuslan Bukin# POSSIBILITY OF SUCH DAMAGE.
2674fe6c29SRuslan Bukin
2774fe6c29SRuslan Bukininclude_directories(
2874fe6c29SRuslan Bukin  internal/include
2974fe6c29SRuslan Bukin)
3074fe6c29SRuslan Bukin
3174fe6c29SRuslan Bukinset(LIBIPT_SECTION_FILES
3274fe6c29SRuslan Bukin  src/pt_section.c
3374fe6c29SRuslan Bukin  src/pt_section_file.c
3474fe6c29SRuslan Bukin)
3574fe6c29SRuslan Bukin
3674fe6c29SRuslan Bukinset(LIBIPT_FILES
3774fe6c29SRuslan Bukin  src/pt_error.c
3874fe6c29SRuslan Bukin  src/pt_packet_decoder.c
3974fe6c29SRuslan Bukin  src/pt_query_decoder.c
4074fe6c29SRuslan Bukin  src/pt_encoder.c
4174fe6c29SRuslan Bukin  src/pt_sync.c
4274fe6c29SRuslan Bukin  src/pt_version.c
4374fe6c29SRuslan Bukin  src/pt_last_ip.c
4474fe6c29SRuslan Bukin  src/pt_tnt_cache.c
4574fe6c29SRuslan Bukin  src/pt_ild.c
4674fe6c29SRuslan Bukin  src/pt_image.c
4774fe6c29SRuslan Bukin  src/pt_image_section_cache.c
4874fe6c29SRuslan Bukin  src/pt_retstack.c
4974fe6c29SRuslan Bukin  src/pt_insn_decoder.c
5074fe6c29SRuslan Bukin  src/pt_time.c
5174fe6c29SRuslan Bukin  src/pt_asid.c
5274fe6c29SRuslan Bukin  src/pt_event_queue.c
5374fe6c29SRuslan Bukin  src/pt_packet.c
5474fe6c29SRuslan Bukin  src/pt_decoder_function.c
5574fe6c29SRuslan Bukin  src/pt_config.c
5674fe6c29SRuslan Bukin  src/pt_insn.c
5774fe6c29SRuslan Bukin  src/pt_block_decoder.c
5874fe6c29SRuslan Bukin  src/pt_block_cache.c
5974fe6c29SRuslan Bukin  src/pt_msec_cache.c
6074fe6c29SRuslan Bukin)
6174fe6c29SRuslan Bukin
6274fe6c29SRuslan Bukinif (CMAKE_HOST_UNIX)
6374fe6c29SRuslan Bukin  include_directories(
6474fe6c29SRuslan Bukin    internal/include/posix
6574fe6c29SRuslan Bukin  )
6674fe6c29SRuslan Bukin
6774fe6c29SRuslan Bukin  set(LIBIPT_SECTION_FILES ${LIBIPT_SECTION_FILES} src/posix/pt_section_posix.c)
6874fe6c29SRuslan Bukinendif (CMAKE_HOST_UNIX)
6974fe6c29SRuslan Bukin
7074fe6c29SRuslan Bukinif (CMAKE_HOST_WIN32)
7185f87cf4SRuslan Bukin  if (BUILD_SHARED_LIBS)
7274fe6c29SRuslan Bukin    add_definitions(
7374fe6c29SRuslan Bukin      # export libipt symbols
7474fe6c29SRuslan Bukin      #
7574fe6c29SRuslan Bukin      /Dpt_export=__declspec\(dllexport\)
7674fe6c29SRuslan Bukin    )
7785f87cf4SRuslan Bukin  endif (BUILD_SHARED_LIBS)
7874fe6c29SRuslan Bukin
7974fe6c29SRuslan Bukin  include_directories(
8074fe6c29SRuslan Bukin    internal/include/windows
8174fe6c29SRuslan Bukin  )
8274fe6c29SRuslan Bukin
8374fe6c29SRuslan Bukin  set(LIBIPT_SECTION_FILES ${LIBIPT_SECTION_FILES} src/windows/pt_section_windows.c)
8474fe6c29SRuslan Bukinendif (CMAKE_HOST_WIN32)
8574fe6c29SRuslan Bukin
8674fe6c29SRuslan Bukinset(LIBIPT_FILES ${LIBIPT_FILES} ${LIBIPT_SECTION_FILES})
8774fe6c29SRuslan Bukin
8885f87cf4SRuslan Bukinadd_library(libipt
8974fe6c29SRuslan Bukin  ${LIBIPT_FILES}
9074fe6c29SRuslan Bukin)
9174fe6c29SRuslan Bukin
9274fe6c29SRuslan Bukin# put the version into the intel-pt header
9374fe6c29SRuslan Bukin#
9474fe6c29SRuslan Bukinconfigure_file(
9574fe6c29SRuslan Bukin  ${CMAKE_CURRENT_SOURCE_DIR}/include/intel-pt.h.in
9674fe6c29SRuslan Bukin  ${CMAKE_CURRENT_BINARY_DIR}/include/intel-pt.h
9774fe6c29SRuslan Bukin)
9874fe6c29SRuslan Bukin
9974fe6c29SRuslan Bukinset_target_properties(libipt PROPERTIES
10074fe6c29SRuslan Bukin  PREFIX ""
10174fe6c29SRuslan Bukin  PUBLIC_HEADER ${CMAKE_CURRENT_BINARY_DIR}/include/intel-pt.h
10274fe6c29SRuslan Bukin  VERSION   ${PT_VERSION}
10374fe6c29SRuslan Bukin  SOVERSION ${PT_VERSION_MAJOR}
10474fe6c29SRuslan Bukin)
10574fe6c29SRuslan Bukin
10674fe6c29SRuslan Bukininstall(TARGETS libipt
10774fe6c29SRuslan Bukin  RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
10874fe6c29SRuslan Bukin  LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
10974fe6c29SRuslan Bukin  ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
11074fe6c29SRuslan Bukin  PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
11174fe6c29SRuslan Bukin)
11274fe6c29SRuslan Bukin
11374fe6c29SRuslan Bukin
11474fe6c29SRuslan Bukinfunction(add_ptunit_std_test name)
11574fe6c29SRuslan Bukin    add_ptunit_c_test(${name} src/pt_${name}.c ${ARGN})
11674fe6c29SRuslan Bukinendfunction(add_ptunit_std_test)
11774fe6c29SRuslan Bukin
11874fe6c29SRuslan Bukin
11974fe6c29SRuslan Bukinadd_ptunit_std_test(last_ip)
12074fe6c29SRuslan Bukinadd_ptunit_std_test(tnt_cache)
12174fe6c29SRuslan Bukinadd_ptunit_std_test(retstack)
12274fe6c29SRuslan Bukinadd_ptunit_std_test(ild)
12374fe6c29SRuslan Bukinadd_ptunit_std_test(cpu)
12474fe6c29SRuslan Bukinadd_ptunit_std_test(time)
12574fe6c29SRuslan Bukinadd_ptunit_std_test(asid)
12674fe6c29SRuslan Bukinadd_ptunit_std_test(event_queue)
12774fe6c29SRuslan Bukinadd_ptunit_std_test(image src/pt_asid.c)
12874fe6c29SRuslan Bukinadd_ptunit_std_test(sync src/pt_packet.c)
12974fe6c29SRuslan Bukinadd_ptunit_std_test(config)
13074fe6c29SRuslan Bukinadd_ptunit_std_test(image_section_cache)
13174fe6c29SRuslan Bukinadd_ptunit_std_test(block_cache)
13274fe6c29SRuslan Bukinadd_ptunit_std_test(msec_cache)
13374fe6c29SRuslan Bukin
13474fe6c29SRuslan Bukinadd_ptunit_c_test(mapped_section src/pt_asid.c)
13574fe6c29SRuslan Bukinadd_ptunit_c_test(query
13674fe6c29SRuslan Bukin  src/pt_encoder.c
13774fe6c29SRuslan Bukin  src/pt_last_ip.c
13874fe6c29SRuslan Bukin  src/pt_packet_decoder.c
13974fe6c29SRuslan Bukin  src/pt_sync.c
14074fe6c29SRuslan Bukin  src/pt_tnt_cache.c
14174fe6c29SRuslan Bukin  src/pt_time.c
14274fe6c29SRuslan Bukin  src/pt_event_queue.c
14374fe6c29SRuslan Bukin  src/pt_query_decoder.c
14474fe6c29SRuslan Bukin  src/pt_packet.c
14574fe6c29SRuslan Bukin  src/pt_decoder_function.c
14674fe6c29SRuslan Bukin  src/pt_packet_decoder.c
14774fe6c29SRuslan Bukin  src/pt_config.c
14874fe6c29SRuslan Bukin  src/pt_time.c
14974fe6c29SRuslan Bukin  src/pt_block_cache.c
15074fe6c29SRuslan Bukin)
15174fe6c29SRuslan Bukinadd_ptunit_c_test(section ${LIBIPT_SECTION_FILES})
15274fe6c29SRuslan Bukinadd_ptunit_c_test(section-file
15374fe6c29SRuslan Bukin  test/src/ptunit-section.c
15474fe6c29SRuslan Bukin  src/pt_section.c
15574fe6c29SRuslan Bukin  src/pt_section_file.c
15674fe6c29SRuslan Bukin)
15774fe6c29SRuslan Bukinadd_ptunit_c_test(packet
15874fe6c29SRuslan Bukin  src/pt_encoder.c
15974fe6c29SRuslan Bukin  src/pt_packet_decoder.c
16074fe6c29SRuslan Bukin  src/pt_sync.c
16174fe6c29SRuslan Bukin  src/pt_packet.c
16274fe6c29SRuslan Bukin  src/pt_decoder_function.c
16374fe6c29SRuslan Bukin  src/pt_config.c
16474fe6c29SRuslan Bukin)
16574fe6c29SRuslan Bukinadd_ptunit_c_test(fetch
16674fe6c29SRuslan Bukin  src/pt_decoder_function.c
16774fe6c29SRuslan Bukin  src/pt_encoder.c
16874fe6c29SRuslan Bukin  src/pt_config.c
16974fe6c29SRuslan Bukin)
17085f87cf4SRuslan Bukinadd_ptunit_c_test(encoder
17185f87cf4SRuslan Bukin  src/pt_encoder.c
17285f87cf4SRuslan Bukin  src/pt_config.c
17385f87cf4SRuslan Bukin)
17485f87cf4SRuslan Bukinadd_ptunit_c_test(packet_decoder
17585f87cf4SRuslan Bukin  src/pt_packet_decoder.c
17685f87cf4SRuslan Bukin  src/pt_packet.c
17785f87cf4SRuslan Bukin  src/pt_config.c
17885f87cf4SRuslan Bukin  src/pt_sync.c
17985f87cf4SRuslan Bukin  src/pt_decoder_function.c
18085f87cf4SRuslan Bukin  src/pt_query_decoder.c
18185f87cf4SRuslan Bukin  src/pt_event_queue.c
18285f87cf4SRuslan Bukin  src/pt_last_ip.c
18385f87cf4SRuslan Bukin  src/pt_tnt_cache.c
18485f87cf4SRuslan Bukin  src/pt_time.c
18585f87cf4SRuslan Bukin)
18685f87cf4SRuslan Bukinadd_ptunit_c_test(insn_decoder ${LIBIPT_FILES})
18785f87cf4SRuslan Bukinadd_ptunit_c_test(block_decoder ${LIBIPT_FILES})
18874fe6c29SRuslan Bukin
18974fe6c29SRuslan Bukinadd_ptunit_cpp_test(cpp)
19074fe6c29SRuslan Bukinadd_ptunit_libraries(cpp libipt)
191