if (POLICY CMP0048)
cmake_policy(SET CMP0048 NEW)
endif (POLICY CMP0048)
project(libkprof)
cmake_minimum_required (VERSION 3.12.0)
set(UTIL_FILE_DIR ${PROJECT_TOP_DIR}/util)
set(SYMBOL_FILE_DIR ${PROJECT_TOP_DIR}/symbol)
set(PMU_FILE_DIR ${PROJECT_TOP_DIR}/pmu)
set(PFM_FILE_DIR ${PROJECT_TOP_DIR}/pmu/pfm)
set(PMU_DECODER_DIR ${PMU_FILE_DIR}/decoder)
set(PMU_BPF_DIR ${PMU_FILE_DIR}/bpf)
set(TRACE_DIR ${PMU_FILE_DIR}/trace)
set(PMU_DRIVER_DIR ${PMU_FILE_DIR}/lbr_driver)
file(GLOB UTIL_SRC ${UTIL_FILE_DIR}/*.cpp)
file(GLOB PMU_SRC ${PMU_FILE_DIR}/*c ${PMU_FILE_DIR}/*cpp)
file(GLOB PMU_DECODER_SRC ${PMU_DECODER_DIR}/*.cpp)
file(GLOB SYMBOL_SRC ${SYMBOL_FILE_DIR}/*c ${SYMBOL_FILE_DIR}/*cpp)
file(GLOB PFM_SRC ${PFM_FILE_DIR}/*c ${PFM_FILE_DIR}/*cpp)
file(GLOB BPF_SRC ${PMU_BPF_DIR}/*cpp)
file(GLOB TRACE_SRC ${TRACE_DIR}/*cpp)
file(GLOB DRIVER_SRC ${PMU_DRIVER_DIR}/*cpp)
include_directories(${PROJECT_TOP_DIR}/include)
include_directories(${PMU_FILE_DIR}/)
include_directories(${PFM_FILE_DIR})
include_directories(${TRACE_DIR})
include_directories(${PMU_DRIVER_DIR})
include_directories(${UTIL_FILE_DIR})
include_directories(${SYMBOL_FILE_DIR})
include_directories(${PMU_DECODER_DIR})
if (BPF)
message(STATUS "BPF is true. building with bpf submodule")
add_compile_definitions(BPF_ENABLED)
include_directories(${PMU_FILE_DIR}/bpf)
include_directories(${PROJECT_TOP_DIR}/third_party/local/bpf/usr/include)
link_directories(${PROJECT_TOP_DIR}/third_party/local/bpf/usr/lib64)
set(BPF_SOURCES ${BPF_SRC})
else ()
set(BPF_SOURCES "")
endif()
if (JAVA_TRACE)
include_directories(${CMAKE_BINARY_DIR})
add_compile_definitions(JAVA_TRACE)
endif()
ADD_LIBRARY(kperf SHARED ${PMU_SRC} ${UTIL_SRC} ${PFM_SRC} ${TRACE_SRC} ${PMU_DECODER_SRC} ${BPF_SOURCES} ${DRIVER_SRC})
ADD_LIBRARY(kperf_static STATIC ${PMU_SRC} ${UTIL_SRC} ${PFM_SRC} ${TRACE_SRC} ${PMU_DECODER_SRC} ${BPF_SOURCES} ${DRIVER_SRC})
set_target_properties(kperf_static PROPERTIES OUTPUT_NAME "kperf")
if (BPF)
target_link_libraries(kperf sym bpf rt)
else ()
target_link_libraries(kperf sym rt)
endif()
target_compile_options(kperf PRIVATE -fPIC)
install(TARGETS kperf DESTINATION ${CMAKE_INSTALL_PREFIX}/lib)
install(TARGETS kperf_static DESTINATION ${CMAKE_INSTALL_PREFIX}/lib)
file(GLOB HEADER_FILES ${PROJECT_TOP_DIR}/include/*.h)
install(FILES ${HEADER_FILES} DESTINATION ${CMAKE_INSTALL_PREFIX}/include)