#! /bin/bash

PKG=julia
VERSION=1.0.0
BUILD=0

PREFIX=/pkg/$PKG-$VERSION-$BUILD
#PREFIX=/dev/shm/$PKG-$VERSION-$BUILD

set -xe
umask 022

BUILD_TMPDIR=/dev/shm/$PKG-$VERSION-$BUILD.build.tmp
test -d $BUILD_TMPDIR && rm -rf $BUILD_TMPDIR
mkdir -p $BUILD_TMPDIR/home
export TMPDIR=$BUILD_TMPDIR
export HOME=$BUILD_TMPDIR/home

exec </dev/null

mkdir -p $PREFIX
cat >$PREFIX/profile <<-EOF
	PATH=$PREFIX/bin:\$PATH
EOF
. $PREFIX/profile

export MAKEFLAGS="-j $(nproc)"

BUILDDIR=$PREFIX/build

mkdir -p $BUILDDIR
cd $BUILDDIR

test -e julia-${VERSION}-full.tar.gz || wget https://github.com/JuliaLang/julia/releases/download/v${VERSION}/julia-${VERSION}-full.tar.gz
test -d julia        || tar xvf julia-${VERSION}-full.tar.gz
cd julia


patch -p1 <<'EOF'
From 44d590277454035841803083f57af1b861192595 Mon Sep 17 00:00:00 2001
From: Donald Buczek <buczek@molgen.mpg.de>
Date: Fri, 30 Jun 2017 11:41:41 +0200
Subject: [PATCH 1/2] Allow OpenBLAS NUM_THREADS to be overwritten
When building OpenBLAS we have some default for its NUM_THREADS build
option. Allow this default to be overwritten by a new
OPENBLAS_NUM_THREADS make variable.
---
 deps/blas.mk | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/deps/blas.mk b/deps/blas.mk
index 55216c8..b9bf8ed 100644
--- a/deps/blas.mk
+++ b/deps/blas.mk
@@ -14,17 +14,18 @@ OPENBLAS_BUILD_OPTS += GEMM_MULTITHREADING_THRESHOLD=50
 ifneq ($(ARCH),x86_64)
 # Assume we can't address much memory to spawn many threads
 # It is also unlikely that 32-bit architectures have too many cores
-OPENBLAS_BUILD_OPTS += NUM_THREADS=8
+OPENBLAS_NUM_THREADS:=8
 else ifeq ($(OS),WINNT)
 # Windows seems unable to handle very many
-OPENBLAS_BUILD_OPTS += NUM_THREADS=16
+OPENBLAS_NUM_THREADS:=16
 else ifeq ($(OS),Darwin)
 # This should suffice for the largest macs
-OPENBLAS_BUILD_OPTS += NUM_THREADS=16
+OPENBLAS_NUM_THREADS:=16
 else
 # On linux, try to provision for the largest possible machine currently
-OPENBLAS_BUILD_OPTS += NUM_THREADS=16
+OPENBLAS_NUM_THREADS:=16
 endif
+OPENBLAS_BUILD_OPTS += NUM_THREADS=$(OPENBLAS_NUM_THREADS)
 else
 OPENBLAS_BUILD_OPTS += USE_THREAD=0
 endif
--
2.4.1
---

ist etwas runtergehackt
aber dadurch dass auf all unseren Servern mehr als 8 threads sind, sollte es
immer greifen
mit `OPENBLAS_NUM_THREADS=x julia` kann man es zur laufzeit erhoehen
diff --git a/base/sysimg.jl b/base/sysimg.jl
index dd605b0..ed3c7b2 100644
--- a/base/sysimg.jl
+++ b/base/sysimg.jl
@@ -459,7 +459,7 @@ function __init__()
     if !haskey(ENV, "OPENBLAS_NUM_THREADS") && !haskey(ENV, "OMP_NUM_THREADS")
         cpu_threads = Sys.CPU_THREADS::Int
         if cpu_threads > 8 # always at most 8
-            ENV["OPENBLAS_NUM_THREADS"] = "8"
+            ENV["OPENBLAS_NUM_THREADS"] = "1"
         elseif haskey(ENV, "JULIA_CPU_THREADS") # or exactly as specified
             ENV["OPENBLAS_NUM_THREADS"] = cpu_threads
         end # otherwise, trust that openblas will pick CPU_THREADS anyways, without any intervention
--
EOF


make -j $(nproc) prefix="${PREFIX}" MARCH=x86-64 OPENBLAS_NUM_THREADS=80
make install prefix=${PREFIX} MARCH=x86-64

cp -av ${BUILDDIR}/julia/usr/bin/julia-debug ${PREFIX}/bin/
cp -av ${BUILDDIR}/julia/usr/lib/libjulia-debug.so* ${PREFIX}/lib/
cp -av ${BUILDDIR}/julia/usr/lib/julia/sys-debug.so ${PREFIX}/lib/julia/

for i in `ls ${PREFIX}/bin`; do
	ln -sv ${PREFIX}/bin/$i{,-$VERSION}
done

exit