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)