summaryrefslogtreecommitdiffstats
path: root/source/d/gcc/create_gcj_jvm.sh
blob: d1011860fc378aeb13b1c32fe42db5eb8432fb7a (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# ---------------------------------------------------------------------------
# This script creates a directory structure below /usr/lib/jvm and populates
# it with symlinks to GCC binaries.
# This will work as a compatibility layer to emulate an Oracle JDK/JRE.
# This emulation is required in order to compile OpenJDK using GNU java.
#
# The same can automatically be achieved in Slackware's gcc packages if
# the 'configure' command is called with the following additional parameters:
#     --enable-java-home \
#     --with-java-home=/usr/lib$LIBDIRSUFFIX/jvm/jre \
#     --with-jvm-root-dir=/usr/lib$LIBDIRSUFFIX/jvm \
#     --with-jvm-jar-dir=/usr/lib$LIBDIRSUFFIX/jvm/jvm-exports \
#     --with-arch-directory=$LIB_ARCH \
#
# Author: Eric Hameleers <alien@slackware.com> December 2011
# ---------------------------------------------------------------------------

# Automatically determine the architecture we're building on:
if [ -z "$ARCH" ]; then
  case "$( uname -m )" in
    i?86) export ARCH=i486 ;;
    arm*) export ARCH=arm ;;
    # Unless $ARCH is already set, use uname -m for all other archs:
       *) export ARCH=$( uname -m ) ;;
  esac
fi

if [ "$ARCH" = "i486" ]; then
  SLKCFLAGS="-O2 -march=i486 -mtune=i686"
  LIBDIRSUFFIX=""
  LIB_ARCH=i386
elif [ "$ARCH" = "i686" ]; then
  SLKCFLAGS="-O2 -march=i686 -mtune=i686"
  LIBDIRSUFFIX=""
  LIB_ARCH=i386
elif [ "$ARCH" = "x86_64" ]; then
  SLKCFLAGS="-O2 -fPIC"
  LIBDIRSUFFIX="64"
  LIB_ARCH=amd64
else
  SLKCFLAGS="-O2"
  LIBDIRSUFFIX=""
  LIB_ARCH=$ARCH
fi

# Where does the OpenJDK SlackBuild expect the GNU java compatibility symlinks:
JVM=${1:-/usr/lib${LIBDIRSUFFIX}/jvm}
BINDIR=/usr/bin

# What version of GCC do we have installed:
GCJVER=$(gcj -dumpversion)

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

# Create a JDK compatible directory structure for GNU java:
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 /usr/lib/gcj-${GCJVER}-11/libjvm.so $JVM/jre/lib/${LIB_ARCH}/client/libjvm.so
ln -sf /usr/lib/gcj-${GCJVER}-11/libjvm.so $JVM/jre/lib/${LIB_ARCH}/server/libjvm.so
ln -sf /usr/lib/gcj-${GCJVER}-11/libjawt.so $JVM/jre/lib/${LIB_ARCH}/libjawt.so
ln -sf /usr/share/java/libgcj-${GCJVER}.jar $JVM/jre/lib/rt.jar
ln -sf /usr/share/java/libgcj-tools-${GCJVER}.jar $JVM/lib/tools.jar
ln -sf /usr/include/c++/${GCJVER}/gnu/java $JVM/include

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

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

EOT
chmod 755 /usr/bin/ecj