This is the build script to build libcxx with libcxxabi for x86-64 and arm. These scripts are created for my libcxxabi ARM EHABI support development.
These scripts are tested under Debian Wheezy and Ubuntu 14.04 (host build). You will might need some modification for other platforms or toolchains.
You will need bintuils
, gcc
, g++
, cmake
, and clang
to build the
library. The version of clang should be 3.5 or newer.
Add following line to /etc/apt/sources.list
:
# Emdebian for cross-compiling gcc toolchain
deb http://ftp.uk.debian.org/emdebian/toolchains unstable main
# LLVM apt prebuilt binary
deb http://llvm.org/apt/wheezy/ llvm-toolchain-wheezy main
deb-src http://llvm.org/apt/wheezy/ llvm-toolchain-wheezy main
Update the local APT database:
$ sudo apt-get update
Install the dependencies:
$ sudo apt-get install binutils clang-3.5 cmake gcc make
To cross-compile for ARM, install following dependencies as well:
$ sudo apt-get install binutils-multiarch \
gcc-4.7-arm-linux-gnueabihf \
g++-4.7-arm-linux-gnueabihf
Build clang 3.5: You have to build your own copy of clang 3.5 from the official
LLVM 3.5 source code. The clang-3.5
package from Ubuntu APT repository won't
work.
Update the local APT database:
$ sudo apt-get update
Install the dependencies:
$ sudo apt-get install binutils cmake gcc g++ make
To cross-compile for ARM, install the following dependencies:
$ sudo apt-get install binutils-multiarch \
gcc-4.7-arm-linux-gnueabihf \
g++-4.7-arm-linux-gnueabihf
NOTE: Although I can compile the libraries successfully, but I can't run the output executables because I don't have ARM Ubuntu installation. It is suggested to cross-compile with Debian Wheezy instead.
To build all libraries from scratch for x86, you can use:
$ ./scripts/compile-all.sh
If everything works fine, then you can run libcxxabi unit tests with:
$ ./out/unittest/run-all.sh
To clean the generated files, you can run:
$ ./scripts/clean.sh
If you wish to build only one library, you can run following commands to build libcxxabi, libcxx, libcxxabi unit tests, respectively,
$ ./scripts/compile-abi.sh
$ ./scripts/compile-libcxx.sh
$ ./scripts/compile-unittest.sh
To cross compile the libraries for ARM, you have to export following environment variable first:
$ export CROSS_COMPILING=arm
To build all libraries from scratch for ARM with libunwind, you can use:
$ CROSS_COMPILING=arm ENABLE_LIBUNWIND=1 ./scripts/compile-all.sh
The compiled binaries are in the out-arm
directory. You can copy them to
your ARM testing device. Besides, you can run the libcxxabi unit test with
$ ./out-arm/unittests/run-all.sh
To clean the generated files, you can run:
$ ./scripts/clean.sh
If you wish to build only one library, you can run following commands to build libcxxabi, libcxx, libcxxabi unit tests, respectively,
$ CROSS_COMPILING=arm ENABLE_LIBUNWIND=1 ./scripts/compile-abi.sh
$ CROSS_COMPILING=arm ENABLE_LIBUNWIND=1 ./scripts/compile-libcxx.sh
$ CROSS_COMPILING=arm ENABLE_LIBUNWIND=1 ./scripts/compile-unittest.sh
To cross-compile your own program with libc++ and libc++abi:
$ clang++ -target arm-linux-gnueabihf \
-isystem out-arm/include \
-isystem out-arm/include/c++/v1 \
-isystem /usr/arm-linux-gnueabihf/include \
-Lout-arm/lib \
-lc++ -lpthread -lc++abi -lm -lc -lgcc_s -lgcc \
your_source_file.cpp