llvm-capstone/libcxx/include/CMakeLists.txt
Mark de Wever 4d8268fbf4 [libc++][format] Improve format-arg-store.
This optimizes the __format_arg_store type to allow a more efficient
storage of the basic_format_args.

It stores the data in two arrays:
- A struct with the tag of the exposition only variant's type and the
  offset of the element in the data array. Since this array only depends
  on the type information it's calculated at compile time and can be
  shared by different instances of this class.
- The arguments converted to the types used in the exposition only
  variant of basic_format_arg. This means the packed data can be
  directly copied to an element of this variant.

The new code uses rvalue reference arguments in preparation for P2418.
The handle class also has some changes to prepare for P2418. The real
changed for P2418 will be done separately, but these parts make it
easier to implement that paper.

Some parts of existing test code are removed since they were no longer
valid after the changes, but new tests have been added.

Implements parts of:
- P2418 Add support for std::generator-like types to std::format

Completes:
- LWG3473 Normative encouragement in non-normative note

Depends on D121138

Reviewed By: #libc, vitaut, Mordante

Differential Revision: https://reviews.llvm.org/D121514
2022-05-18 20:11:36 +02:00

654 lines
16 KiB
CMake

set(files
__algorithm/adjacent_find.h
__algorithm/all_of.h
__algorithm/any_of.h
__algorithm/binary_search.h
__algorithm/clamp.h
__algorithm/comp.h
__algorithm/comp_ref_type.h
__algorithm/copy.h
__algorithm/copy_backward.h
__algorithm/copy_if.h
__algorithm/copy_n.h
__algorithm/count.h
__algorithm/count_if.h
__algorithm/equal.h
__algorithm/equal_range.h
__algorithm/fill.h
__algorithm/fill_n.h
__algorithm/find.h
__algorithm/find_end.h
__algorithm/find_first_of.h
__algorithm/find_if.h
__algorithm/find_if_not.h
__algorithm/for_each.h
__algorithm/for_each_n.h
__algorithm/generate.h
__algorithm/generate_n.h
__algorithm/half_positive.h
__algorithm/in_found_result.h
__algorithm/in_fun_result.h
__algorithm/in_in_out_result.h
__algorithm/in_in_result.h
__algorithm/in_out_out_result.h
__algorithm/in_out_result.h
__algorithm/includes.h
__algorithm/inplace_merge.h
__algorithm/is_heap.h
__algorithm/is_heap_until.h
__algorithm/is_partitioned.h
__algorithm/is_permutation.h
__algorithm/is_sorted.h
__algorithm/is_sorted_until.h
__algorithm/iter_swap.h
__algorithm/lexicographical_compare.h
__algorithm/lower_bound.h
__algorithm/make_heap.h
__algorithm/max.h
__algorithm/max_element.h
__algorithm/merge.h
__algorithm/min.h
__algorithm/min_element.h
__algorithm/min_max_result.h
__algorithm/minmax.h
__algorithm/minmax_element.h
__algorithm/mismatch.h
__algorithm/move.h
__algorithm/move_backward.h
__algorithm/next_permutation.h
__algorithm/none_of.h
__algorithm/nth_element.h
__algorithm/partial_sort.h
__algorithm/partial_sort_copy.h
__algorithm/partition.h
__algorithm/partition_copy.h
__algorithm/partition_point.h
__algorithm/pop_heap.h
__algorithm/prev_permutation.h
__algorithm/push_heap.h
__algorithm/ranges_copy.h
__algorithm/ranges_copy_backward.h
__algorithm/ranges_copy_if.h
__algorithm/ranges_copy_n.h
__algorithm/ranges_count.h
__algorithm/ranges_count_if.h
__algorithm/ranges_find.h
__algorithm/ranges_find_if.h
__algorithm/ranges_find_if_not.h
__algorithm/ranges_for_each.h
__algorithm/ranges_for_each_n.h
__algorithm/ranges_is_partitioned.h
__algorithm/ranges_max.h
__algorithm/ranges_max_element.h
__algorithm/ranges_min.h
__algorithm/ranges_min_element.h
__algorithm/ranges_minmax.h
__algorithm/ranges_minmax_element.h
__algorithm/ranges_mismatch.h
__algorithm/ranges_swap_ranges.h
__algorithm/ranges_transform.h
__algorithm/remove.h
__algorithm/remove_copy.h
__algorithm/remove_copy_if.h
__algorithm/remove_if.h
__algorithm/replace.h
__algorithm/replace_copy.h
__algorithm/replace_copy_if.h
__algorithm/replace_if.h
__algorithm/reverse.h
__algorithm/reverse_copy.h
__algorithm/rotate.h
__algorithm/rotate_copy.h
__algorithm/sample.h
__algorithm/search.h
__algorithm/search_n.h
__algorithm/set_difference.h
__algorithm/set_intersection.h
__algorithm/set_symmetric_difference.h
__algorithm/set_union.h
__algorithm/shift_left.h
__algorithm/shift_right.h
__algorithm/shuffle.h
__algorithm/sift_down.h
__algorithm/sort.h
__algorithm/sort_heap.h
__algorithm/stable_partition.h
__algorithm/stable_sort.h
__algorithm/swap_ranges.h
__algorithm/transform.h
__algorithm/unique.h
__algorithm/unique_copy.h
__algorithm/unwrap_iter.h
__algorithm/upper_bound.h
__assert
__availability
__bit/bit_cast.h
__bit/byteswap.h
__bit_reference
__bits
__bsd_locale_defaults.h
__bsd_locale_fallbacks.h
__charconv/chars_format.h
__charconv/from_chars_result.h
__charconv/to_chars_result.h
__chrono/calendar.h
__chrono/convert_to_timespec.h
__chrono/day.h
__chrono/duration.h
__chrono/file_clock.h
__chrono/hh_mm_ss.h
__chrono/high_resolution_clock.h
__chrono/literals.h
__chrono/month.h
__chrono/month_weekday.h
__chrono/monthday.h
__chrono/steady_clock.h
__chrono/system_clock.h
__chrono/time_point.h
__chrono/weekday.h
__chrono/year.h
__chrono/year_month.h
__chrono/year_month_day.h
__chrono/year_month_weekday.h
__compare/common_comparison_category.h
__compare/compare_partial_order_fallback.h
__compare/compare_strong_order_fallback.h
__compare/compare_three_way.h
__compare/compare_three_way_result.h
__compare/compare_weak_order_fallback.h
__compare/is_eq.h
__compare/ordering.h
__compare/partial_order.h
__compare/strong_order.h
__compare/synth_three_way.h
__compare/three_way_comparable.h
__compare/weak_order.h
__concepts/arithmetic.h
__concepts/assignable.h
__concepts/boolean_testable.h
__concepts/class_or_enum.h
__concepts/common_reference_with.h
__concepts/common_with.h
__concepts/constructible.h
__concepts/convertible_to.h
__concepts/copyable.h
__concepts/derived_from.h
__concepts/destructible.h
__concepts/different_from.h
__concepts/equality_comparable.h
__concepts/invocable.h
__concepts/movable.h
__concepts/predicate.h
__concepts/regular.h
__concepts/relation.h
__concepts/same_as.h
__concepts/semiregular.h
__concepts/swappable.h
__concepts/totally_ordered.h
__config
__coroutine/coroutine_handle.h
__coroutine/coroutine_traits.h
__coroutine/noop_coroutine_handle.h
__coroutine/trivial_awaitables.h
__debug
__errc
__filesystem/copy_options.h
__filesystem/directory_entry.h
__filesystem/directory_iterator.h
__filesystem/directory_options.h
__filesystem/file_status.h
__filesystem/file_time_type.h
__filesystem/file_type.h
__filesystem/filesystem_error.h
__filesystem/operations.h
__filesystem/path.h
__filesystem/path_iterator.h
__filesystem/perm_options.h
__filesystem/perms.h
__filesystem/recursive_directory_iterator.h
__filesystem/space_info.h
__filesystem/u8path.h
__format/buffer.h
__format/concepts.h
__format/enable_insertable.h
__format/format_arg.h
__format/format_arg_store.h
__format/format_args.h
__format/format_context.h
__format/format_error.h
__format/format_fwd.h
__format/format_parse_context.h
__format/format_string.h
__format/format_to_n_result.h
__format/formatter.h
__format/formatter_bool.h
__format/formatter_char.h
__format/formatter_floating_point.h
__format/formatter_integer.h
__format/formatter_integral.h
__format/formatter_pointer.h
__format/formatter_string.h
__format/parser_std_format_spec.h
__functional/binary_function.h
__functional/binary_negate.h
__functional/bind.h
__functional/bind_back.h
__functional/bind_front.h
__functional/binder1st.h
__functional/binder2nd.h
__functional/compose.h
__functional/default_searcher.h
__functional/function.h
__functional/hash.h
__functional/identity.h
__functional/invoke.h
__functional/is_transparent.h
__functional/mem_fn.h
__functional/mem_fun_ref.h
__functional/not_fn.h
__functional/operations.h
__functional/perfect_forward.h
__functional/pointer_to_binary_function.h
__functional/pointer_to_unary_function.h
__functional/ranges_operations.h
__functional/reference_wrapper.h
__functional/unary_function.h
__functional/unary_negate.h
__functional/unwrap_ref.h
__functional/weak_result_type.h
__fwd/span.h
__fwd/string_view.h
__hash_table
__ios/fpos.h
__iterator/access.h
__iterator/advance.h
__iterator/back_insert_iterator.h
__iterator/common_iterator.h
__iterator/concepts.h
__iterator/counted_iterator.h
__iterator/data.h
__iterator/default_sentinel.h
__iterator/distance.h
__iterator/empty.h
__iterator/erase_if_container.h
__iterator/front_insert_iterator.h
__iterator/incrementable_traits.h
__iterator/indirectly_comparable.h
__iterator/insert_iterator.h
__iterator/istream_iterator.h
__iterator/istreambuf_iterator.h
__iterator/iter_move.h
__iterator/iter_swap.h
__iterator/iterator.h
__iterator/iterator_traits.h
__iterator/mergeable.h
__iterator/move_iterator.h
__iterator/move_sentinel.h
__iterator/next.h
__iterator/ostream_iterator.h
__iterator/ostreambuf_iterator.h
__iterator/permutable.h
__iterator/prev.h
__iterator/projected.h
__iterator/readable_traits.h
__iterator/reverse_access.h
__iterator/reverse_iterator.h
__iterator/size.h
__iterator/sortable.h
__iterator/unreachable_sentinel.h
__iterator/wrap_iter.h
__locale
__mbstate_t.h
__memory/addressof.h
__memory/allocate_at_least.h
__memory/allocation_guard.h
__memory/allocator.h
__memory/allocator_arg_t.h
__memory/allocator_traits.h
__memory/assume_aligned.h
__memory/auto_ptr.h
__memory/compressed_pair.h
__memory/concepts.h
__memory/construct_at.h
__memory/pointer_traits.h
__memory/ranges_construct_at.h
__memory/ranges_uninitialized_algorithms.h
__memory/raw_storage_iterator.h
__memory/shared_ptr.h
__memory/temporary_buffer.h
__memory/uninitialized_algorithms.h
__memory/unique_ptr.h
__memory/uses_allocator.h
__memory/voidify.h
__mutex_base
__node_handle
__numeric/accumulate.h
__numeric/adjacent_difference.h
__numeric/exclusive_scan.h
__numeric/gcd_lcm.h
__numeric/inclusive_scan.h
__numeric/inner_product.h
__numeric/iota.h
__numeric/midpoint.h
__numeric/partial_sum.h
__numeric/reduce.h
__numeric/transform_exclusive_scan.h
__numeric/transform_inclusive_scan.h
__numeric/transform_reduce.h
__random/bernoulli_distribution.h
__random/binomial_distribution.h
__random/cauchy_distribution.h
__random/chi_squared_distribution.h
__random/clamp_to_integral.h
__random/default_random_engine.h
__random/discard_block_engine.h
__random/discrete_distribution.h
__random/exponential_distribution.h
__random/extreme_value_distribution.h
__random/fisher_f_distribution.h
__random/gamma_distribution.h
__random/generate_canonical.h
__random/geometric_distribution.h
__random/independent_bits_engine.h
__random/is_seed_sequence.h
__random/is_valid.h
__random/knuth_b.h
__random/linear_congruential_engine.h
__random/log2.h
__random/lognormal_distribution.h
__random/mersenne_twister_engine.h
__random/negative_binomial_distribution.h
__random/normal_distribution.h
__random/piecewise_constant_distribution.h
__random/piecewise_linear_distribution.h
__random/poisson_distribution.h
__random/random_device.h
__random/ranlux.h
__random/seed_seq.h
__random/shuffle_order_engine.h
__random/student_t_distribution.h
__random/subtract_with_carry_engine.h
__random/uniform_int_distribution.h
__random/uniform_random_bit_generator.h
__random/uniform_real_distribution.h
__random/weibull_distribution.h
__ranges/access.h
__ranges/all.h
__ranges/common_view.h
__ranges/concepts.h
__ranges/copyable_box.h
__ranges/counted.h
__ranges/dangling.h
__ranges/data.h
__ranges/drop_view.h
__ranges/empty.h
__ranges/empty_view.h
__ranges/enable_borrowed_range.h
__ranges/enable_view.h
__ranges/filter_view.h
__ranges/iota_view.h
__ranges/join_view.h
__ranges/lazy_split_view.h
__ranges/non_propagating_cache.h
__ranges/owning_view.h
__ranges/range_adaptor.h
__ranges/rbegin.h
__ranges/ref_view.h
__ranges/rend.h
__ranges/reverse_view.h
__ranges/single_view.h
__ranges/size.h
__ranges/subrange.h
__ranges/take_view.h
__ranges/transform_view.h
__ranges/view_interface.h
__ranges/views.h
__ranges/zip_view.h
__split_buffer
__std_stream
__string
__support/android/locale_bionic.h
__support/fuchsia/xlocale.h
__support/ibm/gettod_zos.h
__support/ibm/limits.h
__support/ibm/locale_mgmt_zos.h
__support/ibm/nanosleep.h
__support/ibm/support.h
__support/ibm/xlocale.h
__support/musl/xlocale.h
__support/newlib/xlocale.h
__support/openbsd/xlocale.h
__support/solaris/floatingpoint.h
__support/solaris/wchar.h
__support/solaris/xlocale.h
__support/win32/limits_msvc_win32.h
__support/win32/locale_win32.h
__support/xlocale/__nop_locale_mgmt.h
__support/xlocale/__posix_l_fallback.h
__support/xlocale/__strtonum_fallback.h
__thread/poll_with_backoff.h
__thread/timed_backoff_policy.h
__threading_support
__tree
__tuple
__type_traits/integral_constant.h
__type_traits/is_callable.h
__undef_macros
__utility/as_const.h
__utility/auto_cast.h
__utility/cmp.h
__utility/declval.h
__utility/exchange.h
__utility/forward.h
__utility/in_place.h
__utility/integer_sequence.h
__utility/move.h
__utility/pair.h
__utility/piecewise_construct.h
__utility/priority_tag.h
__utility/rel_ops.h
__utility/swap.h
__utility/to_underlying.h
__utility/transaction.h
__utility/unreachable.h
__variant/monostate.h
algorithm
any
array
atomic
barrier
bit
bitset
cassert
ccomplex
cctype
cerrno
cfenv
cfloat
charconv
chrono
cinttypes
ciso646
climits
clocale
cmath
codecvt
compare
complex
complex.h
concepts
condition_variable
coroutine
csetjmp
csignal
cstdarg
cstdbool
cstddef
cstdint
cstdio
cstdlib
cstring
ctgmath
ctime
ctype.h
cuchar
cwchar
cwctype
deque
errno.h
exception
execution
experimental/__config
experimental/__memory
experimental/algorithm
experimental/coroutine
experimental/deque
experimental/forward_list
experimental/functional
experimental/iterator
experimental/list
experimental/map
experimental/memory_resource
experimental/propagate_const
experimental/regex
experimental/set
experimental/simd
experimental/string
experimental/type_traits
experimental/unordered_map
experimental/unordered_set
experimental/utility
experimental/vector
ext/__hash
ext/hash_map
ext/hash_set
fenv.h
filesystem
float.h
format
forward_list
fstream
functional
future
initializer_list
inttypes.h
iomanip
ios
iosfwd
iostream
istream
iterator
latch
limits
limits.h
list
locale
locale.h
map
math.h
memory
module.modulemap
mutex
new
numbers
numeric
optional
ostream
queue
random
ranges
ratio
regex
scoped_allocator
semaphore
set
setjmp.h
shared_mutex
span
sstream
stack
stdatomic.h
stdbool.h
stddef.h
stdexcept
stdint.h
stdio.h
stdlib.h
streambuf
string
string.h
string_view
strstream
system_error
tgmath.h
thread
tuple
type_traits
typeindex
typeinfo
uchar.h
unordered_map
unordered_set
utility
valarray
variant
vector
version
wchar.h
wctype.h
)
configure_file("__config_site.in" "${LIBCXX_GENERATED_INCLUDE_TARGET_DIR}/__config_site" @ONLY)
set(_all_includes "${LIBCXX_GENERATED_INCLUDE_TARGET_DIR}/__config_site")
foreach(f ${files})
set(src "${CMAKE_CURRENT_SOURCE_DIR}/${f}")
set(dst "${LIBCXX_GENERATED_INCLUDE_DIR}/${f}")
add_custom_command(OUTPUT ${dst}
DEPENDS ${src}
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${src} ${dst}
COMMENT "Copying CXX header ${f}")
list(APPEND _all_includes "${dst}")
endforeach()
add_custom_target(generate-cxx-headers ALL DEPENDS ${_all_includes})
add_library(cxx-headers INTERFACE)
target_link_libraries(cxx-headers INTERFACE libcxx-abi-headers)
add_dependencies(cxx-headers generate-cxx-headers)
# TODO: Use target_include_directories once we figure out why that breaks the runtimes build
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC" OR "${CMAKE_CXX_SIMULATE_ID}" STREQUAL "MSVC")
target_compile_options(cxx-headers INTERFACE /I${LIBCXX_GENERATED_INCLUDE_DIR}
INTERFACE /I${LIBCXX_GENERATED_INCLUDE_TARGET_DIR})
else()
target_compile_options(cxx-headers INTERFACE -I${LIBCXX_GENERATED_INCLUDE_DIR}
INTERFACE -I${LIBCXX_GENERATED_INCLUDE_TARGET_DIR})
endif()
if (LIBCXX_INSTALL_HEADERS)
foreach(file ${files})
get_filename_component(dir ${file} DIRECTORY)
install(FILES ${file}
DESTINATION "${LIBCXX_INSTALL_INCLUDE_DIR}/${dir}"
COMPONENT cxx-headers
PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ
)
endforeach()
# Install the generated __config_site.
install(FILES ${LIBCXX_GENERATED_INCLUDE_TARGET_DIR}/__config_site
DESTINATION "${LIBCXX_INSTALL_INCLUDE_TARGET_DIR}"
PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ
COMPONENT cxx-headers)
if (NOT CMAKE_CONFIGURATION_TYPES)
add_custom_target(install-cxx-headers
DEPENDS cxx-headers
COMMAND "${CMAKE_COMMAND}"
-DCMAKE_INSTALL_COMPONENT=cxx-headers
-P "${CMAKE_BINARY_DIR}/cmake_install.cmake")
# Stripping is a no-op for headers
add_custom_target(install-cxx-headers-stripped DEPENDS install-cxx-headers)
endif()
endif()