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:
parent
30576ba7ad
commit
d72c5604e8
9 changed files with 58 additions and 102 deletions
|
@ -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)
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -136,8 +136,8 @@ endif()
|
|||
|
||||
|
||||
set_target_properties(villas PROPERTIES
|
||||
VERSION ${PROJECT_VERSION}
|
||||
SOVERSION ${PROJECT_SOVERSION}
|
||||
VERSION ${CMAKE_PROJECT_VERSION}
|
||||
SOVERSION 1
|
||||
)
|
||||
|
||||
install(
|
||||
|
|
|
@ -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();
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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__
|
||||
|
|
|
@ -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)
|
||||
)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Add table
Reference in a new issue