Skip to content

Commit 6b89d97

Browse files
authored
build: support config clang stdlib and fix default (#210)
1 parent 331933c commit 6b89d97

1 file changed

Lines changed: 28 additions & 15 deletions

File tree

cmake/bazel.cmake

Lines changed: 28 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -365,11 +365,24 @@ set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
365365
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
366366
set(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+
368381
if(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
461474
set(
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
)
@@ -479,7 +492,7 @@ set(
479492
# C/C++ unstrict link flags
480493
set(
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

Comments
 (0)