Skip to content

Commit

Permalink
Merge pull request #35 from mariux64/bootstrap-openjdk
Browse files Browse the repository at this point in the history
Bootstrap openjdk
  • Loading branch information
donald authored Nov 12, 2018
2 parents 553b0dd + d9c5ee4 commit 0c30453
Show file tree
Hide file tree
Showing 3 changed files with 413 additions and 0 deletions.
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

0 comments on commit 0c30453

Please sign in to comment.