Skip to content

Commit

Permalink
Rebasing to the new arch julia. (#76)
Browse files Browse the repository at this point in the history
* Rebasing to the new arch julia.

* adding missing  deps

---------

Co-authored-by: Laio Oriel Seman <[email protected]>
Co-authored-by: ptr1337 <[email protected]>
  • Loading branch information
3 people committed Jan 2, 2024
1 parent 26c8091 commit 28864c1
Show file tree
Hide file tree
Showing 8 changed files with 439 additions and 136 deletions.
50 changes: 50 additions & 0 deletions julia/.SRCINFO
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
pkgbase = julia
pkgdesc = High-level, high-performance, dynamic programming language
pkgver = 1.10.0
pkgrel = 2
epoch = 2
url = https://julialang.org/
arch = x86_64
license = MIT
makedepends = cmake
makedepends = gcc-fortran
makedepends = libwhich
makedepends = llvm-julia
makedepends = patchelf
makedepends = python
depends = blas64-openblas
depends = fftw
depends = libblastrampoline
depends = libgit2
depends = libunwind
depends = libutf8proc
depends = lld
depends = llvm-julia-libs
depends = mbedtls2
depends = openlibm
depends = p7zip
depends = pcre2
depends = suitesparse
optdepends = gnuplot: If using the Gaston Package from julia
backup = etc/julia/startup.jl
source = https://github.com/JuliaLang/julia/releases/download/v1.10.0/julia-1.10.0-full.tar.gz
source = https://github.com/JuliaLang/julia/releases/download/v1.10.0/julia-1.10.0-full.tar.gz.asc
source = c12e8515.patch
source = julia-libgit2-1.7.patch::https://github.com/JuliaLang/julia/commit/2c4c068e.patch
source = julia-libunwind-1.6.patch
source = julia-libcholmod-cuda.patch
source = julia-suitesparse-7.patch
source = julia-hardcoded-libs.patch
source = git+https://github.com/JuliaLang/Microbenchmarks.git
validpgpkeys = 3673DF529D9049477F76B37566E3C7DC03D6E495
sha256sums = a5f8c0ce08cf132bdd919ca0b5b3b2b66c89e0e5f7e7fb2a81ffa7f225e3db4c
sha256sums = SKIP
sha256sums = 2cc294b63e601d50341979fb936826bdba59de2165a5929eae927e152652f367
sha256sums = b533dd999f019258cbcae1563f18715f41e42e0786b681150cb2c28f8a0da963
sha256sums = 3c0c03eabb668e3242fcd3058c1011dfbb579cc1c5adc3ae1016531e711cc64e
sha256sums = f69afd7db3fabe4b747afa2404e1202c1dcfe0f8c5fe5238e424eea737fa2a23
sha256sums = 0fd1a0c1fcbe7f583139ed3a4a87f77963f06876d69058fa3ffbedfaec609ee7
sha256sums = 02f0ae518dfd50c2b3abf95fa760de85298baf79d80c2f6f48ac182e58a736d7
sha256sums = SKIP

pkgname = julia
276 changes: 147 additions & 129 deletions julia/PKGBUILD
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
# Original Julia PKGBUILD
# Maintainer: Antonio Rojas <[email protected]>
# Contributor: Alexander F. Rødseth <[email protected]>
# Contributor: Eli Schwartz <[email protected]>
Expand All @@ -13,48 +12,93 @@

pkgname=julia
pkgver=1.10.0
pkgrel=1
pkgdesc="Julia with Profile-Guided Optimization (PGO)"
arch=('x86_64')
url="https://github.com/JuliaLang/julia"
license=('MIT') # Update if different
pkgrel=2
arch=(x86_64)
pkgdesc='High-level, high-performance, dynamic programming language'
url='https://julialang.org/'
license=(MIT)
depends=(blas64-openblas
fftw
libblastrampoline
libgit2
libunwind
libutf8proc
lld
llvm-julia-libs
mbedtls2
mbedtls
openlibm
p7zip
pcre2
suitesparse)
makedepends=(cmake
gcc-fortran
libwhich
llvm-julia
patchelf
python)
source=(https://github.com/JuliaLang/julia/releases/download/v${pkgver}/julia-${pkgver}-full.tar.gz
julia-hardcoded-libs.patch
julia-suitesparse-7.patch)
python
clang
llvm)
optdepends=('gnuplot: If using the Gaston Package from julia')
source=(https://github.com/JuliaLang/julia/releases/download/v$pkgver/$pkgname-$pkgver-full.tar.gz{,.asc}
c12e8515.patch
julia-libgit2-1.7.patch::https://github.com/JuliaLang/julia/commit/2c4c068e.patch
julia-libunwind-1.6.patch
julia-libcholmod-cuda.patch
julia-suitesparse-7.patch
julia-hardcoded-libs.patch
git+https://github.com/JuliaLang/Microbenchmarks.git)
backup=(etc/julia/startup.jl)
sha256sums=('a5f8c0ce08cf132bdd919ca0b5b3b2b66c89e0e5f7e7fb2a81ffa7f225e3db4c'
'SKIP'
'2cc294b63e601d50341979fb936826bdba59de2165a5929eae927e152652f367'
'b533dd999f019258cbcae1563f18715f41e42e0786b681150cb2c28f8a0da963'
'3c0c03eabb668e3242fcd3058c1011dfbb579cc1c5adc3ae1016531e711cc64e'
'f69afd7db3fabe4b747afa2404e1202c1dcfe0f8c5fe5238e424eea737fa2a23'
'0fd1a0c1fcbe7f583139ed3a4a87f77963f06876d69058fa3ffbedfaec609ee7'
'02f0ae518dfd50c2b3abf95fa760de85298baf79d80c2f6f48ac182e58a736d7'
'SKIP')
validpgpkeys=('3673DF529D9049477F76B37566E3C7DC03D6E495') # Julia (Binary signing key) <[email protected]>
sha256sums=('SKIP'
'2c61b21c347900b52b26555a0c35d5c88fd23e55efc809a58aa6bc66da1fc506'
'90e7f90053486bba26348cbc4f725958159ca5b6b1805124ccf050203dc2f468')

prepare() {
cd $pkgname-$pkgver

# libunwind 1.6 compatibility
patch -p1 -i ../julia-libunwind-1.6.patch
# Ignore harmless test failure, needs investigation
sed -e '/int.jl/d' -i test/cmdlineargs.jl
# Revert test that depends on patched gmp
patch -Rp1 -i ../c12e8515.patch
# Harmless test failure, needs investigation
sed -e '/int.jl/d' -i test/cmdlineargs.jl
# libgit2 1.7 compatibility
patch -p1 -i ../julia-libgit2-1.7.patch
# Don't use libcholmod-cuda
patch -p1 -i ../julia-libcholmod-cuda.patch
# Don't hardcode library names
patch -p1 -i ../julia-hardcoded-libs.patch
# Fix warnings with suitesparse 7
cd stdlib/srccache
_SAsha=279b363ca8d3129d4742903d37c8b11545fa08a2
tar -xzf SparseArrays-$_SAsha.tar.gz
patch -d JuliaSparse-SparseArrays.jl-${_SAsha:0:7} -p1 < "$srcdir"/julia-suitesparse-7.patch
rm SparseArrays-$_SAsha.tar.gz
tar -czf SparseArrays-$_SAsha.tar.gz JuliaSparse-SparseArrays.jl-${_SAsha:0:7}
md5sum SparseArrays-$_SAsha.tar.gz | cut -d ' ' -f 1 > ../../deps/checksums/SparseArrays-$_SAsha.tar.gz/md5
sha512sum SparseArrays-$_SAsha.tar.gz | cut -d ' ' -f 1 > ../../deps/checksums/SparseArrays-$_SAsha.tar.gz/sha512

mkdir -p ${srcdir}/${pkgname}-${pkgver}/pgo-lto
}

_make() {
local make_options=(
prefix=/usr
bindir=/usr/bin
sysconfdir=/etc
libexecdir=/usr/lib
#USE_BINARYBUILDER=0
USE_BINARYBUILDER=0
USE_SYSTEM_CSL=1
#USE_SYSTEM_LLVM=1
#USE_SYSTEM_LLD=1
USE_SYSTEM_LLVM=1
USE_SYSTEM_LLD=1
USE_SYSTEM_LIBUNWIND=1
USE_SYSTEM_PCRE=1
USE_SYSTEM_BLAS=1
Expand Down Expand Up @@ -83,129 +127,103 @@ _make() {
MARCH=x86-64
VERBOSE=1
JLDFLAGS="$LDFLAGS"
#LLVM_CONFIG=llvm-config-15
LLVM_CONFIG=/usr/lib/llvm-julia/bin/llvm-config
)

make "${make_options[@]}" "$@"
}

prepare() {

# create a var to the current dir
CURRENT_DIR=$(pwd)
cd $pkgname-$pkgver
# Don't hardcode library names
patch -p1 -i ../julia-hardcoded-libs.patch

# go back to the current dir
cd $CURRENT_DIR
mkdir -p ${srcdir}/${pkgname}-${pkgver}/pgo-lto
#cp ../pgoing.jl ${srcdir}/${pkgname}-${pkgver}/pgo-lto
LD_LIBRARY_PATH="/usr/lib/mbedtls2" make "${make_options[@]}" "$@"
}


build() {
cd "${srcdir}/${pkgname}-${pkgver}"
sed -i '/\$(eval \$(call symlink_system_library,LIBSUITESPARSE,libcholmod_cuda))/d' base/Makefile
sed -i '/\$(eval \$(call symlink_system_library,LIBSUITESPARSE,libspqr_cuda))/d' base/Makefile

# Perform the build steps
cd pgo-lto

export PROFILE_FILE=$(pwd)/profile.profraw
export COUNTERS_PER_SITE=6
export PROFILE_DIR=${PWD}/profiles
mkdir -p $PROFILE_DIR

cd ..
export STAGE0=${srcdir}/${pkgname}-${pkgver}/pgo-lto/stage0.build
export STAGE1=${srcdir}/${pkgname}-${pkgver}/pgo-lto/stage1.build
export STAGE2=${srcdir}/${pkgname}-${pkgver}/pgo-lto/stage2.build
mkdir -p $STAGE0
mkdir -p $STAGE1
mkdir -p $STAGE2

export STAGE0_TOOLS=${STAGE0}/usr/tools
export LLVM_CXXFILT=${STAGE0_TOOLS}/llvm-cxxfilt
export LLVM_PROFDATA=${STAGE0_TOOLS}/llvm-profdata
export LLVM_OBJCOPY=${STAGE0_TOOLS}/llvm-objcopy

make O=pgo-lto/stage0.build configure
export USE_BINARYBUILDER_LLVM=1
make -C ${STAGE0}/deps install-clang install-llvm install-lld install-llvm-tools
find -name 'libclang_rt.profile-*.a' -exec $LLVM_OBJCOPY --rename-section .ctors=.init_array --rename-section .dtors=.fini_array {} \;

export CC=${STAGE0_TOOLS}/clang
export CXX=${STAGE0_TOOLS}/clang++
export LD=${STAGE0_TOOLS}/ld.lld
export AR=${STAGE0_TOOLS}/llvm-ar
export RANLIB=${STAGE0_TOOLS}/llvm-ranlib

export USE_BINARYBUILDER_LLVM=0
export PATH=${STAGE0_TOOLS}:$PATH
_make O=pgo-lto/stage1.build configure
_make O=pgo-lto/stage2.build configure

cd pgo-lto

# Set PGO flags
export PGO_CFLAGS="-fprofile-generate=${PROFILE_DIR} -Xclang -mllvm -Xclang -vp-counters-per-site=${COUNTERS_PER_SITE}"
export PGO_CXXFLAGS="-fprofile-generate=${PROFILE_DIR} -Xclang -mllvm -Xclang -vp-counters-per-site=${COUNTERS_PER_SITE}"
export PGO_LDFLAGS="-fuse-ld=${LD} -flto=thin -fprofile-generate=${PROFILE_DIR}"

# backup original flags
export CFLAGS_ORIG=$CFLAGS
export CXXFLAGS_ORIG=$CXXFLAGS
export LDFLAGS_ORIG=$LDFLAGS

# Append PGO flags
export CFLAGS="${CFLAGS} ${PGO_CFLAGS}"
export CXXFLAGS="${CXXFLAGS} ${PGO_CXXFLAGS}"
export LDFLAGS="${LDFLAGS} ${PGO_LDFLAGS}"

_make -C $STAGE1

# Clean profile dir
rm -rf $PROFILE_DIR
mkdir -p $PROFILE_DIR

# Run stage 1 profiling
git clone https://github.com/JuliaLang/Microbenchmarks.git
cd Microbenchmarks
../stage1.build/julia perf.jl
cd ..

# create PROFAW_FILES_LIST
$LLVM_PROFDATA merge -output=${PROFILE_FILE} ${PROFILE_DIR}/*.profraw

# Build stage 2
export PGO_CFLAGS="-fprofile-use=${PROFILE_FILE}"
export PGO_CXXFLAGS="-fprofile-use=${PROFILE_FILE}"
export PGO_LDFLAGS="-fuse-ld=${LD} -flto=thin -fprofile-use=${PROFILE_FILE} -Wl,--icf=safe"

export CFLAGS="${CFLAGS_ORIG} ${PGO_CFLAGS}"
export CXXFLAGS="${CXXFLAGS_ORIG} ${PGO_CXXFLAGS}"
export LDFLAGS="${LDFLAGS_ORIG} ${PGO_LDFLAGS}"
export PROFILE_FILE=$(pwd)/profile.profraw
export ROOT_DIR=$(pwd)
cd $pkgname-$pkgver
export JULIA_BUILD_DIR=$(pwd)

export STAGE1=${srcdir}/${pkgname}-${pkgver}/pgo-lto/stage1.build
export STAGE2=${srcdir}/${pkgname}-${pkgver}/pgo-lto/stage2.build
export CC=clang
export CXX=clang++

rm -rf $STAGE1
rm -rf $STAGE2
mkdir -p $STAGE1
mkdir -p $STAGE2

# Set PGO flags
export COUNTERS_PER_SITE=6
export PROFILE_DIR=${PWD}/profiles
rm -rf $PROFILE_DIR
mkdir -p $PROFILE_DIR

export USE_BINARYBUILDER_LLVM=0
_make -C $STAGE2
export PGO_CFLAGS=" -fprofile-generate=${PROFILE_DIR} -mllvm -vp-counters-per-site=${COUNTERS_PER_SITE}"
export PGO_CXXFLAGS=" -fprofile-generate=${PROFILE_DIR} -mllvm -vp-counters-per-site=${COUNTERS_PER_SITE}"

# backup original flags
export CFLAGS_ORIG=$CFLAGS
export CXXFLAGS_ORIG=$CXXFLAGS

# Append PGO flags
export CFLAGS="${CFLAGS} ${PGO_CFLAGS}"
export CXXFLAGS="${CXXFLAGS} ${PGO_CXXFLAGS}"

_make O=$STAGE1 configure
_make -C $STAGE1

# Clean profile dir
rm -rf $PROFILE_DIR
mkdir -p $PROFILE_DIR

cd $ROOT_DIR/Microbenchmarks
LLVM_PROFILE_FILE=${PROFILE_DIR}/_%m_%p.profraw $STAGE1/julia perf.jl
LLVM_PROFILE_FILE=${PROFILE_DIR}/_%m_%p.profraw $STAGE1/julia perf.jl
LLVM_PROFILE_FILE=${PROFILE_DIR}/_%m_%p.profraw $STAGE1/julia perf.jl
cd ..

# Build stage 2
export PGO_CFLAGS="-fprofile-use=${PROFILE_FILE}"
export PGO_CXXFLAGS="-fprofile-use=${PROFILE_FILE}"

llvm-profdata merge -output=${PROFILE_FILE} ${PROFILE_DIR}/*.profraw

export CFLAGS="${CFLAGS_ORIG} ${PGO_CFLAGS}"
export CXXFLAGS="${CXXFLAGS_ORIG} ${PGO_CXXFLAGS}"

cd $JULIA_BUILD_DIR
_make O=$STAGE2 configure
_make -C $STAGE2
}

check() {
export STAGE2_DONE=${srcdir}/${pkgname}-${pkgver}/pgo-lto/stage2.build
cd $STAGE2_DONE/test
ln -s /etc/ssl/cert.pem ../usr/share/julia

$STAGE2_DONE/julia --check-bounds=yes --startup-file=no ./runtests.jl \
--skip Downloads \
--skip Sockets \
--skip nghttp2_jll \
--skip GMP_jll \
--skip LibCURL \
--skip LibSSH2_jll \
--skip MbedTLS_jll \
--skip MPFR_jll \
--skip OpenBLAS_jll \
--skip SuiteSparse_jll \
--skip PCRE2_jll \
--skip LibGit2_jll \
--skip Zlib_jll
find ../stdlib \( -name \*.cov -o -name \*.mem \) -delete
rm -fr ../stdlib/Artifacts/test/artifacts
}

package() {

cd $pkgname-$pkgver/pgo-lto/stage2.build
export STAGE2_DONE=${srcdir}/${pkgname}-${pkgver}/pgo-lto/stage2.build
cd $STAGE2_DONE
_make DESTDIR="$pkgdir" install
echo $PWD
cd $pkgdir
echo $PWD
patch -p1 -i ../../julia-suitesparse-7.patch
ln -sf /etc/ssl/cert.pem "$pkgdir"/usr/share/julia # Needed by some packages

rm "$pkgdir"/usr/lib/julia/libccalltest.so.debug # Remove debug testing library
}
ln -sf /etc/ssl/cert.pem "$STAGE2_DONE"/usr/share/julia # Needed by some packages

# vim:set ts=2 sw=2 et:
sha256sums=('SKIP'
'79a7a73cf9fe304e7ae2d21b961ab3bc5dfeb39a9cb79bef6c3447108ffb2949'
'90e7f90053486bba26348cbc4f725958159ca5b6b1805124ccf050203dc2f468')
rm -f "$STAGE2_DONE"/usr/lib/julia/libccalltest.so.debug # Remove debug testing library
install -Dm644 ${srcdir}/${pkgname}-${pkgver}/LICENSE.md -t "$STAGE2_DONE"/usr/share/licenses/$pkgname
}
16 changes: 16 additions & 0 deletions julia/c12e8515.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
diff --git a/test/gmp.jl b/test/gmp.jl
index 8f6be13c38054..6efc349ca2ba1 100644
--- a/test/gmp.jl
+++ b/test/gmp.jl
@@ -11,6 +11,11 @@ ee = typemax(Int64)
@test BigInt <: Signed
@test big(1) isa Signed

+ if sizeof(Culong) >= 8
+ @test_throws OutOfMemoryError big(96608869069402268615522366320733234710)^16374500563449903721
+ @test_throws OutOfMemoryError 555555555555555555555555555555555555555555555555555^55555555555555555
+ end
+
let x = big(1)
@test signed(x) === x
@test convert(Signed, x) === x
Loading

0 comments on commit 28864c1

Please sign in to comment.