1 #!/bin/ksh 2 # 3 # CDDL HEADER START 4 # 5 # The contents of this file are subject to the terms of the 6 # Common Development and Distribution License (the "License"). 7 # You may not use this file except in compliance with the License. 8 # 9 # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10 # or http://www.opensolaris.org/os/licensing. 11 # See the License for the specific language governing permissions 12 # and limitations under the License. 13 # 14 # When distributing Covered Code, include this CDDL HEADER in each 15 # file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16 # If applicable, add the following below this CDDL HEADER, with the 17 # fields enclosed by brackets "[]" replaced with your own identifying 18 # information: Portions Copyright [yyyy] [name of copyright owner] 19 # 20 # CDDL HEADER END 21 # 22 23 # 24 # Copyright 2009 Sun Microsystems, Inc. All rights reserved. 25 # Use is subject to license terms. 26 # 27 28 # 29 # This script can be used to build the ON component of the source product. 30 # It should _not_ be used by developers, since it does not work with 31 # workspaces, or do many of the features that 'nightly' uses to help you 32 # (like detection errors and warnings, and send mail on completion). 33 # 'nightly' (and other tools we use) lives in usr/src/tools. 34 # 35 # examine arguments. Source customers probably use no arguments, which just 36 # builds in usr/src from the current directory. They might want to use 37 # the -B flag, but the others are for use internally for testing the 38 # compressed cpio archives we deliver to the folks who build the source product. 39 # 40 41 # 42 # The CDPATH variable causes ksh's `cd' builtin to emit messages to stdout 43 # under certain circumstances, which can really screw things up; unset it. 44 # 45 unset CDPATH 46 47 USAGE='build_osnet [-B dir] [-E export_archive ] [-C crypt_archive ] 48 [ -H binary_archive ] [-D] [-P] 49 50 where: 51 -B dir - set build directory 52 -E export_archive - create build directory from export_archive 53 -C crypt_archive - extract crypt_archive on top of build area 54 -H binary_archive - extract binary_archive on top of build area 55 -D - do a DEBUG build 56 -P - do not copy packages to /pkgs 57 ' 58 59 BUILDAREA=`pwd` 60 EXPORT_CPIO= 61 CRYPT_CPIO= 62 BINARY_CPIO= 63 DEBUGFLAG="n" 64 PKGCPFLAG="y" 65 66 OPTIND=1 67 while getopts B:E:C:H:DP FLAG 68 do 69 case $FLAG in 70 B ) BUILDAREA="$OPTARG" 71 ;; 72 E ) EXPORT_CPIO="$OPTARG" 73 ;; 74 C ) CRYPT_CPIO="$OPTARG" 75 ;; 76 H ) BINARY_CPIO="$OPTARG" 77 ;; 78 D ) DEBUGFLAG="y" 79 ;; 80 P ) PKGCPFLAG="n" 81 ;; 82 \? ) echo "$USAGE" 83 exit 1 84 ;; 85 esac 86 done 87 88 89 # extract source 90 91 # verify you are root 92 /usr/bin/id | grep root >/dev/null 2>&1 93 if [ "$?" != "0" ]; then 94 echo \"$0\" must be run as root. 95 exit 1 96 fi 97 98 if [ ! -z "${EXPORT_CPIO}" -a ! -f "${EXPORT_CPIO}" ]; then 99 echo "${EXPORT_CPIO} does not exist - aborting." 100 exit 1 101 fi 102 103 if [ -z "${BUILDAREA}" ]; then 104 echo "BUILDAREA must be set - aborting." 105 exit 1 106 fi 107 108 if [ -z "${SPRO_ROOT}" ]; then 109 echo 110 echo "SPRO_ROOT is not set - defaulting to /opt/SUNWspro." 111 echo "If your compilers are located at a different location," 112 echo "you will need to set the SPRO_ROOT variable before" 113 echo "you execute this script." 114 echo 115 SPRO_ROOT=/opt/SUNWspro; export SPRO_ROOT 116 fi 117 118 if [ -z "${JAVA_ROOT}" ]; then 119 echo "JAVA_ROOT is not set - defaulting to /usr/java." 120 JAVA_ROOT=/usr/java; export JAVA_ROOT 121 fi 122 123 # in case you use dmake. Note that dmake on ON has only been 124 # tested in parallel make mode. 125 if [ -z "${DMAKE_MAX_JOBS}" ]; then 126 DMAKE_MAX_JOBS=4; 127 export DMAKE_MAX_JOBS 128 fi 129 DMAKE_MODE=parallel; export DMAKE_MODE 130 131 ################################################################ 132 # Uncomment the line below to change to a parallel make using 133 # dmake. Be sure to put a "#" in front of the other make line. 134 # dmake can help create builds much faster, though if 135 # you have problems you should go back to serial make. 136 ################################################################ 137 #MAKE=dmake; export MAKE 138 MAKE=/usr/ccs/bin/make; export MAKE 139 140 # 141 # force locale to C 142 LC_COLLATE=C; export LC_COLLATE 143 LC_CTYPE=C; export LC_CTYPE 144 LC_MESSAGES=C; export LC_MESSAGES 145 LC_MONETARY=C; export LC_MONETARY 146 LC_NUMERIC=C; export LC_NUMERIC 147 LC_TIME=C; export LC_TIME 148 149 # clear environment variables we know to be bad for the build 150 unset LD_OPTIONS LD_LIBRARY_PATH LD_AUDIT LD_BIND_NOW LD_BREADTH LD_CONFIG 151 unset LD_DEBUG LD_FLAGS LD_LIBRARY_PATH_64 LD_NOVERSION LD_ORIGIN 152 unset LD_LOADFLTR LD_NOAUXFLTR LD_NOCONFIG LD_NODIRCONFIG LD_NOOBJALTER 153 unset LD_PRELOAD LD_PROFILE 154 unset CONFIG 155 unset GROUP 156 unset OWNER 157 unset REMOTE 158 unset ENV 159 unset ARCH 160 unset CLASSPATH 161 162 # set magic variables 163 164 MACH=`uname -p`; export MACH 165 ROOT="${BUILDAREA}/proto/root_${MACH}"; export ROOT 166 SRC="${BUILDAREA}/usr/src"; export SRC 167 TOOLS_PROTO="${SRC}/tools/proto/root_${MACH}-nd"; export TOOLS_PROTO 168 PKGARCHIVE="${BUILDAREA}/packages/${MACH}"; export PKGARCHIVE 169 UT_NO_USAGE_TRACKING="1"; export UT_NO_USAGE_TRACKING 170 RPCGEN=/usr/bin/rpcgen; export RPCGEN 171 TMPDIR=/tmp; export TMPDIR 172 ONBLD_ROOT=/tmp/opt/onbld; export ONBLD_ROOT 173 STABS=${ONBLD_ROOT}/bin/sparc/stabs; export STABS 174 CTFSTABS=${ONBLD_ROOT}/bin/${MACH}/ctfstabs; export CTFSTABS 175 CTFCONVERT=${ONBLD_ROOT}/bin/${MACH}/ctfconvert; export CTFCONVERT 176 CTFCVTPTBL=${ONBLD_ROOT}/bin/ctfcvtptbl; export CTFCVTPTBL 177 CTFFINDMOD=${ONBLD_ROOT}/bin/ctffindmod; export CTFFINDMOD 178 CTFMERGE=${ONBLD_ROOT}/bin/${MACH}/ctfmerge; export CTFMERGE 179 ENVLDLIBS1= 180 ENVLDLIBS2= 181 ENVLDLIBS3= 182 ENVCPPFLAGS1= 183 ENVCPPFLAGS2= 184 ENVCPPFLAGS3= 185 ENVCPPFLAGS4= 186 export ENVLDLIBS3 ENVCPPFLAGS1 ENVCPPFLAGS2 ENVCPPFLAGS3 ENVCPPFLAGS4 187 unset RELEASE RELEASE_DATE 188 189 ENVLDLIBS1="-L$ROOT/lib -L$ROOT/usr/lib" 190 ENVCPPFLAGS1="-I$ROOT/usr/include" 191 192 export ENVLDLIBS1 ENVLDLIBS2 193 194 export INTERNAL_RELEASE_BUILD ; INTERNAL_RELEASE_BUILD= 195 export RELEASE_BUILD ; RELEASE_BUILD= 196 unset EXTRA_OPTIONS 197 unset EXTRA_CFLAGS 198 199 if [ "${DEBUGFLAG}" = "y" ]; then 200 unset RELEASE_BUILD 201 fi 202 203 unset CFLAGS LD_LIBRARY_PATH LD_OPTIONS 204 205 PATH="/opt/SUNWspro/bin:/usr/ccs/bin:/usr/bin:/usr/sbin" 206 export PATH 207 208 if [ -z "${ROOT}" ]; then 209 echo "ROOT must be set - aborting." 210 exit 1 211 fi 212 213 if [ -z "${PKGARCHIVE}" ]; then 214 echo "PKGARCHIVE must be set - aborting." 215 exit 1 216 fi 217 218 if [ -d "${BUILDAREA}" ]; then 219 if [ -z "${EXPORT_CPIO}" ]; then 220 # clobber doesn't work on the free source product, 221 # since it will destroy the preinstalled object modules 222 # so we just comment it out for now 223 echo "\n==== Not clobbering in ${BUILDAREA} ====\n" 224 #echo "\n==== Clobbering in ${BUILDAREA} ====\n" 225 #cd $SRC 226 #rm -f clobber.out 227 #/bin/time ${MAKE} -e clobber | tee -a clobber.out 228 #find . -name SCCS -prune -o \ 229 # \( -name '.make.*' -o -name 'lib*.a' -o -name 'lib*.so*' -o \ 230 # -name '*.o' \) \ 231 # -exec rm -f {} \; 232 233 else 234 echo "\n==== Removing ${BUILDAREA} ====\n" 235 sleep 15 236 rm -rf ${BUILDAREA} 237 fi 238 fi 239 240 if [ -d "${ROOT}" ]; then 241 echo "\n==== Removing ${ROOT} ====\n" 242 sleep 15 243 rm -rf ${ROOT} 244 fi 245 246 if [ -d "${PKGARCHIVE}" ]; then 247 echo "\n==== Removing ${PKGARCHIVE} ====\n" 248 sleep 15 249 rm -rf ${PKGARCHIVE} 250 fi 251 252 mkdir -p ${BUILDAREA} 253 254 cd ${BUILDAREA} 255 256 if [ ! -z "${EXPORT_CPIO}" ]; then 257 echo "\n==== Extracting export source ====\n" 258 zcat ${EXPORT_CPIO} | cpio -idmucB 259 fi 260 261 # hack 262 if [ -d usr/src/cmd/sendmail ]; then 263 VERSION="Source" 264 else 265 VERSION="MODIFIED_SOURCE_PRODUCT" 266 fi 267 268 if [ ! -z "${CRYPT_CPIO}" -a -f "${CRYPT_CPIO}" ]; then 269 echo "\n==== Extracting crypt source ====\n" 270 zcat ${CRYPT_CPIO} | cpio -idmucB 271 VERSION="Source:Crypt" 272 echo "\n==== Performing crypt build ====\n" 273 elif [ ! -z "${BINARY_CPIO}" -a -f "${BINARY_CPIO}" ]; then 274 echo "\n==== Extracting binary modules ====\n" 275 zcat ${BINARY_CPIO} | cpio -idmucB 276 VERSION="MODIFIED_SOURCE_PRODUCT" 277 echo "\n==== Performing hybrid build ====\n" 278 else 279 VERSION="Source:Export" 280 echo "\n==== Performing export build ====\n" 281 fi 282 export VERSION 283 284 echo "\n==== Disk space used (Source) ====\n" 285 286 cd ${BUILDAREA} 287 /usr/bin/du -s -k usr 288 289 mkdir -p ${ROOT} 290 mkdir -p ${PKGARCHIVE} 291 292 echo "\n==== Building osnet tools ====\n" 293 rm -rf /tmp/opt 294 cd $SRC/tools; 295 rm -f install.out 296 export BUILD_TOOLS=/tmp/opt 297 /bin/time env TOOLS_PROTO=/tmp ${MAKE} -e install | tee -a install.out 298 PATH="${ONBLD_ROOT}/bin:${ONBLD_ROOT}/bin/${MACH}:$PATH" 299 export PATH 300 301 echo "\n==== Build environment ====\n" 302 env 303 304 if [ "${DEBUGFLAG}" = "y" ]; then 305 echo "\n==== Building osnet (DEBUG) ====\n" 306 else 307 echo "\n==== Building osnet ====\n" 308 fi 309 310 cd $SRC 311 rm -f install.out 312 /bin/time ${MAKE} -e install | tee -a install.out 313 314 echo "\n==== Build errors ====\n" 315 316 egrep ":" install.out | \ 317 egrep -e "(${MAKE}:|[ ]error[: \n])" | \ 318 egrep -v warning 319 320 echo "\n==== Building osnet packages ====\n" 321 cd $SRC/pkg 322 rm -f install.out 323 /bin/time ${MAKE} -e install | tee -a install.out 324 325 echo "\n==== Package build errors ====\n" 326 327 egrep "${MAKE}|ERROR|WARNING" $SRC/pkg/install.out | \ 328 grep ':' | \ 329 grep -v PSTAMP 330 331 echo "\n==== Disk space used (Source/Build/Packages) ====\n" 332 333 cd ${BUILDAREA} 334 /usr/bin/du -s -k usr proto packages 335 336 # 337 # Copy packages into /pkgs location 338 # 339 if [ "${PKGCPFLAG}" = "y" ]; then 340 echo "\n==== Copying newly built packages into /pkgs ====\n" 341 mkdir -p /pkgs 342 cp -rf $PKGARCHIVE/* /pkgs 343 fi