From cef4a518108a97202c50b80bcddb579545fc0d94 Mon Sep 17 00:00:00 2001 From: Erik Boasson Date: Fri, 18 Jan 2019 14:16:16 +0100 Subject: [PATCH 1/3] Set "position independent code" property unconditionally in os, util Previously it wasn't set for all platforms, breaking, e.g., Linux on ARM. The property also does the trick for OpenIndiana, so that hack can be removed as well Signed-off-by: Erik Boasson --- src/os/CMakeLists.txt | 9 ++------- src/util/CMakeLists.txt | 9 +-------- 2 files changed, 3 insertions(+), 15 deletions(-) diff --git a/src/os/CMakeLists.txt b/src/os/CMakeLists.txt index e95ac92..cb64db5 100644 --- a/src/os/CMakeLists.txt +++ b/src/os/CMakeLists.txt @@ -57,6 +57,7 @@ add_library(OSAPI ${sources}) set(CMAKE_THREAD_PREFER_PTHREAD TRUE) find_package(Threads REQUIRED) target_link_libraries(OSAPI INTERFACE Threads::Threads) +set_property(TARGET OSAPI PROPERTY POSITION_INDEPENDENT_CODE TRUE) if(WIN32) # Link with Win32 core-libraries @@ -73,12 +74,7 @@ if(WIN32) target_compile_definitions(OSAPI PRIVATE _WINSOCK_DEPRECATED_NO_WARNINGS) # Disable warnings for deprecated POSIX names. target_compile_definitions(OSAPI PRIVATE -D_CRT_NONSTDC_NO_DEPRECATE) -elseif(UNIX AND NOT APPLE) - if("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "x86_64") - # Shared libs will have this by default. Static libs need it too on x86_64. - set_property(TARGET OSAPI PROPERTY POSITION_INDEPENDENT_CODE TRUE) - endif() - +elseif(UNIX) check_library_exists(c clock_gettime "" HAVE_CLOCK_GETTIME) if(NOT HAVE_CLOCK_GETTIME) # Before glibc 2.17, clock_gettime was in librt. @@ -95,7 +91,6 @@ endif() if(${CMAKE_C_COMPILER_ID} STREQUAL "SunPro") target_link_libraries(OSAPI INTERFACE -lsocket -lnsl) - add_definitions(-KPIC) endif() # Determine if platform is big or little endian. diff --git a/src/util/CMakeLists.txt b/src/util/CMakeLists.txt index e9dd89e..109a2db 100644 --- a/src/util/CMakeLists.txt +++ b/src/util/CMakeLists.txt @@ -19,10 +19,7 @@ add_library(util ${srcs_util}) generate_export_header(util EXPORT_FILE_NAME "${CMAKE_CURRENT_BINARY_DIR}/exports/util/ut_export.h") target_link_libraries(util PUBLIC OSAPI) -if("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "x86_64") - # Shared libs will have this by default. Static libs need it too on x86_64. - set_property(TARGET util PROPERTY POSITION_INDEPENDENT_CODE TRUE) -endif() +set_property(TARGET util PROPERTY POSITION_INDEPENDENT_CODE TRUE) target_include_directories( util PUBLIC @@ -31,10 +28,6 @@ target_include_directories( "$" "$") -if(${CMAKE_C_COMPILER_ID} STREQUAL "SunPro") - add_definitions(-KPIC) -endif() - # TODO: improve test inclusion. if((BUILD_TESTING) AND ((NOT DEFINED MSVC_VERSION) OR (MSVC_VERSION GREATER "1800"))) add_subdirectory(tests) From 58e91c4304888d6979489aabd748fdb5126f1143 Mon Sep 17 00:00:00 2001 From: Erik Boasson Date: Fri, 18 Jan 2019 14:18:44 +0100 Subject: [PATCH 2/3] Use different variable for second attempt at finding clock_gettime This change allowed building on an ancient RH machine without breaking modern ones. --- src/os/CMakeLists.txt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/os/CMakeLists.txt b/src/os/CMakeLists.txt index cb64db5..1eecf48 100644 --- a/src/os/CMakeLists.txt +++ b/src/os/CMakeLists.txt @@ -78,8 +78,9 @@ elseif(UNIX) check_library_exists(c clock_gettime "" HAVE_CLOCK_GETTIME) if(NOT HAVE_CLOCK_GETTIME) # Before glibc 2.17, clock_gettime was in librt. - check_library_exists(rt clock_gettime "time.h" HAVE_CLOCK_GETTIME) - if(HAVE_CLOCK_GETTIME) + check_library_exists(rt clock_gettime "time.h" HAVE_CLOCK_GETTIME_RT) + if(HAVE_CLOCK_GETTIME_RT) + set(HAVE_CLOCK_GETTIME "${HAVE_CLOCK_GETTIME_RT}") target_link_libraries(OSAPI INTERFACE rt) endif() endif() From 29f0ef6e177380325c028ded796f4f70d96947d2 Mon Sep 17 00:00:00 2001 From: Erik Boasson Date: Fri, 18 Jan 2019 14:19:22 +0100 Subject: [PATCH 3/3] Fix "make install" on Unix and add tests for it to CI scripts Signed-off-by: Erik Boasson --- .travis.yml | 23 ++++++++++++++--------- appveyor.yml | 9 +++++++-- src/os/CMakeLists.txt | 8 +++++++- 3 files changed, 28 insertions(+), 12 deletions(-) diff --git a/.travis.yml b/.travis.yml index 560a56a..312d0dd 100644 --- a/.travis.yml +++ b/.travis.yml @@ -30,17 +30,17 @@ osx_xcode94: &osx_xcode94 matrix: include: - <<: *linux_gcc8 - env: [ BUILD_TYPE=Debug, C_COMPILER=gcc-8, CXX_COMPILER=g++-8 ] + env: [ BUILD_TYPE=Debug, C_COMPILER=gcc-8, CXX_COMPILER=g++-8, USE_SANITIZER=none ] - <<: *linux_gcc8 - env: [ BUILD_TYPE=Release, C_COMPILER=gcc-8, CXX_COMPILER=g++-8 ] + env: [ BUILD_TYPE=Release, C_COMPILER=gcc-8, CXX_COMPILER=g++-8, USE_SANITIZER=none ] - <<: *linux_clang60 - env: [ BUILD_TYPE=Debug, C_COMPILER=clang-6.0, CXX_COMPILER=clang++-6.0 ] + env: [ BUILD_TYPE=Debug, C_COMPILER=clang-6.0, CXX_COMPILER=clang++-6.0, USE_SANITIZER=address ] - <<: *linux_clang60 - env: [ BUILT_TYPE=Release, C_COMPILER=clang-6.0, CXX_COMPILER=clang++-6.0 ] + env: [ BUILT_TYPE=Release, C_COMPILER=clang-6.0, CXX_COMPILER=clang++-6.0, USE_SANITIZER=none ] - <<: *osx_xcode94 - env: [ BUILD_TYPE=Debug, C_COMPILER=clang, CXX_COMPILER=clang++ ] + env: [ BUILD_TYPE=Debug, C_COMPILER=clang, CXX_COMPILER=clang++, USE_SANITIZER=address ] - <<: *osx_xcode94 - env: [ BUILD_TYPE=Release, C_COMPILER=clang, CXX_COMPILER=clang++ ] + env: [ BUILD_TYPE=Release, C_COMPILER=clang, CXX_COMPILER=clang++, USE_SANITIZER=none ] before_install: @@ -67,7 +67,12 @@ script: - mkdir build - cd build - conan install .. - - cmake -DBUILD_TESTING=on -DCMAKE_BUILD_TYPE=${BUILD_TYPE} ../src - - cmake --build . + - cmake -DBUILD_TESTING=on -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DUSE_SANITIZER=${USE_SANITIZER} -DCMAKE_INSTALL_PREFIX=${PWD}/install ../src + - cmake --build . --target install + - mkdir install/share/CycloneDDS/examples/helloworld/build + - if [ "$USE_SANITIZER" = "none" ]; then + (cd install/share/CycloneDDS/examples/helloworld/build && cmake -DCMAKE_BUILD_TYPE=${BUILD_TYPE} .. && cmake --build .) ; + else + (cd install/share/CycloneDDS/examples/helloworld/build && cmake -DCMAKE_C_FLAGS=-fsanitize=address -DCMAKE_LINKER_FLAGS=-fsanitize=address -DCMAKE_BUILD_TYPE=${BUILD_TYPE} .. && cmake --build .) ; + fi - ctest -T test - diff --git a/appveyor.yml b/appveyor.yml index 8d7aef4..1d1f034 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -36,9 +36,14 @@ build_script: - mkdir build - cd build - conan install -s arch=%ARCH% -s build_type=%CONFIGURATION% .. - - cmake -DBUILD_TESTING=on -DCMAKE_BUILD_TYPE=%CONFIGURATION% -G "%GENERATOR%" ../src + - cmake -DBUILD_TESTING=on -DCMAKE_BUILD_TYPE=%CONFIGURATION% -DCMAKE_INSTALL_PREFIX=%CD%/install -G "%GENERATOR%" ../src + - cmake --build . --config %CONFIGURATION% --target install + - cd install/share/CycloneDDS/examples/helloworld + - mkdir build + - cd build + - cmake -DCMAKE_BUILD_TYPE=%CONFIGURATION% -G "%GENERATOR%" .. - cmake --build . --config %CONFIGURATION% + - cd ../../../../../.. test_script: - ctest --test-action test --build-config %CONFIGURATION% - diff --git a/src/os/CMakeLists.txt b/src/os/CMakeLists.txt index 1eecf48..83e1afd 100644 --- a/src/os/CMakeLists.txt +++ b/src/os/CMakeLists.txt @@ -120,12 +120,18 @@ if(BUILD_TESTING) add_subdirectory(tests) endif() +if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/include/os/${system_name}/os_platform_public.h") + set(os_platform_public_h "${CMAKE_CURRENT_SOURCE_DIR}/include/os/${system_name}/os_platform_public.h") +else() + set(os_platform_public_h "${CMAKE_CURRENT_SOURCE_DIR}/include/os/posix/os_platform_public.h") +endif() + install( FILES "${CMAKE_CURRENT_SOURCE_DIR}/include/os/os_public.h" "${CMAKE_CURRENT_SOURCE_DIR}/include/os/os_decl_attributes.h" "${CMAKE_CURRENT_SOURCE_DIR}/include/os/os_decl_attributes_sal.h" - "${CMAKE_CURRENT_SOURCE_DIR}/include/os/${system_name}/os_platform_public.h" + "${os_platform_public_h}" DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/ddsc/os" COMPONENT