Ожидается, что llvm-config --cxxflags будет возвращать опции, совместимые с gcc. Выводятся несовместимые опции: -Wcovered-switch-default -Wstring-conversion -fcolor-diagnostics Пример из официальной документации, где используется g++: http://llvm.org/docs/CommandGuide/llvm-config.html g++ `llvm-config --cxxflags` -o HowToUseJIT.o -c HowToUseJIT.cpp g++ `llvm-config --ldflags` -o HowToUseJIT HowToUseJIT.o \ `llvm-config --libs engine bcreader scalaropts`
Опции сборки llvm будут совместимы с gcc только если сам llvm собран gcc, а сейчас это не так. Я не очень хочу пересобирать llvm, потому потеряются возможности lld и thinLTO, поэтому в качестве варианта можно использовать след. 1) Пересобрать проект clang'ом. Должно получиться, если проект уже собирается нативно под Darwin. 2) Отфильтровать ненужные флаги, как это, например, делают в Mesalib: # Call this inside ` ` to get the return value. # $1 is the llvm-config command with arguments. strip_unwanted_llvm_flags() { echo " `$1` " | sed -E \ -e 's/[[[:space:]]]+-m[[^[:space:]]]*//g' \ -e 's/[[[:space:]]]+-DNDEBUG[[[:space:]]]/ /g' \ -e 's/[[[:space:]]]+-D_GNU_SOURCE[[[:space:]]]/ /g' \ -e 's/[[[:space:]]]+-pedantic[[[:space:]]]/ /g' \ -e 's/[[[:space:]]]+-W[[^[:space:]]]*//g' \ -e 's/[[[:space:]]]+-O[[^[:space:]]]*//g' \ -e 's/[[[:space:]]]+-g[[^[:space:]]]*//g' \ -e 's/-fno-rtti[[[:space:]]]/-Fno-rtti /g' \ -e 's/[[[:space:]]]+-f[[^[:space:]]]*//g' \ -e 's/-Fno-rtti[[[:space:]]]/-fno-rtti /g' \ -e 's/^[[[:space:]]]//' \ -e 's/[[[:space:]]]$//' } ... dnl dnl Set defines and buildtime variables only when using LLVM. dnl if test "x$enable_llvm" = xyes; then DEFINES="${DEFINES} -DHAVE_LLVM=0x0$LLVM_VERSION_INT -DMESA_LLVM_VERSION_PATCH=$LLVM_VERSION_PATCH" LLVM_LDFLAGS=`$LLVM_CONFIG --ldflags` LLVM_CFLAGS=$LLVM_CPPFLAGS # CPPFLAGS seem to be sufficient LLVM_CXXFLAGS=`strip_unwanted_llvm_flags "$LLVM_CONFIG --cxxflags"
Дарю новому мантейнеру, не благодарите.
Сейчас, спустя 3 года, у нас llvm собирается gcc, начиная ещё с 11.0.0-alt1. Если включить --with clang, то см. аннотацию к коммиту http://git.altlinux.org/people/arseny/packages/llvm11.0.git?p=llvm11.0.git;a=commit;h=4b3c6c13e4d70fd201691c636d57b5b020e00709 , это отдельная проблема, которой не было в llvm 10. Это имеет смысл переоткрыть, когда мы начнём собирать llvm при помощи clang.