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