Changes imported from Abseil "staging" branch:

- db6fa2aed56380c6708670659c6f8603284fcc4a Rework Abseil cmake/README.md by Abseil Team <absl-team@google.com>
  - 192c7d3553bc0fe98f6935ccecff48ed785d89f0 Add function attribute ABSL_ATTRIBUTE_FUNC_ALIGN(bytes) t... by Abseil Team <absl-team@google.com>
  - 1a93e95c71c656add346a0c1771bec26417347ad Internal change by Abseil Team <absl-team@google.com>
  - 5c6d3e023a8749a5cc89f4cc6b57b6684a28b1c1 Internal change by Shaindel Schwartz <shaindel@google.com>
  - e415990ea54cf882646b0bc0a75a6e3c6741ce5f Fix testing of UTF8 characters on Windows (https://github... by Abseil Team <absl-team@google.com>

GitOrigin-RevId: db6fa2aed56380c6708670659c6f8603284fcc4a
Change-Id: I128a7ca751fa207ef272809c1b908568d187c87e
pull/95/head
Abseil Team 7 years ago committed by Mark Barolak
parent 055cc7dce1
commit e2d1784597
  1. 162
      CMake/README.md
  2. 10
      absl/base/attributes.h
  3. 1
      absl/base/internal/malloc_hook.cc
  4. 6
      absl/strings/str_split_test.cc
  5. 1
      absl/synchronization/blocking_counter.h

@ -1,80 +1,82 @@
## Abseil CMake build instructions # Abseil CMake Build Instructions
Abseil comes with a CMake build script ([CMakeLists.txt](../CMakeLists.txt))
### Recommended usage : incorporate Abseil into an CMake project that can be used on a wide range of platforms ("C" stands for cross-platform.).
If you don't have CMake installed already, you can download it for free from
For API / ABI compatibility reasons, it is recommended to build <http://www.cmake.org/>.
and use abseil in a subdirectory of your project or as an embedded
dependency CMake works by generating native makefiles or build projects that can
be used in the compiler environment of your choice.
This is similar to the recommended usage of the googletest framework
( https://github.com/google/googletest/blob/master/googletest/README.md ) For API/ABI compatibility reasons, we strongly recommend building Abseil in a
subdirectory of your project or as an embedded dependency.
Build and use step-by-step
## Incorporating Abseil Into a CMake Project
1- Download abseil and copy it in a sub-directory in your project. The recommendations below are similar to those for using CMake within the
or add abseil as a git-submodule in your project googletest framework
(<https://github.com/google/googletest/blob/master/googletest/README.md#incorporating-into-an-existing-cmake-project>)
2- If not done yet, download and copy in your project the two dependencies of
abseil `cctz` and `googletest` ### Step-by-Step Instructions
* cctz https://github.com/google/cctz 1. If you haven't done so already, integrate the Abseil dependency
* googletest https://github.com/google/googletest [CCTZ](https://github.com/google/cctz) into your CMake project. Consequently, the
target 'cctz' needs to be declared in your CMake project **before** including Abseil.<br>
3- You can then use the cmake command `add_subdirectory()` to include Note: If you want to build the Abseil tests, you'll also need [Google Test](https://github.com/google/googletest). To disable Abseil tests, you have to pass
abseil directly and use the abseil targets in your project. `-DBUILD_TESTING=OFF` when configuring your project with CMake.
Note: Abseil requires CCTZ and the googletest framework. Consequently, 2. Download Abseil and copy it into a subdirectory in your CMake project or add
the targets `gtest`, `gtest_main`, `gmock` and `cctz` need Abseil as a [git submodule](https://git-scm.com/docs/git-submodule) in your
to be declared in your project before including abseil with CMake project.
`add_subdirectory`. However, if abseil is compiled with
`-DBUILD_TESTING=OFF`, then `gtest`, `gmock` and `gtest_main` are not 3. You can then use the CMake command
required. In addition, it's possible to override the name of the `cctz` [`add_subdirectory()`](https://cmake.org/cmake/help/latest/command/add_subdirectory.html)
target to a custom one with option `-DABSL_CCTZ_TARGET=*my_cctz*`. to include Abseil directly in your CMake project. In addition, it's possible to
customize the name of the `cctz` target with the `-DABSL_CCTZ_TARGET=*my_cctz*` option.
4- Add the absl:: target you wish to use to the `target_link_libraries()`
section of your executable or of your library 4. Add the **absl::** target you wish to use to the
[`target_link_libraries()`](https://cmake.org/cmake/help/latest/command/target_link_libraries.html)
section of your executable or of your library.<br>
Here is a short CMakeLists.txt example of a possible project file Here is a short CMakeLists.txt example of a project file using Abseil.
using abseil
```cmake
cmake_minimum_required(VERSION 2.8.12) cmake_minimum_required(VERSION 2.8.12)
project(my_project) project(my_project)
set(CMAKE_CXX_FLAGS "-std=c++11 -stdlib=libc++ ${CMAKE_CXX_FLAGS}") set(CMAKE_CXX_FLAGS "-std=c++11 -stdlib=libc++ ${CMAKE_CXX_FLAGS}")
if (MSVC) if(MSVC)
# /wd4005 macro-redefinition # /wd4005 macro-redefinition
# /wd4068 unknown pragma # /wd4068 unknown pragma
# /wd4244 conversion from 'type1' to 'type2' # /wd4244 conversion from 'type1' to 'type2'
# /wd4267 conversion from 'size_t' to 'type2' # /wd4267 conversion from 'size_t' to 'type2'
# /wd4800 force value to bool 'true' or 'false' (performance warning) # /wd4800 force value to bool 'true' or 'false' (performance warning)
add_compile_options(/wd4005 /wd4068 /wd4244 /wd4267 /wd4800) add_compile_options(/wd4005 /wd4068 /wd4244 /wd4267 /wd4800)
add_definitions(/DNOMINMAX /DWIN32_LEAN_AND_MEAN=1 /D_CRT_SECURE_NO_WARNINGS) add_definitions(/DNOMINMAX /DWIN32_LEAN_AND_MEAN=1 /D_CRT_SECURE_NO_WARNINGS)
endif() endif()
add_subdirectory(googletest) add_subdirectory(googletest)
add_subdirectory(cctz) add_subdirectory(cctz)
add_subdirectory(abseil-cpp) add_subdirectory(abseil-cpp)
add_executable(my_exe source.cpp) add_executable(my_exe source.cpp)
target_link_libraries(my_exe absl::base absl::synchronization absl::strings) target_link_libraries(my_exe absl::base absl::synchronization absl::strings)
```
As of this writing, that pull request requires -DBUILD_TESTING=OFF as it doesn't correctly export cctz's dependency on Google Benchmark. ### Available Abseil CMake Public Targets
You will find here a non exhaustive list of absl public targets Here's a non-exhaustive list of Abseil CMake public targets:
absl::base ```cmake
absl::algorithm absl::base
absl::container absl::algorithm
absl::debugging absl::container
absl::memory absl::debugging
absl::meta absl::memory
absl::numeric absl::meta
absl::strings absl::numeric
absl::synchronization absl::strings
absl::time absl::synchronization
absl::utility absl::time
absl::utility
```

@ -527,6 +527,16 @@
#define ABSL_ATTRIBUTE_PACKED #define ABSL_ATTRIBUTE_PACKED
#endif #endif
// ABSL_ATTRIBUTE_FUNC_ALIGN
//
// Tells the compiler to align the function start at least to certain
// alignment boundary
#if ABSL_HAVE_ATTRIBUTE(aligned) || (defined(__GNUC__) && !defined(__clang__))
#define ABSL_ATTRIBUTE_FUNC_ALIGN(bytes) __attribute__((aligned(bytes)))
#else
#define ABSL_ATTRIBUTE_FUNC_ALIGN(bytes)
#endif
// ABSL_CONST_INIT // ABSL_CONST_INIT
// //
// A variable declaration annotated with the `ABSL_CONST_INIT` attribute will // A variable declaration annotated with the `ABSL_CONST_INIT` attribute will

@ -437,6 +437,7 @@ static inline bool InHookCaller(const void* caller) {
return ADDR_IN_ATTRIBUTE_SECTION(caller, google_malloc) || return ADDR_IN_ATTRIBUTE_SECTION(caller, google_malloc) ||
ADDR_IN_ATTRIBUTE_SECTION(caller, malloc_hook) || ADDR_IN_ATTRIBUTE_SECTION(caller, malloc_hook) ||
ADDR_IN_ATTRIBUTE_SECTION(caller, blink_malloc); ADDR_IN_ATTRIBUTE_SECTION(caller, blink_malloc);
// We can use one section for everything except tcmalloc_or_debug // We can use one section for everything except tcmalloc_or_debug
// due to its special linkage mode, which prevents merging of the sections. // due to its special linkage mode, which prevents merging of the sections.
} }

@ -621,7 +621,7 @@ TEST(Split, StringDelimiter) {
TEST(Split, UTF8) { TEST(Split, UTF8) {
// Tests splitting utf8 strings and utf8 delimiters. // Tests splitting utf8 strings and utf8 delimiters.
std::string utf8_string = "\u03BA\u1F79\u03C3\u03BC\u03B5"; std::string utf8_string = u8"\u03BA\u1F79\u03C3\u03BC\u03B5";
{ {
// A utf8 input std::string with an ascii delimiter. // A utf8 input std::string with an ascii delimiter.
std::string to_split = "a," + utf8_string; std::string to_split = "a," + utf8_string;
@ -641,8 +641,8 @@ TEST(Split, UTF8) {
{ {
// A utf8 input std::string and ByAnyChar with ascii chars. // A utf8 input std::string and ByAnyChar with ascii chars.
std::vector<absl::string_view> v = std::vector<absl::string_view> v =
absl::StrSplit("Foo h\u00E4llo th\u4E1Ere", absl::ByAnyChar(" \t")); absl::StrSplit(u8"Foo h\u00E4llo th\u4E1Ere", absl::ByAnyChar(" \t"));
EXPECT_THAT(v, ElementsAre("Foo", "h\u00E4llo", "th\u4E1Ere")); EXPECT_THAT(v, ElementsAre("Foo", u8"h\u00E4llo", u8"th\u4E1Ere"));
} }
} }

@ -93,4 +93,5 @@ class BlockingCounter {
}; };
} // namespace absl } // namespace absl
#endif // ABSL_SYNCHRONIZATION_BLOCKING_COUNTER_H_ #endif // ABSL_SYNCHRONIZATION_BLOCKING_COUNTER_H_

Loading…
Cancel
Save