1 #!/bin/bash 2 # 3 # Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. 4 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 5 # 6 # This code is free software; you can redistribute it and/or modify it 7 # under the terms of the GNU General Public License version 2 only, as 8 # published by the Free Software Foundation. Oracle designates this 9 # particular file as subject to the "Classpath" exception as provided 10 # by Oracle in the LICENSE file that accompanied this code. 11 # 12 # This code is distributed in the hope that it will be useful, but WITHOUT 13 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 14 # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 15 # version 2 for more details (a copy is included in the LICENSE file that 16 # accompanied this code). 17 # 18 # You should have received a copy of the GNU General Public License version 19 # 2 along with this work; if not, write to the Free Software Foundation, 20 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 21 # 22 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 23 # or visit www.oracle.com if you need additional information or have any 24 # questions. 25 # 26 27 # This script creates a devkit for building OpenJDK on Solaris by copying 28 # part of a Solaris Studio installation and cretaing a sysroot by installing 29 # a limited set of system packages. It is assumed that a suitable pkg 30 # publisher is configured for the system where the script is executed. 31 # 32 # Note that you will need to be able to sudo to root to run the pkg install 33 # part of this script. It should not affect the running system, but only 34 # install in a separate temporary image. 35 # 36 # The Solaris Studio installation must contain at least these packages: 37 #developer/developerstudio-126/backend 12.6-1.0.0.1 38 #developer/developerstudio-126/c++ 12.6-1.0.2.0 39 #developer/developerstudio-126/cc 12.6-1.0.1.0 40 #developer/developerstudio-126/dbx 12.6-1.0.0.1 41 #developer/developerstudio-126/library/c++-libs 12.6-1.0.2.0 42 #developer/developerstudio-126/library/c-libs 12.6-1.0.0.1 43 #developer/developerstudio-126/library/f90-libs 12.6-1.0.0.1 44 #developer/developerstudio-126/library/math-libs 12.6-1.0.0.1 45 #developer/developerstudio-126/library/studio-gccrt 12.6-1.0.0.1 46 #developer/developerstudio-126/studio-common 12.6-1.0.0.1 47 #developer/developerstudio-126/studio-ja 12.6-1.0.0.1 48 #developer/developerstudio-126/studio-legal 12.6-1.0.0.1 49 #developer/developerstudio-126/studio-zhCN 12.6-1.0.0.1 50 # 51 # erik.joelsson@oracle.com 52 53 USAGE="$0 <Solaris Studio installation>" 54 55 if [ "$1" = "" ]; then 56 echo $USAGE 57 exit 1 58 fi 59 60 SOLARIS_STUDIO_VERSION=12u6 61 SOLARIS_VERSION=11u3 62 SOLARIS_ENTIRE_VERSION=0.5.11-0.175.3.20.0.6.0 63 case `uname -p` in 64 i*) 65 ARCH=x86 66 ;; 67 sparc*) 68 ARCH=sparc 69 ;; 70 esac 71 72 SOLARIS_STUDIO_SRC=$1 73 74 SCRIPT_DIR="$(cd "$(dirname $0)" > /dev/null && pwd)" 75 BUILD_DIR="${SCRIPT_DIR}/../../build/devkit" 76 77 DEVKIT_NAME=SS${SOLARIS_STUDIO_VERSION}-Solaris${SOLARIS_VERSION} 78 DEVKIT_ROOT=${BUILD_DIR}/${DEVKIT_NAME} 79 BUNDLE_NAME=${DEVKIT_NAME}.tar.gz 80 BUNDLE=${BUILD_DIR}/${BUNDLE_NAME} 81 INSTALL_ROOT=${BUILD_DIR}/install-root-$SOLARIS_VERSION 82 SYSROOT=${DEVKIT_ROOT}/sysroot 83 SOLARIS_STUDIO_SUBDIR=SS${SOLARIS_STUDIO_VERSION} 84 SOLARIS_STUDIO_DIR=${DEVKIT_ROOT}/${SOLARIS_STUDIO_SUBDIR} 85 86 # Extract the publisher from the system 87 if [ -z "${PUBLISHER_URI}" ]; then 88 PUBLISHER_URI="$(pkg publisher solaris | grep URI | awk '{ print $3 }')" 89 fi 90 91 if [ ! -d $INSTALL_ROOT ]; then 92 echo "Creating $INSTALL_ROOT and installing packages" 93 pkg image-create $INSTALL_ROOT 94 pkg -R $INSTALL_ROOT set-publisher -P -g ${PUBLISHER_URI} solaris 95 sudo pkg -R $INSTALL_ROOT install --accept entire@$SOLARIS_ENTIRE_VERSION \ 96 system/install developer/gnu-binutils system/library/mmheap system/picl \ 97 developer/assembler system/library/freetype-2 98 else 99 echo "Skipping installing packages" 100 fi 101 102 if [ ! -d $SYSROOT ]; then 103 echo "Copying from $INSTALL_ROOT to $SYSROOT" 104 mkdir -p $SYSROOT 105 cp -rH $INSTALL_ROOT/lib $SYSROOT/ 106 mkdir $SYSROOT/usr 107 cp -rH $INSTALL_ROOT/usr/lib $SYSROOT/usr/ 108 cp -rH $INSTALL_ROOT/usr/include $SYSROOT/usr/ 109 pkg -R $INSTALL_ROOT list > $SYSROOT/pkg-list.txt 110 else 111 echo "Skipping copying to $SYSROOT" 112 fi 113 114 if [ ! -d $DEVKIT_ROOT/tools ]; then 115 # Some of the tools in sysroot are needed in the OpenJDK build. We need 116 # to copy them into a tools dir, including their specific libraries. 117 mkdir -p $DEVKIT_ROOT/tools/usr/bin $DEVKIT_ROOT/tools/lib/sparcv9 \ 118 $DEVKIT_ROOT/tools/usr/gnu/bin $DEVKIT_ROOT/tools/usr/bin/sparcv9 119 cp $INSTALL_ROOT/usr/bin/{as,ar,nm,strip,ld,pigz,ldd} \ 120 $DEVKIT_ROOT/tools/usr/bin/ 121 cp $INSTALL_ROOT/usr/sbin/dtrace $DEVKIT_ROOT/tools/usr/bin/ 122 cp $INSTALL_ROOT/usr/sbin/sparcv9/dtrace $DEVKIT_ROOT/tools/usr/bin/sparcv9/ 123 cp -rH $INSTALL_ROOT/usr/gnu/bin/* $DEVKIT_ROOT/tools/usr/gnu/bin/ 124 cp $INSTALL_ROOT/lib/sparcv9/{libelf.so*,libld.so*,liblddbg.so*} $DEVKIT_ROOT/tools/lib/sparcv9/ 125 for t in $(ls $DEVKIT_ROOT/tools/usr/gnu/bin); do 126 if [ -f $DEVKIT_ROOT/tools/usr/gnu/bin/$t ]; then 127 ln -s ../gnu/bin/$t $DEVKIT_ROOT/tools/usr/bin/g$t 128 fi 129 done 130 else 131 echo "Skipping copying to tools dir $DEVKIT_ROOT/tools" 132 fi 133 134 if [ ! -d $SOLARIS_STUDIO_DIR ]; then 135 echo "Copying Solaris Studio from $SOLARIS_STUDIO_SRC" 136 mkdir -p ${SOLARIS_STUDIO_DIR} 137 cp -rH $SOLARIS_STUDIO_SRC/. ${SOLARIS_STUDIO_DIR}/ 138 # Solaris Studio 12.6 requires libmmheap.so.1 and libsunmath.so.1 to run, but 139 # these libs are not installed by default on all Solaris systems. 140 # Sneak them in from the sysroot to make it run OOTB on more systems. 141 cp $SYSROOT/lib/libsunmath.so.1 $SOLARIS_STUDIO_DIR/lib/compilers/sys/ 142 cp $SYSROOT/lib/sparcv9/libsunmath.so.1 $SOLARIS_STUDIO_DIR/lib/compilers/sys/sparcv9/ 143 cp $SYSROOT/lib/libmmheap.so.1 $SOLARIS_STUDIO_DIR/lib/compilers/sys/ 144 cp $SYSROOT/lib/sparcv9/libmmheap.so.1 $SOLARIS_STUDIO_DIR/lib/compilers/sys/sparcv9/ 145 else 146 echo "Skipping copying of Solaris Studio" 147 fi 148 149 # Create the devkit.info file 150 echo Creating devkit.info 151 INFO_FILE=$DEVKIT_ROOT/devkit.info 152 rm -f $INFO_FILE 153 echo "# This file describes to configure how to interpret the contents of this devkit" >> $INFO_FILE 154 echo "DEVKIT_NAME=\"Solaris Studio $SOLARIS_STUDIO_VERSION - Solaris $SOLARIS_VERSION - $ARCH\"" >> $INFO_FILE 155 echo "DEVKIT_TOOLCHAIN_PATH=\"\$DEVKIT_ROOT/$SOLARIS_STUDIO_SUBDIR/bin:\$DEVKIT_ROOT/bin\"" >> $INFO_FILE 156 echo "DEVKIT_EXTRA_PATH=\"\$DEVKIT_ROOT/tools/usr/bin\"" >> $INFO_FILE 157 echo "DEVKIT_SYSROOT=\"\$DEVKIT_ROOT/sysroot\"" >> $INFO_FILE 158 159 if [ ! -e $BUNDLE ]; then 160 GZIP=$(command -v pigz) 161 if [ -z "$GZIP" ]; then 162 GZIP="gzip" 163 fi 164 echo "Creating $BUNDLE from $DEVKIT_ROOT" 165 (cd $DEVKIT_ROOT && tar cf - . | $GZIP - > "$BUNDLE") 166 else 167 echo "Skipping creation of $BUNDLE" 168 fi