diff --git a/peru.yaml b/peru.yaml index f5452d8..1aeb5be 100644 --- a/peru.yaml +++ b/peru.yaml @@ -1,7 +1,13 @@ imports: sysroot: ./sysroot + j6libc: ./sysroot curl module sysroot: - url: https://f000.backblazeb2.com/file/jsix-os/sysroot-llvm8-20190705.tar.bz2 + url: https://f000.backblazeb2.com/file/jsix-os/sysroot-llvm8-20190706.tar.bz2 + unpack: tar + export: sysroot/ + +curl module j6libc: + url: https://f000.backblazeb2.com/file/jsix-os/sysroot-j6libc-0377948.tar.bz2 unpack: tar export: sysroot/ diff --git a/scripts/build_sysroot.sh b/scripts/build_sysroot.sh index 6d62a90..f8126fc 100755 --- a/scripts/build_sysroot.sh +++ b/scripts/build_sysroot.sh @@ -1,7 +1,6 @@ #!/usr/bin/env bash TARGET="x86_64-elf" -NASM_VERSION="2.13.03" LLVM_BRANCH="release_80" TOOLS="clang lld" # lld libunwind libcxxabi libcxx" @@ -19,175 +18,114 @@ mkdir -p "${WORK}" export CC=clang export CXX=clang++ -function build_nasm() { - if [[ ! -d "${WORK}/nasm-${NASM_VERSION}" ]]; then - echo "Downloading NASM..." - tarball="nasm-${NASM_VERSION}.tar.gz" - curl -sSOL "https://www.nasm.us/pub/nasm/releasebuilds/${NASM_VERSION}/${tarball}" - tar xzf "${tarball}" -C "${WORK}" && rm "${tarball}" - fi +if [[ ! -d "${WORK}/llvm" ]]; then + echo "Downloading LLVM..." + git clone -q \ + --branch "${LLVM_BRANCH}" \ + --depth 1 \ + "https://git.llvm.org/git/llvm.git" "${WORK}/llvm" +fi - mkdir -p "${WORK}/build/nasm" - pushd "${WORK}/build/nasm" - - if [[ ! -f "${WORK}/build/nasm/config.cache" ]]; then - echo "Configuring NASM..." - "${WORK}/nasm-${NASM_VERSION}/configure" \ - --quiet \ - --config-cache \ - --disable-werror \ - --prefix="${SYSROOT}" \ - --srcdir="${WORK}/nasm-${NASM_VERSION}" - fi - - echo "Building NASM..." - (make -j && make install) > "${WORK}/build/nasm_build.log" - popd -} - -function build_llvm() { - if [[ ! -d "${WORK}/llvm" ]]; then - echo "Downloading LLVM..." +for tool in ${TOOLS}; do + if [[ ! -d "${WORK}/llvm/tools/${tool}" ]]; then + echo "Downloading ${tool}..." git clone -q \ --branch "${LLVM_BRANCH}" \ --depth 1 \ - "https://git.llvm.org/git/llvm.git" "${WORK}/llvm" + "https://git.llvm.org/git/${tool}.git" "${WORK}/llvm/tools/${tool}" fi +done - for tool in ${TOOLS}; do - if [[ ! -d "${WORK}/llvm/tools/${tool}" ]]; then - echo "Downloading ${tool}..." - git clone -q \ - --branch "${LLVM_BRANCH}" \ - --depth 1 \ - "https://git.llvm.org/git/${tool}.git" "${WORK}/llvm/tools/${tool}" - fi - done +if [[ ! -d "${WORK}/llvm/tools/clang/tools/extra" ]]; then + echo "Downloading clang-tools-extra..." + git clone -q \ + --branch "${LLVM_BRANCH}" \ + --depth 1 \ + "https://git.llvm.org/git/clang-tools-extra.git" "${WORK}/llvm/tools/clang/tools/extra" +fi - if [[ ! -d "${WORK}/llvm/tools/clang/tools/extra" ]]; then - echo "Downloading clang-tools-extra..." +for proj in ${PROJECTS}; do + if [[ ! -d "${WORK}/llvm/projects/${proj}" ]]; then + echo "Downloading ${proj}..." git clone -q \ --branch "${LLVM_BRANCH}" \ --depth 1 \ - "https://git.llvm.org/git/clang-tools-extra.git" "${WORK}/llvm/tools/clang/tools/extra" + "https://git.llvm.org/git/${proj}.git" "${WORK}/llvm/projects/${proj}" fi +done - for proj in ${PROJECTS}; do - if [[ ! -d "${WORK}/llvm/projects/${proj}" ]]; then - echo "Downloading ${proj}..." - git clone -q \ - --branch "${LLVM_BRANCH}" \ - --depth 1 \ - "https://git.llvm.org/git/${proj}.git" "${WORK}/llvm/projects/${proj}" - fi - done - - for proj in ${RUNTIMES}; do - if [[ ! -d "${WORK}/llvm/runtimes/${proj}" ]]; then - echo "Downloading ${proj}..." - git clone -q \ - --branch "${LLVM_BRANCH}" \ - --depth 1 \ - "https://git.llvm.org/git/${proj}.git" "${WORK}/llvm/runtime/${proj}" - fi - done - - mkdir -p "${WORK}/build/llvm" - pushd "${WORK}/build/llvm" - - echo "Configuring LLVM..." - - cmake -G Ninja \ - -DCLANG_DEFAULT_RTLIB=compiler-rt \ - -DCLANG_DEFAULT_STD_C=c11 \ - -DCLANG_DEFAULT_STD_CXX=cxx14 \ - -DCMAKE_BUILD_TYPE=Release \ - -DCMAKE_C_COMPILER="clang" \ - -DCMAKE_CXX_COMPILER="clang++" \ - -DCMAKE_CXX_FLAGS="-Wno-unused-parameter -D_LIBCPP_HAS_NO_ALIGNED_ALLOCATION -D_LIBUNWIND_IS_BAREMETAL=1 -U_LIBUNWIND_SUPPORT_DWARF_UNWIND" \ - -DCMAKE_INSTALL_PREFIX="${SYSROOT}" \ - -DCMAKE_MAKE_PROGRAM=`which ninja` \ - -DDEFAULT_SYSROOT="${SYSROOT}" \ - -DLIBCXX_CXX_ABI=libcxxabi \ - -DLIBCXX_CXX_ABI_INCLUDE_PATHS="${WORK}/llvm/projects/libcxxabi/include" \ - -DLIBCXX_CXX_ABI_LIBRARY_PATH=lib \ - -DLIBCXX_ENABLE_EXPERIMENTAL_LIBRARY=OFF \ - -DLIBCXX_ENABLE_NEW_DELETE_DEFINITIONS=ON \ - -DLIBCXX_ENABLE_SHARED=OFF \ - -DLIBCXX_ENABLE_STATIC_ABI_LIBRARY=ON \ - -DLIBCXX_ENABLE_THREADS=OFF \ - -DLIBCXX_INCLUDE_BENCHMARKS=OFF \ - -DLIBCXX_USE_COMPILER_RT=ON \ - -DLIBCXXABI_ENABLE_NEW_DELETE_DEFINITIONS=OFF \ - -DLIBCXXABI_ENABLE_SHARED=OFF \ - -DLIBCXXABI_ENABLE_STATIC_UNWINDER=ON \ - -DLIBCXXABI_ENABLE_THREADS=OFF \ - -DLIBCXXABI_LIBCXX_PATH="${WORK}/llvm/projects/libcxx" \ - -DLIBCXXABI_USE_COMPILER_RT=ON \ - -DLIBCXXABI_USE_LLVM_UNWINDER=ON \ - -DLIBUNWIND_ENABLE_SHARED=OFF \ - -DLIBUNWIND_ENABLE_THREADS=OFF \ - -DLIBUNWIND_USE_COMPILER_RT=ON \ - -DLLVM_CONFIG_PATH="${SYSROOT}/bin/llvm-config" \ - -DLLVM_DEFAULT_TARGET_TRIPLE="x86_64-unknown-elf" \ - -DLLVM_ENABLE_LIBCXX=ON \ - -DLLVM_ENABLE_LLD=ON \ - -DLLVM_ENABLE_PIC=OFF \ - -DLLVM_ENABLE_THREADS=OFF \ - -DLLVM_INSTALL_BINUTILS_SYMLINKS=ON \ - -DLLVM_TARGETS_TO_BUILD="X86" \ - ${WORK}/llvm > cmake_configure.log - - # -DCMAKE_ASM_COMPILER=nasm \ - # -DCMAKE_LINKER="${SYSROOT}/bin/ld.lld" \ - # -DCOMPILER_RT_ENABLE_LLD=ON \ - # -DLIBCXX_ENABLE_LLD=ON \ - # -DLIBCXX_ENABLE_STATIC_UNWINDER=ON \ - # -DLIBCXXABI_ENABLE_LLD=ON \ - # -DLIBUNWIND_ENABLE_LLD=ON \ - # -DLLVM_ENABLE_PROJECTS="libcxx;libcxxabi;libunwind;compiler-rt" \ - # -DCOMPILER_RT_BAREMETAL_BUILD=ON \ - # -DLIBCXXABI_BAREMETAL=ON \ - - echo "Building LLVM..." - ninja && ninja install - ninja cxx cxxabi compiler-rt - ninja install-compiler-rt install-cxx install-cxxabi - popd -} - -function build_libc() { - if [[ ! -d "${WORK}/poplibc" ]]; then - echo "Downloading poplibc..." - git clone \ - "https://github.com/justinian/poplibc.git" \ - "${WORK}/poplibc" - else - echo "Updating poplibc..." - git -C "${WORK}/poplibc" pull +for proj in ${RUNTIMES}; do + if [[ ! -d "${WORK}/llvm/runtimes/${proj}" ]]; then + echo "Downloading ${proj}..." + git clone -q \ + --branch "${LLVM_BRANCH}" \ + --depth 1 \ + "https://git.llvm.org/git/${proj}.git" "${WORK}/llvm/runtime/${proj}" fi +done - pushd "${WORK}/poplibc" - echo "Building poplibc..." - pb prefix="${SYSROOT}" && ninja -C build install - popd -} +mkdir -p "${WORK}/build/llvm" +pushd "${WORK}/build/llvm" -function update_links() { - for exe in `ls "${SYSROOT}/bin/${TARGET}-"*`; do - base=$(echo "$exe" | sed -e "s/${TARGET}-//") - ln -fs "${exe}" "${base}" - done -} +echo "Configuring LLVM..." -build_nasm -build_libc -build_llvm -update_links +cmake -G Ninja \ + -DCLANG_DEFAULT_RTLIB=compiler-rt \ + -DCLANG_DEFAULT_STD_C=c11 \ + -DCLANG_DEFAULT_STD_CXX=cxx14 \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_C_COMPILER="clang" \ + -DCMAKE_CXX_COMPILER="clang++" \ + -DCMAKE_CXX_FLAGS="-Wno-unused-parameter -D_LIBCPP_HAS_NO_ALIGNED_ALLOCATION -D_LIBUNWIND_IS_BAREMETAL=1 -U_LIBUNWIND_SUPPORT_DWARF_UNWIND" \ + -DCMAKE_INSTALL_PREFIX="${SYSROOT}" \ + -DCMAKE_MAKE_PROGRAM=`which ninja` \ + -DDEFAULT_SYSROOT="${SYSROOT}" \ + -DLIBCXX_CXX_ABI=libcxxabi \ + -DLIBCXX_CXX_ABI_INCLUDE_PATHS="${WORK}/llvm/projects/libcxxabi/include" \ + -DLIBCXX_CXX_ABI_LIBRARY_PATH=lib \ + -DLIBCXX_ENABLE_EXPERIMENTAL_LIBRARY=OFF \ + -DLIBCXX_ENABLE_NEW_DELETE_DEFINITIONS=ON \ + -DLIBCXX_ENABLE_SHARED=OFF \ + -DLIBCXX_ENABLE_STATIC_ABI_LIBRARY=ON \ + -DLIBCXX_ENABLE_THREADS=OFF \ + -DLIBCXX_INCLUDE_BENCHMARKS=OFF \ + -DLIBCXX_USE_COMPILER_RT=ON \ + -DLIBCXXABI_ENABLE_NEW_DELETE_DEFINITIONS=OFF \ + -DLIBCXXABI_ENABLE_SHARED=OFF \ + -DLIBCXXABI_ENABLE_STATIC_UNWINDER=ON \ + -DLIBCXXABI_ENABLE_THREADS=OFF \ + -DLIBCXXABI_LIBCXX_PATH="${WORK}/llvm/projects/libcxx" \ + -DLIBCXXABI_USE_COMPILER_RT=ON \ + -DLIBCXXABI_USE_LLVM_UNWINDER=ON \ + -DLIBUNWIND_ENABLE_SHARED=OFF \ + -DLIBUNWIND_ENABLE_THREADS=OFF \ + -DLIBUNWIND_USE_COMPILER_RT=ON \ + -DLLVM_CONFIG_PATH="${SYSROOT}/bin/llvm-config" \ + -DLLVM_DEFAULT_TARGET_TRIPLE="x86_64-unknown-elf" \ + -DLLVM_ENABLE_LIBCXX=ON \ + -DLLVM_ENABLE_LLD=ON \ + -DLLVM_ENABLE_PIC=OFF \ + -DLLVM_ENABLE_THREADS=OFF \ + -DLLVM_INSTALL_BINUTILS_SYMLINKS=ON \ + -DLLVM_TARGETS_TO_BUILD="X86" \ + ${WORK}/llvm > cmake_configure.log + +# -DCMAKE_ASM_COMPILER=nasm \ +# -DCMAKE_LINKER="${SYSROOT}/bin/ld.lld" \ +# -DCOMPILER_RT_ENABLE_LLD=ON \ +# -DLIBCXX_ENABLE_LLD=ON \ +# -DLIBCXX_ENABLE_STATIC_UNWINDER=ON \ +# -DLIBCXXABI_ENABLE_LLD=ON \ +# -DLIBUNWIND_ENABLE_LLD=ON \ +# -DLLVM_ENABLE_PROJECTS="libcxx;libcxxabi;libunwind;compiler-rt" \ +# -DCOMPILER_RT_BAREMETAL_BUILD=ON \ +# -DLIBCXXABI_BAREMETAL=ON \ + +echo "Building LLVM..." +ninja && ninja install +ninja cxx cxxabi compiler-rt +ninja install-compiler-rt install-cxx install-cxxabi +popd -export CC="${SYSROOT}/bin/clang" -export CXX="${SYSROOT}/bin/clang++" -export LD="${SYSROOT}/bin/ld" -build_libc cp "${README}" "${SYSROOT}/README.md" diff --git a/scripts/readme_for_prebuilt_sysroots.md b/scripts/readme_for_prebuilt_sysroots.md index 4b8797f..b27643f 100644 --- a/scripts/readme_for_prebuilt_sysroots.md +++ b/scripts/readme_for_prebuilt_sysroots.md @@ -4,39 +4,6 @@ This is a pre-built sysroot for building the jsix operating system kernel, bootloader, and utilities. This package is provided as a convenience, and contains software from the following repositories. -## NASM, the Netwide Assembler - -As downloaded from [the NASM website][nasm] under the following license: - - Copyright 1996-2010 the NASM Authors - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following - conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND - CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, - INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, - EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -[nasm]: https://www.nasm.us - ## The LLVM toolchain The LLVM sources as downloaded via git from [llvm.org][llvm] under the terms of diff --git a/scripts/templates/target.host.j2 b/scripts/templates/target.host.j2 index 03310e8..0e29a9d 100644 --- a/scripts/templates/target.host.j2 +++ b/scripts/templates/target.host.j2 @@ -5,8 +5,8 @@ cc = ${srcroot}/sysroot/bin/clang cxx = ${srcroot}/sysroot/bin/clang++ ld = ${srcroot}/sysroot/bin/ld.lld ar = ${srcroot}/sysroot/bin/ar -nasm = ${srcroot}/sysroot/bin/nasm -objcopy = ${srcroot}/sysroot/bin/x86_64-elf-objcopy +nasm = nasm +objcopy = ${srcroot}/sysroot/bin/objcopy {% endblock %} {% block variables %} diff --git a/scripts/templates/target.user.j2 b/scripts/templates/target.user.j2 index 0551b84..c2abc88 100644 --- a/scripts/templates/target.user.j2 +++ b/scripts/templates/target.user.j2 @@ -5,7 +5,7 @@ cc = ${srcroot}/sysroot/bin/clang cxx = ${srcroot}/sysroot/bin/clang++ ld = ${srcroot}/sysroot/bin/ld.lld ar = ${srcroot}/sysroot/bin/ar -nasm = ${srcroot}/sysroot/bin/nasm +nasm = nasm objcopy = ${srcroot}/sysroot/bin/objcopy {% endblock %}