mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-12-16 00:17:03 +00:00
Add vendored dependencies & cleanup script
This commit is contained in:
545
third_party/abseil-cpp/CMake/AbseilDll.cmake
vendored
Normal file
545
third_party/abseil-cpp/CMake/AbseilDll.cmake
vendored
Normal file
@@ -0,0 +1,545 @@
|
||||
include(CMakeParseArguments)
|
||||
include(GNUInstallDirs)
|
||||
|
||||
set(ABSL_INTERNAL_DLL_FILES
|
||||
"algorithm/algorithm.h"
|
||||
"algorithm/container.h"
|
||||
"base/attributes.h"
|
||||
"base/call_once.h"
|
||||
"base/casts.h"
|
||||
"base/config.h"
|
||||
"base/const_init.h"
|
||||
"base/dynamic_annotations.h"
|
||||
"base/internal/atomic_hook.h"
|
||||
"base/internal/cycleclock.cc"
|
||||
"base/internal/cycleclock.h"
|
||||
"base/internal/direct_mmap.h"
|
||||
"base/internal/dynamic_annotations.h"
|
||||
"base/internal/endian.h"
|
||||
"base/internal/errno_saver.h"
|
||||
"base/internal/exponential_biased.cc"
|
||||
"base/internal/exponential_biased.h"
|
||||
"base/internal/fast_type_id.h"
|
||||
"base/internal/hide_ptr.h"
|
||||
"base/internal/identity.h"
|
||||
"base/internal/invoke.h"
|
||||
"base/internal/inline_variable.h"
|
||||
"base/internal/low_level_alloc.cc"
|
||||
"base/internal/low_level_alloc.h"
|
||||
"base/internal/low_level_scheduling.h"
|
||||
"base/internal/per_thread_tls.h"
|
||||
"base/internal/periodic_sampler.cc"
|
||||
"base/internal/periodic_sampler.h"
|
||||
"base/internal/pretty_function.h"
|
||||
"base/internal/raw_logging.cc"
|
||||
"base/internal/raw_logging.h"
|
||||
"base/internal/scheduling_mode.h"
|
||||
"base/internal/scoped_set_env.cc"
|
||||
"base/internal/scoped_set_env.h"
|
||||
"base/internal/strerror.h"
|
||||
"base/internal/strerror.cc"
|
||||
"base/internal/spinlock.cc"
|
||||
"base/internal/spinlock.h"
|
||||
"base/internal/spinlock_wait.cc"
|
||||
"base/internal/spinlock_wait.h"
|
||||
"base/internal/sysinfo.cc"
|
||||
"base/internal/sysinfo.h"
|
||||
"base/internal/thread_annotations.h"
|
||||
"base/internal/thread_identity.cc"
|
||||
"base/internal/thread_identity.h"
|
||||
"base/internal/throw_delegate.cc"
|
||||
"base/internal/throw_delegate.h"
|
||||
"base/internal/tsan_mutex_interface.h"
|
||||
"base/internal/unaligned_access.h"
|
||||
"base/internal/unscaledcycleclock.cc"
|
||||
"base/internal/unscaledcycleclock.h"
|
||||
"base/log_severity.cc"
|
||||
"base/log_severity.h"
|
||||
"base/macros.h"
|
||||
"base/optimization.h"
|
||||
"base/options.h"
|
||||
"base/policy_checks.h"
|
||||
"base/port.h"
|
||||
"base/thread_annotations.h"
|
||||
"cleanup/cleanup.h"
|
||||
"cleanup/internal/cleanup.h"
|
||||
"container/btree_map.h"
|
||||
"container/btree_set.h"
|
||||
"container/fixed_array.h"
|
||||
"container/flat_hash_map.h"
|
||||
"container/flat_hash_set.h"
|
||||
"container/inlined_vector.h"
|
||||
"container/internal/btree.h"
|
||||
"container/internal/btree_container.h"
|
||||
"container/internal/common.h"
|
||||
"container/internal/compressed_tuple.h"
|
||||
"container/internal/container_memory.h"
|
||||
"container/internal/counting_allocator.h"
|
||||
"container/internal/hash_function_defaults.h"
|
||||
"container/internal/hash_policy_traits.h"
|
||||
"container/internal/hashtable_debug.h"
|
||||
"container/internal/hashtable_debug_hooks.h"
|
||||
"container/internal/hashtablez_sampler.cc"
|
||||
"container/internal/hashtablez_sampler.h"
|
||||
"container/internal/hashtablez_sampler_force_weak_definition.cc"
|
||||
"container/internal/have_sse.h"
|
||||
"container/internal/inlined_vector.h"
|
||||
"container/internal/layout.h"
|
||||
"container/internal/node_hash_policy.h"
|
||||
"container/internal/raw_hash_map.h"
|
||||
"container/internal/raw_hash_set.cc"
|
||||
"container/internal/raw_hash_set.h"
|
||||
"container/internal/tracked.h"
|
||||
"container/node_hash_map.h"
|
||||
"container/node_hash_set.h"
|
||||
"debugging/failure_signal_handler.cc"
|
||||
"debugging/failure_signal_handler.h"
|
||||
"debugging/leak_check.h"
|
||||
"debugging/leak_check_disable.cc"
|
||||
"debugging/stacktrace.cc"
|
||||
"debugging/stacktrace.h"
|
||||
"debugging/symbolize.cc"
|
||||
"debugging/symbolize.h"
|
||||
"debugging/internal/address_is_readable.cc"
|
||||
"debugging/internal/address_is_readable.h"
|
||||
"debugging/internal/demangle.cc"
|
||||
"debugging/internal/demangle.h"
|
||||
"debugging/internal/elf_mem_image.cc"
|
||||
"debugging/internal/elf_mem_image.h"
|
||||
"debugging/internal/examine_stack.cc"
|
||||
"debugging/internal/examine_stack.h"
|
||||
"debugging/internal/stack_consumption.cc"
|
||||
"debugging/internal/stack_consumption.h"
|
||||
"debugging/internal/stacktrace_config.h"
|
||||
"debugging/internal/symbolize.h"
|
||||
"debugging/internal/vdso_support.cc"
|
||||
"debugging/internal/vdso_support.h"
|
||||
"functional/internal/front_binder.h"
|
||||
"functional/bind_front.h"
|
||||
"functional/function_ref.h"
|
||||
"functional/internal/function_ref.h"
|
||||
"hash/hash.h"
|
||||
"hash/internal/city.h"
|
||||
"hash/internal/city.cc"
|
||||
"hash/internal/hash.h"
|
||||
"hash/internal/hash.cc"
|
||||
"hash/internal/spy_hash_state.h"
|
||||
"hash/internal/low_level_hash.h"
|
||||
"hash/internal/low_level_hash.cc"
|
||||
"memory/memory.h"
|
||||
"meta/type_traits.h"
|
||||
"numeric/bits.h"
|
||||
"numeric/int128.cc"
|
||||
"numeric/int128.h"
|
||||
"numeric/internal/bits.h"
|
||||
"numeric/internal/representation.h"
|
||||
"random/bernoulli_distribution.h"
|
||||
"random/beta_distribution.h"
|
||||
"random/bit_gen_ref.h"
|
||||
"random/discrete_distribution.cc"
|
||||
"random/discrete_distribution.h"
|
||||
"random/distributions.h"
|
||||
"random/exponential_distribution.h"
|
||||
"random/gaussian_distribution.cc"
|
||||
"random/gaussian_distribution.h"
|
||||
"random/internal/distribution_caller.h"
|
||||
"random/internal/fastmath.h"
|
||||
"random/internal/fast_uniform_bits.h"
|
||||
"random/internal/generate_real.h"
|
||||
"random/internal/iostream_state_saver.h"
|
||||
"random/internal/mock_helpers.h"
|
||||
"random/internal/nonsecure_base.h"
|
||||
"random/internal/pcg_engine.h"
|
||||
"random/internal/platform.h"
|
||||
"random/internal/pool_urbg.cc"
|
||||
"random/internal/pool_urbg.h"
|
||||
"random/internal/randen.cc"
|
||||
"random/internal/randen.h"
|
||||
"random/internal/randen_detect.cc"
|
||||
"random/internal/randen_detect.h"
|
||||
"random/internal/randen_engine.h"
|
||||
"random/internal/randen_hwaes.cc"
|
||||
"random/internal/randen_hwaes.h"
|
||||
"random/internal/randen_round_keys.cc"
|
||||
"random/internal/randen_slow.cc"
|
||||
"random/internal/randen_slow.h"
|
||||
"random/internal/randen_traits.h"
|
||||
"random/internal/salted_seed_seq.h"
|
||||
"random/internal/seed_material.cc"
|
||||
"random/internal/seed_material.h"
|
||||
"random/internal/sequence_urbg.h"
|
||||
"random/internal/traits.h"
|
||||
"random/internal/uniform_helper.h"
|
||||
"random/internal/wide_multiply.h"
|
||||
"random/log_uniform_int_distribution.h"
|
||||
"random/poisson_distribution.h"
|
||||
"random/random.h"
|
||||
"random/seed_gen_exception.cc"
|
||||
"random/seed_gen_exception.h"
|
||||
"random/seed_sequences.cc"
|
||||
"random/seed_sequences.h"
|
||||
"random/uniform_int_distribution.h"
|
||||
"random/uniform_real_distribution.h"
|
||||
"random/zipf_distribution.h"
|
||||
"status/internal/status_internal.h"
|
||||
"status/internal/statusor_internal.h"
|
||||
"status/status.h"
|
||||
"status/status.cc"
|
||||
"status/statusor.h"
|
||||
"status/statusor.cc"
|
||||
"status/status_payload_printer.h"
|
||||
"status/status_payload_printer.cc"
|
||||
"strings/ascii.cc"
|
||||
"strings/ascii.h"
|
||||
"strings/charconv.cc"
|
||||
"strings/charconv.h"
|
||||
"strings/cord.cc"
|
||||
"strings/cord.h"
|
||||
"strings/escaping.cc"
|
||||
"strings/escaping.h"
|
||||
"strings/internal/charconv_bigint.cc"
|
||||
"strings/internal/charconv_bigint.h"
|
||||
"strings/internal/charconv_parse.cc"
|
||||
"strings/internal/charconv_parse.h"
|
||||
"strings/internal/cord_internal.cc"
|
||||
"strings/internal/cord_internal.h"
|
||||
"strings/internal/cord_rep_consume.h"
|
||||
"strings/internal/cord_rep_consume.cc"
|
||||
"strings/internal/cord_rep_btree.cc"
|
||||
"strings/internal/cord_rep_btree.h"
|
||||
"strings/internal/cord_rep_btree_navigator.cc"
|
||||
"strings/internal/cord_rep_btree_navigator.h"
|
||||
"strings/internal/cord_rep_btree_reader.cc"
|
||||
"strings/internal/cord_rep_btree_reader.h"
|
||||
"strings/internal/cord_rep_flat.h"
|
||||
"strings/internal/cord_rep_ring.cc"
|
||||
"strings/internal/cord_rep_ring.h"
|
||||
"strings/internal/cord_rep_ring_reader.h"
|
||||
"strings/internal/cordz_functions.cc"
|
||||
"strings/internal/cordz_functions.h"
|
||||
"strings/internal/cordz_handle.cc"
|
||||
"strings/internal/cordz_handle.h"
|
||||
"strings/internal/cordz_info.cc"
|
||||
"strings/internal/cordz_info.h"
|
||||
"strings/internal/cordz_sample_token.cc"
|
||||
"strings/internal/cordz_sample_token.h"
|
||||
"strings/internal/cordz_statistics.h"
|
||||
"strings/internal/cordz_update_scope.h"
|
||||
"strings/internal/cordz_update_tracker.h"
|
||||
"strings/internal/stl_type_traits.h"
|
||||
"strings/internal/string_constant.h"
|
||||
"strings/match.cc"
|
||||
"strings/match.h"
|
||||
"strings/numbers.cc"
|
||||
"strings/numbers.h"
|
||||
"strings/str_format.h"
|
||||
"strings/str_cat.cc"
|
||||
"strings/str_cat.h"
|
||||
"strings/str_join.h"
|
||||
"strings/str_replace.cc"
|
||||
"strings/str_replace.h"
|
||||
"strings/str_split.cc"
|
||||
"strings/str_split.h"
|
||||
"strings/string_view.cc"
|
||||
"strings/string_view.h"
|
||||
"strings/strip.h"
|
||||
"strings/substitute.cc"
|
||||
"strings/substitute.h"
|
||||
"strings/internal/char_map.h"
|
||||
"strings/internal/escaping.h"
|
||||
"strings/internal/escaping.cc"
|
||||
"strings/internal/memutil.cc"
|
||||
"strings/internal/memutil.h"
|
||||
"strings/internal/ostringstream.cc"
|
||||
"strings/internal/ostringstream.h"
|
||||
"strings/internal/pow10_helper.cc"
|
||||
"strings/internal/pow10_helper.h"
|
||||
"strings/internal/resize_uninitialized.h"
|
||||
"strings/internal/str_format/arg.cc"
|
||||
"strings/internal/str_format/arg.h"
|
||||
"strings/internal/str_format/bind.cc"
|
||||
"strings/internal/str_format/bind.h"
|
||||
"strings/internal/str_format/checker.h"
|
||||
"strings/internal/str_format/extension.cc"
|
||||
"strings/internal/str_format/extension.h"
|
||||
"strings/internal/str_format/float_conversion.cc"
|
||||
"strings/internal/str_format/float_conversion.h"
|
||||
"strings/internal/str_format/output.cc"
|
||||
"strings/internal/str_format/output.h"
|
||||
"strings/internal/str_format/parser.cc"
|
||||
"strings/internal/str_format/parser.h"
|
||||
"strings/internal/str_join_internal.h"
|
||||
"strings/internal/str_split_internal.h"
|
||||
"strings/internal/utf8.cc"
|
||||
"strings/internal/utf8.h"
|
||||
"synchronization/barrier.cc"
|
||||
"synchronization/barrier.h"
|
||||
"synchronization/blocking_counter.cc"
|
||||
"synchronization/blocking_counter.h"
|
||||
"synchronization/mutex.cc"
|
||||
"synchronization/mutex.h"
|
||||
"synchronization/notification.cc"
|
||||
"synchronization/notification.h"
|
||||
"synchronization/internal/create_thread_identity.cc"
|
||||
"synchronization/internal/create_thread_identity.h"
|
||||
"synchronization/internal/futex.h"
|
||||
"synchronization/internal/graphcycles.cc"
|
||||
"synchronization/internal/graphcycles.h"
|
||||
"synchronization/internal/kernel_timeout.h"
|
||||
"synchronization/internal/per_thread_sem.cc"
|
||||
"synchronization/internal/per_thread_sem.h"
|
||||
"synchronization/internal/thread_pool.h"
|
||||
"synchronization/internal/waiter.cc"
|
||||
"synchronization/internal/waiter.h"
|
||||
"time/civil_time.cc"
|
||||
"time/civil_time.h"
|
||||
"time/clock.cc"
|
||||
"time/clock.h"
|
||||
"time/duration.cc"
|
||||
"time/format.cc"
|
||||
"time/time.cc"
|
||||
"time/time.h"
|
||||
"time/internal/cctz/include/cctz/civil_time.h"
|
||||
"time/internal/cctz/include/cctz/civil_time_detail.h"
|
||||
"time/internal/cctz/include/cctz/time_zone.h"
|
||||
"time/internal/cctz/include/cctz/zone_info_source.h"
|
||||
"time/internal/cctz/src/civil_time_detail.cc"
|
||||
"time/internal/cctz/src/time_zone_fixed.cc"
|
||||
"time/internal/cctz/src/time_zone_fixed.h"
|
||||
"time/internal/cctz/src/time_zone_format.cc"
|
||||
"time/internal/cctz/src/time_zone_if.cc"
|
||||
"time/internal/cctz/src/time_zone_if.h"
|
||||
"time/internal/cctz/src/time_zone_impl.cc"
|
||||
"time/internal/cctz/src/time_zone_impl.h"
|
||||
"time/internal/cctz/src/time_zone_info.cc"
|
||||
"time/internal/cctz/src/time_zone_info.h"
|
||||
"time/internal/cctz/src/time_zone_libc.cc"
|
||||
"time/internal/cctz/src/time_zone_libc.h"
|
||||
"time/internal/cctz/src/time_zone_lookup.cc"
|
||||
"time/internal/cctz/src/time_zone_posix.cc"
|
||||
"time/internal/cctz/src/time_zone_posix.h"
|
||||
"time/internal/cctz/src/tzfile.h"
|
||||
"time/internal/cctz/src/zone_info_source.cc"
|
||||
"types/any.h"
|
||||
"types/bad_any_cast.cc"
|
||||
"types/bad_any_cast.h"
|
||||
"types/bad_optional_access.cc"
|
||||
"types/bad_optional_access.h"
|
||||
"types/bad_variant_access.cc"
|
||||
"types/bad_variant_access.h"
|
||||
"types/compare.h"
|
||||
"types/internal/conformance_aliases.h"
|
||||
"types/internal/conformance_archetype.h"
|
||||
"types/internal/conformance_profile.h"
|
||||
"types/internal/parentheses.h"
|
||||
"types/internal/transform_args.h"
|
||||
"types/internal/variant.h"
|
||||
"types/optional.h"
|
||||
"types/internal/optional.h"
|
||||
"types/span.h"
|
||||
"types/internal/span.h"
|
||||
"types/variant.h"
|
||||
"utility/utility.h"
|
||||
)
|
||||
|
||||
set(ABSL_INTERNAL_DLL_TARGETS
|
||||
"stacktrace"
|
||||
"symbolize"
|
||||
"examine_stack"
|
||||
"failure_signal_handler"
|
||||
"debugging_internal"
|
||||
"demangle_internal"
|
||||
"leak_check"
|
||||
"leak_check_disable"
|
||||
"stack_consumption"
|
||||
"debugging"
|
||||
"hash"
|
||||
"spy_hash_state"
|
||||
"city"
|
||||
"memory"
|
||||
"strings"
|
||||
"strings_internal"
|
||||
"cord"
|
||||
"str_format"
|
||||
"str_format_internal"
|
||||
"pow10_helper"
|
||||
"int128"
|
||||
"numeric"
|
||||
"utility"
|
||||
"any"
|
||||
"bad_any_cast"
|
||||
"bad_any_cast_impl"
|
||||
"span"
|
||||
"optional"
|
||||
"bad_optional_access"
|
||||
"bad_variant_access"
|
||||
"variant"
|
||||
"compare"
|
||||
"algorithm"
|
||||
"algorithm_container"
|
||||
"graphcycles_internal"
|
||||
"kernel_timeout_internal"
|
||||
"synchronization"
|
||||
"thread_pool"
|
||||
"bind_front"
|
||||
"function_ref"
|
||||
"atomic_hook"
|
||||
"log_severity"
|
||||
"raw_logging_internal"
|
||||
"spinlock_wait"
|
||||
"config"
|
||||
"dynamic_annotations"
|
||||
"core_headers"
|
||||
"malloc_internal"
|
||||
"base_internal"
|
||||
"base"
|
||||
"throw_delegate"
|
||||
"pretty_function"
|
||||
"endian"
|
||||
"bits"
|
||||
"exponential_biased"
|
||||
"periodic_sampler"
|
||||
"scoped_set_env"
|
||||
"type_traits"
|
||||
"meta"
|
||||
"random_random"
|
||||
"random_bit_gen_ref"
|
||||
"random_distributions"
|
||||
"random_seed_gen_exception"
|
||||
"random_seed_sequences"
|
||||
"random_internal_traits"
|
||||
"random_internal_distribution_caller"
|
||||
"random_internal_distributions"
|
||||
"random_internal_fast_uniform_bits"
|
||||
"random_internal_seed_material"
|
||||
"random_internal_pool_urbg"
|
||||
"random_internal_explicit_seed_seq"
|
||||
"random_internal_sequence_urbg"
|
||||
"random_internal_salted_seed_seq"
|
||||
"random_internal_iostream_state_saver"
|
||||
"random_internal_generate_real"
|
||||
"random_internal_wide_multiply"
|
||||
"random_internal_fastmath"
|
||||
"random_internal_nonsecure_base"
|
||||
"random_internal_pcg_engine"
|
||||
"random_internal_randen_engine"
|
||||
"random_internal_platform"
|
||||
"random_internal_randen"
|
||||
"random_internal_randen_slow"
|
||||
"random_internal_randen_hwaes"
|
||||
"random_internal_randen_hwaes_impl"
|
||||
"random_internal_uniform_helper"
|
||||
"status"
|
||||
"time"
|
||||
"civil_time"
|
||||
"time_zone"
|
||||
"container"
|
||||
"btree"
|
||||
"compressed_tuple"
|
||||
"fixed_array"
|
||||
"inlined_vector_internal"
|
||||
"inlined_vector"
|
||||
"counting_allocator"
|
||||
"flat_hash_map"
|
||||
"flat_hash_set"
|
||||
"node_hash_map"
|
||||
"node_hash_set"
|
||||
"container_memory"
|
||||
"hash_function_defaults"
|
||||
"hash_policy_traits"
|
||||
"hashtablez_sampler"
|
||||
"hashtable_debug"
|
||||
"hashtable_debug_hooks"
|
||||
"have_sse"
|
||||
"node_hash_policy"
|
||||
"raw_hash_map"
|
||||
"container_common"
|
||||
"raw_hash_set"
|
||||
"layout"
|
||||
"tracked"
|
||||
)
|
||||
|
||||
function(absl_internal_dll_contains)
|
||||
cmake_parse_arguments(ABSL_INTERNAL_DLL
|
||||
""
|
||||
"OUTPUT;TARGET"
|
||||
""
|
||||
${ARGN}
|
||||
)
|
||||
|
||||
STRING(REGEX REPLACE "^absl::" "" _target ${ABSL_INTERNAL_DLL_TARGET})
|
||||
|
||||
list(FIND
|
||||
ABSL_INTERNAL_DLL_TARGETS
|
||||
"${_target}"
|
||||
_index)
|
||||
|
||||
if (${_index} GREATER -1)
|
||||
set(${ABSL_INTERNAL_DLL_OUTPUT} 1 PARENT_SCOPE)
|
||||
else()
|
||||
set(${ABSL_INTERNAL_DLL_OUTPUT} 0 PARENT_SCOPE)
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
function(absl_internal_dll_targets)
|
||||
cmake_parse_arguments(ABSL_INTERNAL_DLL
|
||||
""
|
||||
"OUTPUT"
|
||||
"DEPS"
|
||||
${ARGN}
|
||||
)
|
||||
|
||||
set(_deps "")
|
||||
foreach(dep IN LISTS ABSL_INTERNAL_DLL_DEPS)
|
||||
absl_internal_dll_contains(TARGET ${dep} OUTPUT _contains)
|
||||
if (_contains)
|
||||
list(APPEND _deps abseil_dll)
|
||||
else()
|
||||
list(APPEND _deps ${dep})
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
# Because we may have added the DLL multiple times
|
||||
list(REMOVE_DUPLICATES _deps)
|
||||
set(${ABSL_INTERNAL_DLL_OUTPUT} "${_deps}" PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
function(absl_make_dll)
|
||||
add_library(
|
||||
abseil_dll
|
||||
SHARED
|
||||
"${ABSL_INTERNAL_DLL_FILES}"
|
||||
)
|
||||
target_link_libraries(
|
||||
abseil_dll
|
||||
PRIVATE
|
||||
${ABSL_DEFAULT_LINKOPTS}
|
||||
)
|
||||
set_property(TARGET abseil_dll PROPERTY LINKER_LANGUAGE "CXX")
|
||||
target_include_directories(
|
||||
abseil_dll
|
||||
PUBLIC
|
||||
"$<BUILD_INTERFACE:${ABSL_COMMON_INCLUDE_DIRS}>"
|
||||
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
|
||||
)
|
||||
|
||||
target_compile_options(
|
||||
abseil_dll
|
||||
PRIVATE
|
||||
${ABSL_DEFAULT_COPTS}
|
||||
)
|
||||
|
||||
target_compile_definitions(
|
||||
abseil_dll
|
||||
PRIVATE
|
||||
ABSL_BUILD_DLL
|
||||
NOMINMAX
|
||||
INTERFACE
|
||||
${ABSL_CC_LIB_DEFINES}
|
||||
)
|
||||
install(TARGETS abseil_dll EXPORT ${PROJECT_NAME}Targets
|
||||
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
||||
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||
)
|
||||
endfunction()
|
||||
444
third_party/abseil-cpp/CMake/AbseilHelpers.cmake
vendored
Normal file
444
third_party/abseil-cpp/CMake/AbseilHelpers.cmake
vendored
Normal file
@@ -0,0 +1,444 @@
|
||||
#
|
||||
# Copyright 2017 The Abseil Authors.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# https://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
include(CMakeParseArguments)
|
||||
include(AbseilConfigureCopts)
|
||||
include(AbseilDll)
|
||||
|
||||
# The IDE folder for Abseil that will be used if Abseil is included in a CMake
|
||||
# project that sets
|
||||
# set_property(GLOBAL PROPERTY USE_FOLDERS ON)
|
||||
# For example, Visual Studio supports folders.
|
||||
if(NOT DEFINED ABSL_IDE_FOLDER)
|
||||
set(ABSL_IDE_FOLDER Abseil)
|
||||
endif()
|
||||
|
||||
# absl_cc_library()
|
||||
#
|
||||
# CMake function to imitate Bazel's cc_library rule.
|
||||
#
|
||||
# Parameters:
|
||||
# NAME: name of target (see Note)
|
||||
# HDRS: List of public header files for the library
|
||||
# SRCS: List of source files for the library
|
||||
# DEPS: List of other libraries to be linked in to the binary targets
|
||||
# COPTS: List of private compile options
|
||||
# DEFINES: List of public defines
|
||||
# LINKOPTS: List of link options
|
||||
# PUBLIC: Add this so that this library will be exported under absl::
|
||||
# Also in IDE, target will appear in Abseil folder while non PUBLIC will be in Abseil/internal.
|
||||
# TESTONLY: When added, this target will only be built if BUILD_TESTING=ON.
|
||||
#
|
||||
# Note:
|
||||
# By default, absl_cc_library will always create a library named absl_${NAME},
|
||||
# and alias target absl::${NAME}. The absl:: form should always be used.
|
||||
# This is to reduce namespace pollution.
|
||||
#
|
||||
# absl_cc_library(
|
||||
# NAME
|
||||
# awesome
|
||||
# HDRS
|
||||
# "a.h"
|
||||
# SRCS
|
||||
# "a.cc"
|
||||
# )
|
||||
# absl_cc_library(
|
||||
# NAME
|
||||
# fantastic_lib
|
||||
# SRCS
|
||||
# "b.cc"
|
||||
# DEPS
|
||||
# absl::awesome # not "awesome" !
|
||||
# PUBLIC
|
||||
# )
|
||||
#
|
||||
# absl_cc_library(
|
||||
# NAME
|
||||
# main_lib
|
||||
# ...
|
||||
# DEPS
|
||||
# absl::fantastic_lib
|
||||
# )
|
||||
#
|
||||
# TODO: Implement "ALWAYSLINK"
|
||||
function(absl_cc_library)
|
||||
cmake_parse_arguments(ABSL_CC_LIB
|
||||
"DISABLE_INSTALL;PUBLIC;TESTONLY"
|
||||
"NAME"
|
||||
"HDRS;SRCS;COPTS;DEFINES;LINKOPTS;DEPS"
|
||||
${ARGN}
|
||||
)
|
||||
|
||||
if(ABSL_CC_LIB_TESTONLY AND NOT BUILD_TESTING)
|
||||
return()
|
||||
endif()
|
||||
|
||||
if(ABSL_ENABLE_INSTALL)
|
||||
set(_NAME "${ABSL_CC_LIB_NAME}")
|
||||
else()
|
||||
set(_NAME "absl_${ABSL_CC_LIB_NAME}")
|
||||
endif()
|
||||
|
||||
# Check if this is a header-only library
|
||||
# Note that as of February 2019, many popular OS's (for example, Ubuntu
|
||||
# 16.04 LTS) only come with cmake 3.5 by default. For this reason, we can't
|
||||
# use list(FILTER...)
|
||||
set(ABSL_CC_SRCS "${ABSL_CC_LIB_SRCS}")
|
||||
foreach(src_file IN LISTS ABSL_CC_SRCS)
|
||||
if(${src_file} MATCHES ".*\\.(h|inc)")
|
||||
list(REMOVE_ITEM ABSL_CC_SRCS "${src_file}")
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
if(ABSL_CC_SRCS STREQUAL "")
|
||||
set(ABSL_CC_LIB_IS_INTERFACE 1)
|
||||
else()
|
||||
set(ABSL_CC_LIB_IS_INTERFACE 0)
|
||||
endif()
|
||||
|
||||
# Determine this build target's relationship to the DLL. It's one of four things:
|
||||
# 1. "dll" -- This target is part of the DLL
|
||||
# 2. "dll_dep" -- This target is not part of the DLL, but depends on the DLL.
|
||||
# Note that we assume any target not in the DLL depends on the
|
||||
# DLL. This is not a technical necessity but a convenience
|
||||
# which happens to be true, because nearly every target is
|
||||
# part of the DLL.
|
||||
# 3. "shared" -- This is a shared library, perhaps on a non-windows platform
|
||||
# where DLL doesn't make sense.
|
||||
# 4. "static" -- This target does not depend on the DLL and should be built
|
||||
# statically.
|
||||
if (${ABSL_BUILD_DLL})
|
||||
if(ABSL_ENABLE_INSTALL)
|
||||
absl_internal_dll_contains(TARGET ${_NAME} OUTPUT _in_dll)
|
||||
else()
|
||||
absl_internal_dll_contains(TARGET ${ABSL_CC_LIB_NAME} OUTPUT _in_dll)
|
||||
endif()
|
||||
if (${_in_dll})
|
||||
# This target should be replaced by the DLL
|
||||
set(_build_type "dll")
|
||||
set(ABSL_CC_LIB_IS_INTERFACE 1)
|
||||
else()
|
||||
# Building a DLL, but this target is not part of the DLL
|
||||
set(_build_type "dll_dep")
|
||||
endif()
|
||||
elseif(BUILD_SHARED_LIBS)
|
||||
set(_build_type "shared")
|
||||
else()
|
||||
set(_build_type "static")
|
||||
endif()
|
||||
|
||||
# Generate a pkg-config file for every library:
|
||||
if((_build_type STREQUAL "static" OR _build_type STREQUAL "shared")
|
||||
AND ABSL_ENABLE_INSTALL)
|
||||
if(NOT ABSL_CC_LIB_TESTONLY)
|
||||
if(absl_VERSION)
|
||||
set(PC_VERSION "${absl_VERSION}")
|
||||
else()
|
||||
set(PC_VERSION "head")
|
||||
endif()
|
||||
foreach(dep ${ABSL_CC_LIB_DEPS})
|
||||
if(${dep} MATCHES "^absl::(.*)")
|
||||
# Join deps with commas.
|
||||
if(PC_DEPS)
|
||||
set(PC_DEPS "${PC_DEPS},")
|
||||
endif()
|
||||
set(PC_DEPS "${PC_DEPS} absl_${CMAKE_MATCH_1} = ${PC_VERSION}")
|
||||
endif()
|
||||
endforeach()
|
||||
foreach(cflag ${ABSL_CC_LIB_COPTS})
|
||||
if(${cflag} MATCHES "^(-Wno|/wd)")
|
||||
# These flags are needed to suppress warnings that might fire in our headers.
|
||||
set(PC_CFLAGS "${PC_CFLAGS} ${cflag}")
|
||||
elseif(${cflag} MATCHES "^(-W|/w[1234eo])")
|
||||
# Don't impose our warnings on others.
|
||||
else()
|
||||
set(PC_CFLAGS "${PC_CFLAGS} ${cflag}")
|
||||
endif()
|
||||
endforeach()
|
||||
FILE(GENERATE OUTPUT "${CMAKE_BINARY_DIR}/lib/pkgconfig/absl_${_NAME}.pc" CONTENT "\
|
||||
prefix=${CMAKE_INSTALL_PREFIX}\n\
|
||||
exec_prefix=\${prefix}\n\
|
||||
libdir=${CMAKE_INSTALL_FULL_LIBDIR}\n\
|
||||
includedir=${CMAKE_INSTALL_FULL_INCLUDEDIR}\n\
|
||||
\n\
|
||||
Name: absl_${_NAME}\n\
|
||||
Description: Abseil ${_NAME} library\n\
|
||||
URL: https://abseil.io/\n\
|
||||
Version: ${PC_VERSION}\n\
|
||||
Requires:${PC_DEPS}\n\
|
||||
Libs: -L\${libdir} $<JOIN:${ABSL_CC_LIB_LINKOPTS}, > $<$<NOT:$<BOOL:${ABSL_CC_LIB_IS_INTERFACE}>>:-labsl_${_NAME}>\n\
|
||||
Cflags: -I\${includedir}${PC_CFLAGS}\n")
|
||||
INSTALL(FILES "${CMAKE_BINARY_DIR}/lib/pkgconfig/absl_${_NAME}.pc"
|
||||
DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(NOT ABSL_CC_LIB_IS_INTERFACE)
|
||||
if(_build_type STREQUAL "dll_dep")
|
||||
# This target depends on the DLL. When adding dependencies to this target,
|
||||
# any depended-on-target which is contained inside the DLL is replaced
|
||||
# with a dependency on the DLL.
|
||||
add_library(${_NAME} STATIC "")
|
||||
target_sources(${_NAME} PRIVATE ${ABSL_CC_LIB_SRCS} ${ABSL_CC_LIB_HDRS})
|
||||
absl_internal_dll_targets(
|
||||
DEPS ${ABSL_CC_LIB_DEPS}
|
||||
OUTPUT _dll_deps
|
||||
)
|
||||
target_link_libraries(${_NAME}
|
||||
PUBLIC ${_dll_deps}
|
||||
PRIVATE
|
||||
${ABSL_CC_LIB_LINKOPTS}
|
||||
${ABSL_DEFAULT_LINKOPTS}
|
||||
)
|
||||
|
||||
if (ABSL_CC_LIB_TESTONLY)
|
||||
set(_gtest_link_define "GTEST_LINKED_AS_SHARED_LIBRARY=1")
|
||||
else()
|
||||
set(_gtest_link_define)
|
||||
endif()
|
||||
|
||||
target_compile_definitions(${_NAME}
|
||||
PUBLIC
|
||||
ABSL_CONSUME_DLL
|
||||
"${_gtest_link_define}"
|
||||
)
|
||||
|
||||
elseif(_build_type STREQUAL "static" OR _build_type STREQUAL "shared")
|
||||
add_library(${_NAME} "")
|
||||
target_sources(${_NAME} PRIVATE ${ABSL_CC_LIB_SRCS} ${ABSL_CC_LIB_HDRS})
|
||||
target_link_libraries(${_NAME}
|
||||
PUBLIC ${ABSL_CC_LIB_DEPS}
|
||||
PRIVATE
|
||||
${ABSL_CC_LIB_LINKOPTS}
|
||||
${ABSL_DEFAULT_LINKOPTS}
|
||||
)
|
||||
else()
|
||||
message(FATAL_ERROR "Invalid build type: ${_build_type}")
|
||||
endif()
|
||||
|
||||
# Linker language can be inferred from sources, but in the case of DLLs we
|
||||
# don't have any .cc files so it would be ambiguous. We could set it
|
||||
# explicitly only in the case of DLLs but, because "CXX" is always the
|
||||
# correct linker language for static or for shared libraries, we set it
|
||||
# unconditionally.
|
||||
set_property(TARGET ${_NAME} PROPERTY LINKER_LANGUAGE "CXX")
|
||||
|
||||
target_include_directories(${_NAME}
|
||||
PUBLIC
|
||||
"$<BUILD_INTERFACE:${ABSL_COMMON_INCLUDE_DIRS}>"
|
||||
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
|
||||
)
|
||||
target_compile_options(${_NAME}
|
||||
PRIVATE ${ABSL_CC_LIB_COPTS})
|
||||
target_compile_definitions(${_NAME} PUBLIC ${ABSL_CC_LIB_DEFINES})
|
||||
|
||||
# Add all Abseil targets to a a folder in the IDE for organization.
|
||||
if(ABSL_CC_LIB_PUBLIC)
|
||||
set_property(TARGET ${_NAME} PROPERTY FOLDER ${ABSL_IDE_FOLDER})
|
||||
elseif(ABSL_CC_LIB_TESTONLY)
|
||||
set_property(TARGET ${_NAME} PROPERTY FOLDER ${ABSL_IDE_FOLDER}/test)
|
||||
else()
|
||||
set_property(TARGET ${_NAME} PROPERTY FOLDER ${ABSL_IDE_FOLDER}/internal)
|
||||
endif()
|
||||
|
||||
if(ABSL_PROPAGATE_CXX_STD)
|
||||
# Abseil libraries require C++11 as the current minimum standard.
|
||||
# Top-level application CMake projects should ensure a consistent C++
|
||||
# standard for all compiled sources by setting CMAKE_CXX_STANDARD.
|
||||
target_compile_features(${_NAME} PUBLIC cxx_std_11)
|
||||
else()
|
||||
# Note: This is legacy (before CMake 3.8) behavior. Setting the
|
||||
# target-level CXX_STANDARD property to ABSL_CXX_STANDARD (which is
|
||||
# initialized by CMAKE_CXX_STANDARD) should have no real effect, since
|
||||
# that is the default value anyway.
|
||||
#
|
||||
# CXX_STANDARD_REQUIRED does guard against the top-level CMake project
|
||||
# not having enabled CMAKE_CXX_STANDARD_REQUIRED (which prevents
|
||||
# "decaying" to an older standard if the requested one isn't available).
|
||||
set_property(TARGET ${_NAME} PROPERTY CXX_STANDARD ${ABSL_CXX_STANDARD})
|
||||
set_property(TARGET ${_NAME} PROPERTY CXX_STANDARD_REQUIRED ON)
|
||||
endif()
|
||||
|
||||
# When being installed, we lose the absl_ prefix. We want to put it back
|
||||
# to have properly named lib files. This is a no-op when we are not being
|
||||
# installed.
|
||||
if(ABSL_ENABLE_INSTALL)
|
||||
set_target_properties(${_NAME} PROPERTIES
|
||||
OUTPUT_NAME "absl_${_NAME}"
|
||||
SOVERSION 0
|
||||
)
|
||||
endif()
|
||||
else()
|
||||
# Generating header-only library
|
||||
add_library(${_NAME} INTERFACE)
|
||||
target_include_directories(${_NAME}
|
||||
INTERFACE
|
||||
"$<BUILD_INTERFACE:${ABSL_COMMON_INCLUDE_DIRS}>"
|
||||
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
|
||||
)
|
||||
|
||||
if (_build_type STREQUAL "dll")
|
||||
set(ABSL_CC_LIB_DEPS abseil_dll)
|
||||
endif()
|
||||
|
||||
target_link_libraries(${_NAME}
|
||||
INTERFACE
|
||||
${ABSL_CC_LIB_DEPS}
|
||||
${ABSL_CC_LIB_LINKOPTS}
|
||||
${ABSL_DEFAULT_LINKOPTS}
|
||||
)
|
||||
target_compile_definitions(${_NAME} INTERFACE ${ABSL_CC_LIB_DEFINES})
|
||||
|
||||
if(ABSL_PROPAGATE_CXX_STD)
|
||||
# Abseil libraries require C++11 as the current minimum standard.
|
||||
# Top-level application CMake projects should ensure a consistent C++
|
||||
# standard for all compiled sources by setting CMAKE_CXX_STANDARD.
|
||||
target_compile_features(${_NAME} INTERFACE cxx_std_11)
|
||||
|
||||
# (INTERFACE libraries can't have the CXX_STANDARD property set, so there
|
||||
# is no legacy behavior else case).
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# TODO currently we don't install googletest alongside abseil sources, so
|
||||
# installed abseil can't be tested.
|
||||
if(NOT ABSL_CC_LIB_TESTONLY AND ABSL_ENABLE_INSTALL)
|
||||
install(TARGETS ${_NAME} EXPORT ${PROJECT_NAME}Targets
|
||||
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
||||
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||
)
|
||||
endif()
|
||||
|
||||
add_library(absl::${ABSL_CC_LIB_NAME} ALIAS ${_NAME})
|
||||
endfunction()
|
||||
|
||||
# absl_cc_test()
|
||||
#
|
||||
# CMake function to imitate Bazel's cc_test rule.
|
||||
#
|
||||
# Parameters:
|
||||
# NAME: name of target (see Usage below)
|
||||
# SRCS: List of source files for the binary
|
||||
# DEPS: List of other libraries to be linked in to the binary targets
|
||||
# COPTS: List of private compile options
|
||||
# DEFINES: List of public defines
|
||||
# LINKOPTS: List of link options
|
||||
#
|
||||
# Note:
|
||||
# By default, absl_cc_test will always create a binary named absl_${NAME}.
|
||||
# This will also add it to ctest list as absl_${NAME}.
|
||||
#
|
||||
# Usage:
|
||||
# absl_cc_library(
|
||||
# NAME
|
||||
# awesome
|
||||
# HDRS
|
||||
# "a.h"
|
||||
# SRCS
|
||||
# "a.cc"
|
||||
# PUBLIC
|
||||
# )
|
||||
#
|
||||
# absl_cc_test(
|
||||
# NAME
|
||||
# awesome_test
|
||||
# SRCS
|
||||
# "awesome_test.cc"
|
||||
# DEPS
|
||||
# absl::awesome
|
||||
# GTest::gmock
|
||||
# GTest::gtest_main
|
||||
# )
|
||||
function(absl_cc_test)
|
||||
if(NOT BUILD_TESTING)
|
||||
return()
|
||||
endif()
|
||||
|
||||
cmake_parse_arguments(ABSL_CC_TEST
|
||||
""
|
||||
"NAME"
|
||||
"SRCS;COPTS;DEFINES;LINKOPTS;DEPS"
|
||||
${ARGN}
|
||||
)
|
||||
|
||||
set(_NAME "absl_${ABSL_CC_TEST_NAME}")
|
||||
|
||||
add_executable(${_NAME} "")
|
||||
target_sources(${_NAME} PRIVATE ${ABSL_CC_TEST_SRCS})
|
||||
target_include_directories(${_NAME}
|
||||
PUBLIC ${ABSL_COMMON_INCLUDE_DIRS}
|
||||
PRIVATE ${GMOCK_INCLUDE_DIRS} ${GTEST_INCLUDE_DIRS}
|
||||
)
|
||||
|
||||
if (${ABSL_BUILD_DLL})
|
||||
target_compile_definitions(${_NAME}
|
||||
PUBLIC
|
||||
${ABSL_CC_TEST_DEFINES}
|
||||
ABSL_CONSUME_DLL
|
||||
GTEST_LINKED_AS_SHARED_LIBRARY=1
|
||||
)
|
||||
|
||||
# Replace dependencies on targets inside the DLL with abseil_dll itself.
|
||||
absl_internal_dll_targets(
|
||||
DEPS ${ABSL_CC_TEST_DEPS}
|
||||
OUTPUT ABSL_CC_TEST_DEPS
|
||||
)
|
||||
else()
|
||||
target_compile_definitions(${_NAME}
|
||||
PUBLIC
|
||||
${ABSL_CC_TEST_DEFINES}
|
||||
)
|
||||
endif()
|
||||
target_compile_options(${_NAME}
|
||||
PRIVATE ${ABSL_CC_TEST_COPTS}
|
||||
)
|
||||
|
||||
target_link_libraries(${_NAME}
|
||||
PUBLIC ${ABSL_CC_TEST_DEPS}
|
||||
PRIVATE ${ABSL_CC_TEST_LINKOPTS}
|
||||
)
|
||||
# Add all Abseil targets to a folder in the IDE for organization.
|
||||
set_property(TARGET ${_NAME} PROPERTY FOLDER ${ABSL_IDE_FOLDER}/test)
|
||||
|
||||
if(ABSL_PROPAGATE_CXX_STD)
|
||||
# Abseil libraries require C++11 as the current minimum standard.
|
||||
# Top-level application CMake projects should ensure a consistent C++
|
||||
# standard for all compiled sources by setting CMAKE_CXX_STANDARD.
|
||||
target_compile_features(${_NAME} PUBLIC cxx_std_11)
|
||||
else()
|
||||
# Note: This is legacy (before CMake 3.8) behavior. Setting the
|
||||
# target-level CXX_STANDARD property to ABSL_CXX_STANDARD (which is
|
||||
# initialized by CMAKE_CXX_STANDARD) should have no real effect, since
|
||||
# that is the default value anyway.
|
||||
#
|
||||
# CXX_STANDARD_REQUIRED does guard against the top-level CMake project
|
||||
# not having enabled CMAKE_CXX_STANDARD_REQUIRED (which prevents
|
||||
# "decaying" to an older standard if the requested one isn't available).
|
||||
set_property(TARGET ${_NAME} PROPERTY CXX_STANDARD ${ABSL_CXX_STANDARD})
|
||||
set_property(TARGET ${_NAME} PROPERTY CXX_STANDARD_REQUIRED ON)
|
||||
endif()
|
||||
|
||||
add_test(NAME ${_NAME} COMMAND ${_NAME})
|
||||
endfunction()
|
||||
|
||||
|
||||
function(check_target my_target)
|
||||
if(NOT TARGET ${my_target})
|
||||
message(FATAL_ERROR " ABSL: compiling absl requires a ${my_target} CMake target in your project,
|
||||
see CMake/README.md for more details")
|
||||
endif(NOT TARGET ${my_target})
|
||||
endfunction()
|
||||
14
third_party/abseil-cpp/CMake/Googletest/CMakeLists.txt.in
vendored
Normal file
14
third_party/abseil-cpp/CMake/Googletest/CMakeLists.txt.in
vendored
Normal file
@@ -0,0 +1,14 @@
|
||||
cmake_minimum_required(VERSION 2.8.2)
|
||||
|
||||
project(googletest-external NONE)
|
||||
|
||||
include(ExternalProject)
|
||||
ExternalProject_Add(googletest
|
||||
URL "${absl_gtest_download_url}" # May be empty
|
||||
SOURCE_DIR "${absl_gtest_src_dir}"
|
||||
BINARY_DIR "${absl_gtest_build_dir}"
|
||||
CONFIGURE_COMMAND ""
|
||||
BUILD_COMMAND ""
|
||||
INSTALL_COMMAND ""
|
||||
TEST_COMMAND ""
|
||||
)
|
||||
41
third_party/abseil-cpp/CMake/Googletest/DownloadGTest.cmake
vendored
Normal file
41
third_party/abseil-cpp/CMake/Googletest/DownloadGTest.cmake
vendored
Normal file
@@ -0,0 +1,41 @@
|
||||
# Integrates googletest at configure time. Based on the instructions at
|
||||
# https://github.com/google/googletest/tree/master/googletest#incorporating-into-an-existing-cmake-project
|
||||
|
||||
# Set up the external googletest project, downloading the latest from Github
|
||||
# master if requested.
|
||||
configure_file(
|
||||
${CMAKE_CURRENT_LIST_DIR}/CMakeLists.txt.in
|
||||
${CMAKE_BINARY_DIR}/googletest-external/CMakeLists.txt
|
||||
)
|
||||
|
||||
set(ABSL_SAVE_CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
|
||||
set(ABSL_SAVE_CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
|
||||
if (BUILD_SHARED_LIBS)
|
||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DGTEST_CREATE_SHARED_LIBRARY=1")
|
||||
endif()
|
||||
|
||||
# Configure and build the googletest source.
|
||||
execute_process(COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" .
|
||||
RESULT_VARIABLE result
|
||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/googletest-external )
|
||||
if(result)
|
||||
message(FATAL_ERROR "CMake step for googletest failed: ${result}")
|
||||
endif()
|
||||
|
||||
execute_process(COMMAND ${CMAKE_COMMAND} --build .
|
||||
RESULT_VARIABLE result
|
||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/googletest-external)
|
||||
if(result)
|
||||
message(FATAL_ERROR "Build step for googletest failed: ${result}")
|
||||
endif()
|
||||
|
||||
set(CMAKE_CXX_FLAGS ${ABSL_SAVE_CMAKE_CXX_FLAGS})
|
||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${ABSL_SAVE_CMAKE_RUNTIME_OUTPUT_DIRECTORY})
|
||||
|
||||
# Prevent overriding the parent project's compiler/linker settings on Windows
|
||||
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
|
||||
|
||||
# Add googletest directly to our build. This defines the gtest and gtest_main
|
||||
# targets.
|
||||
add_subdirectory(${absl_gtest_src_dir} ${absl_gtest_build_dir} EXCLUDE_FROM_ALL)
|
||||
185
third_party/abseil-cpp/CMake/README.md
vendored
Normal file
185
third_party/abseil-cpp/CMake/README.md
vendored
Normal file
@@ -0,0 +1,185 @@
|
||||
# Abseil CMake Build Instructions
|
||||
|
||||
Abseil comes with a CMake build script ([CMakeLists.txt](../CMakeLists.txt))
|
||||
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
|
||||
<https://www.cmake.org/>.
|
||||
|
||||
CMake works by generating native makefiles or build projects that can
|
||||
be used in the compiler environment of your choice.
|
||||
|
||||
For API/ABI compatibility reasons, we strongly recommend building Abseil in a
|
||||
subdirectory of your project or as an embedded dependency.
|
||||
|
||||
## Incorporating Abseil Into a CMake Project
|
||||
|
||||
The recommendations below are similar to those for using CMake within the
|
||||
googletest framework
|
||||
(<https://github.com/google/googletest/blob/master/googletest/README.md#incorporating-into-an-existing-cmake-project>)
|
||||
|
||||
### Step-by-Step Instructions
|
||||
|
||||
1. If you want to build the Abseil tests, integrate the Abseil dependency
|
||||
[Google Test](https://github.com/google/googletest) into your CMake project. To disable Abseil tests, you have to pass
|
||||
`-DBUILD_TESTING=OFF` when configuring your project with CMake.
|
||||
|
||||
2. Download Abseil and copy it into a subdirectory in your CMake project or add
|
||||
Abseil as a [git submodule](https://git-scm.com/docs/git-submodule) in your
|
||||
CMake project.
|
||||
|
||||
3. You can then use the CMake command
|
||||
[`add_subdirectory()`](https://cmake.org/cmake/help/latest/command/add_subdirectory.html)
|
||||
to include Abseil directly in your CMake project.
|
||||
|
||||
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 an application project using Abseil.
|
||||
|
||||
```cmake
|
||||
cmake_minimum_required(VERSION 3.8.2)
|
||||
project(my_app_project)
|
||||
|
||||
# Pick the C++ standard to compile with.
|
||||
# Abseil currently supports C++11, C++14, and C++17.
|
||||
set(CMAKE_CXX_STANDARD 11)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
|
||||
add_subdirectory(abseil-cpp)
|
||||
|
||||
add_executable(my_exe source.cpp)
|
||||
target_link_libraries(my_exe absl::base absl::synchronization absl::strings)
|
||||
```
|
||||
|
||||
Note that if you are developing a library designed for use by other clients, you
|
||||
should instead leave `CMAKE_CXX_STANDARD` unset (or only set if being built as
|
||||
the current top-level CMake project) and configure the minimum required C++
|
||||
standard at the target level. If you require a later minimum C++ standard than
|
||||
Abseil does, it's a good idea to also enforce that `CMAKE_CXX_STANDARD` (which
|
||||
will control Abseil library targets) is set to at least that minimum. For
|
||||
example:
|
||||
|
||||
```cmake
|
||||
cmake_minimum_required(VERSION 3.8.2)
|
||||
project(my_lib_project)
|
||||
|
||||
# Leave C++ standard up to the root application, so set it only if this is the
|
||||
# current top-level CMake project.
|
||||
if(CMAKE_SOURCE_DIR STREQUAL my_lib_project_SOURCE_DIR)
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
endif()
|
||||
|
||||
add_subdirectory(abseil-cpp)
|
||||
|
||||
add_library(my_lib source.cpp)
|
||||
target_link_libraries(my_lib absl::base absl::synchronization absl::strings)
|
||||
|
||||
# Enforce that my_lib requires C++17. Important to document for clients that they
|
||||
# must set CMAKE_CXX_STANDARD to 17 or higher for proper Abseil ABI compatibility
|
||||
# (since otherwise, Abseil library targets could be compiled with a lower C++
|
||||
# standard than my_lib).
|
||||
target_compile_features(my_lib PUBLIC cxx_std_17)
|
||||
if(CMAKE_CXX_STANDARD LESS 17)
|
||||
message(FATAL_ERROR
|
||||
"my_lib_project requires CMAKE_CXX_STANDARD >= 17 (got: ${CMAKE_CXX_STANDARD})")
|
||||
endif()
|
||||
```
|
||||
|
||||
Then the top-level application project that uses your library is responsible for
|
||||
setting a consistent `CMAKE_CXX_STANDARD` that is sufficiently high.
|
||||
|
||||
### Running Abseil Tests with CMake
|
||||
|
||||
Use the `-DBUILD_TESTING=ON` flag to run Abseil tests.
|
||||
|
||||
You will need to provide Abseil with a Googletest dependency. There are two
|
||||
options for how to do this:
|
||||
|
||||
* Use `-DABSL_USE_GOOGLETEST_HEAD`. This will automatically download the latest
|
||||
Googletest source into the build directory at configure time. Googletest will
|
||||
then be compiled directly alongside Abseil's tests.
|
||||
* Manually integrate Googletest with your build. See
|
||||
https://github.com/google/googletest/blob/master/googletest/README.md#using-cmake
|
||||
for more information on using Googletest in a CMake project.
|
||||
|
||||
For example, to run just the Abseil tests, you could use this script:
|
||||
|
||||
```
|
||||
cd path/to/abseil-cpp
|
||||
mkdir build
|
||||
cd build
|
||||
cmake -DBUILD_TESTING=ON -DABSL_USE_GOOGLETEST_HEAD=ON ..
|
||||
make -j
|
||||
ctest
|
||||
```
|
||||
|
||||
Currently, we only run our tests with CMake in a Linux environment, but we are
|
||||
working on the rest of our supported platforms. See
|
||||
https://github.com/abseil/abseil-cpp/projects/1 and
|
||||
https://github.com/abseil/abseil-cpp/issues/109 for more information.
|
||||
|
||||
### Available Abseil CMake Public Targets
|
||||
|
||||
Here's a non-exhaustive list of Abseil CMake public targets:
|
||||
|
||||
```cmake
|
||||
absl::algorithm
|
||||
absl::base
|
||||
absl::debugging
|
||||
absl::flat_hash_map
|
||||
absl::flags
|
||||
absl::memory
|
||||
absl::meta
|
||||
absl::numeric
|
||||
absl::random_random
|
||||
absl::strings
|
||||
absl::synchronization
|
||||
absl::time
|
||||
absl::utility
|
||||
```
|
||||
|
||||
## Traditional CMake Set-Up
|
||||
|
||||
For larger projects, it may make sense to use the traditional CMake set-up where you build and install projects separately.
|
||||
|
||||
First, you'd need to build and install Google Test:
|
||||
```
|
||||
cmake -S /source/googletest -B /build/googletest -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/installation/dir -DBUILD_GMOCK=ON
|
||||
cmake --build /build/googletest --target install
|
||||
```
|
||||
|
||||
Then you need to configure and build Abseil. Make sure you enable `ABSL_USE_EXTERNAL_GOOGLETEST` and `ABSL_FIND_GOOGLETEST`. You also need to enable `ABSL_ENABLE_INSTALL` so that you can install Abseil itself.
|
||||
```
|
||||
cmake -S /source/abseil-cpp -B /build/abseil-cpp -DCMAKE_PREFIX_PATH=/installation/dir -DCMAKE_INSTALL_PREFIX=/installation/dir -DABSL_ENABLE_INSTALL=ON -DABSL_USE_EXTERNAL_GOOGLETEST=ON -DABSL_FIND_GOOGLETEST=ON
|
||||
cmake --build /temporary/build/abseil-cpp
|
||||
```
|
||||
|
||||
(`CMAKE_PREFIX_PATH` is where you already have Google Test installed; `CMAKE_INSTALL_PREFIX` is where you want to have Abseil installed; they can be different.)
|
||||
|
||||
Run the tests:
|
||||
```
|
||||
ctest --test-dir /temporary/build/abseil-cpp
|
||||
```
|
||||
|
||||
And finally install:
|
||||
```
|
||||
cmake --build /temporary/build/abseil-cpp --target install
|
||||
```
|
||||
|
||||
# CMake Option Synposis
|
||||
|
||||
## Enable Standard CMake Installation
|
||||
|
||||
`-DABSL_ENABLE_INSTALL=ON`
|
||||
|
||||
## Google Test Options
|
||||
|
||||
`-DBUILD_TESTING=ON` must be set to enable testing
|
||||
|
||||
- Have Abseil download and build Google Test for you: `-DABSL_USE_EXTERNAL_GOOGLETEST=OFF` (default)
|
||||
- Download and build latest Google Test: `-DABSL_USE_GOOGLETEST_HEAD=ON`
|
||||
- Download specific Google Test version (ZIP archive): `-DABSL_GOOGLETEST_DOWNLOAD_URL=https://.../version.zip`
|
||||
- Use Google Test from specific local directory: `-DABSL_LOCAL_GOOGLETEST_DIR=/path/to/googletest`
|
||||
- Use Google Test included elsewhere in your project: `-DABSL_USE_EXTERNAL_GOOGLETEST=ON`
|
||||
- Use standard CMake `find_package(CTest)` to find installed Google Test: `-DABSL_USE_EXTERNAL_GOOGLETEST=ON -DABSL_FIND_GOOGLETEST=ON`
|
||||
8
third_party/abseil-cpp/CMake/abslConfig.cmake.in
vendored
Normal file
8
third_party/abseil-cpp/CMake/abslConfig.cmake.in
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
# absl CMake configuration file.
|
||||
|
||||
include(CMakeFindDependencyMacro)
|
||||
find_dependency(Threads)
|
||||
|
||||
@PACKAGE_INIT@
|
||||
|
||||
include ("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@Targets.cmake")
|
||||
25
third_party/abseil-cpp/CMake/install_test_project/CMakeLists.txt
vendored
Normal file
25
third_party/abseil-cpp/CMake/install_test_project/CMakeLists.txt
vendored
Normal file
@@ -0,0 +1,25 @@
|
||||
#
|
||||
# Copyright 2019 The Abseil Authors.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# https://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
# A simple CMakeLists.txt for testing cmake installation
|
||||
|
||||
cmake_minimum_required(VERSION 3.5)
|
||||
project(absl_cmake_testing CXX)
|
||||
|
||||
add_executable(simple simple.cc)
|
||||
|
||||
find_package(absl REQUIRED)
|
||||
|
||||
target_link_libraries(simple absl::strings)
|
||||
23
third_party/abseil-cpp/CMake/install_test_project/simple.cc
vendored
Normal file
23
third_party/abseil-cpp/CMake/install_test_project/simple.cc
vendored
Normal file
@@ -0,0 +1,23 @@
|
||||
//
|
||||
// Copyright 2019 The Abseil Authors.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// https://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#include <iostream>
|
||||
#include "absl/strings/substitute.h"
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
for (int i = 0; i < argc; ++i) {
|
||||
std::cout << absl::Substitute("Arg $0: $1\n", i, argv[i]);
|
||||
}
|
||||
}
|
||||
112
third_party/abseil-cpp/CMake/install_test_project/test.sh
vendored
Executable file
112
third_party/abseil-cpp/CMake/install_test_project/test.sh
vendored
Executable file
@@ -0,0 +1,112 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# Copyright 2019 The Abseil Authors.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# https://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
# Unit and integration tests for Abseil LTS CMake installation
|
||||
|
||||
# Fail on any error. Treat unset variables an error. Print commands as executed.
|
||||
set -euox pipefail
|
||||
|
||||
absl_dir=/abseil-cpp
|
||||
absl_build_dir=/buildfs
|
||||
googletest_builddir=/googletest_builddir
|
||||
project_dir="${absl_dir}"/CMake/install_test_project
|
||||
project_build_dir=/buildfs/project-build
|
||||
|
||||
build_shared_libs="OFF"
|
||||
if [ "${LINK_TYPE:-}" = "DYNAMIC" ]; then
|
||||
build_shared_libs="ON"
|
||||
fi
|
||||
|
||||
# Build and install GoogleTest
|
||||
mkdir "${googletest_builddir}"
|
||||
pushd "${googletest_builddir}"
|
||||
curl -L "${ABSL_GOOGLETEST_DOWNLOAD_URL}" --output "${ABSL_GOOGLETEST_COMMIT}".zip
|
||||
unzip "${ABSL_GOOGLETEST_COMMIT}".zip
|
||||
pushd "googletest-${ABSL_GOOGLETEST_COMMIT}"
|
||||
mkdir build
|
||||
pushd build
|
||||
cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS="${build_shared_libs}" ..
|
||||
make -j $(nproc)
|
||||
make install
|
||||
ldconfig
|
||||
popd
|
||||
popd
|
||||
popd
|
||||
|
||||
# Run the LTS transformations
|
||||
./create_lts.py 99998877
|
||||
|
||||
# Build and install Abseil
|
||||
pushd "${absl_build_dir}"
|
||||
cmake "${absl_dir}" \
|
||||
-DABSL_USE_EXTERNAL_GOOGLETEST=ON \
|
||||
-DABSL_FIND_GOOGLETEST=ON \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DBUILD_TESTING=ON \
|
||||
-DBUILD_SHARED_LIBS="${build_shared_libs}"
|
||||
make -j $(nproc)
|
||||
ctest -j $(nproc)
|
||||
make install
|
||||
ldconfig
|
||||
popd
|
||||
|
||||
# Test the project against the installed Abseil
|
||||
mkdir -p "${project_build_dir}"
|
||||
pushd "${project_build_dir}"
|
||||
cmake "${project_dir}"
|
||||
cmake --build . --target simple
|
||||
|
||||
output="$(${project_build_dir}/simple "printme" 2>&1)"
|
||||
if [[ "${output}" != *"Arg 1: printme"* ]]; then
|
||||
echo "Faulty output on simple project:"
|
||||
echo "${output}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
popd
|
||||
|
||||
if ! grep absl::strings "/usr/local/lib/cmake/absl/abslTargets.cmake"; then
|
||||
cat "/usr/local/lib/cmake/absl/abslTargets.cmake"
|
||||
echo "CMake targets named incorrectly"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
pushd "${HOME}"
|
||||
cat > hello-abseil.cc << EOF
|
||||
#include <cstdlib>
|
||||
|
||||
#include "absl/strings/str_format.h"
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
absl::PrintF("Hello Abseil!\n");
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
EOF
|
||||
|
||||
if [ "${LINK_TYPE:-}" != "DYNAMIC" ]; then
|
||||
pc_args=($(pkg-config --cflags --libs --static absl_str_format))
|
||||
g++ -static -o hello-abseil hello-abseil.cc "${pc_args[@]}"
|
||||
else
|
||||
pc_args=($(pkg-config --cflags --libs absl_str_format))
|
||||
g++ -o hello-abseil hello-abseil.cc "${pc_args[@]}"
|
||||
fi
|
||||
hello="$(./hello-abseil)"
|
||||
[[ "${hello}" == "Hello Abseil!" ]]
|
||||
|
||||
popd
|
||||
|
||||
echo "Install test complete!"
|
||||
exit 0
|
||||
Reference in New Issue
Block a user