pantry/projects/llvm.org/package.yml
Jacob Heider ad69cd13c2 extract(llvm,libc++)
moving libc++, libc++abi, and libunwind to libcxx.llvm.org so we don't need the whole suite for a couple of libraries (do this with gcc, too)
2024-06-04 13:11:43 -04:00

148 lines
4.6 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

distributable:
url: https://github.com/llvm/llvm-project/releases/download/llvmorg-{{ version }}/llvm-project-{{ version }}.src.tar.xz
strip-components: 1
versions:
github: llvm/llvm-project
strip: /^llvmorg-/
provides:
- bin/lld
- bin/clang
- bin/clang++
- bin/cc
- bin/c++
- bin/cpp
- bin/ar
- bin/as
- bin/nm
- bin/objcopy
- bin/ranlib
- bin/readelf
- bin/strings
- bin/strip
dependencies:
zlib.net: 1
build:
dependencies:
# doesn't seem to install a bunch of the libs
# with cmake 3.29
cmake.org: '>=3<3.29'
ninja-build.org: 1
python.org: '>=3<3.12'
crates.io/semverator: '*'
working-directory: build
script:
# Building compiler-rt on darwin+aarch64 fails for versions less than
# 14 with the below configuration. FIXME if possible, of course.
- run: |
RUNTIMES="-DLLVM_ENABLE_RUNTIMES='compiler-rt'"
if test "{{hw.platform}}" = "linux"; then
ARGS="$ARGS $RUNTIMES"
elif semverator satisfies '>=14' {{version}}; then
ARGS="$ARGS $RUNTIMES"
elif test "{{hw.arch}}" = "x86-64" && semverator satisfies '>=14' {{version}}; then
ARGS="$ARGS $RUNTIMES"
fi
# if: linux || >=14 || (x86-64 && >=13) ## Brewkit can't do this. Yet.
- cmake ../llvm -G Ninja $ARGS
- ninja
- ninja install
# other tools simply expect these symlinks and often fail without them
# NOTE forcing symlinks because we build with ourselves and sometimes that
# means we're building with the exact same version FIXME
- run: |
ln -sf clang cc
ln -sf clang++ c++
ln -sf clang-cpp cpp
for x in ar as nm objcopy ranlib readelf strings strip; do
ln -sf llvm-$x $x
done
working-directory: ${{prefix}}/bin
# move linux libs into /lib
- run: |
TARGET="$(find . -maxdepth 1 -type d -name \*-unknown-linux-gnu)"
if test -n "$TARGET"; then
mv "$TARGET"/* .
rmdir "$TARGET"
ln -s . "$TARGET"
fi
working-directory: ${{prefix}}/lib
if: linux
receipt:
- LLVMConfig.cmake
env:
ARGS:
- -DCMAKE_INSTALL_PREFIX="{{ prefix }}"
- -DCMAKE_BUILD_TYPE=Release
- -DLLVM_ENABLE_PROJECTS='lld;clang'
- -DLLVM_INCLUDE_DOCS=OFF
- -DLLVM_INCLUDE_TESTS=OFF
- -DLLVM_ENABLE_RTTI=ON
- -DLLVM_BUILD_LLVM_DYLIB=ON
linux:
ARGS:
# the default is `ld` however clang when handling linking itself
# internally passes flags that, in fact, expect `lld`
#NOTE only wanted on linux because on macOS we actually *need* the Apple
# provided `ld` or things *also* break 😆
- -DCLANG_DEFAULT_LINKER=lld
# Needed with the CMAKE_C_COMPILER_TARGET to compile compiler-rt on linux
# https://reviews.llvm.org/D147598
- -DCOMPILER_RT_DEFAULT_TARGET_ONLY=ON
darwin:
ARGS:
#FIXME shouldnt *have to* require the command line tools package
#FIXME this is no good for systems with only Xcode installed
#NOTE how do Apple make their LLVM find both? we want the same trick
- -DDEFAULT_SYSROOT=/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk
linux/x86-64:
ARGS:
# required to build something that works on linux/x86-64
- -DCLANG_DEFAULT_CXX_STDLIB=libstdc++
- -DCLANG_DEFAULT_RTLIB=libgcc
- -DCOMPILER_RT_INCLUDE_TESTS=OFF
- -DCOMPILER_RT_USE_LIBCXX=OFF
# otherwise compiler-rt fails to build
# https://reviews.llvm.org/D147598
- -DCMAKE_C_COMPILER_TARGET="x86_64-unknown-linux-gnu"
linux/aarch64:
ARGS:
# otherwise compiler-rt fails to build
# https://reviews.llvm.org/D147598
- -DCMAKE_C_COMPILER_TARGET="aarch64-unknown-linux-gnu"
test:
fixture: |
#include <stdio.h>
int main() {
printf("Hello World!\n");
return 0;
}
dependencies:
crates.io/semverator: '*'
script:
# Building compiler-rt on darwin+aarch64 fails for versions less than
# 14 with the below configuration
# FIXME if possible, of course.
- run: |
if test "{{hw.platform}}" = "linux"; then
ARGS="$ARGS -fsanitize=address,undefined"
elif test "{{hw.arch}}" = "x86_64" && semverator satisfies '>=13' {{version}}; then
ARGS="$ARGS -fsanitize=address,undefined"
elif semverator satisfies '>=14' {{version}}; then
ARGS="$ARGS -fsanitize=address,undefined"
fi
# if: linux || >=14 || (x86-64 && >=13) ## Brewkit can't do this. Yet.
- mv $FIXTURE $FIXTURE.c
- clang $ARGS $FIXTURE.c
- ./a.out
env:
ARGS:
- -Wl,-rpath,$PKGX_DIR