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 # The Solaris Studio installation must contain at least these packages: 33 # developer/solarisstudio-124/backend 12.4-1.0.6.0 i-- 34 # developer/solarisstudio-124/c++ 12.4-1.0.10.0 i-- 35 # developer/solarisstudio-124/cc 12.4-1.0.4.0 i-- 36 # developer/solarisstudio-124/library/c++-libs 12.4-1.0.10.0 i-- 37 # developer/solarisstudio-124/library/math-libs 12.4-1.0.0.1 i-- 38 # developer/solarisstudio-124/library/studio-gccrt 12.4-1.0.0.1 i-- 39 # developer/solarisstudio-124/studio-common 12.4-1.0.0.1 i-- 40 # developer/solarisstudio-124/studio-ja 12.4-1.0.0.1 i-- 41 # developer/solarisstudio-124/studio-legal 12.4-1.0.0.1 i-- 42 # developer/solarisstudio-124/studio-zhCN 12.4-1.0.0.1 i-- 43 # In particular backend 12.4-1.0.6.0 contains a critical patch for the sparc 44 # version. 45 # 46 # erik.joelsson@oracle.com 47 48 USAGE="$0 <Solaris Studio installation> <Path to gnu make binary>" 49 50 if [ "$1" = "" ] || [ "$2" = "" ]; then 51 echo $USAGE 52 exit 1 53 fi 54 55 SOLARIS_STUDIO_VERSION=12u4 56 SOLARIS_VERSION=11u1 57 case `uname -p` in 58 i*) 59 ARCH=x86 60 ;; 61 sparc*) 62 ARCH=sparc 63 ;; 64 esac 65 66 SOLARIS_STUDIO_SRC=$1 67 GNU_MAKE=$2 68 69 SCRIPT_DIR="$(cd "$(dirname $0)" > /dev/null && pwd)" 70 BUILD_DIR="${SCRIPT_DIR}/../../build/devkit" 71 72 DEVKIT_NAME=SS${SOLARIS_STUDIO_VERSION}-Solaris${SOLARIS_VERSION} 73 DEVKIT_ROOT=${BUILD_DIR}/${DEVKIT_NAME} 74 BUNDLE_NAME=${DEVKIT_NAME}.tar.gz 75 BUNDLE=${BUILD_DIR}/${BUNDLE_NAME} 76 INSTALL_ROOT=${BUILD_DIR}/install-root-$SOLARIS_VERSION 77 INSTALL_ROOT_TOOLS=${BUILD_DIR}/install-root-tools-$SOLARIS_VERSION 78 SYSROOT=${DEVKIT_ROOT}/sysroot 79 SOLARIS_STUDIO_SUBDIR=SS${SOLARIS_STUDIO_VERSION} 80 SOLARIS_STUDIO_DIR=${DEVKIT_ROOT}/${SOLARIS_STUDIO_SUBDIR} 81 82 # Extract the publisher from the system 83 if [ -z "${PUBLISHER_URI}" ]; then 84 PUBLISHER_URI="$(pkg publisher solaris | grep URI | awk '{ print $3 }')" 85 fi 86 87 if [ ! -d $INSTALL_ROOT ]; then 88 echo "Creating $INSTALL_ROOT and installing packages" 89 pkg image-create $INSTALL_ROOT 90 pkg -R $INSTALL_ROOT set-publisher -P -g ${PUBLISHER_URI} solaris 91 pkg -R $INSTALL_ROOT install --accept $(cat solaris11.1-package-list.txt) 92 else 93 echo "Skipping installing packages" 94 fi 95 96 # Since we have implicitly been running 11.2 tools for a long time, we need 97 # to pick them for the tools dir in the devkit. Create a separate install-root 98 # for it. 99 if [ ! -d $INSTALL_ROOT_TOOLS ]; then 100 echo "Creating $INSTALL_ROOT_TOOLS and installing packages" 101 pkg image-create $INSTALL_ROOT_TOOLS 102 pkg -R $INSTALL_ROOT_TOOLS set-publisher -P -g ${PUBLISHER_URI} solaris 103 sudo pkg -R $INSTALL_ROOT_TOOLS install --accept \ 104 entire@0.5.11-0.175.2.5.0.5.0 \ 105 system/linker \ 106 developer/base-developer-utilities \ 107 developer/gnu-binutils 108 else 109 echo "Skipping installing tools packages" 110 fi 111 112 if [ ! -d $SYSROOT ]; then 113 echo "Copying from $INSTALL_ROOT to $SYSROOT" 114 mkdir -p $SYSROOT 115 cp -rH $INSTALL_ROOT/lib $SYSROOT/ 116 mkdir $SYSROOT/usr 117 cp -rH $INSTALL_ROOT/usr/lib $SYSROOT/usr/ 118 cp -rH $INSTALL_ROOT/usr/include $SYSROOT/usr/ 119 pkg -R $INSTALL_ROOT list > $SYSROOT/pkg-list.txt 120 else 121 echo "Skipping copying to $SYSROOT" 122 fi 123 124 if [ ! -d $DEVKIT_ROOT/tools ]; then 125 echo "Copying from $INSTALL_ROOT_TOOLS to $DEVKIT_ROOT/tools" 126 # Some of the tools in sysroot are needed in the OpenJDK build. We need 127 # to copy them into a tools dir, including their specific libraries. 128 mkdir -p $DEVKIT_ROOT/tools/usr/bin/sparcv9 $DEVKIT_ROOT/tools/lib/sparcv9 \ 129 $DEVKIT_ROOT/tools/usr/gnu/bin 130 cp $INSTALL_ROOT_TOOLS/usr/bin/{ar,nm,strip,ld,ldd} \ 131 $DEVKIT_ROOT/tools/usr/bin/ 132 cp $INSTALL_ROOT_TOOLS/usr/bin/sparcv9/{ar,nm,strip,ld,ldd} \ 133 $DEVKIT_ROOT/tools/usr/bin/sparcv9/ 134 cp $INSTALL_ROOT_TOOLS/usr/sbin/dtrace $DEVKIT_ROOT/tools/usr/bin/ 135 cp $INSTALL_ROOT_TOOLS/usr/sbin/sparcv9/dtrace $DEVKIT_ROOT/tools/usr/bin/sparcv9/ 136 cp -rH $INSTALL_ROOT_TOOLS/usr/gnu/bin/* $DEVKIT_ROOT/tools/usr/gnu/bin/ 137 cp $INSTALL_ROOT_TOOLS/lib/{libelf.so*,libld.so*,liblddbg.so*} \ 138 $DEVKIT_ROOT/tools/lib/ 139 cp $INSTALL_ROOT_TOOLS/lib/sparcv9/{libelf.so*,libld.so*,liblddbg.so*} \ 140 $DEVKIT_ROOT/tools/lib/sparcv9/ 141 for t in $(ls $DEVKIT_ROOT/tools/usr/gnu/bin); do 142 if [ -f $DEVKIT_ROOT/tools/usr/gnu/bin/$t ]; then 143 ln -s ../gnu/bin/$t $DEVKIT_ROOT/tools/usr/bin/g$t 144 fi 145 done 146 else 147 echo "Skipping copying to tools dir $DEVKIT_ROOT/tools" 148 fi 149 150 if [ ! -d $SOLARIS_STUDIO_DIR ]; then 151 echo "Copying Solaris Studio from $SOLARIS_STUDIO_SRC" 152 mkdir -p ${SOLARIS_STUDIO_DIR} 153 cp -rH $SOLARIS_STUDIO_SRC/. ${SOLARIS_STUDIO_DIR}/ 154 # Solaris Studio 12.4 requires /lib/libmmheap.so.1 to run, but this lib is not 155 # installed by default on all Solaris systems. Sneak it in from the sysroot to 156 # make it run OOTB on more systems. 157 cp $SYSROOT/lib/libmmheap.so.1 $SOLARIS_STUDIO_DIR/lib/compilers/sys/ 158 else 159 echo "Skipping copying of Solaris Studio" 160 fi 161 162 echo "Copying gnu make to $DEVKIT_ROOT/bin" 163 cp $GNU_MAKE $DEVKIT_ROOT/tools/usr/bin/ 164 if [ ! -e $DEVKIT_ROOT/tools/usr/bin/gmake ]; then 165 ln -s make $DEVKIT_ROOT/tools/usr/bin/gmake 166 fi 167 168 # Create the devkit.info file 169 echo Creating devkit.info 170 INFO_FILE=$DEVKIT_ROOT/devkit.info 171 rm -f $INFO_FILE 172 echo "# This file describes to configure how to interpret the contents of this devkit" >> $INFO_FILE 173 echo "DEVKIT_NAME=\"Solaris Studio $SOLARIS_STUDIO_VERSION - Solaris $SOLARIS_VERSION - $ARCH\"" >> $INFO_FILE 174 echo "DEVKIT_TOOLCHAIN_PATH=\"\$DEVKIT_ROOT/$SOLARIS_STUDIO_SUBDIR/bin:\$DEVKIT_ROOT/bin\"" >> $INFO_FILE 175 echo "DEVKIT_EXTRA_PATH=\"\$DEVKIT_ROOT/tools/usr/bin\"" >> $INFO_FILE 176 echo "DEVKIT_SYSROOT=\"\$DEVKIT_ROOT/sysroot\"" >> $INFO_FILE 177 178 if [ ! -e $BUNDLE ]; then 179 echo "Creating $BUNDLE from $DEVKIT_ROOT" 180 cd $DEVKIT_ROOT/.. 181 tar zcf $BUNDLE $DEVKIT_NAME 182 else 183 echo "Skipping creation of $BUNDLE" 184 fi