Skip to content

Instantly share code, notes, and snippets.

@jaydorsey
Last active April 13, 2021 03:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jaydorsey/32a29ca298ff0967d03c932833ee335e to your computer and use it in GitHub Desktop.
Save jaydorsey/32a29ca298ff0967d03c932833ee335e to your computer and use it in GitHub Desktop.
Build crystal
# 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