You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@datasketches.apache.org by jm...@apache.org on 2020/06/12 19:19:53 UTC
[incubator-datasketches-cpp] 01/01: cmake improvements: don't
produce empty library artifact,
add (primitive and fragile) code coverage support
This is an automated email from the ASF dual-hosted git repository.
jmalkin pushed a commit to branch code_coverage
in repository https://gitbox.apache.org/repos/asf/incubator-datasketches-cpp.git
commit 4274349a4888ba8b833213e4a728507d5caa726e
Author: Jon Malkin <jm...@users.noreply.github.com>
AuthorDate: Fri Jun 12 12:19:02 2020 -0700
cmake improvements: don't produce empty library artifact, add (primitive and fragile) code coverage support
---
CMakeLists.txt | 57 ++++++++++++++++++++++++++++++++++++---------------------
1 file changed, 36 insertions(+), 21 deletions(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 79595b1..c98c4a2 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -29,18 +29,6 @@ if(EXISTS "${LOC_PATH}")
message(FATAL_ERROR "You cannot build in a source directory (or any directory with a CMakeLists.txt file). Please make a build subdirectory. Feel free to remove CMakeCache.txt and CMakeFiles.")
endif()
-# set default build type to debug
-# Mostly from: https://blog.kitware.com/cmake-and-the-default-build-type/
-set(default_build_type "Release")
-if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
- message(STATUS "Setting build type to '${default_build_type}' as none was specified.")
- set(CMAKE_BUILD_TYPE "${default_build_type}" CACHE
- STRING "Choose the type of build." FORCE)
- # Set the possible values of build type for cmake-gui
- set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS
- "Debug" "Release" "MinSizeRel" "RelWithDebInfo")
-endif()
-
# Ensure builds on Windows export all symbols
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
@@ -66,7 +54,7 @@ set(CMAKE_POSITION_INDEPENDENT_CODE ON)
set(CMAKE_C_EXTENSIONS OFF)
set(CMAKE_CXX_EXTENSIONS OFF)
-list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
+#list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
###### OPTIONS ######
# Enable testing
@@ -75,7 +63,30 @@ if (BUILD_TESTS)
enable_testing()
endif()
-add_library(datasketches SHARED "")
+option(COVERAGE "Enable code coverage reporting (g++/clang only)" OFF)
+if(COVERAGE AND CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
+ set(CMAKE_BUILD_TYPE "Debug" FORCE)
+ add_compile_options(--coverage -O0 -g3)
+ add_link_options(--coverage)
+endif()
+
+# set default build type to Release
+# Derived from: https://blog.kitware.com/cmake-and-the-default-build-type/
+set(default_build_type "Release")
+if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
+ message(STATUS "Setting build type to '${default_build_type}' as none was specified.")
+ set(CMAKE_BUILD_TYPE "${default_build_type}" CACHE
+ STRING "Choose the type of build." FORCE)
+ # Set the possible values of build type for cmake-gui
+ set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS
+ "Debug" "Release" "MinSizeRel" "RelWithDebInfo")
+endif()
+
+###### TARGETS ######
+# do we need the next line since we don't actually make a library anymore?
+add_library(datasketches INTERFACE)
+
+target_compile_features(datasketches INTERFACE cxx_std_11)
add_subdirectory(common)
add_subdirectory(hll)
@@ -89,18 +100,22 @@ if (WITH_PYTHON)
add_subdirectory(python)
endif()
-target_link_libraries(datasketches PUBLIC hll cpc kll fi theta sampling)
+target_link_libraries(datasketches INTERFACE hll cpc kll fi theta sampling)
+
+if (COVERAGE)
+ find_program(LCOV_PATH NAMES "lcov")
+ find_program(GENHTML_PATH NAMES "genhtml")
+ if (NOT LCOV_PATH-NOTFOUND AND NOT GENHTML_PATH-NOTFOUND)
+ add_custom_target(coverage_report
+ COMMAND ${LCOV_PATH} --capture --exclude '*/test/*' --exclude '/Library/*' --exclude '/usr/include/*' --directory . --output-file lcov.info
+ COMMAND ${GENHTML_PATH} --legend lcov.info --output-directory coverage --demangle-cpp)
+ endif()
+endif()
-set_target_properties(datasketches PROPERTIES
- LINKER_LANGUAGE CXX
- CXX_STANDARD 11
- CXX_STANDARD_REQUIRED YES
-)
# # Installation
install(TARGETS datasketches
EXPORT ${PROJCT_NAME}
- DESTINATION ${CMAKE_INSTALL_LIBDIR}
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/DataSketches
INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/DataSketches
)
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@datasketches.apache.org
For additional commands, e-mail: commits-help@datasketches.apache.org