diff --git a/builder b/builder
index 5764fc1..d1332f7 100755
--- a/builder
+++ b/builder
@@ -59,8 +59,8 @@ source "$ME/scripts/devfs.sh"
# during the build process of Serene, these dependencies must be present but
# the builder script will not build them as part of the build process. They
# can be built using the `builder deps` subcommand.
-LLVM_VERSION="fa66e4bd9315d20990c86ef57c7901b6dc71bd02"
-IWUY_VERSION="435ad9d35ceee7759ea8f8fd658579e979ee5146"
+LLVM_VERSION="9fda8322243168cbfcb78c4cf80afa838473a573"
+IWYU_VERSION="435ad9d35ceee7759ea8f8fd658579e979ee5146"
BDWGC_VERSION="release-8_2"
MUSL_VERSION="v1.2.3"
# We need this version to use it with our ldd when creating the toolchain
@@ -69,7 +69,7 @@ LLVM_MAJOR_VERSION="17"
# The target architectures that we want to build Serene in and also we want
# serene to support. We use this variable when we're building the llvm
TARGET_ARCHS="X86;AArch64;AMDGPU;ARM;RISCV;WebAssembly"
-export TARGET_ARCHS LLVM_MAJOR_VERSION MUSL_VERSION BDWGC_VERSION IWUY_VERSION \
+export TARGET_ARCHS LLVM_MAJOR_VERSION MUSL_VERSION BDWGC_VERSION IWYU_VERSION \
LLVM_VERSION
# -----------------------------------------------------------------------------
# CONFIG VARS
@@ -88,7 +88,7 @@ if [[ "$CXX" = "" ]]; then
fi
# The repository to push/pull packages to/from.
-DEV_HEROES="https://beta.devheroes.codes"
+DEV_HEROES="https://devheroes.codes"
BUILD_DIR_NAME="build"
export BUILD_DIR_NAME
diff --git a/cmake/toolchains/stage1.standalone.cmake b/cmake/caches/llvm.cmake
similarity index 67%
rename from cmake/toolchains/stage1.standalone.cmake
rename to cmake/caches/llvm.cmake
index ef75855..daabbce 100644
--- a/cmake/toolchains/stage1.standalone.cmake
+++ b/cmake/caches/llvm.cmake
@@ -15,9 +15,10 @@
# along with this program. If not, see .
# This file sets up a CMakeCache for a LLVM toolchain build
+set(CMAKE_CXX_STANDARD 17)
#Enable LLVM projects and runtimes
-set(LLVM_ENABLE_PROJECTS "clang;clang-tools-extra;lld" CACHE STRING "")
+set(LLVM_ENABLE_PROJECTS "clang;clang-tools-extra;lld;lldb;mlir" CACHE STRING "")
set(LLVM_ENABLE_RUNTIMES "compiler-rt;libcxx;libcxxabi;libunwind" CACHE STRING "")
# Distributions should never be built using the BUILD_SHARED_LIBS CMake option.
@@ -26,40 +27,18 @@ set(LLVM_ENABLE_RUNTIMES "compiler-rt;libcxx;libcxxabi;libunwind" CACHE STRING "
# duplicated across shared libraries resulting in bugs. As such this is not a
# safe way to distribute LLVM or LLVM-based tools.
set(BUILD_SHARED_LIBS OFF CACHE BOOL "")
-#set(LLVM_USE_STATIC_ZSTD ON CACHE BOOL "Use static version of zstd. Can be TRUE, FALSE")
-# Enable libc++
-set(LLVM_ENABLE_LIBCXX OFF CACHE BOOL "")
-#set(LLVM_STATIC_LINK_CXX_STDLIB ON CACHE BOOL "")
#set(LLVM_BUILD_STATIC ON CACHE BOOL "")
set(LLVM_BUILD_LLVM_DYLIB OFF CACHE BOOL "")
set(LLVM_ENABLE_EH ON CACHE BOOL "")
set(LLVM_ENABLE_RTTI ON CACHE BOOL "")
-set(LLVM_DEFAULT_TARGET_TRIPLE x86_64-pc-linux-gnu CACHE STRING "")
-set(COMPILER_RT_DEFAULT_TARGET_TRIPLE x86_64-pc-linux-gnu CACHE STRING "")
-set(LLVM_HOST_TRIPLE x86_64-unknown-linux-gnu CACHE STRING "")
-
-set(LLVM_LIB_FUZZING_ENGINE "" CACHE PATH "")
set(LIBCLANG_BUILD_STATIC ON CACHE BOOL "")
set(LLVM_ENABLE_LIBXML2 OFF CACHE BOOL "")
-set(LLVM_ENABLE_TERMINFO OFF CACHE BOOL "")
-set(LLVM_ENABLE_LIBEDIT OFF CACHE BOOL "")
set(LLVM_ENABLE_ASSERTIONS ON CACHE BOOL "")
-set(CMAKE_CXX_STANDARD 17)
-# set(COMPILER_RT_BUILD_SANITIZERS OFF CACHE BOOL "")
-# set(COMPILER_RT_BUILD_XRAY OFF CACHE BOOL "")
-# set(COMPILER_RT_BUILD_PROFILE OFF CACHE BOOL "")
-# set(COMPILER_RT_BUILD_LIBFUZZER OFF CACHE BOOL "")
-# set(COMPILER_RT_BUILD_ORC OFF CACHE BOOL "")
-# set(COMPILER_RT_CAN_EXECUTE_TESTS OFF CACHE BOOL "")
-# set(COMPILER_RT_HWASAN_WITH_INTERCEPTORS OFF CACHE BOOL "")
set(COMPILER_RT_USE_BUILTINS_LIBRARY ON CACHE BOOL "")
-# This option causes a weird error with the build system that misjudge the
-# arch to elf32-i386
-#set(COMPILER_RT_USE_LLVM_UNWINDER ON CACHE BOOL "")
# Create the builtin libs of compiler-rt
set(COMPILER_RT_BUILD_BUILTINS ON CACHE BOOL "")
@@ -81,37 +60,24 @@ set(LIBCXXABI_ENABLE_NEW_DELETE_DEFINITIONS ON CACHE BOOL
"Build libc++abi with definitions for operator new/delete. These are normally
defined in libc++abi, but it is also possible to define them in libc++, in
which case the definition in libc++abi should be turned off.")
+set(LIBCXX_ENABLE_NEW_DELETE_DEFINITIONS OFF CACHE BOOL "")
set(LIBCXXABI_STATICALLY_LINK_UNWINDER_IN_STATIC_LIBRARY ON CACHE BOOL " ")
set(LIBCXX_HAS_GCC_LIB OFF CACHE BOOL "")
set(LIBCXX_ENABLE_EXCEPTIONS ON CACHE BOOL "")
set(LIBCXX_ENABLE_RTTI ON CACHE BOOL "")
set(LIBCXX_ENABLE_THREADS ON CACHE BOOL "")
-set(LIBCXX_ENABLE_NEW_DELETE_DEFINITIONS OFF CACHE BOOL "")
-set(LIBCXXABI_ENABLE_NEW_DELETE_DEFINITIONS ON CACHE BOOL "")
-#set(LIBUNWIND_ENABLE_CROSS_UNWINDING ON CACHE BOOL "")
+set(LLVM_EXTERNAL_PROJECTS iwyu ON CACHE STRING "")
# Only build the native target in stage1 since it is a throwaway build.
-set(LLVM_TARGETS_TO_BUILD Native CACHE STRING "")
+set(LLVM_TARGETS_TO_BUILD ${TARGET_ARCHS} CACHE STRING "")
# Optimize the stage1 compiler, but don't LTO it because that wastes time.
set(CMAKE_BUILD_TYPE Release CACHE STRING "")
-# Setup vendor-specific settings.
-# set(PACKAGE_VENDOR serene-lang.org CACHE STRING "")
-
-# TODO: Turn this on for the final build
# Setting up the stage2 LTO option needs to be done on the stage1 build so that
# the proper LTO library dependencies can be connected.
-set(LLVM_ENABLE_LTO OFF CACHE BOOL "")
+#set(LLVM_ENABLE_LTO OFF CACHE BOOL "")
# Since LLVM_ENABLE_LTO is ON we need a LTO capable linker
set(LLVM_ENABLE_LLD ON CACHE BOOL "")
-
-# include(ExternalProject)
-# ExternalProject_Add(musl
-# GIT_REPOSITORY ${MUSL_REPO}
-# GIT_TAG ${MUSL_VERSION}
-# GIT_SHALLOW ON
-# CONFIGURE_COMMAND "./configure" "--prefix=${}"
-# )
diff --git a/cmake/toolchains/linux.cmake b/cmake/toolchains/linux.cmake
deleted file mode 100644
index ec874f8..0000000
--- a/cmake/toolchains/linux.cmake
+++ /dev/null
@@ -1,38 +0,0 @@
-# Serene Programming Language
-#
-# Copyright (c) 2019-2023 Sameer Rahmani
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, version 2.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see .
-set(CMAKE_SYSTEM_NAME Linux)
-set(CMAKE_SYSTEM_PROCESSOR x86_64)
-
-set(triple x86_64-unknown-linux-gnu)
-
-set(CMAKE_C_COMPILER "${SERENE_TOOLCHAIN_PATH}/bin/clang")
-set(CMAKE_C_COMPILER_TARGET ${triple})
-
-set(CMAKE_CXX_COMPILER "${SERENE_TOOLCHAIN_PATH}/bin/clang++")
-set(CMAKE_CXX_COMPILER_TARGET ${triple})
-
-# where is the target environment located
-set(CMAKE_FIND_ROOT_PATH "${SERENE_TOOLCHAIN_PATH}")
-
-# adjust the default behavior of the FIND_XXX() commands:
-# search programs in the host environment
-set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
-
-# search headers and libraries in the target environment
-set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
-set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
-
-message(">>>> ${CMAKE_C_COMPILER} -- ${SERENE_TOOLCHAIN_PATH}")
diff --git a/cmake/toolchains/stage1.cmake b/cmake/toolchains/stage1.cmake
deleted file mode 100644
index 7a758e5..0000000
--- a/cmake/toolchains/stage1.cmake
+++ /dev/null
@@ -1,74 +0,0 @@
-# Serene Programming Language
-#
-# Copyright (c) 2019-2023 Sameer Rahmani
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, version 2.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see .
-
-# This file sets up a CMakeCache for a LLVM toolchain build
-set(BOOTSTRAP_CMAKE_CXX_STANDARD 17)
-set(CMAKE_CXX_STANDARD 17)
-#Enable LLVM projects and runtimes
-set(LLVM_ENABLE_PROJECTS "clang;clang-tools-extra;lld" CACHE STRING "")
-set(LLVM_ENABLE_RUNTIMES "compiler-rt;libcxx;libcxxabi;libunwind" CACHE STRING "")
-set(LLVM_TARGETS_TO_BUILD Native CACHE STRING "")
-
-set(BUILD_SHARED_LIBS OFF CACHE BOOL "")
-# Optimize the stage1 compiler, but don't LTO it because that wastes time.
-set(CMAKE_BUILD_TYPE Release CACHE STRING "")
-
-# Setup vendor-specific settings.
-set(PACKAGE_VENDOR serene-lang.org CACHE STRING "")
-
-# Setting up the stage2 LTO option needs to be done on the stage1 build so that
-# the proper LTO library dependencies can be connected.
-set(BOOTSTRAP_LLVM_ENABLE_LTO OFF CACHE BOOL "")
-
-set(BOOTSTRAP_LLVM_ENABLE_LLD ON CACHE BOOL "")
-set(COMPILER_RT_BUILD_LIBFUZZER OFF CACHE BOOL "")
-set(COMPILER_RT_INCLUDE_TESTS OFF CACHE BOOL "")
-set(LLVM_LIB_FUZZING_ENGINE "" CACHE PATH "")
-set(LIBCLANG_BUILD_STATIC ON CACHE BOOL "")
-
-set(LLVM_ENABLE_LIBXML2 OFF CACHE BOOL "")
-set(LLVM_ENABLE_TERMINFO OFF CACHE BOOL "")
-set(LLVM_ENABLE_LIBEDIT OFF CACHE BOOL "")
-set(LLVM_ENABLE_ASSERTIONS ON CACHE BOOL "")
-set(CMAKE_CXX_STANDARD 17)
-
-# Expose stage2 targets through the stage1 build configuration.
-set(CLANG_BOOTSTRAP_TARGETS
- check-all
- check-llvm
- check-clang
- llvm-config
- test-suite
- test-depends
- llvm-test-depends
- clang-test-depends
- distribution
- install-distribution
- install-clang
- clang CACHE STRING "")
-
-# Setup the bootstrap build.
-set(CLANG_ENABLE_BOOTSTRAP ON CACHE BOOL "")
-
-if(STAGE2_CACHE_FILE)
- set(CLANG_BOOTSTRAP_CMAKE_ARGS
- -C ${STAGE2_CACHE_FILE}
- CACHE STRING "")
-else()
- set(CLANG_BOOTSTRAP_CMAKE_ARGS
- -C ${CMAKE_CURRENT_LIST_DIR}/stage2.cmake
- CACHE STRING "")
-endif()
diff --git a/cmake/toolchains/stage2.cmake b/cmake/toolchains/stage2.cmake
deleted file mode 100644
index 13bed11..0000000
--- a/cmake/toolchains/stage2.cmake
+++ /dev/null
@@ -1,59 +0,0 @@
-# Serene Programming Language
-#
-# Copyright (c) 2019-2023 Sameer Rahmani
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, version 2.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see .
-
-# This file sets up a CMakeCache for a LLVM toolchain build
-
-# This file sets up a CMakeCache for the second stage of the toolchain
-# bootstrap build.
-set(LLVM_ENABLE_PROJECTS "clang;clang-tools-extra;lld" CACHE STRING "")
-set(LLVM_ENABLE_RUNTIMES "compiler-rt;libcxx;libcxxabi;libunwind" CACHE STRING "")
-
-set(LLVM_TARGETS_TO_BUILD X86 CACHE STRING "")
-
-set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "")
-set(CMAKE_C_FLAGS_RELWITHDEBINFO "-O3 -gline-tables-only -DNDEBUG" CACHE STRING "")
-set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O3 -gline-tables-only -DNDEBUG" CACHE STRING "")
-
-set(LIBCLANG_BUILD_STATIC ON CACHE BOOL "")
-set(LLVM_ENABLE_LIBXML2 OFF CACHE BOOL "")
-set(LLVM_ENABLE_TERMINFO OFF CACHE BOOL "")
-set(LLVM_ENABLE_LIBEDIT OFF CACHE BOOL "")
-set(LLVM_ENABLE_ASSERTIONS ON CACHE BOOL "")
-set(CMAKE_CXX_STANDARD 17)
-
-# setup toolchain
-set(LLVM_INSTALL_TOOLCHAIN_ONLY OFF CACHE BOOL "")
-set(LLVM_TOOLCHAIN_TOOLS
- dsymutil
- llvm-cov
- llvm-dwarfdump
- llvm-profdata
- llvm-objdump
- llvm-nm
- llvm-size
- libclang
- CACHE STRING "")
-
-set(LLVM_DISTRIBUTION_COMPONENTS
- clang
- LTO
- clang-format
- clang-resource-headers
- builtins
- libclang
- runtimes
- ${LLVM_TOOLCHAIN_TOOLS}
- CACHE STRING "")
diff --git a/cmake/toolchains/stage2.standalone.cmake b/cmake/toolchains/stage2.standalone.cmake
deleted file mode 100644
index 9e65ea7..0000000
--- a/cmake/toolchains/stage2.standalone.cmake
+++ /dev/null
@@ -1,111 +0,0 @@
-# Serene Programming Language
-#
-# Copyright (c) 2019-2023 Sameer Rahmani
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, version 2.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see .
-
-# This file sets up a CMakeCache for a LLVM toolchain build
-
-#Enable LLVM projects and runtimes
-set(LLVM_ENABLE_PROJECTS "clang;clang-tools-extra;lld" CACHE STRING "")
-set(LLVM_ENABLE_RUNTIMES "compiler-rt;libcxx;libcxxabi;libunwind" CACHE STRING "")
-
-# Distributions should never be built using the BUILD_SHARED_LIBS CMake option.
-# That option exists for optimizing developer workflow only. Due to design and
-# implementation decisions, LLVM relies on global data which can end up being
-# duplicated across shared libraries resulting in bugs. As such this is not a
-# safe way to distribute LLVM or LLVM-based tools.
-set(BUILD_SHARED_LIBS OFF CACHE BOOL "")
-
-# Enable libc++
-set(LLVM_ENABLE_LIBCXX ON CACHE BOOL "")
-set(LLVM_STATIC_LINK_CXX_STDLIB OFF CACHE BOOL "")
-set(LLVM_BUILD_STATIC ON CACHE BOOL "")
-set(LLVM_BUILD_LLVM_DYLIB OFF CACHE BOOL "")
-# This option causes a weird error with the build system that misjudge the
-# arch to elf32-i386
-#set(COMPILER_RT_USE_LLVM_UNWINDER ON CACHE BOOL "")
-set(LLVM_ENABLE_EH ON CACHE BOOL "")
-set(LLVM_ENABLE_RTTI ON CACHE BOOL "")
-
-set(LLVM_DEFAULT_TARGET_TRIPLE x86_64-pc-linux-musl CACHE STRING "")
-set(COMPILER_RT_DEFAULT_TARGET_TRIPLE x86_64-pc-linux-musl CACHE STRING "")
-set(LLVM_HOST_TRIPLE x86_64-pc-linux-gnu CACHE STRING "")
-
-set(LLVM_DEFAULT_TARGET_TRIPLE x86_64-pc-linux-musl CACHE STRING "")
-set(COMPILER_RT_DEFAULT_TARGET_TRIPLE x86_64-pc-linux-musl CACHE STRING "")
-set(LLVM_HOST_TRIPLE x86_64-pc-linux-musl CACHE STRING "")
-set(LLVM_RUNTIME_TARGETS x86_64-pc-linux-gnu CACHE STRING "")
-
-set(COMPILER_RT_USE_BUILTINS_LIBRARY ON CACHE BOOL "")
-# Create the builtin libs of compiler-rt
-set(COMPILER_RT_BUILD_BUILTINS ON CACHE BOOL "")
-set(COMPILER_RT_BUILD_STANDALONE_LIBATOMIC OFF CACHE BOOL "")
-set(COMPILER_RT_USE_BUILTINS_LIBRARY ON CACHE BOOL "")
-set(COMPILER_RT_EXCLUDE_ATOMIC_BUILTIN OFF CACHE BOOL "")
-set(COMPILER_RT_STATIC_CXX_LIBRARY ON CACHE BOOL "")
-set(COMPILER_RT_CXX_LIBRARY "libcxx" CACHE STRING "")
-set(COMPILER_RT_USE_LIBCXX ON CACHE BOOL "Enable compiler-rt to use libc++ from the source tree")
-
-
-set(LIBUNWIND_ENABLE_STATIC ON CACHE BOOL "")
-set(LIBCXXABI_ENABLE_STATIC ON CACHE BOOL "")
-set(LIBCXX_ENABLE_STATIC ON CACHE BOOL "")
-set(LIBCXX_USE_COMPILER_RT ON CACHE BOOL "")
-set(LIBCXX_CXX_ABI libcxxabi CACHE BOOL "")
-set(LIBCXXABI_USE_COMPILER_RT ON CACHE BOOL "")
-set(CLANG_USE_COMPILER_RT ON CACHE BOOL "")
-set(LIBCXXABI_USE_LLVM_UNWINDER ON CACHE BOOL "")
-set(LIBCXX_HAS_GCC_LIB OFF CACHE BOOL "")
-
-set(LIBCXX_HAS_MUSL_LIBC ON CACHE BOOL "")
-
-set(CLANG_DEFAULT_CXX_STDLIB "libc++" CACHE STRING "")
-set(CLANG_DEFAULT_RTLIB "compiler-rt" CACHE STRING "")
-set(CLANG_DEFAULT_UNWINDLIB "libunwind" CACHE STRING "")
-set(LIBCLANG_BUILD_STATIC ON CACHE BOOL "")
-
-set(LLVM_ENABLE_LIBXML2 OFF CACHE BOOL "")
-set(LLVM_ENABLE_TERMINFO OFF CACHE BOOL "")
-set(LLVM_ENABLE_LIBEDIT OFF CACHE BOOL "")
-set(LLVM_ENABLE_ASSERTIONS ON CACHE BOOL "")
-
-#set(LIBUNWIND_ENABLE_CROSS_UNWINDING ON CACHE BOOL "")
-
-# Only build the native target in stage1 since it is a throwaway build.
-set(LLVM_TARGETS_TO_BUILD Native CACHE STRING "")
-
-# Optimize the stage1 compiler, but don't LTO it because that wastes time.
-set(CMAKE_BUILD_TYPE Release CACHE STRING "")
-
-# Setup vendor-specific settings.
-# set(PACKAGE_VENDOR serene-lang.org CACHE STRING "")
-
-# TODO: Turn this on for the final build
-# Setting up the stage2 LTO option needs to be done on the stage1 build so that
-# the proper LTO library dependencies can be connected.
-set(LLVM_ENABLE_LTO OFF CACHE BOOL "")
-
-# Since LLVM_ENABLE_LTO is ON we need a LTO capable linker
-set(LLVM_ENABLE_LLD ON CACHE BOOL "")
-
-# project(dummy CXX)
-# include(CheckLinkerFlag)
-# check_linker_flag(CXX "-stdlib=libc++" CXX_LINKER_SUPPORTS_STDLIB)
-
-# if(NOT CXX_LINKER_SUPPORTS_STDLIB)
-# message(FATAL_ERROR "hnthnthnt")
-# else()
-# message(FATAL_ERROR "eeeeEeeeeeeehnthnthnt ${}")
-# endif()
-# set(CMAKE_COMPILE_WARNING_AS_ERROR ON CACHE BOOL "")
diff --git a/scripts/toolchain.sh b/scripts/toolchain.sh
index 6a82bd8..3306004 100644
--- a/scripts/toolchain.sh
+++ b/scripts/toolchain.sh
@@ -22,13 +22,6 @@
# portable llvm toolchain
LLVM_DIR_NAME="llvm"
-LLVM_BUILD_DIR="$DEPS_BUILD_DIR/${LLVM_DIR_NAME}_build"
-
-MUSL_DIR_NAME="musl"
-STAGE0_DIR="$DEPS_BUILD_DIR/stage0.$LLVM_VERSION.$MUSL_VERSION"
-STAGE1_DIR="$DEPS_BUILD_DIR/stage1.$LLVM_VERSION.$MUSL_VERSION"
-STAGE2_DIR="$DEPS_BUILD_DIR/stage2.$LLVM_VERSION.$MUSL_VERSION"
-STAGE2_TC_DIR="$DEPS_BUILD_DIR/stage2_tc.$LLVM_VERSION.$MUSL_VERSION"
DOCKER_IMAGE="serene/toolchain-base"
DOCKER_TAG="latest"
@@ -43,17 +36,23 @@ function run_in_container() {
"$@"
}
-function build_toolchain_stage0() {
- local version repo src stage1 old_path install_dir build_dir
+
+function build_llvm() {
+ local version repo src install_dir build_dir
version="$LLVM_VERSION"
repo="${LLVM_REPO:-https://github.com/llvm/llvm-project.git}"
src="$DEPS_SOURCE_DIR/$LLVM_DIR_NAME.$version"
- install_dir="$STAGE0_DIR"
- build_dir="$DEPS_BUILD_DIR/${LLVM_DIR_NAME}_build.stage0.$version"
+ install_dir="$DEPS_BUILD_DIR/llvm.$LLVM_VERSION"
+ build_dir="$DEPS_BUILD_DIR/${LLVM_DIR_NAME}_build.$version"
clone_dep "$repo" "$version" "$src"
+ local iwyu_src iwyu_repo
+ iwyu_src="$DEPS_SOURCE_DIR/iwyu.$IWYU_VERSION"
+ iwyu_repo="${IWYU_REPO:-https://github.com/include-what-you-use/include-what-you-use.git}"
+ clone_dep "$iwyu_repo" "$IWYU_VERSION" "$iwyu_src"
+
info "Building the stage0 toolchain version '$version'..."
if [[ -d "$build_dir" ]]; then
warn "A build dir for 'toolchain' already exists at '$build_dir'"
@@ -64,502 +63,127 @@ function build_toolchain_stage0() {
_push "$build_dir"
- export CFLAGS=' -g -g1 ' # -nodefaultlibs -nostdlibs -nostdinc++ -nostdlib++
- export CXXFLAGS="$CFLAGS"
- #export LDFLAGS="-lc -lc++"
- cmake -G Ninja \
- -DCMAKE_INSTALL_PREFIX="$install_dir" \
- -DLLVM_PARALLEL_COMPILE_JOBS="$(nproc)" \
- -DLLVM_PARALLEL_LINK_JOBS="$(nproc)" \
- -C "$ME/cmake/toolchains/stage1.standalone.cmake" \
- -S "$src/llvm"
- cmake --build . --parallel
- # ninja stage2-distribution
- # ninja stage2-install
- # ninja stage2-install-distribution
- cmake -DCMAKE_INSTALL_PREFIX="$install_dir" -P cmake_install.cmake
-
- unset CC
- unset CXX
-
- _pop
- info "Stage0 toolchain build is ready at '$install_dir'"
-}
-
-
-function build_musl_stage1() {
- local version repo src build_dir install_dir old_path stage1
-
- version="$MUSL_VERSION"
- install_dir="$DEPS_BUILD_DIR/musl.stage1.$version"
- #install_dir="$STAGE1_DIR.tmp"
- build_dir="$DEPS_BUILD_DIR/${MUSL_DIR_NAME}_build.stage1.$version"
- repo="${MUSL_REPO:-git://git.musl-libc.org/musl}"
- src="$DEPS_SOURCE_DIR/$MUSL_DIR_NAME.$version"
-
- clone_dep "$repo" "$version" "$src"
-
- info "Building the stage2 musl version '$version'..."
- if [[ -d "$build_dir" ]]; then
- warn "A build dir for 'musl' already exists at '$build_dir'"
- warn "Cleaning up..."
- rm -rf "$build_dir"
- fi
-
- info "Copy the source to the build directory at: '$build_dir'"
- cp -r "$src" "$build_dir"
-
- mkdir -p "$install_dir"
-
- _push "$build_dir"
-
- old_path="$PATH"
- PATH="$STAGE0_DIR/bin:$PATH"
CC=$(which clang)
CXX=$(which clang++)
- LDFLAGS="-fuse-ld=lld"
-
- export CC CXX LDFLAGS PATH LDFLAGS
-
- ./configure --prefix="$install_dir"
-
- make -j "$(nproc)"
- make install
- ln -sv "$install_dir/lib/libc.so" "$install_dir/lib/ld-musl-$(uname -m).so.1"
-
- # Create a symlink that can be used to print
- # the required shared objects of a program or
- # shared object
- # ln -sv "$install_dir/lib/libc.so" "$install_dir/bin/ldd"
-
- # # Configure the dynamic linker
- # mkdir -p "$install_dir/etc"
- # {
- # echo "/usr/lib/gcc/x86_64-pc-linux-gnu/12"
- # echo "/usr/lib/gcc/x86_64-pc-linux-gnu/11"
- # echo "/usr/lib64/"
- # echo "/usr/lib/"
- # echo "$STAGE0_DIR/lib/clang/$LLVM_MAJOR_VERSION/lib/x86_64-unknown-linux-gnu"
- # echo "$STAGE0_DIR/lib/x86_64-unknown-linux-gnu"
- # echo "$install_dir/lib"
- # echo "$install_dir/x86_64-unknown-linux-gnu/lib"
- # echo "$install_dir/usr/lib64"
- # echo "$install_dir/lib64"
- # echo "$install_dir/usr/lib"
- # echo "$STAGE0_DIR/lib"
- # echo "$STAGE0_DIR/x86_64-pc-linux-gnu/lib"
- # echo "$STAGE0_DIR/usr/lib64"
- # echo "$STAGE0_DIR/lib64"
- # echo "$STAGE0_DIR/usr/lib"
- # } >> "$install_dir/etc/ld-musl-$(uname -m).path"
-
- # cp -v "$ME/scripts/templates/musl-clang" "$stage1/bin/"
- # chmod +x "$stage1/bin/musl-clang"
- # sed -i "s'@CC@'$stage1/bin/clang'" "$stage1/bin/musl-clang"
- # sed -i "s'@PREFIX@'$install_dir'" "$stage1/bin/musl-clang"
- # sed -i "s'@INCDIR@'$install_dir/include'" "$stage1/bin/musl-clang"
- # sed -i "s'@LIBDIR@'$install_dir/lib'" "$stage1/bin/musl-clang"
-
- # cp -v "$ME/scripts/templates/ld.musl-lld" "$stage1/bin/"
- # chmod +x "$stage1/bin/ld.musl-lld"
- # sed -i "s'@CC@'$stage1/bin/clang'" "$stage1/bin/ld.musl-lld"
- # sed -i "s'@LIBDIR@'$install_dir/lib'" "$stage1/bin/ld.musl-lld"
- # TODO: [toolchain] Hardcoded value for dynamic linker of musl is BAAAAD
- # idea. We need a way to make sure the name is correct
- #sed -i "s'@LDSO@'/lib/ld-musl-x86_64.so.1'" "$stage1/bin/ld.musl-lld"
- # /TODO
- echo -e "#include \nint main() {return 0;}" > "$install_dir/main.cpp"
-
- $CXX -stdlib=libc++ -static "$install_dir/main.cpp" -o "$install_dir/main" -fuse-ld=lld -v
-
- unset CC CXX LDFLAGS
-
- PATH="$old_path"
- export PATH
-
- _pop
- info "Stage1 musl has been built at: '$install_dir'"
-}
-
-
-function build_toolchain_stage1() {
- local version repo src install_dir build_dir old_path musl
-
- #musl="$DEPS_BUILD_DIR/musl.stage1.$MUSL_VERSION"
- musl="$STAGE1_DIR.tmp"
- version="$LLVM_VERSION"
- install_dir="$STAGE1_DIR"
- build_dir="$LLVM_BUILD_DIR.stage1.$version"
-
- repo="${LLVM_REPO:-https://github.com/llvm/llvm-project.git}"
- src="$DEPS_SOURCE_DIR/$LLVM_DIR_NAME.$version"
-
- clone_dep "$repo" "$version" "$src"
-
- info "Building the stage1 toolchain version '$version'..."
- if [[ -d "$build_dir" ]]; then
- warn "Stage1 build dir already exists at '$build_dir'"
- fi
-
- mkdir -p "$build_dir"
- mkdir -p "$install_dir"
-
-
- _push "$LLVM_BUILD_DIR.stage1.$version"
- old_path="$PATH"
- PATH="$STAGE0_DIR/bin:$PATH"
-
- CC=$(which clang)
- CXX=$(which clang++)
-
- export CC CXX PATH
-
- info "Testing libc++ availability..."
- (printf "#include \nint main(){return sizeof(size_t);}" \
- | $CXX -x c++ -stdlib=libc++ -v - || {
- >&2 echo "Need libc++ for this to work"
- exit 1
- }) && {
- info "libc++ looks ok!"
- }
- # -isystem $STAGE0_DIR/include/c++/v1/ -isystem $STAGE0_DIR/include -isystem $musl/include
- export CFLAGS=' -g -g1 -nodefaultlibs'
- export CXXFLAGS="$CFLAGS -nostdinc++ -nostdlib++ -isystem $STAGE0_DIR/include/x86_64-pc-linux-gnu/c++/v1/ -isystem $STAGE0_DIR/include/c++/v1/ -isystem $musl/include -isystem $STAGE0_DIR/include"
- export LDFLAGS="-fuse-ld=lld -L $musl/lib/ -L $STAGE0_DIR/lib/ -lc++ -lc++abi -L $STAGE0_DIR/lib/x86_64-pc-linux-gnu -L $STAGE0_DIR/lib/clang/17/lib/x86_64-pc-linux-gnu -lc --rtlib=compiler-rt -lunwind -rpath $STAGE0_DIR/lib"
-
- # Set the compiler and linker flags...
- #LINKERFLAGS="-Wl,-dynamic-linker $install_dir/lib/ld-musl-x86_64.so.1"
-
- cmake -G Ninja -Wno-dev \
- -DCMAKE_INSTALL_PREFIX="$install_dir" \
- -DLLVM_PARALLEL_COMPILE_JOBS="$(nproc)" \
- -DLLVM_PARALLEL_LINK_JOBS="$(nproc)" \
- -C "$ME/cmake/toolchains/stage2.standalone.cmake" \
- "$src/llvm"
- # -DCMAKE_SYSROOT="$STAGE0_DIR" \
- # -DDEFAULT_SYSROOT="$STAGE0_DIR" \
-
- # -DCMAKE_EXE_LINKER_FLAGS="${LINKERFLAGS}" \
- # -DCMAKE_SHARED_LINKER_FLAGS="${LINKERFLAGS}" \
-
-# -DCMAKE_SYSROOT="$STAGE0_DIR" \
- #-DCMAKE_C_LINK_EXECUTABLE="$STAGE0_DIR/bin/bla" \
- # -DCMAKE_CXX_LINK_EXECUTABLE="$STAGE0_DIR/bin/bla" \
-
- # -DLLVM_DEFAULT_TARGET_TRIPLE=x86_64-unknown-linux-musl \
- # -DLLVM_HOST_TRIPLE=x86_64-unknown-linux-musl \
- # -DCOMPILER_RT_DEFAULT_TARGET_TRIPLE=x86_64-unknown-linux-musl \
-
- # -DCMAKE_EXE_LINKER_FLAGS="${LINKERFLAGS}" \
- # -DCMAKE_SHARED_LINKER_FLAGS="${LINKERFLAGS}" \
-
- # "${CONFIG_TOOLS}" "${CONFIG_TUPLES}" \
- # "${CONFIG_CRT}" "${CONFIG_CLANG}" "${CONFIG_OPTIONS}" \
- # "${CONFIG_LIBUNWIND}" "${CONFIG_LIBCXXABI}" \
- # "${CONFIG_LIBCXX}" "${CONFIG_PATHS}" "${BUILD_OFF}" \
- # -DLLVM_ENABLE_PROJECTS="clang;lld" \
- # -DLLVM_ENABLE_RUNTIMES='compiler-rt;libcxx;libcxxabi;libunwind' \
- # -DLLVM_ENABLE_LLD=ON \
- # -DCOMPILER_RT_EXCLUDE_ATOMIC_BUILTIN=OFF \
- # -DCOMPILER_RT_BUILD_BUILTINS=ON \
- # -DLIBCXX_USE_COMPILER_RT=ON \
- # -DLIBCXXABI_USE_COMPILER_RT=ON \
- # -DCOMPILER_RT_USE_BUILTINS_LIBRARY=ON \
-
- # -DLLVM_BUILD_EXAMPLES=OFF \
- # -DLLVM_TARGETS_TO_BUILD="X86" \
- # -DCMAKE_BUILD_TYPE=Release \
- # -DLLVM_ENABLE_PROJECTS='clang;lld' \
-
- # -DCOMPILER_RT_EXCLUDE_ATOMIC_BUILTIN=OFF \
- # -DCOMPILER_RT_BUILD_BUILTINS=ON \
- # -DLIBCXX_USE_COMPILER_RT=ON \
- # -DLIBCXXABI_USE_COMPILER_RT=ON \
- # -DCOMPILER_RT_USE_BUILTINS_LIBRARY=ON \
- # -DLLVM_INCLUDE_BENCHMARKS=OFF \
- # -DLLVM_ENABLE_LLD=ON \
-
- cmake --build . --parallel
- cmake -DCMAKE_INSTALL_PREFIX="$install_dir" -P cmake_install.cmake
-
- unset CC CXX LDFLAGS
-
- PATH="$old_path"
- export PATH
-
- _pop
- info "Stage1 is ready at '$install_dir'"
-}
-
-function build_libcxx_stage2() {
- local version repo src stage1 old_path install_dir build_dir
-
- version="$LLVM_VERSION"
- repo="${LLVM_REPO:-https://github.com/llvm/llvm-project.git}"
- src="$DEPS_SOURCE_DIR/$LLVM_DIR_NAME.$version"
- stage1="$DEPS_BUILD_DIR/$LLVM_DIR_NAME.stage1.$version"
- install_dir="$STAGE2_DIR"
- build_dir="$DEPS_BUILD_DIR/libcxx_build.stage2.$version"
-
- if [ ! -d "$stage1" ]; then
- error "Stage1 compiler is not there yet. Did you forget to build it?"
- exit 1
- fi
-
- clone_dep "$repo" "$version" "$src"
-
- info "Building the stage2 libcxx version '$version'..."
- if [[ -d "$build_dir" ]]; then
- warn "A build dir for 'libcxx' already exists at '$build_dir'"
- fi
-
- mkdir -p "$build_dir"
- mkdir -p "$install_dir"
-
- _push "$build_dir"
-
- old_path="$PATH"
- export PATH="$stage1/bin:$PATH"
-
- export CC="$stage1/bin/clang"
- export CXX="$stage1/bin/clang++"
- # musl_dir="$DEPS_BUILD_DIR/$MUSL_DIR_NAME.stage2.$version"
- # export CFLAGS="-L $musl_dir/lib -isystem $musl_dir/include -nostdinc"
- # export CXXFLAGS="$CFLAGS"
+ # CFLAGS="-flto=thin"
+ # CXXFLAGS="$CFLAGS"
+ # LDFLAGS="-flto=thin"
+ export CC CXX
cmake -G Ninja \
-DCMAKE_INSTALL_PREFIX="$install_dir" \
-DLLVM_PARALLEL_COMPILE_JOBS="$(nproc)" \
-DLLVM_PARALLEL_LINK_JOBS="$(nproc)" \
- -DLLVM_TARGETS_TO_BUILD="X86" \
- -DCMAKE_BUILD_TYPE=Release \
- -DLLVM_ENABLE_PROJECTS='clang;lld' \
- -DLLVM_ENABLE_RUNTIMES='compiler-rt;libcxx;libcxxabi;libunwind' \
- -DCOMPILER_RT_EXCLUDE_ATOMIC_BUILTIN=OFF \
- -DCOMPILER_RT_BUILD_BUILTINS=ON \
- -DLIBCXX_USE_COMPILER_RT=ON \
- -DLIBCXXABI_USE_COMPILER_RT=ON \
- -DCOMPILER_RT_USE_BUILTINS_LIBRARY=ON \
- -DLLVM_ENABLE_LLD=ON \
+ -DLLVM_EXTERNAL_IWYU_SOURCE_DIR="$iwyu_src" \
+ -DTARGET_ARCHS="$TARGET_ARCHS" \
+ -C "$ME/cmake/caches/llvm.cmake" \
-S "$src/llvm"
cmake --build . --parallel
cmake -DCMAKE_INSTALL_PREFIX="$install_dir" -P cmake_install.cmake
- export PATH="$old_path"
- # unset CFLAGS
- # unset CXXFLAGS
-
unset CC
unset CXX
_pop
- info "Stage2 'libcxx' build is ready at '$install_dir'"
+ info "llvm build is ready at '$install_dir'"
+ info "Just add the 'bin' dir to you PATH"
}
-function build_musl_stage2() {
- local version repo src build_dir install_dir old_path stage1
- version="$MUSL_VERSION"
- install_dir="$STAGE2_DIR"
- build_dir="$DEPS_BUILD_DIR/${MUSL_DIR_NAME}_build.stage2.$version"
- repo="${MUSL_REPO:-git://git.musl-libc.org/musl}"
- src="$DEPS_SOURCE_DIR/$MUSL_DIR_NAME.$version"
- stage1="$DEPS_BUILD_DIR/$LLVM_DIR_NAME.stage1.$LLVM_VERSION"
+# function build_musl_stage1() {
+# local version repo src build_dir install_dir old_path stage1
- clone_dep "$repo" "$version" "$src"
+# version="$MUSL_VERSION"
+# install_dir="$DEPS_BUILD_DIR/musl.stage1.$version"
+# #install_dir="$STAGE1_DIR.tmp"
+# build_dir="$DEPS_BUILD_DIR/${MUSL_DIR_NAME}_build.stage1.$version"
+# repo="${MUSL_REPO:-git://git.musl-libc.org/musl}"
+# src="$DEPS_SOURCE_DIR/$MUSL_DIR_NAME.$version"
- info "Building the stage2 musl version '$version'..."
- if [[ -d "$build_dir" ]]; then
- warn "A build dir for 'musl' already exists at '$build_dir'"
- warn "Cleaning up..."
- rm -rf "$build_dir"
- fi
+# clone_dep "$repo" "$version" "$src"
- info "Copy the source to the build directory at: '$build_dir'"
- cp -r "$src" "$build_dir"
+# info "Building the stage2 musl version '$version'..."
+# if [[ -d "$build_dir" ]]; then
+# warn "A build dir for 'musl' already exists at '$build_dir'"
+# warn "Cleaning up..."
+# rm -rf "$build_dir"
+# fi
- mkdir -p "$install_dir"
+# info "Copy the source to the build directory at: '$build_dir'"
+# cp -r "$src" "$build_dir"
- _push "$build_dir"
- old_path="$PATH"
- export PATH="$stage1/bin:$PATH"
+# mkdir -p "$install_dir"
- export CC="$stage1/bin/clang"
- export CXX="$stage1/bin/clang++"
- export CFLAGS="-fuse-ld=lld -Os -pipe"
- export LDFLAGS="-fuse-ld=lld"
- export LIBCC="--rtlib=compiler-rt"
+# _push "$build_dir"
- ./configure --disable-shared --prefix="$install_dir"
+# old_path="$PATH"
+# PATH="$STAGE0_DIR/bin:$PATH"
+# CC=$(which clang)
+# CXX=$(which clang++)
+# LDFLAGS="-fuse-ld=lld"
- make -j "$(nproc)"
- make install
+# export CC CXX LDFLAGS PATH LDFLAGS
- unset CC
- unset CXX
- unset CFLAGS
- unset LIBCC
- unset LDFLAGS
- export PATH="$old_path"
+# ./configure --prefix="$install_dir"
- cp -v "$ME/scripts/templates/musl-clang" "$stage1/bin/"
- chmod +x "$stage1/bin/musl-clang"
- sed -i "s'@CC@'$stage1/bin/clang'" "$stage1/bin/musl-clang"
- sed -i "s'@PREFIX@'$install_dir'" "$stage1/bin/musl-clang"
- sed -i "s'@INCDIR@'$install_dir/include'" "$stage1/bin/musl-clang"
- sed -i "s'@LIBDIR@'$install_dir/lib'" "$stage1/bin/musl-clang"
+# make -j "$(nproc)"
+# make install
+# ln -sv "$install_dir/lib/libc.so" "$install_dir/lib/ld-musl-$(uname -m).so.1"
- cp -v "$ME/scripts/templates/ld.musl-lld" "$stage1/bin/"
- chmod +x "$stage1/bin/ld.musl-lld"
- sed -i "s'@CC@'$stage1/bin/clang'" "$stage1/bin/ld.musl-lld"
- sed -i "s'@LIBDIR@'$install_dir/lib'" "$stage1/bin/ld.musl-lld"
- # TODO: [toolchain] Hardcoded value for dynamic linker of musl is BAAAAD
- # idea. We need a way to make sure the name is correct
- sed -i "s'@LDSO@'/lib/ld-musl-x86_64.so.1'" "$stage1/bin/ld.musl-lld"
- # /TODO
+# # Create a symlink that can be used to print
+# # the required shared objects of a program or
+# # shared object
+# # ln -sv "$install_dir/lib/libc.so" "$install_dir/bin/ldd"
- _pop
- info "Stage2 musl has been built at: '$install_dir'"
-}
+# # # Configure the dynamic linker
+# # mkdir -p "$install_dir/etc"
+# # {
+# # echo "/usr/lib/gcc/x86_64-pc-linux-gnu/12"
+# # echo "/usr/lib/gcc/x86_64-pc-linux-gnu/11"
+# # echo "/usr/lib64/"
+# # echo "/usr/lib/"
+# # echo "$STAGE0_DIR/lib/clang/$LLVM_MAJOR_VERSION/lib/x86_64-unknown-linux-gnu"
+# # echo "$STAGE0_DIR/lib/x86_64-unknown-linux-gnu"
+# # echo "$install_dir/lib"
+# # echo "$install_dir/x86_64-unknown-linux-gnu/lib"
+# # echo "$install_dir/usr/lib64"
+# # echo "$install_dir/lib64"
+# # echo "$install_dir/usr/lib"
+# # echo "$STAGE0_DIR/lib"
+# # echo "$STAGE0_DIR/x86_64-pc-linux-gnu/lib"
+# # echo "$STAGE0_DIR/usr/lib64"
+# # echo "$STAGE0_DIR/lib64"
+# # echo "$STAGE0_DIR/usr/lib"
+# # } >> "$install_dir/etc/ld-musl-$(uname -m).path"
-function build_toolchain_stage2() {
- local version repo src install_dir stage1 build_dir old_path
+# # cp -v "$ME/scripts/templates/musl-clang" "$stage1/bin/"
+# # chmod +x "$stage1/bin/musl-clang"
+# # sed -i "s'@CC@'$stage1/bin/clang'" "$stage1/bin/musl-clang"
+# # sed -i "s'@PREFIX@'$install_dir'" "$stage1/bin/musl-clang"
+# # sed -i "s'@INCDIR@'$install_dir/include'" "$stage1/bin/musl-clang"
+# # sed -i "s'@LIBDIR@'$install_dir/lib'" "$stage1/bin/musl-clang"
- version="$LLVM_VERSION"
- install_dir="$STAGE2_TC_DIR"
- repo="${LLVM_REPO:-https://github.com/llvm/llvm-project.git}"
- src="$DEPS_SOURCE_DIR/$LLVM_DIR_NAME.$version"
- # Why not our clang from stage1? Well musl kindly provides a wraper
- # script in the bin directory that uses musl but with the compiler
- # that builds it. So basically `musl-clang` would be a wrapper around
- # stage one clang with musl enabled by default
- stage1="$DEPS_BUILD_DIR/$LLVM_DIR_NAME.stage1.$version"
- install_dir="$STAGE2_TC_DIR"
- build_dir="$DEPS_BUILD_DIR/${LLVM_DIR_NAME}_build.stage2.$version"
+# # cp -v "$ME/scripts/templates/ld.musl-lld" "$stage1/bin/"
+# # chmod +x "$stage1/bin/ld.musl-lld"
+# # sed -i "s'@CC@'$stage1/bin/clang'" "$stage1/bin/ld.musl-lld"
+# # sed -i "s'@LIBDIR@'$install_dir/lib'" "$stage1/bin/ld.musl-lld"
+# # TODO: [toolchain] Hardcoded value for dynamic linker of musl is BAAAAD
+# # idea. We need a way to make sure the name is correct
+# #sed -i "s'@LDSO@'/lib/ld-musl-x86_64.so.1'" "$stage1/bin/ld.musl-lld"
+# # /TODO
+# echo -e "#include \nint main() {return 0;}" > "$install_dir/main.cpp"
- if [ ! -d "$stage1" ]; then
- error "Stage1 compiler is not there yet. Did you forget to build it?"
- exit 1
- fi
+# $CXX -stdlib=libc++ -static "$install_dir/main.cpp" -o "$install_dir/main" -fuse-ld=lld -v
- clone_dep "$repo" "$version" "$src"
+# unset CC CXX LDFLAGS
- info "Building the stage2 toolchain version '$version'..."
- if [[ -d "$build_dir" ]]; then
- warn "A build dir for stage2 'llvm' already exists at '$build_dir'"
- fi
+# PATH="$old_path"
+# export PATH
- mkdir -p "$build_dir"
- mkdir -p "$install_dir"
+# _pop
+# info "Stage1 musl has been built at: '$install_dir'"
+# }
- _push "$build_dir"
-
- old_path="$PATH"
- export PATH="$STAGE2_DIR/bin:$stage1/bin:$PATH"
-
- export CC="$stage1/bin/musl-clang"
- export CXX="$stage1/bin/clang++"
- export CXXFALGS="--rtlib=compiler-rt"
- export LDFLAGS="-fuse-ld=musl-lld -v"
-
- cmake -G Ninja \
- -DCMAKE_INSTALL_PREFIX="$install_dir" \
- -DLLVM_PARALLEL_COMPILE_JOBS="$(nproc)" \
- -DLLVM_PARALLEL_LINK_JOBS="$(nproc)" \
- -DLLVM_BUILD_EXAMPLES=OFF \
- -DLLVM_TARGETS_TO_BUILD="$TARGET_ARCHS" \
- -DCMAKE_BUILD_TYPE=Release \
- -DCMAKE_SYSROOT="$STAGE2_DIR" \
- -DLLVM_DEFAULT_TARGET_TRIPLE="x86_64-linux-musl" \
- -DLLVM_TARGET_TRIPLE="x86_64-linux-musl" \
- -DLLVM_ENABLE_BINDINGS=OFF \
- -DLLVM_ENABLE_LIBCXX=ON \
- -DLLVM_STATIC_LINK_CXX_STDLIB=ON \
- -DLIBCXX_USE_COMPILER_RT=ON \
- -DLIBCXXABI_USE_COMPILER_RT=ON \
- -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
- -DCOMPILER_RT_USE_BUILTINS_LIBRARY=ON \
- -DCOMPILER_RT_BUILD_BUILTINS=ON \
- -DLIBCXXABI_USE_LLVM_UNWINDER=ON \
- -DLLVM_ENABLE_PROJECTS='clang;lldb;lld;mlir;clang-tools-extra' \
- -DLLVM_ENABLE_RUNTIMES='compiler-rt;libcxx;libcxxabi;libunwind' \
- -DCMAKE_C_COMPILER="$CC" \
- -DCMAKE_CXX_COMPILER="$CXX" \
- -DLLVM_INCLUDE_BENCHMARKS=OFF \
- "$src/llvm"
- #-DLLVM_USE_LINKER="$STAGE2_DIR/bin/ld.musl-lld" \
- cmake --build . --parallel
- cmake -DCMAKE_INSTALL_PREFIX="$install_dir" -P cmake_install.cmake
-
- export PATH="$old_path"
- #-DLLVM_ENABLE_LLD=ON \
- unset CC
- unset CXX
-
- _pop
- info_toolchain
-}
-
-function build_toolchain_stage3() {
- local version repo src install_dir stage1 old_path
-
- version="$LLVM_VERSION"
- repo="${LLVM_REPO:-https://github.com/llvm/llvm-project.git}"
- src="$DEPS_SOURCE_DIR/$LLVM_DIR_NAME.$version"
- stage1="$DEPS_BUILD_DIR/$LLVM_DIR_NAME.stage1.$version"
- install_dir="$DEPS_BUILD_DIR/$LLVM_DIR_NAME.stage2.$version"
-
- if [ ! -d "$stage1" ]; then
- error "Stage1 compiler is not there yet. Did you forget to build it?"
- exit 1
- fi
-
- clone_dep "$repo" "$LLVM_VERSION" "$src"
-
- info "Building the stage2 toolchain version '$version'..."
- if [[ -d "$LLVM_BUILD_DIR.stage2.$version" ]]; then
- warn "A build dir for 'llvm' already exists at '$LLVM_BUILD_DIR.stage2.$version'"
- fi
-
- mkdir -p "$LLVM_BUILD_DIR.stage2.$version"
- mkdir -p "$install_dir"
-
- _push "$LLVM_BUILD_DIR.stage2.$version"
-
- old_path="$PATH"
- export PATH="$stage1/bin:$PATH"
-
- CC="$stage1/bin/clang"
- CXX="$stage1/bin/clang++"
-
- cmake -G Ninja \
- -DCMAKE_INSTALL_PREFIX="$install_dir" \
- -DLLVM_PARALLEL_COMPILE_JOBS="$(nproc)" \
- -DLLVM_PARALLEL_LINK_JOBS="$(nproc)" \
- -DLLVM_BUILD_EXAMPLES=OFF \
- -DLLVM_TARGETS_TO_BUILD="$TARGET_ARCHS" \
- -DCMAKE_BUILD_TYPE=Release \
- -DLLVM_ENABLE_ASSERTIONS=ON \
- -DLLVM_CCACHE_BUILD=ON \
- -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
- -DLLVM_ENABLE_PROJECTS='clang;lldb;lld;mlir;clang-tools-extra' \
- -DLLVM_ENABLE_RUNTIMES='compiler-rt;libcxx;libcxxabi;libunwind' \
- -DCMAKE_C_COMPILER="$CC" \
- -DCMAKE_CXX_COMPILER="$CXX" \
- -DLLVM_ENABLE_LLD=ON \
- "$src/llvm"
-
- cmake --build . --parallel
- cmake -DCMAKE_INSTALL_PREFIX="$install_dir" -P cmake_install.cmake
-
- export PATH="$old_path"
-
- unset CC
- unset CXX
-
- _pop
- info_toolchain
-}
function build_toolchain() {
local stage
@@ -568,43 +192,13 @@ function build_toolchain() {
case "$stage" in
"")
- build_musl_stage1
- build_toolchain_stage1
- build_musl_stage2
- build_libcxx_stage2
- build_toolchain_stage2
+ build_llvm
;;
- "dstage0")
- run_in_container ./builder deps build toolchain stage0
- ;;
- "stage0")
- build_toolchain_stage0
- ;;
- "stage1")
- #cp -r "$STAGE0_DIR" "$STAGE1_DIR.tmp"
- build_musl_stage1
- build_toolchain_stage1
- ;;
- "stage1-tc")
- #cp -r "$STAGE0_DIR" "$STAGE1_DIR"
- build_toolchain_stage1
- ;;
- "stage2")
- build_musl_stage2
- build_libcxx_stage2
- build_toolchain_stage2
- ;;
- "stage1-musl")
- build_musl_stage1
- ;;
- "stage2-musl")
- build_musl_stage2
- ;;
- "stage2-libcxx")
- build_libcxx_stage2
- ;;
- "stage2-toolchain")
- build_toolchain_stage2
+ # "dstage0")
+ # run_in_container ./builder deps build toolchain stage0
+ # ;;
+ "llvm")
+ build_llvm
;;
*)
error "Don't know anythings about '$1'"
@@ -613,34 +207,37 @@ function build_toolchain() {
}
function package_toolchain() { ## Packages the built toolchain
- local version
+ local version install_dir
version="$LLVM_VERSION"
+ install_dir="$DEPS_BUILD_DIR/llvm.$LLVM_VERSION"
- if [ ! -d "$LLVM_INSTALL_DIR" ]; then
- error "No installation directory is found at: '$LLVM_INSTALL_DIR'"
+ if [ ! -d "$install_dir" ]; then
+ error "No installation directory is found at: '$install_dir'"
exit 1
fi
info "Packaging the toolchain version '$version'..."
_push "$DEPS_BUILD_DIR"
local pkg
- pkg="$LLVM_DIR_NAME.$version"
+ pkg="llvm.$version"
time tar -I "$ZSTD_CLI" -cf "$pkg.zstd" "$pkg"
_pop
}
function push_toolchain() { ## Push the toolchain to the package repository
- local version
+ local version install_dir
version="$LLVM_VERSION"
- if [ ! -f "$LLVM_INSTALL_DIR.zstd" ]; then
- error "No package is found at: '$LLVM_INSTALL_DIR.zstd'"
+ install_dir="$DEPS_BUILD_DIR/llvm.$LLVM_VERSION"
+
+ if [ ! -f "$install_dir.zstd" ]; then
+ error "No package is found at: '$install_dir.zstd'"
exit 1
fi
info "Pushing the toolchain version '$version'..."
_push "$DEPS_BUILD_DIR"
- http_push "$LLVM_DIR_NAME" "$version"
+ http_push "llvm" "$version"
echo ""
info "Done"
_pop