1# $FreeBSD$ 2 3.include <src.opts.mk> 4 5PACKAGE= clibs 6_LIBCXXRTDIR= ${SRCTOP}/contrib/libcxxrt 7HDRDIR= ${SRCTOP}/contrib/llvm-project/libcxx/include 8SRCDIR= ${SRCTOP}/contrib/llvm-project/libcxx/src 9CXXINCLUDEDIR= ${INCLUDEDIR}/c++/v${SHLIB_MAJOR} 10 11.PATH: ${SRCDIR} 12 13LIB= c++ 14SHLIB_MAJOR= 1 15SHLIB_LDSCRIPT= libc++.ldscript 16 17SRCS+= algorithm.cpp 18SRCS+= any.cpp 19SRCS+= atomic.cpp 20SRCS+= barrier.cpp 21SRCS+= bind.cpp 22SRCS+= charconv.cpp 23SRCS+= chrono.cpp 24SRCS+= condition_variable.cpp 25SRCS+= condition_variable_destructor.cpp 26SRCS+= debug.cpp 27SRCS+= exception.cpp 28SRCS+= filesystem/directory_iterator.cpp 29SRCS+= filesystem/int128_builtins.cpp 30SRCS+= filesystem/operations.cpp 31SRCS+= format.cpp 32SRCS+= functional.cpp 33SRCS+= future.cpp 34SRCS+= hash.cpp 35SRCS+= ios.cpp 36SRCS+= ios.instantiations.cpp 37SRCS+= iostream.cpp 38SRCS+= locale.cpp 39SRCS+= memory.cpp 40SRCS+= mutex.cpp 41SRCS+= mutex_destructor.cpp 42SRCS+= new.cpp 43SRCS+= optional.cpp 44SRCS+= random.cpp 45SRCS+= random_shuffle.cpp 46SRCS+= regex.cpp 47SRCS+= shared_mutex.cpp 48SRCS+= stdexcept.cpp 49SRCS+= string.cpp 50SRCS+= strstream.cpp 51SRCS+= system_error.cpp 52SRCS+= thread.cpp 53SRCS+= typeinfo.cpp 54SRCS+= utility.cpp 55SRCS+= valarray.cpp 56SRCS+= variant.cpp 57SRCS+= vector.cpp 58 59CXXRT_SRCS+= auxhelper.cc 60CXXRT_SRCS+= dynamic_cast.cc 61CXXRT_SRCS+= exception.cc 62CXXRT_SRCS+= guard.cc 63CXXRT_SRCS+= libelftc_dem_gnu3.c 64CXXRT_SRCS+= memory.cc 65CXXRT_SRCS+= stdexcept.cc 66CXXRT_SRCS+= terminate.cc 67CXXRT_SRCS+= typeinfo.cc 68 69.for _S in ${CXXRT_SRCS} 70CLEANFILES+= cxxrt_${_S} 71STATICOBJS+= cxxrt_${_S:R}.o 72cxxrt_${_S}: ${_LIBCXXRTDIR}/${_S} .NOMETA 73 ln -sf ${.ALLSRC} ${.TARGET} 74.endfor 75 76WARNS?= 0 77CFLAGS+= -isystem ${.CURDIR} 78CFLAGS+= -isystem ${HDRDIR} 79CFLAGS+= -isystem ${_LIBCXXRTDIR} 80CFLAGS+= -nostdinc++ 81CFLAGS+= -nostdlib 82CFLAGS+= -D_LIBCPP_BUILDING_LIBRARY 83CFLAGS+= -DLIBCXXRT 84CFLAGS+= -ffunction-sections 85CFLAGS+= -fdata-sections 86CXXSTD?= c++14 87 88LIBADD+= cxxrt 89 90INCSGROUPS+= STD 91STDDIR= ${CXXINCLUDEDIR} 92STD_HEADERS+= __availability 93STD_HEADERS+= __bit_reference 94STD_HEADERS+= __bits 95STD_HEADERS+= __bsd_locale_defaults.h 96STD_HEADERS+= __bsd_locale_fallbacks.h 97STD_HEADERS+= __config 98STD_HEADERS+= __debug 99STD_HEADERS+= __errc 100STD_HEADERS+= __function_like.h 101STD_HEADERS+= __functional_base 102STD_HEADERS+= __hash_table 103STD_HEADERS+= __libcpp_version 104STD_HEADERS+= __locale 105STD_HEADERS+= __mutex_base 106STD_HEADERS+= __node_handle 107STD_HEADERS+= __nullptr 108STD_HEADERS+= __split_buffer 109STD_HEADERS+= __std_stream 110STD_HEADERS+= __string 111STD_HEADERS+= __threading_support 112STD_HEADERS+= __tree 113STD_HEADERS+= __tuple 114STD_HEADERS+= __undef_macros 115STD_HEADERS+= algorithm 116STD_HEADERS+= any 117STD_HEADERS+= array 118STD_HEADERS+= atomic 119STD_HEADERS+= barrier 120STD_HEADERS+= bit 121STD_HEADERS+= bitset 122STD_HEADERS+= cassert 123STD_HEADERS+= ccomplex 124STD_HEADERS+= cctype 125STD_HEADERS+= cerrno 126STD_HEADERS+= cfenv 127STD_HEADERS+= cfloat 128STD_HEADERS+= charconv 129STD_HEADERS+= chrono 130STD_HEADERS+= cinttypes 131STD_HEADERS+= ciso646 132STD_HEADERS+= climits 133STD_HEADERS+= clocale 134STD_HEADERS+= cmath 135STD_HEADERS+= codecvt 136STD_HEADERS+= compare 137STD_HEADERS+= complex 138STD_HEADERS+= complex.h 139STD_HEADERS+= concepts 140STD_HEADERS+= condition_variable 141STD_HEADERS+= csetjmp 142STD_HEADERS+= csignal 143STD_HEADERS+= cstdarg 144STD_HEADERS+= cstdbool 145STD_HEADERS+= cstddef 146STD_HEADERS+= cstdint 147STD_HEADERS+= cstdio 148STD_HEADERS+= cstdlib 149STD_HEADERS+= cstring 150STD_HEADERS+= ctgmath 151STD_HEADERS+= ctime 152STD_HEADERS+= ctype.h 153STD_HEADERS+= cwchar 154STD_HEADERS+= cwctype 155STD_HEADERS+= deque 156STD_HEADERS+= errno.h 157STD_HEADERS+= exception 158STD_HEADERS+= execution 159STD_HEADERS+= fenv.h 160STD_HEADERS+= filesystem 161STD_HEADERS+= float.h 162STD_HEADERS+= format 163STD_HEADERS+= forward_list 164STD_HEADERS+= fstream 165STD_HEADERS+= functional 166STD_HEADERS+= future 167STD_HEADERS+= initializer_list 168STD_HEADERS+= inttypes.h 169STD_HEADERS+= iomanip 170STD_HEADERS+= ios 171STD_HEADERS+= iosfwd 172STD_HEADERS+= iostream 173STD_HEADERS+= istream 174STD_HEADERS+= iterator 175STD_HEADERS+= latch 176STD_HEADERS+= limits 177STD_HEADERS+= limits.h 178STD_HEADERS+= list 179STD_HEADERS+= locale 180STD_HEADERS+= locale.h 181STD_HEADERS+= map 182STD_HEADERS+= math.h 183STD_HEADERS+= memory 184STD_HEADERS+= module.modulemap 185STD_HEADERS+= mutex 186STD_HEADERS+= new 187STD_HEADERS+= numbers 188STD_HEADERS+= numeric 189STD_HEADERS+= optional 190STD_HEADERS+= ostream 191STD_HEADERS+= queue 192STD_HEADERS+= random 193STD_HEADERS+= ranges 194STD_HEADERS+= ratio 195STD_HEADERS+= regex 196STD_HEADERS+= scoped_allocator 197STD_HEADERS+= semaphore 198STD_HEADERS+= set 199STD_HEADERS+= setjmp.h 200STD_HEADERS+= shared_mutex 201STD_HEADERS+= span 202STD_HEADERS+= sstream 203STD_HEADERS+= stack 204STD_HEADERS+= stdbool.h 205STD_HEADERS+= stddef.h 206STD_HEADERS+= stdexcept 207STD_HEADERS+= stdint.h 208STD_HEADERS+= stdio.h 209STD_HEADERS+= stdlib.h 210STD_HEADERS+= streambuf 211STD_HEADERS+= string 212STD_HEADERS+= string.h 213STD_HEADERS+= string_view 214STD_HEADERS+= strstream 215STD_HEADERS+= system_error 216STD_HEADERS+= tgmath.h 217STD_HEADERS+= thread 218STD_HEADERS+= tuple 219STD_HEADERS+= type_traits 220STD_HEADERS+= typeindex 221STD_HEADERS+= typeinfo 222STD_HEADERS+= unordered_map 223STD_HEADERS+= unordered_set 224STD_HEADERS+= utility 225STD_HEADERS+= valarray 226STD_HEADERS+= variant 227STD_HEADERS+= vector 228STD_HEADERS+= version 229STD_HEADERS+= wchar.h 230STD_HEADERS+= wctype.h 231.for hdr in ${STD_HEADERS} 232STD+= ${HDRDIR}/${hdr} 233.endfor 234 235# Special case for __config_site, which as of libc++ 12.0.0 is generated by 236# CMake, and as of 13.0.0 installed side-by-side with__config. 237STD+= ${.CURDIR}/__config_site 238 239RT_HEADERS+= cxxabi.h 240.for hdr in ${RT_HEADERS} 241STD+= ${_LIBCXXRTDIR}/${hdr} 242.endfor 243 244INCSGROUPS+= ALG 245ALGDIR= ${CXXINCLUDEDIR}/__algorithm 246ALG_HEADERS+= adjacent_find.h 247ALG_HEADERS+= all_of.h 248ALG_HEADERS+= any_of.h 249ALG_HEADERS+= binary_search.h 250ALG_HEADERS+= clamp.h 251ALG_HEADERS+= comp.h 252ALG_HEADERS+= comp_ref_type.h 253ALG_HEADERS+= copy.h 254ALG_HEADERS+= copy_backward.h 255ALG_HEADERS+= copy_if.h 256ALG_HEADERS+= copy_n.h 257ALG_HEADERS+= count.h 258ALG_HEADERS+= count_if.h 259ALG_HEADERS+= equal.h 260ALG_HEADERS+= equal_range.h 261ALG_HEADERS+= fill.h 262ALG_HEADERS+= fill_n.h 263ALG_HEADERS+= find.h 264ALG_HEADERS+= find_end.h 265ALG_HEADERS+= find_first_of.h 266ALG_HEADERS+= find_if.h 267ALG_HEADERS+= find_if_not.h 268ALG_HEADERS+= for_each.h 269ALG_HEADERS+= for_each_n.h 270ALG_HEADERS+= generate.h 271ALG_HEADERS+= generate_n.h 272ALG_HEADERS+= half_positive.h 273ALG_HEADERS+= includes.h 274ALG_HEADERS+= inplace_merge.h 275ALG_HEADERS+= is_heap.h 276ALG_HEADERS+= is_heap_until.h 277ALG_HEADERS+= is_partitioned.h 278ALG_HEADERS+= is_permutation.h 279ALG_HEADERS+= is_sorted.h 280ALG_HEADERS+= is_sorted_until.h 281ALG_HEADERS+= iter_swap.h 282ALG_HEADERS+= lexicographical_compare.h 283ALG_HEADERS+= lower_bound.h 284ALG_HEADERS+= make_heap.h 285ALG_HEADERS+= max.h 286ALG_HEADERS+= max_element.h 287ALG_HEADERS+= merge.h 288ALG_HEADERS+= min.h 289ALG_HEADERS+= min_element.h 290ALG_HEADERS+= minmax.h 291ALG_HEADERS+= minmax_element.h 292ALG_HEADERS+= mismatch.h 293ALG_HEADERS+= move.h 294ALG_HEADERS+= move_backward.h 295ALG_HEADERS+= next_permutation.h 296ALG_HEADERS+= none_of.h 297ALG_HEADERS+= nth_element.h 298ALG_HEADERS+= partial_sort.h 299ALG_HEADERS+= partial_sort_copy.h 300ALG_HEADERS+= partition.h 301ALG_HEADERS+= partition_copy.h 302ALG_HEADERS+= partition_point.h 303ALG_HEADERS+= pop_heap.h 304ALG_HEADERS+= prev_permutation.h 305ALG_HEADERS+= push_heap.h 306ALG_HEADERS+= remove.h 307ALG_HEADERS+= remove_copy.h 308ALG_HEADERS+= remove_copy_if.h 309ALG_HEADERS+= remove_if.h 310ALG_HEADERS+= replace.h 311ALG_HEADERS+= replace_copy.h 312ALG_HEADERS+= replace_copy_if.h 313ALG_HEADERS+= replace_if.h 314ALG_HEADERS+= reverse.h 315ALG_HEADERS+= reverse_copy.h 316ALG_HEADERS+= rotate.h 317ALG_HEADERS+= rotate_copy.h 318ALG_HEADERS+= sample.h 319ALG_HEADERS+= search.h 320ALG_HEADERS+= search_n.h 321ALG_HEADERS+= set_difference.h 322ALG_HEADERS+= set_intersection.h 323ALG_HEADERS+= set_symmetric_difference.h 324ALG_HEADERS+= set_union.h 325ALG_HEADERS+= shift_left.h 326ALG_HEADERS+= shift_right.h 327ALG_HEADERS+= shuffle.h 328ALG_HEADERS+= sift_down.h 329ALG_HEADERS+= sort.h 330ALG_HEADERS+= sort_heap.h 331ALG_HEADERS+= stable_partition.h 332ALG_HEADERS+= stable_sort.h 333ALG_HEADERS+= swap_ranges.h 334ALG_HEADERS+= transform.h 335ALG_HEADERS+= unique.h 336ALG_HEADERS+= unique_copy.h 337ALG_HEADERS+= unwrap_iter.h 338ALG_HEADERS+= upper_bound.h 339.for hdr in ${ALG_HEADERS} 340ALG+= ${HDRDIR}/__algorithm/${hdr} 341.endfor 342 343INCSGROUPS+= FMT 344FMTDIR= ${CXXINCLUDEDIR}/__format 345FMT_HEADERS+= format_error.h 346FMT_HEADERS+= format_parse_context.h 347.for hdr in ${FMT_HEADERS} 348FMT+= ${HDRDIR}/__format/${hdr} 349.endfor 350 351INCSGROUPS+= FUN 352FUNDIR= ${CXXINCLUDEDIR}/__functional 353FUN_HEADERS+= binary_function.h 354FUN_HEADERS+= binary_negate.h 355FUN_HEADERS+= bind.h 356FUN_HEADERS+= bind_front.h 357FUN_HEADERS+= binder1st.h 358FUN_HEADERS+= binder2nd.h 359FUN_HEADERS+= default_searcher.h 360FUN_HEADERS+= function.h 361FUN_HEADERS+= hash.h 362FUN_HEADERS+= identity.h 363FUN_HEADERS+= invoke.h 364FUN_HEADERS+= is_transparent.h 365FUN_HEADERS+= mem_fn.h 366FUN_HEADERS+= mem_fun_ref.h 367FUN_HEADERS+= not_fn.h 368FUN_HEADERS+= operations.h 369FUN_HEADERS+= perfect_forward.h 370FUN_HEADERS+= pointer_to_binary_function.h 371FUN_HEADERS+= pointer_to_unary_function.h 372FUN_HEADERS+= ranges_operations.h 373FUN_HEADERS+= reference_wrapper.h 374FUN_HEADERS+= unary_function.h 375FUN_HEADERS+= unary_negate.h 376FUN_HEADERS+= unwrap_ref.h 377FUN_HEADERS+= weak_result_type.h 378.for hdr in ${FUN_HEADERS} 379FUN+= ${HDRDIR}/__functional/${hdr} 380.endfor 381 382INCSGROUPS+= IT 383ITDIR= ${CXXINCLUDEDIR}/__iterator 384IT_HEADERS+= access.h 385IT_HEADERS+= advance.h 386IT_HEADERS+= back_insert_iterator.h 387IT_HEADERS+= common_iterator.h 388IT_HEADERS+= concepts.h 389IT_HEADERS+= counted_iterator.h 390IT_HEADERS+= data.h 391IT_HEADERS+= default_sentinel.h 392IT_HEADERS+= distance.h 393IT_HEADERS+= empty.h 394IT_HEADERS+= erase_if_container.h 395IT_HEADERS+= front_insert_iterator.h 396IT_HEADERS+= incrementable_traits.h 397IT_HEADERS+= insert_iterator.h 398IT_HEADERS+= istream_iterator.h 399IT_HEADERS+= istreambuf_iterator.h 400IT_HEADERS+= iter_move.h 401IT_HEADERS+= iter_swap.h 402IT_HEADERS+= iterator.h 403IT_HEADERS+= iterator_traits.h 404IT_HEADERS+= move_iterator.h 405IT_HEADERS+= next.h 406IT_HEADERS+= ostream_iterator.h 407IT_HEADERS+= ostreambuf_iterator.h 408IT_HEADERS+= prev.h 409IT_HEADERS+= projected.h 410IT_HEADERS+= readable_traits.h 411IT_HEADERS+= reverse_access.h 412IT_HEADERS+= reverse_iterator.h 413IT_HEADERS+= size.h 414IT_HEADERS+= wrap_iter.h 415.for hdr in ${IT_HEADERS} 416IT+= ${HDRDIR}/__iterator/${hdr} 417.endfor 418 419INCSGROUPS+= MEM 420MEMDIR= ${CXXINCLUDEDIR}/__memory 421MEM_HEADERS+= addressof.h 422MEM_HEADERS+= allocation_guard.h 423MEM_HEADERS+= allocator.h 424MEM_HEADERS+= allocator_arg_t.h 425MEM_HEADERS+= allocator_traits.h 426MEM_HEADERS+= auto_ptr.h 427MEM_HEADERS+= compressed_pair.h 428MEM_HEADERS+= construct_at.h 429MEM_HEADERS+= pointer_safety.h 430MEM_HEADERS+= pointer_traits.h 431MEM_HEADERS+= raw_storage_iterator.h 432MEM_HEADERS+= shared_ptr.h 433MEM_HEADERS+= temporary_buffer.h 434MEM_HEADERS+= uninitialized_algorithms.h 435MEM_HEADERS+= unique_ptr.h 436MEM_HEADERS+= uses_allocator.h 437.for hdr in ${MEM_HEADERS} 438MEM+= ${HDRDIR}/__memory/${hdr} 439.endfor 440 441INCSGROUPS+= RND 442RNDDIR= ${CXXINCLUDEDIR}/__random 443RND_HEADERS+= uniform_int_distribution.h 444.for hdr in ${RND_HEADERS} 445RND+= ${HDRDIR}/__random/${hdr} 446.endfor 447 448INCSGROUPS+= RNG 449RNGDIR= ${CXXINCLUDEDIR}/__ranges 450RNG_HEADERS+= access.h 451RNG_HEADERS+= all.h 452RNG_HEADERS+= common_view.h 453RNG_HEADERS+= concepts.h 454RNG_HEADERS+= copyable_box.h 455RNG_HEADERS+= dangling.h 456RNG_HEADERS+= data.h 457RNG_HEADERS+= drop_view.h 458RNG_HEADERS+= empty.h 459RNG_HEADERS+= empty_view.h 460RNG_HEADERS+= enable_borrowed_range.h 461RNG_HEADERS+= enable_view.h 462RNG_HEADERS+= non_propagating_cache.h 463RNG_HEADERS+= ref_view.h 464RNG_HEADERS+= size.h 465RNG_HEADERS+= subrange.h 466RNG_HEADERS+= transform_view.h 467RNG_HEADERS+= view_interface.h 468.for hdr in ${RNG_HEADERS} 469RNG+= ${HDRDIR}/__ranges/${hdr} 470.endfor 471 472INCSGROUPS+= UTL 473UTLDIR= ${CXXINCLUDEDIR}/__utility 474UTL_HEADERS+= __decay_copy.h 475UTL_HEADERS+= as_const.h 476UTL_HEADERS+= cmp.h 477UTL_HEADERS+= declval.h 478UTL_HEADERS+= exchange.h 479UTL_HEADERS+= forward.h 480UTL_HEADERS+= in_place.h 481UTL_HEADERS+= integer_sequence.h 482UTL_HEADERS+= move.h 483UTL_HEADERS+= pair.h 484UTL_HEADERS+= piecewise_construct.h 485UTL_HEADERS+= rel_ops.h 486UTL_HEADERS+= swap.h 487UTL_HEADERS+= to_underlying.h 488.for hdr in ${UTL_HEADERS} 489UTL+= ${HDRDIR}/__utility/${hdr} 490.endfor 491 492INCSGROUPS+= VAR 493VAR_HEADERS+= monostate.h 494VARDIR= ${CXXINCLUDEDIR}/__variant 495.for hdr in ${VAR_HEADERS} 496VAR+= ${HDRDIR}/__variant/${hdr} 497.endfor 498 499INCSGROUPS+= EXP 500EXPDIR= ${CXXINCLUDEDIR}/experimental 501EXP_HEADERS+= __config 502EXP_HEADERS+= __memory 503EXP_HEADERS+= algorithm 504EXP_HEADERS+= coroutine 505EXP_HEADERS+= deque 506EXP_HEADERS+= filesystem 507EXP_HEADERS+= forward_list 508EXP_HEADERS+= functional 509EXP_HEADERS+= iterator 510EXP_HEADERS+= list 511EXP_HEADERS+= map 512EXP_HEADERS+= memory_resource 513EXP_HEADERS+= propagate_const 514EXP_HEADERS+= regex 515EXP_HEADERS+= set 516EXP_HEADERS+= simd 517EXP_HEADERS+= string 518EXP_HEADERS+= type_traits 519EXP_HEADERS+= unordered_map 520EXP_HEADERS+= unordered_set 521EXP_HEADERS+= utility 522EXP_HEADERS+= vector 523.for hdr in ${EXP_HEADERS} 524EXP+= ${HDRDIR}/experimental/${hdr} 525.endfor 526 527INCSGROUPS+= EXT 528EXTDIR= ${CXXINCLUDEDIR}/ext 529EXT_HEADERS+= __hash 530EXT_HEADERS+= hash_map 531EXT_HEADERS+= hash_set 532.for hdr in ${EXT_HEADERS} 533EXT+= ${HDRDIR}/ext/${hdr} 534.endfor 535 536.include <bsd.lib.mk> 537