Sign inSign up

uchannos/stdlib-builder

By uchannos

•Updated about 7 years ago

Builds newlib, libc++abi, and libc++ for OS development. Built libraries are for x86_64-elf target.

Image
0

124

uchannos/stdlib-builder repository overview

To build libraries:

docker pull uchannos/stdlib-builder
docker run uchannos/stdlib-builder
docker cp CONTAINER_ID:/usr/local/x86_64-elf ./

docker pull uchannos/stdlib-builder pulls a docker image from docker hub.

docker run uchannos/stdlib-builder creates a container from the image, and starts the container.

docker cp CONTAINER_ID:/usr/local/x86_64-elf ./ takes library files out of the container.

Dockerfile for this docker image:

FROM debian:stable
WORKDIR /usr/local/src
ADD . /usr/local/src
RUN apt-get update && apt-get install -y --no-install-recommends git-core subversion make cmake clang python ca-certificates
CMD ["/usr/local/src/build-stdlib.sh"]

build-stdlib.sh which is added by the Dockerfile:

#!/bin/sh -eux

BASEDIR=/usr/local/src
PREFIX=/usr/local/x86_64-elf
COMMON_CFLAGS="-nostdlibinc -O2 -D__ELF__ -D_LDBL_EQ_DBL -D_GNU_SOURCE -D_POSIX_TIMERS"
CC=clang
CXX=clang++
TARGET_TRIPLE=x86_64-elf

cd $BASEDIR
git clone --depth 1 --branch fix-build https://github.com/uchan-nos/newlib-cygwin.git

cd $BASEDIR
mkdir build_newlib
cd build_newlib
../newlib-cygwin/newlib/configure \
  CC=$CC \
  CC_FOR_BUILD=$CC \
  CFLAGS="-fPIC $COMMON_CFLAGS" \
  --target=$TARGET_TRIPLE --prefix=$PREFIX --disable-multilib --disable-newlib-multithread
make -j 4
make install

cd $BASEDIR
git clone --depth 1 --branch llvmorg-7.0.1 https://github.com/llvm/llvm-project.git

cd $BASEDIR
mkdir build_libcxxabi
cd build_libcxxabi
cmake -G "Unix Makefiles" \
  -DCMAKE_INSTALL_PREFIX=$PREFIX \
  -DCMAKE_CXX_COMPILER=$CXX \
  -DCMAKE_CXX_FLAGS="-I$PREFIX/include $COMMON_CFLAGS -D_LIBCPP_HAS_NO_THREADS" \
  -DCMAKE_C_COMPILER=$CC \
  -DCMAKE_C_FLAGS="-I$PREFIX/include $COMMON_CFLAGS -D_LIBCPP_HAS_NO_THREADS" \
  -DCMAKE_TRY_COMPILE_TARGET_TYPE=STATIC_LIBRARY \
  -DCMAKE_BUILD_TYPE=Release \
  -DLIBCXXABI_LIBCXX_INCLUDES="$BASEDIR/llvm-project/libcxx/include" \
  -DLIBCXXABI_ENABLE_EXCEPTIONS=False \
  -DLIBCXXABI_ENABLE_THREADS=False \
  -DLIBCXXABI_TARGET_TRIPLE=$TARGET_TRIPLE \
  -DLIBCXXABI_ENABLE_SHARED=False \
  -DLIBCXXABI_ENABLE_STATIC=True \
  $BASEDIR/llvm-project/libcxxabi

make -j4
make install

cd $BASEDIR
mkdir build_libcxx

cmake -G "Unix Makefiles" \
  -DCMAKE_INSTALL_PREFIX=$PREFIX \
  -DCMAKE_CXX_COMPILER=$CXX \
  -DCMAKE_CXX_FLAGS="-I$PREFIX/include $COMMON_CFLAGS" \
  -DCMAKE_CXX_COMPILER_TARGET=$TARGET_TRIPLE \
  -DCMAKE_C_COMPILER=$CC \
  -DCMAKE_C_FLAGS="-I$PREFIX/include $COMMON_CFLAGS" \
  -DCMAKE_C_COMPILER_TARGET=$TARGET_TRIPLE \
  -DCMAKE_TRY_COMPILE_TARGET_TYPE=STATIC_LIBRARY \
  -DCMAKE_BUILD_TYPE=Release \
  -DLIBCXX_CXX_ABI=libcxxabi \
  -DLIBCXX_CXX_ABI_INCLUDE_PATHS="$BASEDIR/llvm-project/libcxxabi/include" \
  -DLIBCXX_CXX_ABI_LIBRARY_PATH="$PREFIX/lib" \
  -DLIBCXX_ENABLE_EXCEPTIONS=False \
  -DLIBCXX_ENABLE_FILESYSTEM=False \
  -DLIBCXX_ENABLE_MONOTONIC_CLOCK=False \
  -DLIBCXX_ENABLE_RTTI=False \
  -DLIBCXX_ENABLE_THREADS=False \
  -DLIBCXX_ENABLE_SHARED=False \
  -DLIBCXX_ENABLE_STATIC=True \
  $BASEDIR/llvm-project/libcxx

make -j4
make install

Tag summary

Content type

Image

Digest

Size

219.9 MB

Last updated

about 7 years ago

docker pull uchannos/stdlib-builder:1.1