1
0
Fork 0
mirror of https://git.rwth-aachen.de/acs/public/villas/node/ synced 2025-03-09 00:00:00 +01:00

cmake: several improvments to the build system

This commit is contained in:
Steffen Vogel 2018-08-23 17:34:00 +02:00
parent 30576ba7ad
commit d72c5604e8
9 changed files with 58 additions and 102 deletions

View file

@ -27,14 +27,21 @@ project(villas-node
LANGUAGES C CXX
)
# Some more project settings
set(PROJECT_AUTHOR "Steffen Vogel")
set(PROJECT_COPYRIGHT "2018, Institute for Automation of Complex Power Systems, RWTH Aachen University")
set(PROJECT_HOMEPAGE_URL "https://www.fein-aachen.org/projects/villas-node/")
# Several CMake settings/defaults
set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_THREAD_PREFER_PTHREAD ON)
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake;${PROJECT_SOURCE_DIR}/common/cmake")
if(CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME)
set(TOPLEVEL_PROJECT ON)
else()
set(TOPLEVEL_PROJECT OFF)
endif()
if(APPLE)
@ -45,6 +52,7 @@ include(FindPkgConfig)
include(CheckIncludeFile)
include(FeatureSummary)
include(GNUInstallDirs)
include(GetVersion)
# Compiler flags
if(BUILD32)
@ -119,72 +127,14 @@ option(WITH_PLUGINS "Build plugins" ${TOPLEVEL_PROJECT})
option(WITH_CLIENTS "Build client applications" ${TOPLEVEL_PROJECT})
option(WITH_DOC "Build documentation" ${TOPLEVEL_PROJECT})
set(V 2)
set(PREFIX ${CMAKE_INSTALL_PREFIX})
if(CMAKE_BUILD_TYPE)
string(TOLOWER "${CMAKE_BUILD_TYPE}" VARIANT)
else()
set(VARIANT "release")
endif()
# Add more build configurations
include(cmake/config/Debug.cmake)
include(cmake/config/Release.cmake)
include(cmake/config/Coverage.cmake)
include(cmake/config/Profiling.cmake)
# Add git revision and build variant defines
set(PROJECT_AUTHOR "Steffen Vogel")
set(PROJECT_COPYRIGHT "2018, Institute for Automation of Complex Power Systems, RWTH Aachen University")
set(PROJECT_SOVERSION 1)
execute_process(
COMMAND git describe --tags --abbrev=0 --match "v*"
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
OUTPUT_VARIABLE PROJECT_VERSION_STR
OUTPUT_STRIP_TRAILING_WHITESPACE
)
string(REGEX REPLACE "^v([0-9]+\\.[0-9]+\\.[0-9]+)$" "\\1" PROJECT_VERSION ${PROJECT_VERSION_STR})
string(REGEX REPLACE "^v([0-9]+)\\.([0-9]+)\\.([0-9]+)$" "\\1" PROJECT_MAJOR_VERSION ${PROJECT_VERSION_STR})
string(REGEX REPLACE "^v([0-9]+)\\.([0-9]+)\\.([0-9]+)$" "\\2" PROJECT_MINOR_VERSION ${PROJECT_VERSION_STR})
string(REGEX REPLACE "^v([0-9]+)\\.([0-9]+)\\.([0-9]+)$" "\\3" PROJECT_PATCH_VERSION ${PROJECT_VERSION_STR})
string(TIMESTAMP BUILD_DATE "%Y%m%d")
if(DEFINED ENV{CI})
string(APPEND VARIANT "-ci")
string(SUBSTRING $ENV{CI_COMMIT_SHA} 0 7 GIT_REV)
set(GIT_BRANCH $ENV{CI_COMMIT_REF_NAME})
else()
execute_process(
COMMAND git rev-parse --short=7 HEAD
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
OUTPUT_VARIABLE GIT_REV
OUTPUT_STRIP_TRAILING_WHITESPACE
)
execute_process(
COMMAND git rev-parse --abbrev-ref HEAD
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
OUTPUT_VARIABLE GIT_BRANCH
OUTPUT_STRIP_TRAILING_WHITESPACE
)
endif()
set(PROJECT_RELEASE_NUM 3)
if(DEFINED ENV{CI_COMMIT_TAG})
set(PROJECT_RELEASE "${PROJECT_RELEASE_NUM}")
else()
string(REPLACE "-" "_" GIT_BRANCH_NORM ${GIT_BRANCH})
string(REPLACE "-" "_" VARIANT_NORM ${VARIANT})
set(PROJECT_RELEASE "${PROJECT_RELEASE_NUM}.${GIT_BRANCH_NORM}_${VARIANT_NORM}.${BUILD_DATE}git${GIT_REV}")
endif()
set(BUILDID "v${PROJECT_MAJOR_VERSION}.${PROJECT_MINOR_VERSION}.${PROJECT_PATCH_VERSION}-${GIT_REV}-${VARIANT}")
# Get version info and buildid from Git
GetVersion(${PROJECT_SOURCE_DIR} "CMAKE_PROJECT")
add_subdirectory(common)
add_subdirectory(etc)
@ -233,10 +183,17 @@ add_feature_info(PLUGINS WITH_PLUGINS "Build plugins")
add_feature_info(CLIENTS WITH_CLIENTS "Build client applications")
add_feature_info(DOC WITH_DOC "Build documentation")
if(${CMAKE_PROJECT_NAME} STREQUAL ${PROJECT_NAME})
if(TOPLEVEL_PROJECT)
feature_summary(WHAT ALL VAR FEATURES)
message(STATUS "${FEATURES}")
message(STATUS "Building VILLASnode: ${BUILDID}")
message(STATUS "Building ${CMAKE_PROJECT_DESCRIPTION}:")
message(STATUS " VERSION: ${CMAKE_PROJECT_VERSION}")
message(STATUS " RELEASE: ${CMAKE_PROJECT_RELEASE}")
message(STATUS " GIT_REV: ${CMAKE_PROJECT_GIT_REV}")
message(STATUS " GIT_BRANCH: ${CMAKE_PROJECT_GIT_BRANCH}")
message(STATUS " VARIANT: ${CMAKE_PROJECT_VARIANT}")
message(STATUS " BUILD_ID: ${CMAKE_PROJECT_BUILD_ID}")
message(STATUS " BUILD_DATE: ${CMAKE_PROJECT_BUILD_DATE}")
endif()
include(VILLASnodePackaging)

View file

@ -68,7 +68,7 @@ set(CPACK_RPM_PACKAGE_RELEASE_DIST ON)
set(CPACK_RPM_PACKAGE_RELEASE ${PROJECT_RELEASE})
set(CPACK_RPM_PACKAGE_ARCHITECTURE "x86_64")
set(CPACK_RPM_PACKAGE_LICENSE "GPLv3")
set(CPACK_RPM_PACKAGE_URL "http://www.fein-aachen.org/projects/villas-node/")
set(CPACK_RPM_PACKAGE_URL ${PROJECT_HOMEPAGE_URL})
set(CPACK_RPM_PACKAGE_GROUP "Development/Libraries")
set(CPACK_RESOURCE_FILE_LICENSE "${VILLASnode_SOURCE_DIR}/COPYING.md")

View file

@ -136,8 +136,8 @@ endif()
set_target_properties(villas PROPERTIES
VERSION ${PROJECT_VERSION}
SOVERSION ${PROJECT_SOVERSION}
VERSION ${CMAKE_PROJECT_VERSION}
SOVERSION 1
)
install(

View file

@ -92,7 +92,7 @@ int opal_type_start() /// @todo: Port to C++
info("Started as OPAL Asynchronous process");
info("This is VILLASnode %s (built on %s, %s)",
BUILDID, __DATE__, __TIME__);
PROJECT_BUILD_ID, __DATE__, __TIME__);
opal_print_global();

View file

@ -27,8 +27,8 @@ if(DEFINED PROTOBUF_COMPILER AND PROTOBUF_FOUND)
COMMAND ${PROTOBUF_COMPILER}
--python_out=${CMAKE_CURRENT_BINARY_DIR}
villas.proto
MAIN_DEPENDENCY ${CMAKE_SOURCE_DIR}/lib/formats/villas.proto
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/lib/formats
MAIN_DEPENDENCY ${PROJECT_SOURCE_DIR}/lib/formats/villas.proto
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/lib/formats
)
add_custom_target(python ALL

View file

@ -129,7 +129,7 @@ int main(int argc, char *argv[])
char *uri = argc == optind + 1 ? argv[optind] : NULL;
#endif /* ENABLE_OPAL_ASYNC */
info("This is VILLASnode %s (built on %s, %s)", CLR_BLD(CLR_YEL(BUILDID)),
info("This is VILLASnode %s (built on %s, %s)", CLR_BLD(CLR_YEL(PROJECT_BUILD_ID)),
CLR_BLD(CLR_MAG(__DATE__)), CLR_BLD(CLR_MAG(__TIME__)));
#ifdef __linux__

View file

@ -23,14 +23,16 @@
add_custom_target(tests)
add_custom_target(run-tests)
add_subdirectory(unit)
add_subdirectory(integration)
if(CRITERION_FOUND)
add_subdirectory(unit)
endif()
set(VALGRIND "valgrind --leak-check=full --show-leak-kinds=all --suppressions=${CMAKE_CURRENT_SOURCE_DIR}/valgrind.supp")
add_custom_target(run-valgrind
COMMAND ${VALGRIND} $<TARGET_FILE:villas-node> & sleep 2; kill %1
COMMAND ${VALGRIND} $<TARGET_FILE:villas-pipe> -t 2 ${CMAKE_SOURCE_DIR}/etc/websocket-loopback.conf ws1
COMMAND ${VALGRIND} $<TARGET_FILE:villas-pipe> -t 2 ${PROJECT_SOURCE_DIR}/etc/websocket-loopback.conf ws1
COMMAND ${VALGRIND} $<TARGET_FILE:villas-signal> mixed -v 4 -l 10
COMMAND ${VALGRIND} $<TARGET_FILE:villas-hook> stats < <($<TARGET_FILE:villas-signal> mixed -l 5)
)

View file

@ -22,9 +22,9 @@
add_custom_target(run-integration-tests
COMMAND
SRCDIR=${CMAKE_SOURCE_DIR}
BUILDDIR=${CMAKE_BINARY_DIR}
${CMAKE_SOURCE_DIR}/tools/integration-tests.sh
SRCDIR=${PROJECT_SOURCE_DIR}
BUILDDIR=${PROJECT_BINARY_DIR}
${PROJECT_SOURCE_DIR}/tools/integration-tests.sh
DEPENDS
villas-node
villas-pipe

View file

@ -20,34 +20,31 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
###################################################################################
if(CRITERION_FOUND)
set(TEST_SRC
config_json.cpp
io.cpp
json.cpp
main.cpp
mapping.cpp
memory.cpp
pool.cpp
queue.cpp
queue_signalled.cpp
)
set(TEST_SRC
config_json.cpp
io.cpp
json.cpp
main.cpp
mapping.cpp
memory.cpp
pool.cpp
queue.cpp
queue_signalled.cpp
)
add_executable(unit-tests ${TEST_SRC})
target_link_libraries(unit-tests PUBLIC
PkgConfig::CRITERION
villas
Threads::Threads
)
add_executable(unit-tests ${TEST_SRC})
target_link_libraries(unit-tests PUBLIC
PkgConfig::CRITERION
villas
Threads::Threads
)
add_custom_target(run-unit-tests
COMMAND $<TARGET_FILE:unit-tests> ${CRITERION_OPTS}
USES_TERMINAL
)
add_custom_target(run-unit-tests
COMMAND $<TARGET_FILE:unit-tests> ${CRITERION_OPTS}
USES_TERMINAL
)
add_dependencies(tests unit-tests)
add_dependencies(run-tests run-unit-tests)
add_dependencies(tests unit-tests)
add_dependencies(run-tests run-unit-tests)
add_dependencies(run-unit-tests unit-tests)
endif()
add_dependencies(run-unit-tests unit-tests)