Skip to content

Bootstrap openjdk #35

Merged
merged 3 commits into from
Nov 12, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
149 changes: 149 additions & 0 deletions gcc-5.5.0-1.build.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,149 @@
#! /bin/bash

# COOKIE=$(mcookie); grep -v V_GREP_ME $0 > /dev/shm/runme-$COOKIE.sh ; sleep 1; exec bash /dev/shm/runme-$COOKIE.sh

PKG=gcc
VERSION=5.5.0
BUILD=1
# URL=http://ftp.gnu.org/gnu/gcc/gcc-${VERSION}/gcc-${VERSION}.tar.gz
URL=ftp://ftp.fu-berlin.de/unix/languages/gcc/releases/gcc-$VERSION/gcc-$VERSION.tar.xz
SRC=$( echo $URL | rev | cut -d/ -f1 | rev )

# gcc 3.4 didn't need this to build java (back in the good old days ...)
ECJ_URL=ftp://sourceware.org/pub/java/ecj-latest.jar
ECJ_JAR=$( echo $ECJ_URL | rev | cut -d/ -f1 | rev )

PREFIX=/pkg/$PKG-$VERSION-$BUILD
# PREFIX=/dev/shm/pkg/$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

PATH=/bin:/usr/bin:/usr/sbin:/usr/local/package/bin:/usr/local/bin

mkdir -p $PREFIX
cat >$PREFIX/profile <<-EOF
PATH=$PREFIX/bin:\$PATH
LD_LIBRARY_PATH=$PREFIX/lib64\${LD_LIBRARY_PATH:+:}\$LD_LIBRARY_PATH
export LD_LIBRARY_PATH
EOF
. $PREFIX/profile

BUILDDIR=$PREFIX/build

mkdir -p $BUILDDIR
cd $BUILDDIR

test -e $SRC || wget $URL
test -n 'XWIPE' && rm -rf ./gcc-$VERSION ./gcc-$VERSION-build
test -d gcc-$VERSION || tar xf $SRC

# Copy ecj.jar into the TLD of the source. Needed to build the java compiler.
test -e $ECJ_JAR || wget $ECJ_URL
test -e gcc-$VERSION/ecj.jar || cp $ECJ_JAR gcc-$VERSION/ecj.jar

mkdir -p gcc-$VERSION-build

cd gcc-$VERSION-build

../gcc-$VERSION/configure \
--prefix=$PREFIX \
--enable-shared \
--enable-bootstrap \
--enable-threads=posix \
--enable-checking=release \
--enable-clocale=gnu \
--enable-languages=c,c++,fortran,objc,obj-c++,go,java,lto \
--disable-multilib \
--enable-objc-gc \
--with-system-zlib \
--enable-libstdcxx-dual-abi \
--with-default-libstdcxx-abi=gcc4-compatible \
--enable-__cxa_atexit \
--enable-libssp \
--enable-lto \
--enable-java-awt=gtk \
--disable-gtktest \
--verbose

make -j $(nproc)
# make -k check 2>&1 | tee check.log
make install

cd $PREFIX
mkdir -vp lib64
ln -sv ${PREFIX}/bin/cpp lib64/
test -e bin/cc || ln -sv gcc bin/cc

install -v -dm755 lib64/bfd-plugins
ln -sfv ../../libexec/gcc/$(gcc -dumpmachine)/$VERSION/liblto_plugin.so lib64/bfd-plugins/

# and dump these ...
rm -v lib64/*-gdb.py

# ++++++++++++++++++ Prepare OpenJDK build ++++++++++++++++++

# create a JDK compatible directory structure below $PREFIX/lib/jvm (yes, 'lib')
# emulation is required in order to compile OpenJDK using GNU java
# Main author: Eric Hameleers <alien@slackware.com> December 2011

cd $PREFIX

JVM=$PREFIX/lib/jvm
BINDIR=$PREFIX/bin
LIB_ARCH=amd64 # not kidding, grep amd64 in openjdk-boot/jdk/make/jdk_generic_profile.sh ;)

GCJVER=$(gcj -dumpversion)
# next yields a '16'
GCJSOVER=$( readlink -f $(gcj -print-file-name=libgcj.so) | rev | cut -d. -f3 | rev )

# remove the old set of symlinks if they should exist:
rm -fr $JVM

mkdir -p $JVM
mkdir -p $JVM/bin
mkdir -p $JVM/jre/bin
mkdir -p $JVM/jre/lib/${LIB_ARCH}/client
mkdir -p $JVM/jre/lib/${LIB_ARCH}/server
mkdir -p $JVM/lib

ln -sf $BINDIR/gjar $JVM/bin/jar
ln -sf $BINDIR/grmic $JVM/bin/rmic
ln -sf $BINDIR/gjavah $JVM/bin/javah
ln -sf $BINDIR/jcf-dump $JVM/bin/javap
ln -sf $BINDIR/gappletviewer $JVM/bin/appletviewer
ln -sf $BINDIR/grmiregistry $JVM/bin/rmiregistry
ln -sf $BINDIR/grmiregistry $JVM/jre/bin/rmiregistry
ln -sf $BINDIR/gkeytool $JVM/bin/keytool
ln -sf $BINDIR/gkeytool $JVM/jre/bin/keytool
ln -sf $BINDIR/gij $JVM/bin/java
ln -sf $BINDIR/ecj $JVM/bin/javac
ln -sf $BINDIR/gnative2ascii $JVM/bin/native2ascii
ln -sf $PREFIX/lib/gcj-${GCJVER}-$GCJSOVER/libjvm.so $JVM/jre/lib/${LIB_ARCH}/client/libjvm.so
ln -sf $PREFIX/lib/gcj-${GCJVER}-$GCJSOVER/libjvm.so $JVM/jre/lib/${LIB_ARCH}/server/libjvm.so
ln -sf $PREFIX/lib/gcj-${GCJVER}-$GCJSOVER/libjawt.so $JVM/jre/lib/${LIB_ARCH}/libjawt.so
ln -sf $PREFIX/share/java/libgcj-${GCJVER}.jar $JVM/jre/lib/rt.jar
ln -sf $PREFIX/share/java/libgcj-tools-${GCJVER}.jar $JVM/lib/tools.jar
ln -sf $PREFIX/include/c++/${GCJVER}/gnu/java $JVM/include

# Add a Eclipse Java Compiler wrapper which is required
# for bootstrapping OpenJDK using GNU java:
cat <<EOT > $PREFIX/bin/ecj
#!/bin/sh

CLASSPATH=$PREFIX/share/java/ecj.jar\${CLASSPATH:+:}\$CLASSPATH \
java org.eclipse.jdt.internal.compiler.batch.Main "\$@"

EOT
chmod 755 $PREFIX/bin/ecj

# exit 1 # inhibit 'closing'
exit
132 changes: 132 additions & 0 deletions openjdk-7u181-0.build.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,132 @@
#! /bin/bash

# COOKIE=$(mcookie); grep -v V_GREP_ME $0 > /dev/shm/runme-$COOKIE.sh ; sleep 1; exec bash /dev/shm/runme-$COOKIE.sh

set -xe
umask 022

PKG=openjdk
VERSION=7u181
BUILD=0
PREFIX=/pkg/$PKG-$VERSION-$BUILD
# PREFIX=/dev/shm/pkg/$PKG-$VERSION-$BUILD

ICEDTEA=icedtea-2.6.14
ICEDTEA_VER=$(echo $ICEDTEA | cut -f2 -d-)

GCJ=/pkg/gcc-5.5.0-1

# the build has its own opinion of parallel builds, high counts seem to be instable:
PARALLELJOBS=${PARALLELJOBS:-4}

SOURCES=(http://icedtea.classpath.org/download/source/icedtea-$ICEDTEA_VER.tar.xz \
http://icedtea.classpath.org/download/drops/icedtea7/$ICEDTEA_VER/openjdk.tar.bz2 \
http://icedtea.classpath.org/download/drops/icedtea7/$ICEDTEA_VER/corba.tar.bz2 \
http://icedtea.classpath.org/download/drops/icedtea7/$ICEDTEA_VER/jaxp.tar.bz2 \
http://icedtea.classpath.org/download/drops/icedtea7/$ICEDTEA_VER/jaxws.tar.bz2 \
http://icedtea.classpath.org/download/drops/icedtea7/$ICEDTEA_VER/jdk.tar.bz2 \
http://icedtea.classpath.org/download/drops/icedtea7/$ICEDTEA_VER/langtools.tar.bz2 \
http://icedtea.classpath.org/download/drops/icedtea7/$ICEDTEA_VER/hotspot.tar.bz2)

MD5SUMS=(ec7bf064e33e35dd3845d044e175a698 \
307abf13b695c61a8b16d9fa384277db \
96b72013cce3000cb46808aa9f9bce40 \
d3c9cf8e51c043bdb0db360ffaf34d8c \
f087bbcaffbb65906514448dc49f173e \
6580efb17017a4a9402a4a5043374bd7 \
1518c296a6125af5119aa5442d88bebf \
b190d917e60aeba3d9b7d1c61660ea68)

COUNT_1=$(( ${#SOURCES[@]} - 1 ))

function fetch_preprocess() {
local url=$1
local md5=$2
local opt_unpack=$3
local tar=$(echo $url | rev | cut -f1 -d/ | rev)
local dir=$(echo $tar | rev | cut -f3- -d. | rev)

(
cd $BUILDDIR
echo "$md5 $tar" > $tar.md5
test -e $tar || wget $url
md5sum -c $tar.md5
test -n 'XWIPE' && rm -rf ./$dir
if test -n "$opt_unpack"; then
test -d $dir || tar xf $tar
fi
)
}

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

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

source $PREFIX/profile

BOOT_JAVA=$GCJ/lib/jvm
source $GCJ/profile

BUILDDIR=$PREFIX/build
mkdir -p $BUILDDIR
cd $BUILDDIR

fetch_preprocess ${SOURCES[0]} ${MD5SUMS[0]} 'yes'
for X in $(seq 1 $COUNT_1); do
fetch_preprocess ${SOURCES[$X]} ${MD5SUMS[$X]}
done

# recent cacerts taken from CentOS package, so Red Hat is at least of some use ...
(
CACERTS_URL=http://mirror.centos.org/centos/6/os/x86_64/Packages
RPM=ca-certificates-2018.2.22-65.1.el6.noarch.rpm
mkdir -p $BUILDDIR/tmp-certificates
cd $BUILDDIR/tmp-certificates
test -e $RPM || wget $CACERTS_URL/$RPM
test -d ./etc || rpm2cpio $RPM | cpio -imVd
cp etc/pki/java/cacerts $BUILDDIR
)

mkdir -p icedtea-build
cd icedtea-build

JAVA_HOME=${BOOT_JAVA} PATH=${BOOT_JAVA}/bin:$PATH \
../$ICEDTEA/configure \
--with-jdk-home=${BOOT_JAVA} \
--without-rhino \
--disable-system-kerberos \
--disable-system-pcsc \
--disable-system-sctp \
--with-cacerts-file="$BUILDDIR/cacerts" \
--with-openjdk-src-zip="$BUILDDIR/openjdk.tar.bz2" \
--with-corba-src-zip="$BUILDDIR/corba.tar.bz2" \
--with-jaxp-src-zip="$BUILDDIR/jaxp.tar.bz2" \
--with-jaxws-src-zip="$BUILDDIR/jaxws.tar.bz2" \
--with-jdk-src-zip="$BUILDDIR/jdk.tar.bz2" \
--with-langtools-src-zip="$BUILDDIR/langtools.tar.bz2" \
--with-hotspot-src-zip="$BUILDDIR/hotspot.tar.bz2" \
--disable-docs \
--with-parallel-jobs=$PARALLELJOBS \
--disable-downloading

# ALT_UNIXCOMMAND_PATH is needed, otherwise make fails due to 'missing' /bin/touch & /bin/cpio
# ... make/common/shared/Defs-linux.gmk
# UNIXCOMMAND_PATH: path to where the most common Unix commands are.
# NOTE: Must end with / so that it could be empty, allowing PATH usage.
#
# From time to time the build fails (1 outof 5), if so, start over.
ALT_UNIXCOMMAND_PATH=/usr/bin/ JAVA_HOME=${BOOT_JAVA} PATH=${BOOT_JAVA}/bin:$PATH LOG=trace \
make

# install
cp -a $BUILDDIR/icedtea-build/openjdk.build/j2sdk-image/* $PREFIX

# exit 1 # inhibit closing
exit
Loading