Skip to content

Commit b8bf028

Browse files
committed
build: fixes to bundle build using newlib 2.5
1 parent 7f15b50 commit b8bf028

39 files changed

Lines changed: 102 additions & 10801 deletions

CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ string(STRIP ${OS_VERSION} OS_VERSION)
2626
# create random hex string as stack protector canary
2727
string(RANDOM LENGTH 8 ALPHABET 0123456789ABCDEF STACK_PROTECTOR_VALUE)
2828

29-
set(CAPABS "-mavx -maes -mfma -fstack-protector-strong -D_STACK_GUARD_VALUE_=0x${STACK_PROTECTOR_VALUE} ")
29+
set(CAPABS "-msse3 -fstack-protector-strong -D_STACK_GUARD_VALUE_=0x${STACK_PROTECTOR_VALUE} ")
3030

3131
# Various global defines
3232
# * NO_DEBUG disables output from the debug macro

api/posix/ctype.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@
1515
// See the License for the specific language governing permissions and
1616
// limitations under the License.
1717

18+
// Trick to prevent libc++ from using old newlib locale stubs
19+
#define _LIBCPP_SUPPORT_NEWLIB_XLOCALE_H
20+
21+
1822
#ifndef SYS_CTYPE_H
1923
#define SYS_CTYPE_H
2024

@@ -40,5 +44,4 @@ extern "C" {
4044

4145
#endif //SYS_CTYPE_H
4246

43-
4447
#include_next <ctype.h>

api/posix/features.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,11 @@
2727
#define _POSIX_TIMERS 1
2828
#define _POSIX_MONOTONIC_CLOCK 1
2929

30+
// Enable newlib multibyte support
31+
#define _MB_CAPABLE 1
32+
33+
34+
3035
// Required to pass CMake tests for libc++
3136
#define __GLIBC_PREREQ__(min, maj) 1
3237
#define __GLIBC_PREREQ(min, maj) 1

cmake/cross_compiled_libraries.txt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,12 @@ set(PRECOMPILED_DIR ${CMAKE_CURRENT_BINARY_DIR}/precompiled/src/PrecompiledLibra
3232
set(LIBCXX_INCLUDE_DIR ${PRECOMPILED_DIR}libcxx/include/)
3333
set(LIBCXX_LIB_DIR ${PRECOMPILED_DIR}/libcxx/)
3434
add_library(libcxx STATIC IMPORTED)
35+
add_library(libcxxabi STATIC IMPORTED)
36+
3537
add_dependencies(libcxx PrecompiledLibraries)
38+
add_dependencies(libcxxabi PrecompiledLibraries)
3639
set_target_properties(libcxx PROPERTIES IMPORTED_LOCATION ${LIBCXX_LIB_DIR}/libc++.a)
40+
set_target_properties(libcxxabi PROPERTIES IMPORTED_LOCATION ${LIBCXX_LIB_DIR}/libc++abi.a)
3741

3842
set(NEWLIB_INCLUDE_DIR ${PRECOMPILED_DIR}/newlib/include/)
3943
set(NEWLIB_LIB_DIR ${PRECOMPILED_DIR}/newlib/)
@@ -62,4 +66,4 @@ install(DIRECTORY ${NEWLIB_INCLUDE_DIR} DESTINATION includeos/include/newlib)
6266

6367
install(FILES ${CRTEND} ${CRTBEGIN} DESTINATION includeos/lib)
6468

65-
install(FILES ${NEWLIB_LIB_DIR}/libc.a ${NEWLIB_LIB_DIR}/libg.a ${NEWLIB_LIB_DIR}/libm.a ${LIBGCC_LIB_DIR}/libgcc.a ${LIBCXX_LIB_DIR}/libc++.a DESTINATION includeos/lib)
69+
install(FILES ${NEWLIB_LIB_DIR}/libc.a ${NEWLIB_LIB_DIR}/libg.a ${NEWLIB_LIB_DIR}/libm.a ${LIBGCC_LIB_DIR}/libgcc.a ${LIBCXX_LIB_DIR}/libc++.a ${LIBCXX_LIB_DIR}/libc++abi.a DESTINATION includeos/lib)

etc/build_llvm32.sh

Lines changed: 29 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,10 @@
55

66
newlib_inc=$TEMP_INSTALL_DIR/i686-elf/include # path for newlib headers
77
IncludeOS_posix=$INCLUDEOS_SRC/api/posix
8-
libcxx_inc=$BUILD_DIR/$llvm_src/projects/libcxx/include
8+
libcxx_inc=$BUILD_DIR/llvm/projects/libcxx/include
9+
libcxxabi_inc=$BUILD_DIR/llvm/projects/libcxxabi/include
10+
11+
# sysroot=$BUILD_DIR/IncludeOS_TEMP_install/i686-elf
912

1013
# Install dependencies
1114
sudo apt-get install -y cmake ninja-build subversion zlib1g-dev libtinfo-dev
@@ -19,7 +22,7 @@ if [ ! -z $download_llvm ]; then
1922
svn co http://llvm.org/svn/llvm-project/llvm/tags/$LLVM_TAG llvm
2023

2124
# Clone libc++, libc++abi, and some extra stuff (recommended / required for clang)
22-
cd llvm/projects
25+
pushd llvm/projects
2326

2427
# Compiler-rt
2528
svn co http://llvm.org/svn/llvm-project/compiler-rt/tags/$LLVM_TAG compiler-rt
@@ -38,7 +41,7 @@ if [ ! -z $download_llvm ]; then
3841
#git clone http://llvm.org/git/libunwind
3942

4043
# Back to start
41-
cd $BUILD_DIR
44+
popd
4245
fi
4346

4447
# Make a build-directory
@@ -49,54 +52,39 @@ if [ ! -z $clear_llvm_build_cache ]; then
4952
rm CMakeCache.txt
5053
fi
5154

52-
# General options
53-
OPTS=-DCMAKE_EXPORT_COMPILE_COMMANDS=ON" "
54-
55-
# LLVM General options
56-
OPTS+=-DBUILD_SHARED_LIBS=OFF" "
57-
OPTS+=-DCMAKE_BUILD_TYPE=MinSizeRel" "
58-
59-
# Can't build libc++ with g++ unless it's a cross compiler (need to specify target)
60-
OPTS+=-DCMAKE_C_COMPILER=clang-$clang_version" "
61-
OPTS+=-DCMAKE_CXX_COMPILER=clang++-$clang_version" " # -std=c++11" "
62-
6355
TRIPLE=i686-pc-none-elf
64-
65-
OPTS+=-DTARGET_TRIPLE=$TRIPLE" "
66-
OPTS+=-DLLVM_BUILD_32_BITS=ON" "
67-
OPTS+=-DLLVM_INCLUDE_TESTS=OFF" "
68-
OPTS+=-DLLVM_ENABLE_THREADS=OFF" "
69-
OPTS+=-DLLVM_DEFAULT_TARGET_TRIPLE=$TRIPLE" "
70-
71-
# libc++-specific options
72-
OPTS+=-DLIBCXX_ENABLE_SHARED=OFF" "
73-
OPTS+=-DLIBCXX_ENABLE_THREADS=OFF" "
74-
OPTS+=-DLIBCXX_TARGET_TRIPLE=$TRIPLE" "
75-
OPTS+=-DLIBCXX_BUILD_32_BITS=ON" "
76-
77-
OPTS+=-DLIBCXX_ENABLE_STATIC_ABI_LIBRARY=ON" "
78-
79-
OPTS+=-DLIBCXX_CXX_ABI=libcxxabi" "
80-
OPTS+=-DLIBCXX_CXX_ABI_INCLUDE_PATHS=$INCLUDEOS_SRC/src/include" "
81-
82-
# libunwind-specific options
83-
OPTS+=-DLIBUNWIND_ENABLE_SHARED=OFF" "
84-
OPTS+=-LIBCXXABI_USE_LLVM_UNWINDER=ON" "
85-
86-
echo "LLVM CMake Build options:" $OPTS
87-
88-
# CXX flags
89-
CXX_FLAGS="-std=c++14 -nostdlibinc -mavx -maes -mfma"
56+
CXX_FLAGS="-std=c++14 -msse3"
9057

9158
# CMAKE configure step
9259
#
9360
# Include-path ordering:
9461
# 1. IncludeOS_posix has to come first, as it provides lots of C11 prototypes that libc++ relies on, but which newlib does not provide (see our math.h)
9562
# 2. libcxx_inc must come before newlib, due to math.h function wrappers around C99 macros (signbit, nan etc)
9663
# 3. newlib_inc provodes standard C headers
97-
cmake -GNinja $OPTS -DCMAKE_CXX_FLAGS="$CXX_FLAGS -I$IncludeOS_posix -I$libcxx_inc -I$newlib_inc" $BUILD_DIR/llvm
64+
cmake -GNinja $OPTS \
65+
-DCMAKE_CXX_FLAGS="$CXX_FLAGS -I$IncludeOS_posix -I$libcxxabi_inc -I$libcxx_inc -I$newlib_inc " $BUILD_DIR/llvm \
66+
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
67+
-DBUILD_SHARED_LIBS=OFF \
68+
-DCMAKE_C_COMPILER=clang-$clang_version \
69+
-DCMAKE_CXX_COMPILER=clang++-$clang_version \
70+
-DTARGET_TRIPLE=$TRIPLE \
71+
-DLLVM_BUILD_32_BITS=ON \
72+
-DLLVM_INCLUDE_TESTS=OFF \
73+
-DLLVM_ENABLE_THREADS=OFF \
74+
-DLLVM_DEFAULT_TARGET_TRIPLE=$TRIPLE \
75+
-DLIBCXX_ENABLE_SHARED=OFF \
76+
-DLIBCXX_ENABLE_THREADS=OFF \
77+
-DLIBCXX_TARGET_TRIPLE=$TRIPLE \
78+
-DLIBCXX_BUILD_32_BITS=ON \
79+
-DLIBCXX_ENABLE_STATIC_ABI_LIBRARY=ON \
80+
-DLIBCXX_CXX_ABI=libcxxabi \
81+
-DLIBCXXABI_TARGET_TRIPLE=$TRIPLE \
82+
-DLIBCXXABI_ENABLE_THREADS=OFF \
83+
-DLIBCXXABI_HAS_PTHREAD_API=OFF
84+
9885

9986
# MAKE
87+
ninja libc++abi.a
10088
ninja libc++.a
10189

10290
popd

etc/build_newlib.sh

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,18 @@ pushd build_newlib
3232
--target=$TARGET \
3333
--prefix=$TEMP_INSTALL_DIR \
3434
--enable-newlib-io-long-long AS_FOR_TARGET=as LD_FOR_TARGET=ld AR_FOR_TARGET=ar RANLIB_FOR_TARGET=ranlib \
35-
36-
echo -e "\n\n >>> BUILDING NEWLIB \n\n"
35+
--enable-newlib-hw-fp \
36+
--enable-newlib-mb \
37+
--enable-newlib-iconv \
38+
--enable-newlib-iconv-encodings=utf-16,utf-8,ucs_2 \
39+
--disable-libgloss \
40+
--disable-multilib \
41+
--enable-newlib-multithread \
42+
--disable-newlib-supplied-syscalls
43+
44+
echo -e "\n\n >>> BUILDING NEWLIB \n\n"
3745
# Compile
38-
make $num_jobs all
46+
make $num_jobs all
3947
# Install
4048
make install
4149

etc/create_binary_bundle.sh

Lines changed: 30 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,14 @@ export PATH="$TEMP_INSTALL_DIR/bin:$PATH"
99

1010
# Build options
1111
export TARGET=i686-elf # Configure target
12-
export num_jobs=${num_jobs:-"-j"} # Specify number of build jobs
12+
export num_jobs=${num_jobs:-"-j"} # Specify number of build jobs
1313

1414
# Version numbers
15-
export binutils_version=${binutils_version:-2.26} # ftp://ftp.gnu.org/gnu/binutils
16-
export newlib_version=${newlib_version:-2.4.0} # ftp://sourceware.org/pub/newlib
17-
export gcc_version=${gcc_version:-6.2.0} # ftp://ftp.nluug.nl/mirror/languages/gcc/releases/
18-
export clang_version=${clang_version:-3.8} # http://releases.llvm.org/
15+
export binutils_version=${binutils_version:-2.28} # ftp://ftp.gnu.org/gnu/binutils
16+
export newlib_version=${newlib_version:-2.5.0.20170323} # ftp://sourceware.org/pub/newlib
17+
#export newlib_version=${newlib_version:-2.5.0} # ftp://sourceware.org/pub/newlib
18+
export gcc_version=${gcc_version:-6.3.0} # ftp://ftp.nluug.nl/mirror/languages/gcc/releases/
19+
export clang_version=${clang_version:-3.9} # http://releases.llvm.org/
1920
export LLVM_TAG=${LLVM_TAG:-RELEASE_381/final} # http://llvm.org/svn/llvm-project/llvm/tags
2021

2122
# Options to skip steps
@@ -50,8 +51,11 @@ DEPS_BUILD="build-essential make nasm texinfo clang-$clang_version clang++-$clan
5051

5152
echo -e "\n\n >>> Trying to install prerequisites for *building* IncludeOS"
5253
echo -e " Packages: $DEPS_BUILD \n"
53-
sudo apt-get update
54-
sudo apt-get install -y $DEPS_BUILD
54+
55+
if [ ! -z $do_packages ]; then
56+
sudo apt-get update
57+
sudo apt-get install -y $DEPS_BUILD
58+
fi
5559

5660
# Print currently set install options
5761
printf "\n\n>>> Bundle will be created with the following options:\n\n"
@@ -113,10 +117,10 @@ filename_tag=`echo $tag | tr . -`
113117
popd
114118

115119
# Where to place the installation bundle
116-
DIR_NAME="IncludeOS_install"
117-
export INSTALL_DIR=${INSTALL_DIR:-~/$DIR_NAME}
120+
DIR_NAME="IncludeOS_dependencies"
121+
export BUNDLE_DIR=${BUNDLE_DIR:-~/$DIR_NAME}
118122

119-
echo ">>> Creating Installation Bundle as $INSTALL_DIR"
123+
echo ">>> Creating Installation Bundle as $BUNDLE_DIR"
120124

121125
OUTFILE="${DIR_NAME}_$filename_tag.tar.gz"
122126

@@ -128,6 +132,7 @@ libc=$newlib/libc.a
128132
libm=$newlib/libm.a
129133
libg=$newlib/libg.a
130134
libcpp=$llvm/lib/libc++.a
135+
libcppabi=$llvm/lib/libc++abi.a
131136

132137
GPP=$TEMP_INSTALL_DIR/bin/i686-elf-g++
133138
GCC_VER=`$GPP -dumpversion`
@@ -138,26 +143,27 @@ include_newlib=$TEMP_INSTALL_DIR/i686-elf/include
138143
include_libcxx=$llvm/include/c++/v1
139144

140145
# Make directory-tree
141-
mkdir -p $INSTALL_DIR
142-
mkdir -p $INSTALL_DIR/newlib
143-
mkdir -p $INSTALL_DIR/libcxx
144-
mkdir -p $INSTALL_DIR/crt
145-
mkdir -p $INSTALL_DIR/libgcc
146+
mkdir -p $BUNDLE_DIR
147+
mkdir -p $BUNDLE_DIR/newlib
148+
mkdir -p $BUNDLE_DIR/libcxx
149+
mkdir -p $BUNDLE_DIR/crt
150+
mkdir -p $BUNDLE_DIR/libgcc
146151

147152
# Copy binaries
148-
cp $libcpp $INSTALL_DIR/libcxx/
149-
cp $libm $INSTALL_DIR/newlib/
150-
cp $libc $INSTALL_DIR/newlib/
151-
cp $libg $INSTALL_DIR/newlib/
152-
cp $libgcc $INSTALL_DIR/libgcc/
153-
cp $TEMP_INSTALL_DIR/lib/gcc/i686-elf/$GCC_VER/crt*.o $INSTALL_DIR/crt/
153+
cp $libcpp $BUNDLE_DIR/libcxx/
154+
cp $libcppabi $BUNDLE_DIR/libcxx/
155+
cp $libm $BUNDLE_DIR/newlib/
156+
cp $libc $BUNDLE_DIR/newlib/
157+
cp $libg $BUNDLE_DIR/newlib/
158+
cp $libgcc $BUNDLE_DIR/libgcc/
159+
cp $TEMP_INSTALL_DIR/lib/gcc/i686-elf/$GCC_VER/crt*.o $BUNDLE_DIR/crt/
154160

155161
# Copy includes
156-
cp -r $include_newlib $INSTALL_DIR/newlib/
157-
cp -r $include_libcxx $INSTALL_DIR/libcxx/include
162+
cp -r $include_newlib $BUNDLE_DIR/newlib/
163+
cp -r $include_libcxx $BUNDLE_DIR/libcxx/include
158164

159165
# Zip it
160-
tar -czvf $OUTFILE --directory=$INSTALL_DIR/../ $DIR_NAME
166+
tar -czvf $OUTFILE --directory=$BUNDLE_DIR/../ $DIR_NAME
161167

162168
echo ">>> IncludeOS Installation Bundle created as $INSTALL_DIR and gzipped into $OUTFILE"
163169

etc/install_from_bundle.sh

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ set -e
1515

1616
INCLUDEOS_SRC=${INCLUDEOS_SRC-$HOME/IncludeOS}
1717
INCLUDEOS_PREFIX=${INCLUDEOS_PREFIX-/usr/local}
18+
num_jobs=${num_jobs-"-j 4"}
1819

1920
# Try to find suitable compiler
2021
cc_list="clang-3.9 clang-3.8 clang-3.7 clang-3.6 clang"
@@ -54,7 +55,7 @@ cmake $INCLUDEOS_SRC \
5455
-Dtests=$INCLUDEOS_ENABLE_TEST \
5556
-DBUNDLE_LOC=$BUNDLE_LOC
5657
make PrecompiledLibraries
57-
make -j 4
58+
make $num_jobs
5859
make install
5960
popd
6061

etc/scripts/qemu_cmd.sh

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ if [ "$(egrep -m 1 '^flags.*(vmx|svm)' /proc/cpuinfo)" ]
33
then
44
echo ">>> KVM: ON "
55
export QEMU="qemu-system-x86_64 --enable-kvm"
6-
export CPU="-cpu host"
76
else
87
echo ">>> KVM: OFF "
98
export QEMU="qemu-system-i386"

etc/service.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ endif(CMAKE_COMPILER_IS_GNUCC)
2525
set(CMAKE_ASM_NASM_OBJECT_FORMAT "elf")
2626
enable_language(ASM_NASM)
2727

28-
set(CAPABS "-mavx -maes -mfma -fstack-protector-strong")
28+
set(CAPABS "-msse3 -fstack-protector-strong")
2929

3030
# Various global defines
3131
# * OS_TERMINATE_ON_CONTRACT_VIOLATION provides classic assert-like output from Expects / Ensures

0 commit comments

Comments
 (0)