build: support config clang stdlib and fix default (#210)

This commit is contained in:
egolearner 2026-03-11 16:22:36 +08:00 committed by GitHub
parent 331933c75a
commit 6b89d97d97
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 28 additions and 15 deletions

View File

@ -365,11 +365,24 @@ set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
if(APPLE OR ANDROID)
option(CLANG_USE_LIBCXX "Use libc++ instead of libstdc++" ON)
else()
option(CLANG_USE_LIBCXX "Use libc++ instead of libstdc++" OFF)
endif()
set(CLANG_STDLIB_OPTION "")
if(CLANG_USE_LIBCXX)
set(CLANG_STDLIB_OPTION "-stdlib=libc++")
else()
set(CLANG_STDLIB_OPTION "-stdlib=libstdc++")
endif()
if(NOT MSVC)
# Use color in diagnostics
set(
_COMPILER_FLAGS
"$<$<C_COMPILER_ID:Clang>:-fcolor-diagnostics;-stdlib=libc++>"
"$<$<C_COMPILER_ID:Clang>:-fcolor-diagnostics;${CLANG_STDLIB_OPTION}>"
"$<$<C_COMPILER_ID:AppleClang>:-fcolor-diagnostics>"
"$<$<C_COMPILER_ID:GNU>:-fdiagnostics-color=always>"
)
@ -460,7 +473,7 @@ endif()
# C/C++ strict link flags
set(
BAZEL_CC_STRICT_LINK_FLAGS
"$<$<CXX_COMPILER_ID:Clang>:-stdlib=libc++>"
"$<$<CXX_COMPILER_ID:Clang>:${CLANG_STDLIB_OPTION}>"
${BAZEL_CC_ASAN_COMPILE_FLAGS}
${BAZEL_CC_COVERAGE_COMPILE_FLAGS}
)
@ -479,7 +492,7 @@ set(
# C/C++ unstrict link flags
set(
BAZEL_CC_UNSTRICT_LINK_FLAGS
"$<$<CXX_COMPILER_ID:Clang>:-stdlib=libc++>"
"$<$<CXX_COMPILER_ID:Clang>:${CLANG_STDLIB_OPTION}>"
${BAZEL_CC_ASAN_COMPILE_FLAGS}
${BAZEL_CC_COVERAGE_COMPILE_FLAGS}
)
@ -572,7 +585,7 @@ function(_targets_link_dependencies _NAME)
if(TARGET ${LIB})
list(APPEND LIBS_DEPS ${LIB})
list(
APPEND LIBS_INCS
APPEND LIBS_INCS
"$<TARGET_PROPERTY:${LIB},INTERFACE_INCLUDE_DIRECTORIES>"
)
endif()
@ -590,45 +603,45 @@ function(_target_link_libraries _NAME)
if(NOT _COLLECT_ALWAYS_LINK_VISITED)
set(_COLLECT_ALWAYS_LINK_VISITED "" PARENT_SCOPE)
endif()
set(LOCAL_RESULT "")
foreach(LIB ${LIB_LIST})
if(NOT TARGET ${LIB})
continue()
endif()
list(FIND _COLLECT_ALWAYS_LINK_VISITED ${LIB} ALREADY_VISITED)
if(NOT ALREADY_VISITED EQUAL -1)
continue()
endif()
list(APPEND _COLLECT_ALWAYS_LINK_VISITED ${LIB})
set(_COLLECT_ALWAYS_LINK_VISITED "${_COLLECT_ALWAYS_LINK_VISITED}" PARENT_SCOPE)
get_target_property(ALWAYS_LINK ${LIB} ALWAYS_LINK)
if(ALWAYS_LINK)
list(APPEND LOCAL_RESULT ${LIB})
endif()
get_target_property(DEP_LIBS ${LIB} INTERFACE_LINK_LIBRARIES)
if(DEP_LIBS)
_collect_always_link_libs("${DEP_LIBS}" DEP_ALWAYS_LINK_LIBS)
list(APPEND LOCAL_RESULT ${DEP_ALWAYS_LINK_LIBS})
endif()
get_target_property(LINK_LIBS ${LIB} LINK_LIBRARIES)
if(LINK_LIBS)
_collect_always_link_libs("${LINK_LIBS}" LINK_ALWAYS_LINK_LIBS)
list(APPEND LOCAL_RESULT ${LINK_ALWAYS_LINK_LIBS})
endif()
endforeach()
list(REMOVE_DUPLICATES LOCAL_RESULT)
set(${RESULT_VAR} "${LOCAL_RESULT}" PARENT_SCOPE)
endfunction()
_collect_always_link_libs("${ARGN}" ALL_ALWAYS_LINK_LIBS)
set(ALL_LIBS_TO_PROCESS ${ARGN})
foreach(ALWAYS_LIB ${ALL_ALWAYS_LINK_LIBS})
list(FIND ARGN ${ALWAYS_LIB} FOUND_INDEX)
@ -636,9 +649,9 @@ function(_target_link_libraries _NAME)
list(APPEND ALL_LIBS_TO_PROCESS ${ALWAYS_LIB})
endif()
endforeach()
list(REMOVE_DUPLICATES ALL_LIBS_TO_PROCESS)
foreach(LIB ${ALL_LIBS_TO_PROCESS})
if(NOT TARGET ${LIB})
list(APPEND LINK_LIBS ${LIB})