clfs

clfs.git
git clone git://git.lenczewski.org/clfs.git
Log | Files | Refs | README

stage2.sh (4998B)


      1 #!/bin/sh
      2 
      3 . "$(dirname $0)/clfs-env.sh"
      4 
      5 echo "Building $TARGET sysroot..."
      6 
      7 # cross-compilation wrappers
      8 cat > $CROSSTOOLS/bin/$TARGET-cc <<EOF
      9 #!/bin/sh
     10 exec $CROSSTOOLS/bin/clang \
     11 	--target=$TARGET \
     12 	--sysroot=$SYSROOT \
     13 	-resource-dir=$SYSROOT/usr/lib/clang/$LLVM_VER_MAJOR \
     14 	\$@
     15 EOF
     16 
     17 cat > $CROSSTOOLS/bin/$TARGET-c++ <<EOF
     18 #!/bin/sh
     19 exec $CROSSTOOLS/bin/clang++ \
     20 	--target=$TARGET \
     21 	--sysroot=$SYSROOT \
     22 	-resource-dir=$SYSROOT/usr/lib/clang/$LLVM_VER_MAJOR \
     23 	\$@
     24 EOF
     25 
     26 cat > $CROSSTOOLS/bin/$TARGET-ld <<EOF
     27 #!/bin/sh
     28 exec $CROSSTOOLS/bin/ld.lld \
     29 	--sysroot=$SYSROOT \
     30 	\$@
     31 EOF
     32 
     33 chmod +x $CROSSTOOLS/bin/$TARGET-{cc,c++,ld}
     34 
     35 cat > $CROSSTOOLS/$TARGET-cmake-toolchain.cmake <<EOF
     36 set(CMAKE_SYSTEM_NAME $CMAKE_SYSTEM_NAME)
     37 set(CMAKE_SYSTEM_PROCESSOR $CMAKE_SYSTEM_PROCESSOR)
     38 
     39 set(CMAKE_SYSROOT $SYSROOT)
     40 set(CMAKE_STAGING_PREFIX $SYSROOT)
     41 
     42 set(CMAKE_C_COMPILER $CROSSTOOLS/bin/$TARGET-cc)
     43 set(CMAKE_C_COMPILER_TARGET $TARGET)
     44 set(CMAKE_CXX_COMPILER $CROSSTOOLS/bin/$TARGET-c++)
     45 set(CMAKE_CXX_COMPILER_TARGET $TARGET)
     46 
     47 set(CMAKE_AR $CROSSTOOLS/bin/llvm-ar)
     48 set(CMAKE_RANLIB $CROSSTOOLS/bin/llvm-ranlib)
     49 
     50 set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
     51 set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
     52 set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
     53 set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
     54 EOF
     55 
     56 cat > $CROSSTOOLS/$TARGET-meson-toolchain.txt <<EOF
     57 [binaries]
     58 c = '$CROSSTOOLS/bin/$TARGET-cc'
     59 cpp = '$CROSSTOOLS/bin/$TARGET-c++'
     60 ld = '$CROSSTOOLS/bin/$TARGET-ld'
     61 ar = '$CROSSTOOLS/bin/llvm-ar'
     62 objcopy = '$CROSSTOOLS/bin/llvm-objcopy'
     63 strip = '$CROSSTOOLS/bin/llvm-strip'
     64 
     65 [properties]
     66 sys_root = '$SYSROOT'
     67 
     68 [host_machine]
     69 system = '$MESON_SYSTEM'
     70 cpu_family = '$MESON_CPU_FAMILY'
     71 cpu = '$MESON_CPU'
     72 endian = '$MESON_ENDIAN'
     73 EOF
     74 
     75 # create FHS-compliant sysroot directories
     76 mkdir -v \
     77 	$SYSROOT/bin \
     78 	$SYSROOT/dev \
     79 	$SYSROOT/etc \
     80 	$SYSROOT/lib \
     81 	$SYSROOT/mnt \
     82 	$SYSROOT/opt \
     83 	$SYSROOT/proc \
     84 	$SYSROOT/root \
     85 	$SYSROOT/run \
     86 	$SYSROOT/sbin \
     87 	$SYSROOT/srv \
     88 	$SYSROOT/sys \
     89 	$SYSROOT/tmp \
     90 	$SYSROOT/usr \
     91 	$SYSROOT/var
     92 
     93 mkdir -v \
     94 	$SYSROOT/etc/opt
     95 
     96 mkdir -v \
     97 	$SYSROOT/usr/bin \
     98 	$SYSROOT/usr/include \
     99 	$SYSROOT/usr/lib \
    100 	$SYSROOT/usr/local \
    101 	$SYSROOT/usr/sbin \
    102 	$SYSROOT/usr/share \
    103 	$SYSROOT/usr/src
    104 
    105 mkdir -v \
    106 	$SYSROOT/usr/local/bin \
    107 	$SYSROOT/usr/local/etc \
    108 	$SYSROOT/usr/local/games \
    109 	$SYSROOT/usr/local/include \
    110 	$SYSROOT/usr/local/lib \
    111 	$SYSROOT/usr/local/man \
    112 	$SYSROOT/usr/local/sbin \
    113 	$SYSROOT/usr/local/share \
    114 	$SYSROOT/usr/local/src
    115 
    116 mkdir -v \
    117 	$SYSROOT/var/cache \
    118 	$SYSROOT/var/lib \
    119 	$SYSROOT/var/local \
    120 	$SYSROOT/var/lock \
    121 	$SYSROOT/var/log \
    122 	$SYSROOT/var/opt \
    123 	$SYSROOT/var/run \
    124 	$SYSROOT/var/spool \
    125 	$SYSROOT/var/tmp
    126 
    127 # build linux-headers (requires HOSTCC)
    128 echo "Building linux-headers..."
    129 cp -r $SOURCES/$LINUX_DIR $WORK/$LINUX_DIR
    130 cd $WORK/$LINUX_DIR
    131 
    132 make HOSTCC=$HOSTCC $LINUX_HOSTCC_OPTS mrproper
    133 make HOSTCC=$HOSTCC $LINUX_HOSTCC_OPTS ARCH=$LINUX_ARCH \
    134 	INSTALL_HDR_PATH=$SYSROOT/usr headers_install
    135 
    136 # build musl-libc headers
    137 echo "Building musl-libc-headers..."
    138 mkdir -p $WORK/build-libc-headers
    139 cd $WORK/build-libc-headers
    140 
    141 $SOURCES/$MUSL_DIR/configure \
    142 	CROSS_COMPILER=$TARGET- \
    143 	--target=$TARGET \
    144 	--prefix=/usr \
    145 	--syslibdir=/
    146 
    147 make DESTDIR=$SYSROOT install-headers
    148 
    149 # build compiler-rt builtins
    150 echo "Building compiler-rt builtins..."
    151 mkdir -p $WORK/build-builtins
    152 cmake -S $SOURCES/$LLVM_DIR/compiler-rt/lib/builtins -B $WORK/build-builtins -GNinja \
    153 	-DCMAKE_INSTALL_PREFIX=$SYSROOT/usr/lib/clang/$LLVM_VER_MAJOR \
    154 	-DCOMPILER_RT_DEFAULT_TARGET_TRIPLE=$TARGET
    155 
    156 cmake --build $WORK/build-builtins
    157 cmake --install $WORK/build-builtins
    158 
    159 # build musl-libc
    160 echo "Building musl-libc..."
    161 mkdir -p $WORK/build-libc
    162 cd $WORK/build-libc
    163 
    164 $SOURCES/$MUSL_DIR/configure \
    165 	CROSS_COMPILER=$TARGET- \
    166 	--target=$TARGET \
    167 	--prefix=/usr \
    168 	---syslibdir=/
    169 
    170 make DESTDIR=$SYSROOT install -j$(nproc)
    171 
    172 cd $WORK
    173 
    174 # build libunwind, libcxx, libccxabi
    175 echo "Building libunwind, libcxx, and libcxxabi..."
    176 
    177 LLVM_LIBUNWIND_FLAGS="
    178 	-DLIBUNWIND_USE_COMPILER_RT=ON
    179 "
    180 
    181 LLVM_LIBCXXABI_FLAGS="
    182 	-DLIBCXXABI_INCLUDE_TESTS=OFF
    183 	-DLIBCXXABI_USE_COMPILER_RT=ON
    184 	-DLIBCXXABI_USE_LLVM_UNWINDER=ON
    185 "
    186 
    187 LLVM_LIBCXX_FLAGS="
    188 	-DLIBCXX_INCLUDE_BENCHMARKS=OFF
    189 	-DLIBCXX_INCLUDE_DOCS=OFF
    190 	-DLIBCXX_CXX_ABI=libcxxabi
    191 	-DLIBCXX_USE_COMPILER_RT=ON
    192 	-DLIBCXX_HAS_MUSL_LIBC=ON
    193 "
    194 
    195 # TODO: because our c/cxx compilers do not yet have libunwind or libc++, we
    196 # must use -DCMAKE_{C,CXX}_COMPILER_WORKS=ON to pretend we have a working
    197 # toolchain. -DCMAKE_TRY_COMPILE_TARGET=STATIC_LIBRARY doesn't work, as it
    198 # leaks information from our host sysroot (__cxa_thread_atexit_impl for libc++)
    199 cmake -S $SOURCES/$LLVM_DIR/runtimes -B $WORK/build-cxxrt -GNinja \
    200 	-DCMAKE_INSTALL_PREFIX=$SYSROOT/usr \
    201 	-DCMAKE_C_COMPILER_WORKS=ON \
    202 	-DCMAKE_CXX_COMPILER_WORKS=ON \
    203 	-DLLVM_ENABLE_RUNTIMES="libunwind;libcxxabi;libcxx" \
    204 	$LLVM_LIBUNWIND_FLAGS \
    205 	$LLVM_LIBCXXABI_FLAGS \
    206 	$LLVM_LIBCXX_FLAGS
    207 
    208 cmake --build $WORK/build-cxxrt
    209 cmake --install $WORK/build-cxxrt
    210 
    211 echo "Built $TARGET sysroot!"