@@ -365,11 +365,24 @@ set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
365365set (CMAKE_POSITION_INDEPENDENT_CODE ON )
366366set (CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON )
367367
368+ if (APPLE OR ANDROID )
369+ option (CLANG_USE_LIBCXX "Use libc++ instead of libstdc++" ON )
370+ else ()
371+ option (CLANG_USE_LIBCXX "Use libc++ instead of libstdc++" OFF )
372+ endif ()
373+
374+ set (CLANG_STDLIB_OPTION "" )
375+ if (CLANG_USE_LIBCXX)
376+ set (CLANG_STDLIB_OPTION "-stdlib=libc++" )
377+ else ()
378+ set (CLANG_STDLIB_OPTION "-stdlib=libstdc++" )
379+ endif ()
380+
368381if (NOT MSVC )
369382 # Use color in diagnostics
370383 set (
371384 _COMPILER_FLAGS
372- "$<$<C_COMPILER_ID :Clang >:-fcolor -diagnostics ;- stdlib = libc ++ >"
385+ "$<$<C_COMPILER_ID :Clang >:-fcolor -diagnostics ;${CLANG_STDLIB_OPTION} >"
373386 "$<$<C_COMPILER_ID :AppleClang >:-fcolor -diagnostics >"
374387 "$<$<C_COMPILER_ID :GNU >:-fdiagnostics -color =always >"
375388 )
@@ -460,7 +473,7 @@ endif()
460473# C/C++ strict link flags
461474set (
462475 BAZEL_CC_STRICT_LINK_FLAGS
463- "$<$<CXX_COMPILER_ID :Clang >:- stdlib = libc ++ >"
476+ "$<$<CXX_COMPILER_ID :Clang >:${CLANG_STDLIB_OPTION} >"
464477 ${BAZEL_CC_ASAN_COMPILE_FLAGS}
465478 ${BAZEL_CC_COVERAGE_COMPILE_FLAGS}
466479 )
479492# C/C++ unstrict link flags
480493set (
481494 BAZEL_CC_UNSTRICT_LINK_FLAGS
482- "$<$<CXX_COMPILER_ID :Clang >:- stdlib = libc ++ >"
495+ "$<$<CXX_COMPILER_ID :Clang >:${CLANG_STDLIB_OPTION} >"
483496 ${BAZEL_CC_ASAN_COMPILE_FLAGS}
484497 ${BAZEL_CC_COVERAGE_COMPILE_FLAGS}
485498 )
@@ -572,7 +585,7 @@ function(_targets_link_dependencies _NAME)
572585 if (TARGET ${LIB} )
573586 list (APPEND LIBS_DEPS ${LIB} )
574587 list (
575- APPEND LIBS_INCS
588+ APPEND LIBS_INCS
576589 "$<TARGET_PROPERTY :${LIB} ,INTERFACE_INCLUDE_DIRECTORIES >"
577590 )
578591 endif ()
@@ -590,55 +603,55 @@ function(_target_link_libraries _NAME)
590603 if (NOT _COLLECT_ALWAYS_LINK_VISITED)
591604 set (_COLLECT_ALWAYS_LINK_VISITED "" PARENT_SCOPE )
592605 endif ()
593-
606+
594607 set (LOCAL_RESULT "" )
595608 foreach (LIB ${LIB_LIST} )
596609 if (NOT TARGET ${LIB} )
597610 continue ()
598611 endif ()
599-
612+
600613 list (FIND _COLLECT_ALWAYS_LINK_VISITED ${LIB} ALREADY_VISITED)
601614 if (NOT ALREADY_VISITED EQUAL -1)
602615 continue ()
603616 endif ()
604-
617+
605618 list (APPEND _COLLECT_ALWAYS_LINK_VISITED ${LIB} )
606619 set (_COLLECT_ALWAYS_LINK_VISITED "${_COLLECT_ALWAYS_LINK_VISITED} " PARENT_SCOPE )
607-
620+
608621 get_target_property (ALWAYS_LINK ${LIB} ALWAYS_LINK )
609622 if (ALWAYS_LINK)
610623 list (APPEND LOCAL_RESULT ${LIB} )
611624 endif ()
612-
625+
613626 get_target_property (DEP_LIBS ${LIB} INTERFACE_LINK_LIBRARIES )
614627 if (DEP_LIBS)
615628 _collect_always_link_libs ("${DEP_LIBS} " DEP_ALWAYS_LINK_LIBS )
616629 list (APPEND LOCAL_RESULT ${DEP_ALWAYS_LINK_LIBS} )
617630 endif ()
618-
631+
619632 get_target_property (LINK_LIBS ${LIB} LINK_LIBRARIES )
620633 if (LINK_LIBS)
621634 _collect_always_link_libs ("${LINK_LIBS} " LINK_ALWAYS_LINK_LIBS )
622635 list (APPEND LOCAL_RESULT ${LINK_ALWAYS_LINK_LIBS} )
623636 endif ()
624637 endforeach ()
625-
638+
626639 list (REMOVE_DUPLICATES LOCAL_RESULT)
627640 set (${RESULT_VAR} "${LOCAL_RESULT} " PARENT_SCOPE )
628641 endfunction ()
629-
642+
630643 _collect_always_link_libs ("${ARGN} " ALL_ALWAYS_LINK_LIBS )
631-
644+
632645 set (ALL_LIBS_TO_PROCESS ${ARGN} )
633646 foreach (ALWAYS_LIB ${ALL_ALWAYS_LINK_LIBS} )
634647 list (FIND ARGN ${ALWAYS_LIB} FOUND_INDEX)
635648 if (FOUND_INDEX EQUAL -1)
636649 list (APPEND ALL_LIBS_TO_PROCESS ${ALWAYS_LIB} )
637650 endif ()
638651 endforeach ()
639-
652+
640653 list (REMOVE_DUPLICATES ALL_LIBS_TO_PROCESS)
641-
654+
642655 foreach (LIB ${ALL_LIBS_TO_PROCESS} )
643656 if (NOT TARGET ${LIB} )
644657 list (APPEND LINK_LIBS ${LIB} )
0 commit comments