cmake_minimum_required(VERSION 3.15) # get the current git commit id execute_process( COMMAND git rev-parse HEAD WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} OUTPUT_VARIABLE GIT_COMMIT_ID OUTPUT_STRIP_TRAILING_WHITESPACE ) # get the current git tag execute_process( COMMAND git describe --tags --always WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} OUTPUT_VARIABLE GIT_TAG OUTPUT_STRIP_TRAILING_WHITESPACE ) project(calrtcli VERSION 1.0) # C++ standard set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) #C++ flags set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2") option(PLD_MODE "enable PLD mode specs" OFF) # Build type if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "build type" FORCE) endif() # ===================== # Paths # ===================== set(SRC_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/src) set(CALRTCLI_INCLUDE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/include) set(EXECUTABLE_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/bin) # ===================== # Source Files # ===================== set(CALRTCLI_SRC_FILES ${SRC_ROOT}/cli_command.cpp ${SRC_ROOT}/cli_parser.cpp ${CMAKE_CURRENT_SOURCE_DIR}/calrtcli.cpp ) # ===================== # Executable # ===================== set(THREADS_PREFER_PTHREAD_FLAG ON) find_package(Threads REQUIRED) find_library(ELF_LIB elf REQUIRED) set(CALRT_INCLUDE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../hostrt/include) set(CALRT_INTER_INCLUDE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../hostrt/internal_common) set(CALRT_DRIVER_INCLUDE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../hostrt/driver) set(CALRT_CPP_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../hostrt/src/) include(${CMAKE_CURRENT_SOURCE_DIR}/../hostrt/cmake/calrt_cfg.cmake) configure_file( ${CALRT_INTER_INCLUDE_PATH}/version.h.in ${CALRT_INTER_INCLUDE_PATH}/version.h @ONLY ) add_executable(calrtcli ${CALRTCLI_SRC_FILES} ${CALRT_SRC_FILES}) if(PLD_MODE) message(STATUS "Build PLD mode") target_compile_definitions(calrtcli PRIVATE PLD) endif() target_compile_options(calrtcli PRIVATE -O3 -march=x86-64 -mtune=generic -fno-lto -fPIE -fno-semantic-interposition -fno-stack-protector -fno-asynchronous-unwind-tables -fno-plt -funroll-loops -ffast-math # -fvisibility=hidden # -fvisibility-inlines-hidden -ffunction-sections -fdata-sections ) target_link_options(calrtcli PRIVATE -fno-lto -Wl,-z,now -Wl,-z,relro -Wl,--as-needed -Wl,-O1 -Wl,--gc-sections ) target_include_directories(calrtcli PRIVATE ${CALRTCLI_INCLUDE_PATH} ${CALRT_INCLUDE_PATH} ${CALRT_INTER_INCLUDE_PATH} ${CALRT_DRIVER_INCLUDE_PATH} ) target_compile_definitions(calrtcli PRIVATE SUPEROWNER CLI_USE) target_link_libraries(calrtcli PRIVATE Threads::Threads rt ${ELF_LIB} dl)