From d5134a7f11e32d11caa67e75ae2ae2e506fb54ba Mon Sep 17 00:00:00 2001 From: Adrien Devresse Date: Tue, 26 Sep 2017 20:37:27 -0700 Subject: CMake support - initial cmake support - downgrade cmake requirement to 2.8.12 - factorize cmake test flags / libs options - refactor test / library under helpers functions, follow bazel's style - Add fix for MSVC and Windows support ( thx @patrikfors ) - Switch to default "add_subdirectory()" usage mode - add CMake/README.md for instructions - add header-only cmake target generator - map absl target to absl:: namespace --- CMake/README.md | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 CMake/README.md (limited to 'CMake/README.md') diff --git a/CMake/README.md b/CMake/README.md new file mode 100644 index 0000000..53d3d33 --- /dev/null +++ b/CMake/README.md @@ -0,0 +1,41 @@ + +## Abseil CMake build instructions + + +### Recommended usage : incorporate Abseil into an CMake project + + We recommended to build and use abseil in the same way than googletest + ( https://github.com/google/googletest/blob/master/googletest/README.md ) + + * Download abseil and copy it in a sub-directory in your project. + + * Or add abseil as a git-submodule in your project + + You can then use the cmake `add_subdirectory()` command to include + abseil directly and use the abseil targets in your project. + + Abseil requires CCTZ and the googletest framework. Consequently, + the targets `gtest`, `gtest_main`, `gmock` and `cctz` need + to be declared in your project before including abseil with `add_subdirectory`. + You can find instructions on how to get and build these projects at these + URL : + * cctz https://github.com/google/cctz + * googletest https://github.com/google/googletest + + + + Here is a short CMakeLists.txt example of a possible project file + using abseil + + project(my_project) + + add_subdirectory(googletest) + add_subdirectory(cctz) + add_subdirectory(abseil-cpp) + + add_executable(my_exe source.cpp) + target_link_libraries(my_exe base synchronization strings) + + + + -- cgit v1.2.3 From a3322e3bfc96f33d3e195fd38a7c09f263e7e75f Mon Sep 17 00:00:00 2001 From: Adrien Devresse Date: Tue, 31 Oct 2017 22:15:26 +0100 Subject: Continue CMake support improvement - Update documentation - Remove type target - Remove typos - simplify target - improve 1-1 matchign with Bazel targets --- CMake/AbseilHelpers.cmake | 3 +- CMake/README.md | 79 +++++++++++++++++++++++++++++-------------- absl/base/CMakeLists.txt | 49 +++++++++++++++++++++++++-- absl/debugging/CMakeLists.txt | 39 +++++++++++++++++++-- absl/strings/CMakeLists.txt | 1 - absl/types/CMakeLists.txt | 54 +++++++++++++++++++---------- 6 files changed, 174 insertions(+), 51 deletions(-) (limited to 'CMake/README.md') diff --git a/CMake/AbseilHelpers.cmake b/CMake/AbseilHelpers.cmake index f6243c3..9e1772b 100644 --- a/CMake/AbseilHelpers.cmake +++ b/CMake/AbseilHelpers.cmake @@ -16,10 +16,9 @@ include(CMakeParseArguments) -set(_ABSL_HELPERS_PATH "${CMAKE_CURRENT_LIST_DIR}") # -# create a static library absl_based on the following variable +# create a library in the absl namespace # # parameters # SOURCES : sources files for the library diff --git a/CMake/README.md b/CMake/README.md index 53d3d33..ea56b6d 100644 --- a/CMake/README.md +++ b/CMake/README.md @@ -4,37 +4,64 @@ ### Recommended usage : incorporate Abseil into an CMake project - We recommended to build and use abseil in the same way than googletest - ( https://github.com/google/googletest/blob/master/googletest/README.md ) + For API / ABI compatibility reasons, it is recommended to build + and use abseil in a subdirectory of your project or as an embedded + dependency - * Download abseil and copy it in a sub-directory in your project. + This is similar to the recommended usage of the googletest framework + ( https://github.com/google/googletest/blob/master/googletest/README.md ) - * Or add abseil as a git-submodule in your project + Build and use step-by-step - You can then use the cmake `add_subdirectory()` command to include - abseil directly and use the abseil targets in your project. - Abseil requires CCTZ and the googletest framework. Consequently, + 1- Download abseil and copy it in a sub-directory in your project. + or add abseil as a git-submodule in your project + + 2- If not done yet, download and copy in your project the two dependencies of + abseil `cctz` and `googletest` + + * cctz https://github.com/google/cctz + * googletest https://github.com/google/googletest + + 3- You can then use the cmake command `add_subdirectory()` to include + abseil directly and use the abseil targets in your project. + + Note: Abseil requires CCTZ and the googletest framework. Consequently, the targets `gtest`, `gtest_main`, `gmock` and `cctz` need - to be declared in your project before including abseil with `add_subdirectory`. - You can find instructions on how to get and build these projects at these - URL : - * cctz https://github.com/google/cctz - * googletest https://github.com/google/googletest - - - - Here is a short CMakeLists.txt example of a possible project file - using abseil - - project(my_project) - - add_subdirectory(googletest) - add_subdirectory(cctz) - add_subdirectory(abseil-cpp) - - add_executable(my_exe source.cpp) - target_link_libraries(my_exe base synchronization strings) + to be declared in your project before including abseil with `add_subdirectory`. + + + 4- Add the absl:: target you wish to use to the `target_link_libraries()` + section of your executable or of your library + + + Here is a short CMakeLists.txt example of a possible project file + using abseil + + project(my_project) + + add_subdirectory(googletest) + add_subdirectory(cctz) + add_subdirectory(abseil-cpp) + + add_executable(my_exe source.cpp) + target_link_libraries(my_exe absl::base absl::synchronization absl::strings) + + + You will find here a non exhaustive list of absl public targets + + absl::base + absl::algorithm + absl::container + absl::debugging + absl::memory + absl::meta + absl::numeric + absl::strings + absl::synchronization + absl::time + absl::utility + diff --git a/absl/base/CMakeLists.txt b/absl/base/CMakeLists.txt index 06f09d8..3e94d51 100644 --- a/absl/base/CMakeLists.txt +++ b/absl/base/CMakeLists.txt @@ -65,10 +65,8 @@ list(APPEND BASE_SRC "internal/sysinfo.cc" "internal/thread_identity.cc" "internal/unscaledcycleclock.cc" - "internal/spinlock_wait.cc" "internal/low_level_alloc.cc" "internal/malloc_hook.cc" - "dynamic_annotations.cc" ${BASE_PUBLIC_HEADERS} ${BASE_INTERNAL_HEADERS} ) @@ -78,6 +76,9 @@ absl_library( absl_base SOURCES ${BASE_SRC} + PUBLIC_LIBRARIES + absl_dynamic_annotations + absl_spinlock_wait EXPORT_NAME base ) @@ -93,6 +94,8 @@ absl_library( ${MALLOC_EXTENSION_SRC} PUBLIC_LIBRARIES ${MALLOC_EXTENSION_PUBLIC_LIBRARIES} + EXPORT_NAME + malloc_extension ) # throw delegate library @@ -107,9 +110,51 @@ absl_library( ${THROW_DELEGATE_PUBLIC_LIBRARIES} PRIVATE_COMPILE_FLAGS ${ABSL_EXCEPTIONS_FLAG} + EXPORT_NAME + throw_delegate ) +# dynamic_annotations library +set(DYNAMIC_ANNOTATIONS_SRC "dynamic_annotations.cc") + +absl_library( + TARGET + absl_dynamic_annotations + SOURCES + ${DYNAMIC_ANNOTATIONS_SRC} +) + + +# spinlock_wait library +set(SPINLOCK_WAIT_SRC "internal/spinlock_wait.cc") + +absl_library( + TARGET + absl_spinlock_wait + SOURCES + ${SPINLOCK_WAIT_SRC} +) + + +# malloc_internal library +list(APPEND MALLOC_INTERNAL_SRC + "internal/low_level_alloc.cc" + "internal/malloc_hook.cc" + "internal/malloc_hook_mmap_linux.inc" +) + +absl_library( + TARGET + absl_malloc_internal + SOURCES + ${MALLOC_INTERNAL_SRC} + PUBLIC_LIBRARIES + absl_dynamic_annotations +) + + + # ## TESTS # diff --git a/absl/debugging/CMakeLists.txt b/absl/debugging/CMakeLists.txt index 48529a3..57efe80 100644 --- a/absl/debugging/CMakeLists.txt +++ b/absl/debugging/CMakeLists.txt @@ -42,17 +42,52 @@ absl_library( absl_stacktrace SOURCES ${STACKTRACE_SRC} - PUBLIC_LIBRARIES - ${STACKTRACE_PUBLIC_LIBRARIES} EXPORT_NAME stacktrace ) +list(APPEND LEAK_CHECK_SRC + "leak_check.cc" +) + + +# leak_check library +absl_library( + TARGET + absl_leak_check + SOURCES + ${LEAK_CHECK_SRC} + PUBLIC_LIBRARIES + absl_base + EXPORT_NAME + leak_check +) + + +# component target absl_header_library( TARGET absl_debugging + PUBLIC_LIBRARIES + absl_stacktrace absl_leak_check EXPORT_NAME debugging ) +# +## TESTS +# + +# test leak_check_test +list(APPEND LEAK_CHECK_TEST_SRC "leak_check_test.cc") + +absl_test( + TARGET + leak_check_test + SOURCES + ${LEAK_CHECK_TEST_SRC} + PUBLIC_LIBRARIES + absl_leak_check +) + diff --git a/absl/strings/CMakeLists.txt b/absl/strings/CMakeLists.txt index 7923e34..dcd4974 100644 --- a/absl/strings/CMakeLists.txt +++ b/absl/strings/CMakeLists.txt @@ -16,7 +16,6 @@ list(APPEND STRINGS_PUBLIC_HEADERS - "ascii_ctype.h" "ascii.h" "escaping.h" "match.h" diff --git a/absl/types/CMakeLists.txt b/absl/types/CMakeLists.txt index 95b19fe..3e46449 100644 --- a/absl/types/CMakeLists.txt +++ b/absl/types/CMakeLists.txt @@ -23,12 +23,32 @@ list(APPEND TYPES_PUBLIC_HEADERS ) +# any library +absl_header_library( + TARGET + absl_any + PUBLIC_LIBRARIES + absl::utility + EXPORT_NAME + any +) + +# span library +absl_header_library( + TARGET + absl_span + PUBLIC_LIBRARIES + absl::utility + EXPORT_NAME + span +) + +# bad_any_cast library list(APPEND BAD_ANY_CAST_SRC "bad_any_cast.cc" ${TYPES_PUBLIC_HEADERS} ) -set(BAD_ANY_CAST_PUBLIC_LIBRARIES absl::base) absl_library( TARGET @@ -36,13 +56,16 @@ absl_library( SOURCES ${BAD_ANY_CAST_SRC} PUBLIC_LIBRARIES - ${BAD_ANY_CAST_PUBLIC_LIBRARIES} + absl::base absl::any + EXPORT_NAME + bad_any_cast ) - -set(OPTIONAL_SRC "optional.cc") -set(OPTIONAL_PUBLIC_LIBRARIES absl::base) +# optional library +list(APPEND OPTIONAL_SRC + "optional.cc" +) absl_library( TARGET @@ -50,7 +73,9 @@ absl_library( SOURCES ${OPTIONAL_SRC} PUBLIC_LIBRARIES - ${OPTIONAL_PUBLIC_LIBRARIES} + absl::base + EXPORT_NAME + optional ) @@ -64,19 +89,12 @@ absl_library( ${BAD_OPTIONAL_ACCESS_SRC} PUBLIC_LIBRARIES ${BAD_OPTIONAL_ACCESS_PUBLIC_LIBRARIES} + EXPORT_NAME + bad_optional_access ) -absl_header_library( - TARGET - absl_types - PUBLIC_LIBRARIES - absl_optional absl_bad_any_cast absl_bad_optional_access - EXPORT_NAME - types -) - # ## TESTS # @@ -84,7 +102,7 @@ absl_header_library( # test any_test set(ANY_TEST_SRC "any_test.cc") -set(ANY_TEST_PUBLIC_LIBRARIES absl::base absl_throw_delegate absl_bad_any_cast test_instance_tracker_lib) +set(ANY_TEST_PUBLIC_LIBRARIES absl::base absl::throw_delegate absl::any absl::bad_any_cast test_instance_tracker_lib) absl_test( TARGET @@ -111,7 +129,7 @@ absl_test( # test span_test set(SPAN_TEST_SRC "span_test.cc") -set(SPAN_TEST_PUBLIC_LIBRARIES absl::base absl::strings absl_throw_delegate absl_bad_any_cast test_instance_tracker_lib) +set(SPAN_TEST_PUBLIC_LIBRARIES absl::base absl::strings absl::throw_delegate absl::span test_instance_tracker_lib) absl_test( TARGET @@ -139,7 +157,7 @@ absl_test( # test optional_test set(OPTIONAL_TEST_SRC "optional_test.cc") -set(OPTIONAL_TEST_PUBLIC_LIBRARIES absl::base absl_throw_delegate absl_optional bad_optional_access) +set(OPTIONAL_TEST_PUBLIC_LIBRARIES absl::base absl::throw_delegate absl::optional absl_bad_optional_access) absl_test( TARGET -- cgit v1.2.3 From 42a5f28b30247d89bbf02ddaacd9b277ded9fe1f Mon Sep 17 00:00:00 2001 From: Jonathan Cohen Date: Thu, 2 Nov 2017 16:01:16 -0400 Subject: Update README.md --- CMake/README.md | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'CMake/README.md') diff --git a/CMake/README.md b/CMake/README.md index ea56b6d..21633f1 100644 --- a/CMake/README.md +++ b/CMake/README.md @@ -38,8 +38,11 @@ Here is a short CMakeLists.txt example of a possible project file using abseil + cmake_minimum_required(VERSION 2.8.12) project(my_project) + set(CMAKE_CXX_FLAGS "-std=c++11 -stdlib=libc++ ${CMAKE_CXX_FLAGS}") + add_subdirectory(googletest) add_subdirectory(cctz) add_subdirectory(abseil-cpp) @@ -48,6 +51,8 @@ target_link_libraries(my_exe absl::base absl::synchronization absl::strings) +You will need to create your own CMake files for cctz until https://github.com/google/cctz/pull/54 lands. As of this writing, that pull request requires -DBUILD_TESTING=OFF as it doesn't correctly export cctz's dependency on Google Benchmark. + You will find here a non exhaustive list of absl public targets absl::base -- cgit v1.2.3