Last active
April 13, 2021 03:10
-
-
Save jaydorsey/32a29ca298ff0967d03c932833ee335e to your computer and use it in GitHub Desktop.
Build crystal
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Sources: | |
# | |
# https://github.com/crystal-lang/crystal/issues/10066 | |
# https://github.com/crystal-lang/crystal/pull/10348#issue-564769672 | |
# | |
# Usage: | |
# | |
# - Follow the instructions here to install ibrew: https://soffes.blog/homebrew-on-apple-silicon | |
# - brew install gmp libevent libyaml openssl@1.1 pcre pkg-config libatomic_ops llvm | |
# - brew unlink bdw-gc | |
# - brew install bdw-gc --HEAD | |
# - ibrew install crystal-lang llvm | |
# - Save this file as build_crystal.sh; chmod+x build_crystal.sh, then ./build_crystal.sh | |
export PATH="/opt/homebrew/bin:/usr/local/bin:$PATH" | |
alias ibrew="arch -x86_64 /usr/local/bin/brew" | |
git clone https://github.com/crystal-lang/crystal | |
cd crystal | |
cp /opt/homebrew/opt/bdw-gc/lib/libgc.a $(pwd)/libgc.a | |
export INTEL_BREW_PREFIX="$(ibrew --prefix)" | |
export INTEL_LLVM_ROOT="$INTEL_BREW_PREFIX/opt/llvm" | |
export INTEL_LLVM_CONFIG="$INTEL_LLVM_ROOT/bin/llvm-config" | |
export ARM_BREW_PREFIX="$(brew --prefix)" | |
export ARM_LLVM_ROOT="$ARM_BREW_PREFIX/opt/llvm" | |
export ARM_LLVM_CONFIG="$ARM_LLVM_ROOT/bin/llvm-config" | |
LLVM_CONFIG="$INTEL_LLVM_CONFIG" \ | |
LDFLAGS="-L$INTEL_LLVM_ROOT/lib" \ | |
CPPFLAGS="-I$INTEL_LLVM_ROOT/include" \ | |
CC="$INTEL_LLVM_ROOT/bin/clang" \ | |
AR="$INTEL_LLVM_ROOT/bin/llvm-ar" \ | |
arch -x86_64 make | |
LLVM_CONFIG="$INTEL_LLVM_CONFIG" \ | |
LDFLAGS="-L$INTEL_LLVM_ROOT/lib" \ | |
CRYSTAL_CONFIG_TARGET=aarch64-apple-darwin \ | |
CRYSTAL_CONFIG_LIBRARY_PATH="$ARM_BREW_PREFIX/lib" \ | |
arch -x86_64 ./bin/crystal build src/compiler/crystal.cr --cross-compile --target aarch64-apple-darwin -Dwithout_playground | |
LLVM_CONFIG="$ARM_LLVM_ROOT/bin/llvm-config" \ | |
LDFLAGS="-L$ARM_LLVM_ROOT/lib" \ | |
$ARM_LLVM_ROOT/bin/clang -I$ARM_LLVM_ROOT/include -c -o src/llvm/ext/llvm_ext.o src/llvm/ext/llvm_ext.cc | |
LLVM_CONFIG="$ARM_LLVM_ROOT/bin/llvm-config" \ | |
LDFLAGS="-L$ARM_LLVM_ROOT/lib" \ | |
CPPFLAGS="-I$ARM_LLVM_ROOT/include" \ | |
$ARM_LLVM_ROOT/bin/clang crystal.o -o .build/crystal -rdynamic -L$ARM_BREW_PREFIX/lib src/llvm/ext/llvm_ext.o `"$ARM_LLVM_ROOT/bin/llvm-config" --libs --system-libs --ldflags 2> /dev/null` -lstdc++ -lpcre libgc.a -lpthread -L$(brew --prefix libevent)/lib -levent -liconv -ldl |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment