Skip to content

Commit

Permalink
Fix target triple on macOS
Browse files Browse the repository at this point in the history
With the release of Xcode 15, a new linker was introduced and with it
came warnings from the linker. It appears that the new linker is
stricter in which target triples it considers valid. Specifically, it
looks like the minimum deployment target is required. E.g.,
`aarch64-apple-darwin23.3.0` is valid, while `aarch64-apple-darwin` is
not.

See also:

* https://developer.apple.com/documentation/xcode-release-notes/xcode-15-release-notes#Linking
* crystal-lang/crystal#13846
  • Loading branch information
hovsater committed Apr 6, 2024
1 parent 104c978 commit d1173d6
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 7 deletions.
8 changes: 3 additions & 5 deletions omnibus/config/software/crystal.rb
Original file line number Diff line number Diff line change
Expand Up @@ -68,14 +68,12 @@
mkdir ".build"
copy "#{output_bin}_x86_64", ".build/crystal"

# Compile for ARM64. Apple's clang only understands arm64, LLVM uses aarch64,
# so we need to sub out aarch64 in our calls to Apple tools
env["CXXFLAGS"] << " -target arm64-apple-darwin"
make "deps", env: env

make "crystal stats=true release=true target=aarch64-apple-darwin FLAGS=\"#{crflags}\" CRYSTAL_CONFIG_TARGET=aarch64-apple-darwin CRYSTAL_CONFIG_LIBRARY_PATH= O=#{output_path}", env: env
crtarget = "arm64-apple-macosx#{ENV["MACOSX_DEPLOYMENT_TARGET"]}"
make "crystal stats=true release=true target=#{crtarget} FLAGS=\"#{crflags}\" CRYSTAL_CONFIG_TARGET=#{crtarget} CRYSTAL_CONFIG_LIBRARY_PATH= O=#{output_path}", env: env

command "clang #{output_path}/crystal.o -o #{output_bin}_arm64 -target arm64-apple-darwin src/llvm/ext/llvm_ext.o `llvm-config --libs --system-libs --ldflags 2>/dev/null` -lstdc++ -lpcre2-8 -lgc -lpthread -levent -liconv -ldl -v", env: env
command "clang #{output_path}/crystal.o -o #{output_bin}_arm64 -target #{crtarget} src/llvm/ext/llvm_ext.o `llvm-config --libs --system-libs --ldflags 2>/dev/null` -lstdc++ -lpcre2-8 -lgc -lpthread -levent -liconv -ldl -v", env: env
delete "#{output_path}/crystal.o"

# Lipo them up
Expand Down
5 changes: 3 additions & 2 deletions omnibus/config/software/shards.rb
Original file line number Diff line number Diff line change
Expand Up @@ -96,9 +96,10 @@
make "clean", env: env

# Build for ARM64
crflags += " --cross-compile --target aarch64-apple-darwin"
crtarget = "arm64-apple-macosx#{ENV["MACOSX_DEPLOYMENT_TARGET"]}"
crflags += " --cross-compile --target #{crtarget}"
make "bin/shards SHARDS=false CRYSTAL=#{install_dir}/bin/crystal FLAGS='#{crflags}'", env: env
command "clang bin/shards.o -o bin/shards_arm64 -target arm64-apple-darwin -L#{install_dir}/embedded/lib -lyaml -lpcre2-8 -lgc -lpthread -levent -liconv -ldl", env: env
command "clang bin/shards.o -o bin/shards_arm64 -target #{crtarget} -L#{install_dir}/embedded/lib -lyaml -lpcre2-8 -lgc -lpthread -levent -liconv -ldl", env: env

# Lipo them up
command "lipo -create -output bin/shards bin/shards_x86_64 bin/shards_arm64"
Expand Down

0 comments on commit d1173d6

Please sign in to comment.