diff options
Diffstat (limited to 'build-chroot.sh')
| -rwxr-xr-x | build-chroot.sh | 23 |
1 files changed, 7 insertions, 16 deletions
diff --git a/build-chroot.sh b/build-chroot.sh index 8d401fa..a365b69 100755 --- a/build-chroot.sh +++ b/build-chroot.sh @@ -1,6 +1,8 @@ #!/bin/sh -e -CFLAGS="-O3 -march=skylake -pipe" -CXXFLAGS="$CFLAGS" +export CC=clang +export CXX=clang++ +export CFLAGS="-O3 -march=skylake -pipe" +export CXXFLAGS="$CFLAGS" THREADS=$(nproc) mkdir -p build @@ -743,32 +745,21 @@ cd .. tar xf ../sources/mrustc-*.tar* cd mrustc-*/ # NOTE: Using types such as uint8_t without stdint.h is not portable. ~ahill -sed -i "1i #include <cstdint>" src/debug.cpp -sed -i "1i #include <cstdint>" src/ast/lifetime_ref.hpp -sed -i "1i #include <cstdint>" src/hir/generic_ref.hpp -sed -i "1i #include <cstdint>" src/hir/type_ref.hpp -sed -i "1i #include <cstdint>" tools/minicargo/build.cpp # NOTE: LLVM loves yelling about unqualified std calls, so we'll just fix them # so we can properly troubleshoot why this doesn't work. ~ahill -sed -i -r "s/ move\(([a-z_]+)\)/ std::move\(\1\)/g" src/ast/ast.cpp -sed -i -r "s/ move\(([a-z_]+)\)/ std::move\(\1\)/g" src/ast/ast.hpp -sed -i -r "s/ move\(([a-z_]+)\)/ std::move\(\1\)/g" src/ast/expr.hpp -sed -i -r "s/ move\(([a-z_]+)\)/ std::move\(\1\)/g" src/macro_rules/macro_rules.hpp -sed -i -r "s/ move\(([a-z_]+)\)/ std::move\(\1\)/g" src/hir/expr.hpp # NOTE: mrustc passes -fno-tree-sra to the GCC to work around a bug that is # present when it comes to linking, however clang has no idea what that # means. ~ahill -sed -i "s/-fno-tree-sra//" src/trans/codegen_c.cpp # NOTE: mrustc converts Rust's asm! macro into inline Assembly in C, which seems # to work on GCC, but is broken on LLVM. Using the input constraint "0" # with the output constraint prefix "+" causes an error. Substituting "+" # with "=" seems to fix this problem. ~ahill -sed -i "s/m_of << \"+\";/m_of << \"=\";/" src/trans/codegen_c.cpp -sed -i "s/m_of << \(p\.input \? \"+\" : \"=\"\);/m_of << \"=\";/" src/trans/codegen_c.cpp # NOTE: mrustc forces the system to link with libatomic because it's assuming # that libgcc exists, even though it doesn't in this case. compiler-rt # supplies the functionality we need, so this is not required. ~ahill -sed -i "/#define BACKEND_C_OPTS_GNU/s/, \"-l\", \"atomic\"//" src/trans/target.cpp +# FIXME: The optimize(-O) flag has been patched out of minicargo because clang +# optimizes essential parts of code generated by mrustc. ~ahill +patch -p1 < /maple/patches/mrustc-maple.patch # NOTE: Rust's unwind crate attempts to link with libgcc_s, even on a musl-based # system. Enabling the "system-llvm-unwind" feature fixes this. ~ahill echo "[add.'library/panic_unwind'.dependencies.unwind]" >> rustc-$RUST_VERSION-overrides.toml |
