Skip to Content.
Sympa Menu

sm-commit - [[SM-Commit] ] GIT changes to master grimoire by Justin Boffemmyer (f98c6eba6ea0cad1514e0f45079dc43efa2ea382)

sm-commit AT lists.ibiblio.org

Subject: Source Mage code commit list

List archive

Chronological Thread  
  • From: Justin Boffemmyer <scm AT sourcemage.org>
  • To: sm-commit AT lists.ibiblio.org, sm-commit AT lists.sourcemage.org
  • Subject: [[SM-Commit] ] GIT changes to master grimoire by Justin Boffemmyer (f98c6eba6ea0cad1514e0f45079dc43efa2ea382)
  • Date: Thu, 16 Jan 2025 03:07:12 +0000

GIT changes to master grimoire by Justin Boffemmyer <flux AT sourcemage.org>:

devel/llvm/BUILD | 19 +++++++
devel/llvm/CONFIGURE | 29 -----------
devel/llvm/DEPENDS | 5 +
devel/llvm/DETAILS | 22 ++++++++
devel/llvm/HISTORY | 14 +++++
devel/llvm/PREPARE | 115
++++++++++++++++++++++++++++++++++++++++-----
devel/llvm/PRE_BUILD | 15 +++++
devel/llvm/PRE_SUB_DEPENDS | 3 +
devel/llvm/SUB_DEPENDS | 12 ++++
9 files changed, 193 insertions(+), 41 deletions(-)

New commits:
commit f98c6eba6ea0cad1514e0f45079dc43efa2ea382
Author: Justin Boffemmyer <flux AT sourcemage.org>
Commit: Justin Boffemmyer <flux AT sourcemage.org>

devel/llvm: flang, libclc, and experimental targets

Add optional support for building the flang FORTRAN frontend. Building
flang requires also building MLIR, and likely requires openmp as a
runtime (building without openmp is currently untested).

Add support for building experimental backend targets, most notably the
SPIR-V target. Enabling the SPIR-V experimental backend will result in
llvm-spirv being built. Refactor all target selections (backend,
runtime, and experimental backend), and ensure selection happens in
PREPARE since target selection affects which sources need to be
downloaded, and which other configuration combinations are possible.

Add support for the OpenCL library implementation libclc, including
choosing which libclc targets to build. Building libclc currently
requires a workaround in that it fails to find llvm-spirv in the build
itself, and requires a pre-existing llvm-spirv command. This bug is
tracked upstream (see the reference in BUILD). The workaround
implemented here requires having LLVM with llvm-spirv support already
present on your system, which for many means casting llvm once with
libclc but the SPIR-V backend enabled, and then casting llvm a second
time with libclc enabled.

commit 52292411ef49b226dd232c1f6c964aef61ab2dc0
Author: Justin Boffemmyer <flux AT sourcemage.org>
Commit: Justin Boffemmyer <flux AT sourcemage.org>

devel/llvm: add LoongArch to list of supported build targets

commit 57e499bda114e16c6a77b8e1eb0b12bac1532d21
Author: Justin Boffemmyer <flux AT sourcemage.org>
Commit: Justin Boffemmyer <flux AT sourcemage.org>

devel/llvm: don't hardcode host tool paths

Allow the search for host compilers and linkers to iterate through $PATH
rather than directly hardcoding them.

diff --git a/devel/llvm/BUILD b/devel/llvm/BUILD
index 4ad0dc2..8d1ec03 100755
--- a/devel/llvm/BUILD
+++ b/devel/llvm/BUILD
@@ -46,6 +46,20 @@ if [[ "$LLVM_WITH_CLANG" == y ]] ;then
OPTS="$OPTS -DCLANG_INCLUDE_TESTS=OFF"
fi &&

+if [[ "$LLVM_WITH_FLANG" == y ]] ;then
+ LLVM_PROJECTS="$LLVM_PROJECTS flang"
+fi &&
+
+if [[ "$LLVM_WITH_LIBCLC" == y ]] ;then
+ LLVM_PROJECTS="$LLVM_PROJECTS libclc" &&
+ OPTS="$OPTS -DLIBCLC_TARGETS_TO_BUILD=${LLVM_LIBCLC_TARGETS// /;}"
+fi &&
+
+# workaround for https://github.com/llvm/llvm-project/issues/109537
+if [[ "$LLVM_WITH_LIBCLC" == y ]] ;then
+ OPTS="$OPTS -DLLVM_SPIRV=$(command -v llvm-spirv)"
+fi &&
+
if [[ "$LLVM_WITH_LLD" == y ]] ;then
LLVM_PROJECTS="$LLVM_PROJECTS lld" &&
OPTS="$OPTS -DLLVM_TOOL_LLD_BUILD=ON"
@@ -68,6 +82,11 @@ if [[ "$LLVM_WITH_POLLY" == y ]] ;then
OPTS="$OPTS -DLLVM_TOOL_POLLY_BUILD=ON"
fi &&

+if [[ "$LLVM_WITH_SPIRV" == y ]] ;then
+ OPTS="$OPTS -DLLVM_EXPERIMENTAL_TARGETS=SPIRV" &&
+ OPTS="$OPTS -DLLVM_EXTERNAL_SPIRV_HEADERS_SOURCE_DIR=/usr/include/spirv"
+fi &&
+
if [[ "$LLVM_WITH_UTILS" == y ]] ;then
OPTS="$OPTS -DLLVM_BUILD_UTILS=ON"
else
diff --git a/devel/llvm/CONFIGURE b/devel/llvm/CONFIGURE
index f8a9d51..1984d7f 100755
--- a/devel/llvm/CONFIGURE
+++ b/devel/llvm/CONFIGURE
@@ -1,34 +1,5 @@
-. $GRIMOIRE/config_query_multi.function &&
. $GRIMOIRE/CMAKE_CONFIGURE &&

-message "$DEFAULT_COLOR$MESSAGE_COLOR" \
- "LLVM can build multiple backends." \
- "\nFor most people, X86 and AMDGPU are sufficient." &&
-
-local targets="all" &&
-targets="$targets AArch64" &&
-targets="$targets AMDGPU" &&
-targets="$targets ARM" &&
-targets="$targets AVR" &&
-targets="$targets BPF" &&
-targets="$targets Hexagon" &&
-targets="$targets Lanai" &&
-targets="$targets Mips" &&
-targets="$targets MSP430" &&
-targets="$targets NVPTX" &&
-targets="$targets PowerPC" &&
-targets="$targets RISCV" &&
-targets="$targets Sparc" &&
-targets="$targets SystemZ" &&
-targets="$targets VE" &&
-targets="$targets WebAssembly" &&
-targets="$targets X86" &&
-targets="$targets XCore" &&
-
-config_query_multi LLVM_TARGETS "which backend targets?" \
- $targets \
- &&
-
if [[ "$LLVM_WITH_CLANG" == "y" ]]
then
config_query LLVM_WITH_ANALYZER \
diff --git a/devel/llvm/DEPENDS b/devel/llvm/DEPENDS
index 0819d0d..fc12a4b 100755
--- a/devel/llvm/DEPENDS
+++ b/devel/llvm/DEPENDS
@@ -55,4 +55,9 @@ if [[ "$LLVM_WITH_LLDB" == y ]]; then
buildsys_depends swig &&
buildsys_depends libedit &&
buildsys_depends ncurses
+fi &&
+
+if [[ "$LLVM_WITH_SPIRV" == y ]]; then
+ buildsys_depends spirv-headers &&
+ buildsys_depends spirv-tools
fi
diff --git a/devel/llvm/DETAILS b/devel/llvm/DETAILS
index 48e59ee..737c0d5 100755
--- a/devel/llvm/DETAILS
+++ b/devel/llvm/DETAILS
@@ -4,6 +4,7 @@
SPELL_BUILD_SYSTEM=cmake

GITHUB_URI="https://github.com/llvm/llvm-project/releases/download/llvmorg-$VERSION";
SOURCE_DIRECTORY="${BUILD_DIRECTORY}/llvm-project"
+ SPIRV_VERSION=19.1.3
SOURCE="${SPELL}-${VERSION}.src.tar.xz"
SOURCE2=$SOURCE.sig
SOURCE_URL[0]="${GITHUB_URI}/${SOURCE}"
@@ -118,6 +119,27 @@ if list_find "$LLVM_RUNTIMES" "openmp" ;then
SOURCE29_GPG="llvm.gpg:$SOURCE30:UPSTREAM_KEY"
SOURCE30_IGNORE="signature"
fi
+if [[ "$LLVM_WITH_LIBCLC" == y ]]; then
+ SOURCE31="libclc-${VERSION}.src.tar.xz"
+ SOURCE31_URL[0]="${GITHUB_URI}/${SOURCE31}"
+ SOURCE32="$SOURCE31.sig"
+ SOURCE32_URL[0]="${SOURCE31_URL[0]}.sig"
+ SOURCE31_GPG="llvm.gpg:$SOURCE32:UPSTREAM_KEY"
+ SOURCE32_IGNORE="signature"
+fi
+if [[ "$LLVM_WITH_SPIRV" == y ]]; then
+ SOURCE33="SPIRV-LLVM-Translator-$SPIRV_VERSION.tar.gz"
+
SOURCE33_URL[0]="https://github.com/KhronosGroup/SPIRV-LLVM-Translator/archive/v$SPIRV_VERSION/$SOURCE33";
+
SOURCE33_HASH="sha512:8370ca2192e7df3aff2e2336155d3ab5519103cc31f84a1d199b34d78ad77397be0e3944d2d5eb815497fb297dcb1b4ca063d2f667dfe8e0a75c896389a9ad0b"
+fi
+if [[ "$LLVM_WITH_FLANG" == y ]]; then
+ SOURCE34="flang-${VERSION}.src.tar.xz"
+ SOURCE34_URL[0]="${GITHUB_URI}/${SOURCE34}"
+ SOURCE35="$SOURCE34.sig"
+ SOURCE35_URL[0]="${SOURCE34_URL[0]}.sig"
+ SOURCE34_GPG="llvm.gpg:$SOURCE35:UPSTREAM_KEY"
+ SOURCE35_IGNORE="signature"
+fi
WEB_SITE="https://llvm.org";
LICENSE[0]=APACHE
ENTERED=20081115
diff --git a/devel/llvm/HISTORY b/devel/llvm/HISTORY
index f165fc2..0dbd0ab 100644
--- a/devel/llvm/HISTORY
+++ b/devel/llvm/HISTORY
@@ -1,4 +1,18 @@
2025-01-16 Justin Boffemmyer <flux AT sourcemage.org>
+ * BUILD: add a workaround for building libclc
+
+2025-01-16 Justin Boffemmyer <flux AT sourcemage.org>
+ * CONFIGURE,PREPARE: move backend target selection to PREPARE, add
+ experimental backend target selection options
+
+2025-01-16 Justin Boffemmyer <flux AT sourcemage.org>
+ * CONFIGURE: add LoongArch to list of supported build targets
+
+2025-01-16 Justin Boffemmyer <flux AT sourcemage.org>
+ * PREPARE: don't hardcode a specific path for finding host compilers
or
+ linkers
+
+2025-01-16 Justin Boffemmyer <flux AT sourcemage.org>
* DEPENDS: add missing functions include

2025-01-16 Justin Boffemmyer <flux AT sourcemage.org>
diff --git a/devel/llvm/PREPARE b/devel/llvm/PREPARE
index 23d7dda..48c75ea 100755
--- a/devel/llvm/PREPARE
+++ b/devel/llvm/PREPARE
@@ -1,33 +1,98 @@
. $GRIMOIRE/config_query_multi.function &&

-LLVM_ALL_RUNTIMES="all" &&
-LLVM_ALL_RUNTIMES="$LLVM_ALL_RUNTIMES compiler-rt" &&
-LLVM_ALL_RUNTIMES="$LLVM_ALL_RUNTIMES libcxx" &&
-LLVM_ALL_RUNTIMES="$LLVM_ALL_RUNTIMES libcxxabi" &&
-LLVM_ALL_RUNTIMES="$LLVM_ALL_RUNTIMES libunwind" &&
-LLVM_ALL_RUNTIMES="$LLVM_ALL_RUNTIMES openmp" &&
+local targets="all" &&
+targets="$targets AArch64" &&
+targets="$targets AMDGPU" &&
+targets="$targets ARM" &&
+targets="$targets AVR" &&
+targets="$targets BPF" &&
+targets="$targets Hexagon" &&
+targets="$targets Lanai" &&
+targets="$targets LoongArch" &&
+targets="$targets Mips" &&
+targets="$targets MSP430" &&
+targets="$targets NVPTX" &&
+targets="$targets PowerPC" &&
+targets="$targets RISCV" &&
+targets="$targets Sparc" &&
+targets="$targets SystemZ" &&
+targets="$targets VE" &&
+targets="$targets WebAssembly" &&
+targets="$targets X86" &&
+targets="$targets XCore" &&

-config_query_multi LLVM_RUNTIMES "which runtime library targets?" \
- $LLVM_ALL_RUNTIMES &&
+local experimental_targets="none" &&
+experimental_targets="$experimental_targets all" &&
+experimental_targets="$experimental_targets ARC" &&
+experimental_targets="$experimental_targets CSKY" &&
+experimental_targets="$experimental_targets DirectX" &&
+experimental_targets="$experimental_targets M68k" &&
+experimental_targets="$experimental_targets SPIRV" &&
+experimental_targets="$experimental_targets Xtensa" &&
+
+local libclc_targets="all" &&
+libclc_targets="$libclc_targets amdgcn--"
+libclc_targets="$libclc_targets amdgcn--amdhsa"
+libclc_targets="$libclc_targets amdgcn-mesa-mesa3d"
+libclc_targets="$libclc_targets clspv--"
+libclc_targets="$libclc_targets clspv64--"
+libclc_targets="$libclc_targets nvptx--"
+libclc_targets="$libclc_targets nvptx--"
+libclc_targets="$libclc_targets nvptx--nvidiacl"
+libclc_targets="$libclc_targets nvptx64--"
+libclc_targets="$libclc_targets nvptx64--nvidiacl"
+libclc_targets="$libclc_targets ptx-nvidiacl"
+libclc_targets="$libclc_targets r600--"
+libclc_targets="$libclc_targets spirv-mesa3d-"
+libclc_targets="$libclc_targets spirv64-mesa3d-"
+
+local runtimes="all" &&
+runtimes="$runtimes compiler-rt" &&
+runtimes="$runtimes libcxx" &&
+runtimes="$runtimes libcxxabi" &&
+runtimes="$runtimes libunwind" &&
+runtimes="$runtimes openmp" &&
+
+message "$DEFAULT_COLOR$MESSAGE_COLOR" \
+ "LLVM can build multiple backends." \
+ "\nFor many, X86 and AMDGPU are sufficient." &&
+
+config_query_multi LLVM_TARGETS \
+ "Which backend targets to build?" \
+ $targets \
+ &&
+
+config_query_multi LLVM_EXPERIMENTAL_TARGETS \
+ "Which experimental backend targets to build?" \
+ $experimental_targets \
+ &&
+
+config_query_multi LLVM_RUNTIMES \
+ "Which runtime library targets to build?" \
+ $runtimes \
+ &&

# selecting "all" runtimes in the LLVM build system will only enable libcxx,
# libcxxabi, and libunwind, instead of actually all possible supported
# runtimes, so specify them manually
-if list_find "$LLVM_RUNTIMES" "all" ;then
- LLVM_RUNTIMES="${LLVM_ALL_RUNTIMES#all }"
+if list_find "$runtimes" "all" ;then
+ LLVM_RUNTIMES="${runtimes#all }"
fi &&

+if list_find "$LLVM_EXPERIMENTAL_TARGETS" SPIRV ;then
+ LLVM_WITH_SPIRV=y
+fi

local compilers=""
for compiler in clang gcc ;do
- if command -v "/usr/bin/$compiler" > /dev/null ;then
+ if command -v "$compiler" > /dev/null;then
compilers="$compilers $compiler"
fi
done

local linkers="default "
for linker in bfd gold lld mold ;do
- if command -v "/usr/bin/ld.$linker" > /dev/null ;then
+ if command -v "ld.$linker" > /dev/null;then
linkers="$linkers $linker"
fi
done
@@ -55,6 +120,21 @@ config_query LLVM_WITH_LLDB "Build the LLDB debugger
(selects libcxx and lib
config_query LLVM_WITH_POLLY "Build the polyhedral optimizer (polly)?" n
&&
config_query LLVM_WITH_LLD "Build the LLVM linker (lld)?" n &&
config_query LLVM_WITH_MLIR "Build the LLVM multi-level intermediate
representation (MLIR)?" n &&
+config_query LLVM_WITH_FLANG "Build the flang fortran frontend (selects
MLIR)?" n &&
+
+if [[ "$LLVM_WITH_CLANG" == y ]] ;then
+ config_query LLVM_WITH_LIBCLC "Build the LLVM OpenCL implementation
(libclc)?" n &&
+ if [[ "$LLVM_WITH_LIBCLC" == y ]] ;then
+ config_query_multi LLVM_LIBCLC_TARGETS \
+ "Which libclc targets to build?" \
+ $libclc_targets
+ fi &&
+ case "$LLVM_LIBCLC_TARGETS" in
+ *spirv*)
+ LLVM_WITH_SPIRV=y &&
+ ;;
+ esac
+fi &&

if [[ "$LLVM_WITH_CLANG" == y ]] ;then
for required in compiler-rt ;do
@@ -62,6 +142,16 @@ if [[ "$LLVM_WITH_CLANG" == y ]] ;then
LLVM_RUNTIMES="$LLVM_RUNTIMES $required"
fi
done
+fi
+
+if [[ "$LLVM_WITH_FLANG" == y ]] ;then
+ LLVM_WITH_MLIR=y &&
+ persistent_add LLVM_WITH_MLIR
+ for required in compiler-rt openmp ;do
+ if ! list_find "$LLVM_RUNTIMES" "$required";then
+ LLVM_RUNTIMES="$LLVM_RUNTIMES $required"
+ fi
+ done
fi &&

if [[ "$LLVM_WITH_LLD" == y ]] ;then
@@ -73,3 +163,4 @@ if [[ "$LLVM_WITH_LLD" == y ]] ;then
fi &&

persistent_add LLVM_RUNTIMES
+persistent_add LLVM_WITH_SPIRV
diff --git a/devel/llvm/PRE_BUILD b/devel/llvm/PRE_BUILD
index 9756450..efcb675 100755
--- a/devel/llvm/PRE_BUILD
+++ b/devel/llvm/PRE_BUILD
@@ -20,6 +20,16 @@ if [[ "$LLVM_WITH_CLANG" == y ]]; then
ln -s ../../clang-tools-extra clang/tools/extra
fi &&

+if [[ "$LLVM_WITH_FLANG" == y ]]; then
+ unpack_file 34 &&
+ mv flang-${VERSION}.src flang
+fi &&
+
+if [[ "$LLVM_WITH_LIBCLC" == y ]]; then
+ unpack_file 31 &&
+ mv libclc-${VERSION}.src libclc
+fi &&
+
if [[ "$LLVM_WITH_LLD" == y ]]; then
unpack_file 11 &&
mv lld-${VERSION}.src lld
@@ -68,4 +78,9 @@ fi &&
if list_find "$LLVM_RUNTIMES" "openmp"; then
unpack_file 29 &&
mv openmp-${VERSION}.src openmp
+fi &&
+
+if [[ "$LLVM_WITH_SPIRV" == y ]]; then
+ unpack_file 33 &&
+ ln -s ../../SPIRV-LLVM-Translator-$SPIRV_VERSION} llvm/tools/llvm-spirv
fi
diff --git a/devel/llvm/PRE_SUB_DEPENDS b/devel/llvm/PRE_SUB_DEPENDS
index 00c2adf..80aec61 100755
--- a/devel/llvm/PRE_SUB_DEPENDS
+++ b/devel/llvm/PRE_SUB_DEPENDS
@@ -9,11 +9,14 @@ case "$THIS_SUB_DEPENDS" in
;;
BOLT) [[ "${LLVM_WITH_BOLT}" == "y" ]] ;;
CLANG) [[ "${LLVM_WITH_CLANG}" == "y" ]] ;;
+ FLANG) [[ "$LLVM_WITH_FLANG" == "y" ]] ;;
+ LIBCLC) [[ "$LLVM_WITH_LIBCLC" == "y" ]] ;;
LLD) [[ "${LLVM_WITH_LLD}" == "y" ]] ;;
LLDB) [[ "${LLVM_WITH_LLDB}" == "y" ]] ;;
MLIR) [[ "${LLVM_WITH_MLIR}" == "y" ]] ;;
POLLY) [[ "${LLVM_WITH_POLLY}" == "y" ]] ;;
RTTI) [[ "$LLVM_WITH_RTTI" == "y" ]] ;;
+ SPIRV) [[ "$LLVM_WITH_SPIRV" == "y" ]] ;;
*)
message "${PROBLEM_COLOR}bogus sub_depends: $SPELL
$THIS_SUB_DEPENDS${DEFAULT_COLOR}"
return 1
diff --git a/devel/llvm/SUB_DEPENDS b/devel/llvm/SUB_DEPENDS
index 62c0259..449a103 100755
--- a/devel/llvm/SUB_DEPENDS
+++ b/devel/llvm/SUB_DEPENDS
@@ -17,6 +17,14 @@ case "$THIS_SUB_DEPENDS" in
message "${MESSAGE_COLOR}Building clang enforced by
sub-dependency.$DEFAULT_COLOR"
LLVM_WITH_CLANG=y
;;
+ FLANG)
+ message "${MESSAGE_COLOR}Building flang enforced by
sub-dependency.$DEFAULT_COLOR"
+ LLVM_WITH_FLANG=y
+ ;;
+ LIBCLC)
+ message "${MESSAGE_COLOR}Building libclc enforced by
sub-dependency.$DEFAULT_COLOR"
+ LLVM_WITH_LIBCLC=y
+ ;;
LLD)
message "${MESSAGE_COLOR}Building lld enforced by
sub-dependency.$DEFAULT_COLOR"
LLVM_WITH_LLD=y
@@ -37,6 +45,10 @@ case "$THIS_SUB_DEPENDS" in
message "${MESSAGE_COLOR}RTTI support enforced by
sub-dependency.$DEFAULT_COLOR"
LLVM_WITH_RTTI=y
;;
+ SPIRV)
+ message "${MESSAGE_COLOR}SPIR-V support enforced by
sub-dependency.$DEFAULT_COLOR"
+ LLVM_WITH_SPIRV=y
+ ;;
*)
message "${PROBLEM_COLOR}bogus sub_depends: $SPELL
$THIS_SUB_DEPENDS${DEFAULT_COLOR}"
return 1


  • [[SM-Commit] ] GIT changes to master grimoire by Justin Boffemmyer (f98c6eba6ea0cad1514e0f45079dc43efa2ea382), Justin Boffemmyer, 01/15/2025

Archive powered by MHonArc 2.6.24.

Top of Page