2013-03-11 21 views
5

szukam wyjaśnienia tego, co najlepsze opcje kompilacji są dla LLVM 3.2 RaspbianLLVM opcji budowania dla ARM/Raspberry Pi

Mam pobrane źródła LLVM 3,2, a mój config to:

cd llvm-3.2.src 
./configure --build=armv6-unknown-linux-gnueabi \ 
--host=armv6-unknown-linux-gnueabi \ 
--target=armv6-unknown-linux-gnueabi --with-cpu=arm1176jzf-s \ 
--with-float=hard --with-abi=aapcs-vfp --with-fpu=neon \ 
--enable-targets=arm --enable-optimized --enable-assertions 
make REQUIRES_RTTI=1 
sudo make install 

Podobno trwa to kilka godzin. Trwa już kilka godzin, ciesząc się, że po prostu pozwala mu działać.

Jest to długoterminowy projekt budowy więc nie mam żadnych skrupułów ponawianie kompilacji razie potrzeby :)

Odpowiedz

8

polecam cross-kompilacji LLVM dla Raspbian. Budowanie go na samym Pi trwa wieki.

Po pierwsze, uzyskaj działający katalog główny przy użyciu debootstrap (alternatywnie, po prostu sklonuj swoją istniejącą instalację Raspbian lub rozpakuj pobrany obraz). Konieczne może być zastąpienie niektórych bezwzględnych dowiązań symbolicznych względnymi, uważaj na błędy kompilacji.

Upewnij się, że masz działającą i dość aktualną instalację klangu (nie zapomnij zbudować go z obsługą docelową ARM).

Następnie cross-kompilacji LLVM z następującą definicją toolchain CMake (nie należy chroot do swoich fs korzeniowych na tym etapie!):


set(toolchain_dir /path/to/your/chroot-raspbian-armhf/) 
set(toolchain_bin_dir ${toolchain_dir}/usr/bin) 
set(toolchain_inc_dir ${toolchain_dir}/usr/include) # was /include 
set(toolchain_lib_dir ${toolchain_dir}/usr/lib) 

set(CMAKE_SYSTEM_NAME Linux CACHE INTERNAL "system name") 
set(CMAKE_SYSTEM_PROCESSOR arm CACHE INTERNAL "processor") 
set(CMAKE_C_COMPILER clang) 
set(CMAKE_CXX_COMPILER clang++) 
set(CMAKE_C_FLAGS "-O2 -integrated-as -target armv6-linux-gnueabihf -mfloat-abi=hard --sysroot=${toolchain_dir}" CACHE INTERNAL "c compiler flags") 
set(CMAKE_CXX_FLAGS "-O2 -integrated-as -target armv6-linux-gnueabihf -mfloat-abi=hard --sysroot=${toolchain_dir}" CACHE INTERNAL "cxx compiler flags") 

set(link_flags "-L${toolchain_lib_dir} -ldl") 

set(CMAKE_EXE_LINKER_FLAGS ${link_flags} CACHE INTERNAL "exe link flags") 
set(CMAKE_MODULE_LINKER_FLAGS ${link_flags} CACHE INTERNAL "module link flags") 
set(CMAKE_SHARED_LINKER_FLAGS ${link_flags} CACHE INTERNAL "shared link flags") 
set(CMAKE_FIND_ROOT_PATH ${toolchain_lib_dir} CACHE INTERNAL "cross root directory") 
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM BOTH CACHE INTERNAL "") 
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY CACHE INTERNAL "") 
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY CACHE INTERNAL "") 

(użyć cmake -DCMAKE_TOOLCHAIN_FILE=/path/to/the/file/above.txt)

Należy pamiętać, że cel powinien być armv6-linux-gnueabihf, a nie armv6-linux-gnueabi.

+0

Niesamowite dzięki - spróbuję! –

+0

Link prowadzi teraz do strony spamu MacKeeper. – mtnygard

+0

@mtnygard, wow, najgorszy rodzaj zgnilizny, jaką kiedykolwiek widziałem –