1 #!/bin/sh
   2 
   3 #
   4 # Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
   5 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   6 #
   7 # This code is free software; you can redistribute it and/or modify it
   8 # under the terms of the GNU General Public License version 2 only, as
   9 # published by the Free Software Foundation.  Oracle designates this
  10 # particular file as subject to the "Classpath" exception as provided
  11 # by Oracle in the LICENSE file that accompanied this code.
  12 #
  13 # This code is distributed in the hope that it will be useful, but WITHOUT
  14 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  15 # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  16 # version 2 for more details (a copy is included in the LICENSE file that
  17 # accompanied this code).
  18 #
  19 # You should have received a copy of the GNU General Public License version
  20 # 2 along with this work; if not, write to the Free Software Foundation,
  21 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  22 #
  23 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  24 # or visit www.oracle.com if you need additional information or have any
  25 # questions.
  26 #
  27 
  28 
  29 #############################################################################
  30 #
  31 # Generic build profile.sh for all platforms, works in bash, sh, and ksh.
  32 #
  33 # Copy this file to your own area, and edit it to suit your needs.
  34 #
  35 # Ideally you either won't need to set the ALT_* variables because the
  36 #   build system will find what it needs through system provided paths
  37 #   or environment variables, or you have installed the component in the
  38 #   recommended default path.
  39 #
  40 # If you find yourself forced to set an ALT_* environment variable and
  41 #   suspect we could have figured it out automatically, please let us know.
  42 #
  43 # Most ALT_* directory defaults are based on being in the parent directory in
  44 #    ALT_SLASH_JAVA, so it's possible to create for example a "C:/jdk6"
  45 #    directory, assign that to ALT_SLASH_JAVA, and place all the components
  46 #    in that directory. This could also minimize the ALT_* environment
  47 #    variables you need to set.
  48 #
  49 ########
  50 #
  51 # Assumes basic unix utilities are in the PATH already (uname, hostname, etc.).
  52 #
  53 # On Windows, assumes PROCESSOR_IDENTIFIER, VS71COMNTOOLS,
  54 #   SYSTEMROOT (or SystemRoot), COMPUTERNAME (or hostname works), and
  55 #   USERNAME is defined in the environment.
  56 #   This profile does not rely on using vcvars32.bat and 64bit Setup.bat.
  57 #   Uses CYGWIN cygpath to make sure paths are space-free.
  58 #
  59 # The JDK Makefiles may change in the future, making some of these
  60 #   settings unnecessary or redundant.
  61 #
  62 # This is a working example, but may or may not work on all systems.
  63 #
  64 #############################################################################
  65 #
  66 # WARNING: This file will clobber the value of some environment variables.
  67 #
  68 # Sets up these environment variables for doing JDK builds:
  69 #    USERNAME
  70 #    COMPUTERNAME
  71 #    PATH
  72 #    Windows Only:
  73 #      LIB
  74 #      INCLUDE
  75 #      PS1
  76 #      SHELL
  77 #
  78 # Attempts to set these variables for the JDK builds:           
  79 #    ALT_COMPILER_PATH
  80 #    ALT_BOOTDIR
  81 #    ALT_BINARY_PLUGS_PATH
  82 #    ALT_CLOSED_JDK_IMPORT_PATH
  83 #    Windows Only:
  84 #      ALT_UNIXCOMMAND_PATH
  85 #      ALT_DXSDK_PATH
  86 #      ALT_MSVCRT_DLL_PATH
  87 #      ALT_MSVCR71_DLL_PATH
  88 #
  89 #############################################################################
  90 #
  91 # Keep in mind that at this point, we are running in some kind of shell
  92 #   (sh, ksh, or bash). We don't know if it's solaris, linux, or windows 
  93 #   CYGWIN. We need to figure that out.
  94 
  95 # Find user name
  96 if [ "${USERNAME}" = "" ] ; then
  97     USERNAME="${LOGNAME}"
  98 fi
  99 if [ "${USERNAME}" = "" ] ; then
 100     USERNAME="${USER}"
 101 fi
 102 export USERNAME
 103 
 104 # Find machine name
 105 if [ "${COMPUTERNAME}" = "" ] ; then
 106     COMPUTERNAME="$(hostname)"
 107 fi
 108 export COMPUTERNAME
 109 
 110 # Boot jdk
 111 bootjdk=jdk1.6.0
 112 importjdk=jdk1.7.0
 113 
 114 # Uses 'uname -s', but only expect SunOS or Linux, assume Windows otherwise.
 115 osname=$(uname -s)
 116 if [ "${osname}" = SunOS ] ; then
 117   
 118   # System place where JDK installed images are stored?
 119   jdk_instances=/usr/jdk/instances
 120 
 121   # Get the Sun Studio compilers (and latest patches for them too)
 122   if [ "${ALT_COMPILER_PATH}" = "" ] ; then
 123     ALT_COMPILER_PATH=/opt/SUNWspro/bin
 124     export ALT_COMPILER_PATH
 125   fi
 126   if [ ! -d ${ALT_COMPILER_PATH} ] ; then
 127     echo "WARNING: Cannot access ALT_COMPILER_PATH=${ALT_COMPILER_PATH}"
 128   fi
 129   
 130   # Place compiler path early in PATH to avoid 'cc' conflicts.
 131   path4sdk=${ALT_COMPILER_PATH}:/usr/ccs/bin:/usr/ccs/lib:/usr/bin:/bin:/usr/sfw/bin
 132 
 133   # Make sure these are unset
 134   unset JAVA_HOME
 135   unset LD_LIBRARY_PATH
 136 
 137   # Build in C locale
 138   LANG=C
 139   export LANG
 140   LC_ALL=C
 141   export LC_ALL
 142 
 143   umask 002
 144 
 145 elif [ "${osname}" = Linux ] ; then
 146   
 147   # System place where JDK installed images are stored?
 148   jdk_instances=/opt/java
 149     
 150   # Use compilers from /usr/bin
 151   path4sdk=/usr/bin:/bin:/usr/sbin:/sbin
 152 
 153   # Make sure these are unset
 154   unset JAVA_HOME
 155   unset LD_LIBRARY_PATH
 156 
 157   # Build in C locale
 158   LANG=C
 159   export LANG
 160   LC_ALL=C
 161   export LC_ALL
 162 
 163   umask 002
 164 
 165 else
 166 
 167   # System place where JDK installed images are stored?
 168   jdk_instances="C:"
 169 
 170   # Windows: Differs on CYGWIN and the compiler available.
 171   #   Also, blanks in pathnames gives make headaches, so anything placed
 172   #   in any ALT_* variable should be the short windows DOS names.
 173    
 174   # Check CYGWIN (should have already been done)
 175   #   Assumption here is that you are in a shell window via cygwin.
 176   proc_arch=`echo "${PROCESSOR_IDENTIFIER}" | expand | cut -d' ' -f1 | sed -e 's@x86@X86@g' -e 's@Intel64@X64@g' -e 's@em64t@X64@g' -e 's@EM64T@X64@g' -e 's@amd64@X64@g' -e 's@AMD64@X64@g' -e 's@ia64@IA64@g'`
 177   if [ "${proc_arch}" = "X64" ] ; then
 178     windows_arch=amd64
 179   else
 180     windows_arch=i586
 181   fi
 182   # We need to check if we are running a CYGWIN shell
 183   if [ "$(uname -a | fgrep Cygwin)" != "" -a -f /bin/cygpath ] ; then
 184     # For CYGWIN, uname will have "Cygwin" in it, and /bin/cygpath should exist
 185     # Utility to convert to short pathnames without spaces
 186     cygpath="/usr/bin/cygpath -a -m -s"
 187     # Most unix utilities are in the /usr/bin
 188     unixcommand_path="/usr/bin"
 189     # Make the prompt tell you CYGWIN
 190     export PS1="CYGWIN:${COMPUTERNAME}:${USERNAME}[\!] "
 191   else
 192     echo "ERROR: Cannot find CYGWIN on this machine"
 193     exit 1
 194   fi
 195   if [ "${ALT_UNIXCOMMAND_PATH}" != "" ] ; then
 196     unixcommand_path=${ALT_UNIXCOMMAND_PATH}
 197   fi
 198     
 199   # Default shell
 200   export SHELL="${unixcommand_path}/sh"
 201 
 202   # Setup path system (verify this is right)
 203   if [ "${SystemRoot}" != "" ] ; then
 204     sys_root=$(${cygpath} "${SystemRoot}")
 205   elif [ "${SYSTEMROOT}" != "" ] ; then
 206     sys_root=$(${cygpath} "${SYSTEMROOT}")
 207   else
 208     sys_root=$(${cygpath} "C:/WINNT")
 209   fi
 210   path4sdk="${unixcommand_path};${sys_root}/system32;${sys_root};${sys_root}/System32/Wbem"
 211   if [ ! -d "${sys_root}" ] ; then
 212     echo "WARNING: No system root found at: ${sys_root}"
 213   fi
 214 
 215   # Compiler setup (nasty part)
 216   #   NOTE: You can use vcvars32.bat to set PATH, LIB, and INCLUDE.
 217   #   NOTE: CYGWIN has a link.exe too, make sure the compilers are first
 218   if [ "${windows_arch}" = i586 ] ; then
 219     # 32bit Windows compiler settings
 220     # VisualStudio .NET 2003 VC++ 7.1 (VS71COMNTOOLS should be defined)
 221     vs_root=$(${cygpath} "${VS71COMNTOOLS}/../..")
 222     # Fill in PATH, LIB, and INCLUDE (unset all others to make sure)
 223     vc7_root="${vs_root}/Vc7"
 224     compiler_path="${vc7_root}/bin"
 225     platform_sdk="${vc7_root}/PlatformSDK"
 226         
 227     # LIB and INCLUDE must use ; as a separator
 228     include4sdk="${vc7_root}/atlmfc/include"
 229     include4sdk="${include4sdk};${vc7_root}/include"
 230     include4sdk="${include4sdk};${platform_sdk}/include/prerelease"
 231     include4sdk="${include4sdk};${platform_sdk}/include"
 232     include4sdk="${include4sdk};${vs_root}/SDK/v1.1/include"
 233     lib4sdk="${lib4sdk};${vc7_root}/lib"
 234     lib4sdk="${lib4sdk};${platform_sdk}/lib/prerelease"
 235     lib4sdk="${lib4sdk};${platform_sdk}/lib"
 236     lib4sdk="${lib4sdk};${vs_root}/SDK/v1.1/lib"
 237     # Search path and DLL locating path
 238     #   WARNING: CYGWIN has a link.exe too, make sure compilers are first
 239     path4sdk="${vs_root}/Common7/Tools/bin;${path4sdk}"
 240     path4sdk="${vs_root}/SDK/v1.1/bin;${path4sdk}"
 241     path4sdk="${vs_root}/Common7/Tools;${path4sdk}"
 242     path4sdk="${vs_root}/Common7/Tools/bin/prerelease;${path4sdk}"
 243     path4sdk="${vs_root}/Common7/IDE;${path4sdk}"
 244     path4sdk="${compiler_path};${path4sdk}"
 245   elif [ "${windows_arch}" = amd64 ] ; then
 246     # AMD64 64bit Windows compiler settings
 247     if [ "${ALT_DEPLOY_MSSDK}" != "" ] ; then
 248       platform_sdk=${ALT_DEPLOY_MSSDK}
 249     else
 250       platform_sdk=$(${cygpath} "C:/Program Files/Microsoft Platform SDK/")
 251     fi
 252     if [ "${ALT_COMPILER_PATH}" != "" ] ; then
 253       compiler_path=${ALT_COMPILER_PATH}
 254       if [ "${ALT_DEPLOY_MSSDK}" = "" ] ; then
 255         platform_sdk=${ALT_COMPILER_PATH}/../../../..
 256       fi
 257     else
 258       compiler_path="${platform_sdk}/Bin/win64/x86/AMD64"
 259     fi
 260     # LIB and INCLUDE must use ; as a separator
 261     include4sdk="${platform_sdk}/Include"
 262     include4sdk="${include4sdk};${platform_sdk}/Include/crt/sys"
 263     include4sdk="${include4sdk};${platform_sdk}/Include/mfc"
 264     include4sdk="${include4sdk};${platform_sdk}/Include/atl"
 265     include4sdk="${include4sdk};${platform_sdk}/Include/crt"
 266     lib4sdk="${platform_sdk}/Lib/AMD64"
 267     lib4sdk="${lib4sdk};${platform_sdk}/Lib/AMD64/atlmfc"
 268     # Search path and DLL locating path
 269     #   WARNING: CYGWIN has a link.exe too, make sure compilers are first
 270     path4sdk="${platform_sdk}/bin;${path4sdk}"
 271     path4sdk="${compiler_path};${path4sdk}"
 272   fi
 273   # Export LIB and INCLUDE
 274   unset lib
 275   unset Lib
 276   LIB="${lib4sdk}"
 277   export LIB
 278   unset include
 279   unset Include
 280   INCLUDE="${include4sdk}"
 281   export INCLUDE
 282     
 283   # Turn all \\ into /, remove duplicates and trailing /
 284   slash_path="$(echo ${path4sdk} | sed -e 's@\\\\@/@g' -e 's@//@/@g' -e 's@/$@@' -e 's@/;@;@g')"
 285   path4sdk="${slash_path}"
 286    
 287   # Convert path4sdk to cygwin style
 288   path4sdk="$(/usr/bin/cygpath -p ${path4sdk})"
 289 
 290 fi
 291 
 292 # Get the previous JDK to be used to bootstrap the build
 293 if [ "${ALT_BOOTDIR}" = "" ] ; then
 294   ALT_BOOTDIR=${jdk_instances}/${bootjdk}
 295   export ALT_BOOTDIR
 296 fi
 297 if [ ! -d ${ALT_BOOTDIR} ] ; then
 298   echo "WARNING: Cannot access ALT_BOOTDIR=${ALT_BOOTDIR}"
 299 fi
 300 
 301 # Get the import JDK to be used to get hotspot VM if not built
 302 if [ "${ALT_JDK_IMPORT_PATH}" = "" -a -d ${jdk_instances}/${importjdk} ] ; then
 303   ALT_JDK_IMPORT_PATH=${jdk_instances}/${importjdk}
 304   export ALT_JDK_IMPORT_PATH
 305 fi
 306 
 307 # Get the latest JDK binary plugs or build to import pre-built binaries
 308 if [ "${ALT_BINARY_PLUGS_PATH}" = "" ] ; then
 309   binplugs=${jdk_instances}/openjdk-binary-plugs
 310   jdkplugs=${jdk_instances}/${importjdk}
 311   if [ -d ${binplugs} ] ; then
 312     ALT_BINARY_PLUGS_PATH=${binplugs}
 313     export ALT_BINARY_PLUGS_PATH
 314   elif [  "${ALT_CLOSED_JDK_IMPORT_PATH}" = "" -a -d ${jdkplugs} ] ; then
 315     ALT_CLOSED_JDK_IMPORT_PATH=${jdkplugs}
 316     export ALT_CLOSED_JDK_IMPORT_PATH
 317   fi
 318   if [ "${ALT_BINARY_PLUGS_PATH}" = "" ] ; then
 319     echo "WARNING: Missing ALT_BINARY_PLUGS_PATH: ${binplugs}"
 320   fi
 321 fi
 322 if [ "${ALT_BINARY_PLUGS_PATH}" != "" -a ! -d "${ALT_BINARY_PLUGS_PATH}" ] ; then
 323   echo "WARNING: Cannot access ALT_BINARY_PLUGS_PATH=${ALT_BINARY_PLUGS_PATH}"
 324 fi
 325 if [ "${ALT_CLOSED_JDK_IMPORT_PATH}" != "" -a ! -d "${ALT_CLOSED_JDK_IMPORT_PATH}" ] ; then
 326   echo "WARNING: Cannot access ALT_CLOSED_JDK_IMPORT_PATH=${ALT_CLOSED_JDK_IMPORT_PATH}"
 327 fi
 328 
 329 # Export PATH setting
 330 PATH="${path4sdk}"
 331 export PATH
 332 
 333 # Export variables required for Zero
 334 if [ "${SHARK_BUILD}" = true ] ; then
 335   ZERO_BUILD=true
 336   export ZERO_BUILD
 337 fi
 338 if [ "${ZERO_BUILD}" = true ] ; then
 339   # ZERO_LIBARCH is the name of the architecture-specific
 340   # subdirectory under $JAVA_HOME/jre/lib
 341   arch=$(uname -m)
 342   case "${arch}" in
 343     x86_64)  ZERO_LIBARCH=amd64     ;;
 344     i?86)    ZERO_LIBARCH=i386      ;;
 345     sparc64) ZERO_LIBARCH=sparcv9   ;;
 346     arm*)    ZERO_LIBARCH=arm       ;;
 347     *)       ZERO_LIBARCH="$(arch)"
 348   esac
 349   export ZERO_LIBARCH
 350 
 351   # ARCH_DATA_MODEL is the number of bits in a pointer
 352   case "${ZERO_LIBARCH}" in
 353     i386|ppc|s390|sparc|arm)
 354       ARCH_DATA_MODEL=32
 355       ;;
 356     amd64|ppc64|s390x|sparcv9|ia64|alpha)
 357       ARCH_DATA_MODEL=64
 358       ;;
 359     *)
 360       echo "ERROR: Unable to determine ARCH_DATA_MODEL for ${ZERO_LIBARCH}"
 361       exit 1
 362   esac
 363   export ARCH_DATA_MODEL
 364 
 365   # ZERO_ENDIANNESS is the endianness of the processor
 366   case "${ZERO_LIBARCH}" in
 367     i386|amd64|ia64)
 368       ZERO_ENDIANNESS=little
 369       ;;
 370     ppc*|s390*|sparc*|alpha)
 371       ZERO_ENDIANNESS=big
 372       ;;
 373     *)
 374       echo "ERROR: Unable to determine ZERO_ENDIANNESS for ${ZERO_LIBARCH}"
 375       exit 1
 376   esac
 377   export ZERO_ENDIANNESS
 378 
 379   # ZERO_ARCHDEF is used to enable architecture-specific code
 380   case "${ZERO_LIBARCH}" in
 381     i386)   ZERO_ARCHDEF=IA32  ;;
 382     ppc*)   ZERO_ARCHDEF=PPC   ;;
 383     s390*)  ZERO_ARCHDEF=S390  ;;
 384     sparc*) ZERO_ARCHDEF=SPARC ;;
 385     *)      ZERO_ARCHDEF=$(echo "${ZERO_LIBARCH}" | tr a-z A-Z)
 386   esac
 387   export ZERO_ARCHDEF
 388 
 389   # ZERO_ARCHFLAG tells the compiler which mode to build for
 390   case "${ZERO_LIBARCH}" in
 391     s390)
 392       ZERO_ARCHFLAG="-m31"
 393       ;;
 394     *)
 395       ZERO_ARCHFLAG="-m${ARCH_DATA_MODEL}"
 396   esac
 397   export ZERO_ARCHFLAG
 398 
 399   # LIBFFI_CFLAGS and LIBFFI_LIBS tell the compiler how to compile and
 400   # link against libffi
 401   pkgconfig=$(which pkg-config 2>/dev/null)
 402   if [ -x "${pkgconfig}" ] ; then
 403     if [ "${LIBFFI_CFLAGS}" = "" ] ; then
 404       LIBFFI_CFLAGS=$("${pkgconfig}" --cflags libffi)
 405     fi
 406     if [ "${LIBFFI_LIBS}" = "" ] ; then
 407       LIBFFI_LIBS=$("${pkgconfig}" --libs libffi)
 408     fi
 409   fi
 410   if [ "${LIBFFI_LIBS}" = "" ] ; then
 411       LIBFFI_LIBS="-lffi"
 412   fi
 413   export LIBFFI_CFLAGS
 414   export LIBFFI_LIBS
 415 
 416   # LLVM_CFLAGS, LLVM_LDFLAGS and LLVM_LIBS tell the compiler how to
 417   # compile and link against LLVM
 418   if [ "${SHARK_BUILD}" = true ] ; then
 419     if [ "${LLVM_CONFIG}" = "" ] ; then
 420       LLVM_CONFIG=$(which llvm-config 2>/dev/null)
 421     fi
 422     if [ ! -x "${LLVM_CONFIG}" ] ; then
 423       echo "ERROR: Unable to locate llvm-config"
 424       exit 1
 425     fi
 426     llvm_components="jit engine nativecodegen"
 427 
 428     unset LLVM_CFLAGS
 429     for flag in $("${LLVM_CONFIG}" --cxxflags $llvm_components); do
 430       if echo "${flag}" | grep -q '^-[ID]'; then
 431         if [ "${flag}" != "-D_DEBUG" ] ; then
 432           if [ "${LLVM_CFLAGS}" != "" ] ; then
 433             LLVM_CFLAGS="${LLVM_CFLAGS} "
 434           fi
 435           LLVM_CFLAGS="${LLVM_CFLAGS}${flag}"
 436         fi
 437       fi
 438     done
 439     llvm_version=$("${LLVM_CONFIG}" --version | sed 's/\.//; s/svn.*//')
 440     LLVM_CFLAGS="${LLVM_CFLAGS} -DSHARK_LLVM_VERSION=${llvm_version}"
 441 
 442     unset LLVM_LDFLAGS
 443     for flag in $("${LLVM_CONFIG}" --ldflags $llvm_components); do
 444       if echo "${flag}" | grep -q '^-L'; then
 445         if [ "${LLVM_LDFLAGS}" != "" ] ; then
 446           LLVM_LDFLAGS="${LLVM_LDFLAGS} "
 447         fi
 448         LLVM_LDFLAGS="${LLVM_LDFLAGS}${flag}"
 449       fi
 450     done
 451 
 452     unset LLVM_LIBS
 453     for flag in $("${LLVM_CONFIG}" --libs $llvm_components); do
 454       if echo "${flag}" | grep -q '^-l'; then
 455         if [ "${LLVM_LIBS}" != "" ] ; then
 456           LLVM_LIBS="${LLVM_LIBS} "
 457         fi
 458         LLVM_LIBS="${LLVM_LIBS}${flag}"
 459       fi
 460     done
 461 
 462     export LLVM_CFLAGS
 463     export LLVM_LDFLAGS
 464     export LLVM_LIBS
 465   fi
 466 fi