2015-10-26 4 views
1

я извлек из официальных источников LLVM/Clang для 3.7 выпуска, сделали некоторые незначительные заплатки (NSGetEnviron()), сконфигурированные и построить для прошивкой с CMake:Нет libclang.a после успешного создания для iOS?

cmake ../llvm_37_ios \ 
-DCMAKE_INSTALL_PREFIX=/Volumes/Transcend/dev/src/llvm_37_ios_armv7_installed \ 
-DLLVM_ENABLE_TERMINFO=OFF \ 
-DLLVM_ENABLE_THREADS=OFF \ 
-DCMAKE_OSX_SYSROOT=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk \ 
-DCMAKE_C_FLAGS="-stdlib=libc++ -arch armv7 -mios-version-min=8.0 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk" \ 
-DCMAKE_CXX_FLAGS="-stdlib=libc++ -arch armv7 -mios-version-min=8.0 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk" \ 
-DCMAKE_CROSSCOMPILING=True \ 
-DLLVM_TABLEGEN=/Volumes/Transcend/dev/src/llvm_37_local_build/bin/llvm-tblgen \ 
-DCLANG_TABLEGEN=/Volumes/Transcend/dev/src/llvm_37_local_build/bin/clang-tblgen \ 
-DCMAKE_BUILD_TYPE=Release \ 
-DLLVM_TARGETS_TO_BUILD="ARM;X86" 

Однако я не нашел libclang.a, но нашли еще libclang*.a LIBS:

MBA-Anton:llvm_37_ios_armv7_build asmirnov$ find . -name "libclang.a" 
MBA-Anton:llvm_37_ios_armv7_build asmirnov$ find . -name "libclang*.a" 
./lib/libclangBasic.a 
./lib/libclangLex.a 
./lib/libclangASTMatchers.a 
./lib/libclangParse.a 
./lib/libclangDynamicASTMatchers.a 
./lib/libclangAnalysis.a 
./lib/libclangEdit.a 
./lib/libclangRewrite.a 
./lib/libclangAST.a 
./lib/libclangDriver.a 
./lib/libclangCodeGen.a 
./lib/libclangSerialization.a 
./lib/libclangRewriteFrontend.a 
./lib/libclangSema.a 
./lib/libclangFrontendTool.a 
./lib/libclangARCMigrate.a 
./lib/libclangToolingCore.a 
./lib/libclangFrontend.a 
./lib/libclangIndex.a 
./lib/libclangTooling.a 
./lib/libclangFormat.a 
./lib/libclangStaticAnalyzerFrontend.a 
./lib/libclangStaticAnalyzerCore.a 
./lib/libclangStaticAnalyzerCheckers.a 

По какой-то причине общей библиотеки была создана, но статичным не было:

Linking CXX executable ../../../../bin/clang 
[ 98%] Building CXX object tools/clang/tools/libclang/CMakeFiles/libclang.dir/CIndexDiagnostic.cpp.o 
[ 98%] Building CXX object tools/clang/tools/libclang/CMakeFiles/libclang.dir/CIndexHigh.cpp.o 
[ 98%] Built target clang 
[ 98%] Building CXX object tools/clang/tools/libclang/CMakeFiles/libclang.dir/CIndexInclusionStack.cpp.o 
[ 98%] Building CXX object tools/clang/tools/libclang/CMakeFiles/libclang.dir/CIndexUSRs.cpp.o 
[ 98%] Building CXX object tools/clang/tools/libclang/CMakeFiles/libclang.dir/CIndexer.cpp.o 
[ 98%] Building CXX object tools/clang/tools/libclang/CMakeFiles/libclang.dir/CXComment.cpp.o 
[ 98%] Building CXX object tools/clang/tools/libclang/CMakeFiles/libclang.dir/CXCursor.cpp.o 
[ 98%] Building CXX object tools/clang/tools/libclang/CMakeFiles/libclang.dir/CXCompilationDatabase.cpp.o 
[ 98%] Building CXX object tools/clang/tools/libclang/CMakeFiles/libclang.dir/CXLoadedDiagnostic.cpp.o 
[100%] Building CXX object tools/clang/tools/libclang/CMakeFiles/libclang.dir/CXSourceLocation.cpp.o 
[100%] Building CXX object tools/clang/tools/libclang/CMakeFiles/libclang.dir/CXStoredDiagnostic.cpp.o 
[100%] Building CXX object tools/clang/tools/libclang/CMakeFiles/libclang.dir/CXString.cpp.o 
[100%] Building CXX object tools/clang/tools/libclang/CMakeFiles/libclang.dir/CXType.cpp.o 
[100%] Building CXX object tools/clang/tools/libclang/CMakeFiles/libclang.dir/IndexBody.cpp.o 
[100%] Building CXX object tools/clang/tools/libclang/CMakeFiles/libclang.dir/IndexDecl.cpp.o 
[100%] Building CXX object tools/clang/tools/libclang/CMakeFiles/libclang.dir/IndexTypeSourceInfo.cpp.o 
[100%] Building CXX object tools/clang/tools/libclang/CMakeFiles/libclang.dir/Indexing.cpp.o 
[100%] Building CXX object tools/clang/tools/libclang/CMakeFiles/libclang.dir/IndexingContext.cpp.o 
Linking CXX shared library ../../../../lib/libclang.dylib 
[100%] Built target libclang 

Я что-то пропустил или это ошибка конфигурации clang?

ответ

3

libclang по умолчанию используется как разделяемая библиотека, поскольку он упрощает потребление с других языков, таких как Python, с использованием FFI или подобных механизмов.

Для создания статического использования библиотеки LIBCLANG_BUILD_STATIC опцию CMake, определенный в clang/tools/libclang/CMakeLists.txt:

option(LIBCLANG_BUILD_STATIC 
    "Build libclang as a static library (in addition to a shared one)" OFF) 

Вы можете использовать его следующим образом:

cmake -DLIBCLANG_BUILD_STATIC=ON ... 
+0

я могу подтвердить, что я был в состоянии получить 'libclang.a' , большое спасибо! BTW, мое первоначальное намерение состояло в том, чтобы использовать Autotools, но я не смог найти, как передать локальные пути tblgen для исполняемых файлов llvm/clang. Как это можно сделать? мой оригинальный скрипт здесь: https://gist.github.com/4ntoine/d8155c06953b70dd95a5 – 4ntoine

+0

@ 4ntoine Я не уверен, как это сделать с помощью autotools, извините. – vitaut