2013-03-11 17 views
5

Sto cercando un chiarimento di quello che le migliori opzioni di compilazione sono per LLVM 3.2 su RaspbianLLVM costruire opzioni per ARM/Raspberry Pi

ho prese la fonte LLVM di 3,2, e la mia configurazione è:

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 

Ho sentito che ci vuole un bel numero di ore per costruire. È passato qualche ora, felice di lasciarlo correre.

E 'un progetto di costruzione a lungo termine quindi non ho remore a rifare la costruzione, se necessario :)

risposta

8

io consiglierei di cross-compilazione LLVM per Raspbian. Costruire su Pi stesso richiede anni.

Per prima cosa, ottenere un file root funzionante utilizzando debootstrap (in alternativa, clonare l'installazione Raspbian esistente o decomprimere un'immagine scaricata). Potrebbe essere necessario sostituire alcuni collegamenti simbolici assoluti con relativi, fare attenzione agli errori di compilazione.

Assicurati di avere un'installazione abbastanza recente e funzionante di clang (non dimenticarti di crearlo con il supporto ARM target).

Poi, cross-compilazione LLVM con la seguente definizione toolchain CMake (non si dovrebbe effettuare il chroot nel file system radice in questa fase!):


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 "") 

(uso cmake -DCMAKE_TOOLCHAIN_FILE=/path/to/the/file/above.txt)

Si prega di notare che l'obiettivo dovrebbe essere armv6-linux-gnueabihf, non armv6-linux-gnueabi.

+0

Fantastico grazie - ci provo! –

+0

Il link ora va a una pagina di spam di MacKeeper. – mtnygard

+0

@mtnygard, wow, il peggior tipo di marciume che abbia mai visto –