120 lines
3.8 KiB
CMake
120 lines
3.8 KiB
CMake
cmake_minimum_required(VERSION 3.9)
|
|
|
|
project("libvtrutil")
|
|
|
|
#Version info
|
|
set(VTR_VERSION_FILE_IN ${CMAKE_CURRENT_SOURCE_DIR}/src/vtr_version.cpp.in)
|
|
set(VTR_VERSION_FILE_OUT ${CMAKE_CURRENT_BINARY_DIR}/vtr_version.cpp)
|
|
|
|
#Compiler info
|
|
set(VTR_COMPILER_INFO "${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION} on ${CMAKE_SYSTEM} ${CMAKE_SYSTEM_PROCESSOR}")
|
|
|
|
#Set default version numbers in case not specified
|
|
if(NOT DEFINED VTR_VERSION_MAJOR)
|
|
set(VTR_VERSION_MAJOR 0)
|
|
endif()
|
|
|
|
if(NOT DEFINED VTR_VERSION_MINOR)
|
|
set(VTR_VERSION_MINOR 0)
|
|
endif()
|
|
|
|
if(NOT DEFINED VTR_VERSION_PATCH)
|
|
set(VTR_VERSION_PATCH 0)
|
|
endif()
|
|
|
|
set(VTR_BUILD_INFO "${CMAKE_BUILD_TYPE}")
|
|
if (CMAKE_INTERPROCEDURAL_OPTIMIZATION)
|
|
set(VTR_BUILD_INFO "${VTR_BUILD_INFO} IPO")
|
|
endif()
|
|
|
|
if (VPR_PGO_CONFIG STREQUAL "prof_use")
|
|
set(VTR_BUILD_INFO "${VTR_BUILD_INFO} PGO")
|
|
elseif (VPR_PGO_CONFIG STREQUAL "prof_gen")
|
|
set(VTR_BUILD_INFO "${VTR_BUILD_INFO} PGOgen")
|
|
endif()
|
|
|
|
set(VTR_BUILD_INFO "${VTR_BUILD_INFO} VTR_ASSERT_LEVEL=${VTR_ASSERT_LEVEL}")
|
|
|
|
if (VTR_ENABLE_SANITIZE)
|
|
set(VTR_BUILD_INFO "${VTR_BUILD_INFO} sanitizers")
|
|
endif()
|
|
if (VTR_ENABLE_PROFILING)
|
|
set(VTR_BUILD_INFO "${VTR_BUILD_INFO} gprof")
|
|
endif()
|
|
|
|
if (VTR_ENABLE_COVERAGE)
|
|
set(VTR_BUILD_INFO "${VTR_BUILD_INFO} gcov")
|
|
endif()
|
|
|
|
if (VTR_ENABLE_DEBUG_LOGGING)
|
|
set(VTR_BUILD_INFO "${VTR_BUILD_INFO} debug_logging")
|
|
endif()
|
|
|
|
# We always update the vtr_version.cpp file every time the project is built,
|
|
# to ensure the git revision and dirty status are up to date.
|
|
#
|
|
# We need to do this in two stages:
|
|
#
|
|
# 1) We a custom target 'version' (which is always out of date) so it will always be run.
|
|
# It touches the unprocessed version input file so it too will always be out of date.
|
|
#
|
|
# 2) The custom command depends on the touched version input file and generates the processed
|
|
# version file, with updated values. The custom command uses the configure_version.cmake
|
|
# script to generate the up-to-date vtr_version.cpp
|
|
add_custom_target(version ALL
|
|
COMMAND ${CMAKE_COMMAND} -E touch ${VTR_VERSION_FILE_IN})
|
|
|
|
add_custom_command(OUTPUT ${VTR_VERSION_FILE_OUT}
|
|
COMMAND ${CMAKE_COMMAND}
|
|
-D IN_FILE=${VTR_VERSION_FILE_IN}
|
|
-D OUT_FILE=${VTR_VERSION_FILE_OUT}
|
|
-D VTR_VERSION_MAJOR=${VTR_VERSION_MAJOR}
|
|
-D VTR_VERSION_MINOR=${VTR_VERSION_MINOR}
|
|
-D VTR_VERSION_PATCH=${VTR_VERSION_PATCH}
|
|
-D VTR_VERSION_PRERELEASE=${VTR_VERSION_PRERELEASE}
|
|
-D VTR_COMPILER_INFO=${VTR_COMPILER_INFO}
|
|
-D VTR_BUILD_INFO=${VTR_BUILD_INFO}
|
|
-P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules/configure_version.cmake
|
|
MAIN_DEPENDENCY ${VTR_VERSION_FILE_IN}
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
|
VERBATIM)
|
|
|
|
|
|
#
|
|
# Source files and library
|
|
#
|
|
file(GLOB_RECURSE LIB_SOURCES src/*.cpp)
|
|
file(GLOB_RECURSE LIB_HEADERS src/*.hpp src/*.h)
|
|
files_to_dirs(LIB_HEADERS LIB_INCLUDE_DIRS)
|
|
|
|
#Add the version file to the sources
|
|
list(APPEND LIB_SOURCES ${VTR_VERSION_FILE_OUT})
|
|
|
|
#Create the library
|
|
add_library(libvtrutil STATIC
|
|
${LIB_HEADERS}
|
|
${LIB_SOURCES})
|
|
target_include_directories(libvtrutil PUBLIC ${LIB_INCLUDE_DIRS})
|
|
set_target_properties(libvtrutil PROPERTIES PREFIX "") #Avoid extra 'lib' prefix
|
|
|
|
#Ensure version is always up to date by requiring version to be run first
|
|
add_dependencies(libvtrutil version)
|
|
|
|
#Specify link-time dependancies
|
|
target_link_libraries(libvtrutil
|
|
liblog)
|
|
|
|
install(TARGETS libvtrutil DESTINATION bin)
|
|
|
|
#
|
|
# Unit Tests
|
|
#
|
|
file(GLOB_RECURSE TEST_SOURCES test/*.cpp)
|
|
add_executable(test_vtrutil ${TEST_SOURCES})
|
|
target_link_libraries(test_vtrutil
|
|
libvtrutil
|
|
libcatch)
|
|
|
|
add_test(NAME test_vtrutil COMMAND test_vtrutil --use-colour=yes)
|
|
|