From fb65ef98fa5e1399cfaa49f914b34d7cff206fde Mon Sep 17 00:00:00 2001 From: lukas Date: Tue, 19 May 2020 20:58:18 +0200 Subject: [PATCH] new gitlab ci for windows build cmake- check if gtest is installed on build system validate compiler after setting of compiler paths --- .gitlab-ci.yml | 84 +++++++++++++++++++++++++++++++++++++++++--------- CMakeLists.txt | 84 ++++++++++++++++++++++++++++++-------------------- 2 files changed, 119 insertions(+), 49 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 4524b1c..6cb35d0 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,49 +1,103 @@ -image: luki42/dynuiprefresher_build:latest - stages: - cmake - build - - build_package - - test - -cache: - paths: - - build/ - - src/ - - inc/ - - tests/ - - postinst + - post +# Unix Build cmake: stage: cmake + image: luki42/dynuiprefresher_build:latest script: - cmake -S . -B build + cache: + paths: + - build/ + - inc/ + - postinst build: stage: build + image: luki42/dynuiprefresher_build:latest script: - cd build - make artifacts: paths: - "build/bin/*" + cache: + paths: + - build/ + - inc/ + - postinst build_package: - stage: build_package + stage: post + image: luki42/dynuiprefresher_build:latest script: - cd build - make package artifacts: paths: - "build/packages/*" + cache: + paths: + - build/ + - inc/ + - postinst test: - stage: test + stage: post + image: luki42/dynuiprefresher_build:latest script: - cd build - make test - make build-xml artifacts: reports: - junit: build/report.xml \ No newline at end of file + junit: build/report.xml + cache: + paths: + - build/ + - inc/ + - postinst + +# Windows Build +cmake_win64: + stage: cmake + image: luki42/dynuiprefresher_build:windows + script: + - cmake -S . -B build -D WinBuild=ON + cache: + paths: + - build/ + - inc/ + +build_win64: + stage: build + image: luki42/dynuiprefresher_build:windows + script: + - cd build + - make iprefresher + artifacts: + paths: + - "build/bin/*" + cache: + paths: + - build/ + - inc/ + + +build_package_win64: + stage: post + image: luki42/dynuiprefresher_build:windows + script: + - cd build + - make package + artifacts: + paths: + - "build/packages/*" + cache: + paths: + - build/ + - inc/ \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index 5e1953f..4d341ab 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,7 +9,7 @@ # for test build gtest needs to be installed. cmake_minimum_required(VERSION 3.13) -project(iprefresher DESCRIPTION "Dynu ip refresher") +project(iprefresher DESCRIPTION "Dynu ip refresher" LANGUAGES) SET(PROJECT_VERSION 1.3.3) # CONFIGURATION @@ -19,7 +19,7 @@ SET(LIB_METHOD STATIC) #SHARED / STATIC option(BUILD_DOC "Build documentation" ON) # additional dependency for Doxygen option(PACKAGING "Allow Packaging to , or " ON) # additional dependencies for RPMbuild,dpkg or NSIS option(TESTS "Build Tests" ON) # additional dependencies for GTEST - to build tests -set(WinBuild false) +option(WinBuild "cross compile for Windows Platform" OFF) # helper variables SET(CMAKE_CXX_STANDARD 17) @@ -31,6 +31,7 @@ SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) # setup winbuild compilers if (${WinBuild}) + message(STATUS "setup Mingw Toolchain for cross compile.") set(LIBSUFFIX .dll) set(SUFFIX .exe) @@ -40,9 +41,9 @@ if (${WinBuild}) #set(TOOLCHAIN_PREFIX i686-w64-mingw32) # cross compilers to use for C and C++ - set(CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}-gcc) - set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}-g++) - set(CMAKE_RC_COMPILER ${TOOLCHAIN_PREFIX}-windres) + set(CMAKE_C_COMPILER /usr/bin/${TOOLCHAIN_PREFIX}-gcc) + set(CMAKE_CXX_COMPILER /usr/bin/${TOOLCHAIN_PREFIX}-g++) + set(CMAKE_RC_COMPILER /usr/bin/${TOOLCHAIN_PREFIX}-windres) # target environment on the build host system set(CMAKE_FIND_ROOT_PATH /usr/${TOOLCHAIN_PREFIX}) @@ -67,6 +68,7 @@ if (${WinBuild}) # windows config path is same as executable set(CONFIG_PATH "./iprefresher.cfg") else () + message(STATUS "using nativ gcc toolchain.") set(LIBSUFFIX .so) set(SUFFIX "") @@ -74,8 +76,16 @@ else () set(CONFIG_PATH "/etc/iprefresher.cfg") endif () +# test compiler settings and enable languages here +message("") +message(STATUS "Testing the C++ compiler!") +enable_language(CXX) +message("") +message(STATUS "Testing the C compiler!") +enable_language(C) # config libs +message("") message(STATUS "Config of Libraries") # libcurl if (${WinBuild}) @@ -313,39 +323,45 @@ endif (BUILD_DOC) # Test Cases if (TESTS) - include(GoogleTest) + # include(GoogleTest) + message(STATUS "Configuring GTEST") + find_package(GTest) + if (GTEST_FOUND) - mark_as_advanced( - BUILD_GMOCK BUILD_GTEST BUILD_SHARED_LIBS - gmock_build_tests gtest_build_samples gtest_build_tests - gtest_disable_pthreads gtest_force_shared_crt gtest_hide_internal_symbols - ) + mark_as_advanced( + BUILD_GMOCK BUILD_GTEST BUILD_SHARED_LIBS + gmock_build_tests gtest_build_samples gtest_build_tests + gtest_disable_pthreads gtest_force_shared_crt gtest_hide_internal_symbols + ) - enable_testing() + enable_testing() - macro(package_add_test TESTNAME) - # create an exectuable in which the tests will be stored - add_executable(${TESTNAME} ${ARGN}) - # link the Google test infrastructure, mocking library, and a default main fuction to - target_link_libraries(${TESTNAME} gtest gtest_main -lpthread -lm dynuiprefresher api ${CURL_LIBRARIES} ${LIBCONFIG++_LIBRARIES}) - # see https://cmake.org/cmake/help/v3.10/module/GoogleTest.html for more options to pass to it - gtest_discover_tests(${TESTNAME} - WORKING_DIRECTORY ${PROJECT_DIR} - EXTRA_ARGS --gtest_output=xml:report.xml -VV - PROPERTIES VS_DEBUGGER_WORKING_DIRECTORY "${PROJECT_DIR}" - ) - set_target_properties(${TESTNAME} PROPERTIES FOLDER tests) - endmacro() + macro(package_add_test TESTNAME) + # create an exectuable in which the tests will be stored + add_executable(${TESTNAME} ${ARGN}) + # link the Google test infrastructure, mocking library, and a default main fuction to + target_link_libraries(${TESTNAME} gtest gtest_main -lpthread -lm dynuiprefresher api ${CURL_LIBRARIES} ${LIBCONFIG++_LIBRARIES}) + # see https://cmake.org/cmake/help/v3.10/module/GoogleTest.html for more options to pass to it + gtest_discover_tests(${TESTNAME} + WORKING_DIRECTORY ${PROJECT_DIR} + EXTRA_ARGS --gtest_output=xml:report.xml -VV + PROPERTIES VS_DEBUGGER_WORKING_DIRECTORY "${PROJECT_DIR}" + ) + set_target_properties(${TESTNAME} PROPERTIES FOLDER tests) + endmacro() - package_add_test(test1 tests/UnitTest.cpp ${SOURCE}) + package_add_test(test1 tests/UnitTest.cpp ${SOURCE}) - add_custom_target(build-test - "${CMAKE_COMMAND}" --build "${CMAKE_BINARY_DIR}" --target test - DEPENDS ${PROJECT_NAME} - COMMENT "Packing ${PROJECT_NAME}") + add_custom_target(build-test + "${CMAKE_COMMAND}" --build "${CMAKE_BINARY_DIR}" --target test1 test + DEPENDS ${PROJECT_NAME} + COMMENT "Packing ${PROJECT_NAME}") - add_custom_target(build-xml - "bin/test1" --gtest_output="xml:report.xml" - DEPENDS ${PROJECT_NAME} - COMMENT "Packing ${PROJECT_NAME}") + add_custom_target(build-xml + "bin/test1" --gtest_output="xml:report.xml" + DEPENDS ${PROJECT_NAME} + COMMENT "Packing ${PROJECT_NAME}") + else () + message(STATUS "GTEST environment not found!") + endif () ENDIF () \ No newline at end of file