if (POLICY CMP0048)
cmake_policy(SET CMP0048 NEW)
endif (POLICY CMP0048)
set(PROJECT_TOP_DIR ${CMAKE_CURRENT_LIST_DIR})
project(libkprof)
if(NOT DEFINED CMAKE_INSTALL_PREFIX OR CMAKE_INSTALL_PREFIX STREQUAL "")
set(CMAKE_INSTALL_PREFIX "${PROJECT_TOP_DIR}/output/" CACHE PATH "Installation directory" FORCE)
endif()
if (NOT DEFINED CMAKE_BUILD_TYPE OR CMAKE_BUILD_TYPE STREQUAL "")
set(CMAKE_BUILD_TYPE Release)
endif()
cmake_minimum_required (VERSION 3.12.0)
set(CMAKE_CXX_STANDARD 11)
if (INCLUDE_TEST)
set(CMAKE_CXX_STANDARD 14)
endif()
set(CMAKE_C_STANDARD 11)
if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.8.5)
message(FATAL_ERROR "GCC 4.8.5 or newer required")
endif()
set(TOP_DIR ${PROJECT_SOURCE_DIR})
include(CheckCCompilerFlag)
include(CheckCXXCompilerFlag)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -funroll-loops")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -funroll-loops")
check_c_compiler_flag("-fno-plt" C_SUPPORTS_NO_PLT)
if(C_SUPPORTS_NO_PLT)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-plt")
endif()
check_cxx_compiler_flag("-fno-plt" CXX_SUPPORTS_NO_PLT)
if(CXX_SUPPORTS_NO_PLT)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-plt")
endif()
if(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "^(arm|aarch64)")
check_c_compiler_flag("-march=armv8.2-a" C_SUPPORTS_ARM_ARCH)
if(C_SUPPORTS_ARM_ARCH)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=armv8.2-a")
endif()
check_cxx_compiler_flag("-march=armv8.2-a" CXX_SUPPORTS_ARM_ARCH)
if(CXX_SUPPORTS_ARM_ARCH)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=armv8.2-a")
endif()
endif()
message("TOP_DIR is ${TOP_DIR}")
include(${CMAKE_CURRENT_LIST_DIR}/Common.cmake)
add_subdirectory(symbol)
option(JAVA_TRACE "Enable java trace" OFF)
message(STATUS "JAVA trace support: ${JAVA_TRACE}")
if (JAVA_TRACE)
set(JAVA_TRACE_CONFIG_H "${CMAKE_BINARY_DIR}/java_trace_config.h")
set(JAVA_TRACE_AGENT_JAR "${LIBKPERF_JAVA_HOME}/trace_agent.jar")
set(JAVA_TRACE_CLI_JAR "${LIBKPERF_JAVA_HOME}/trace_cli.jar")
set(JAVA_TRACE_NATIVE_LIB "${LIBKPERF_JAVA_HOME}/libtracex_threadinfo.so")
configure_file(
"${PROJECT_TOP_DIR}/java/java_trace/java_trace_config.h.in"
"${JAVA_TRACE_CONFIG_H}"
@ONLY
)
message(STATUS "Generated java_trace_config.h -> ${JAVA_TRACE_CONFIG_H}")
endif()
add_subdirectory(pmu)
if (JAVA_AGENT)
add_subdirectory(java/java_agent)
endif()
if (PYTHON)
add_subdirectory(python)
endif()
option(BPF "Enable BPF mode" OFF)
message(STATUS "BPF support: ${BPF}")
if (GO)
add_subdirectory(go)
endif()
if (INCLUDE_TEST)
add_subdirectory(test)
endif()
set(CMAKE_EXPORT_COMPILE_COMMANDS True)