aboutsummaryrefslogtreecommitdiff
path: root/make/common/shared/Platform.gmk
blob: 9673ce2cfb3633dd59e080fe2e07a44f8d9ef05e (plain)
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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
#
# Copyright 1997-2008 Sun Microsystems, Inc.  All Rights Reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.  Sun designates this
# particular file as subject to the "Classpath" exception as provided
# by Sun in the LICENSE file that accompanied this code.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
# CA 95054 USA or visit www.sun.com if you need additional information or
# have any questions.
#

#
# Shared platform (OS/ARCH) variable settings for the JDK builds.
#
# Includes basic system requirements, versions of utilities required,
#   suffixes on files, and basic defaults attributed to the build platform.
#

#
# Assumes some basic unix system utilities (e.g. uname) are in the search path
#   in order to figure out the system.
#

ifndef PLATFORM_SHARED

PLATFORM_SHARED=done

# Possible Input variables:
#     ARCH_DATA_MODEL             32 or 64, default to 32
#     USER, LOGNAME               user name (runs logname, or id if not set)
#     PROCESSOR_IDENTIFIER        windows only: needed in environment
#
# (Also gets input by running the utilities uname, logname, isainfo, or id.)
#
# Variables set by this file:
#     SYSTEM_UNAME                what 'uname' says this system is
#     USER                        login name of user (minus blanks)
#     PLATFORM                    windows, solaris, or linux
#     VARIANT                     OPT or DBG, OPT is the default
#     OS_NAME                     solaris, linux, or nt
#     OS_VERSION                  specific version of os, 5.10, 2.4.9-e.3, etc.
#     OS_VENDOR                   company name
#     TEMP_DISK                   /tmp or C:/temp
#     ARCH_DATA_MODEL             32 or 64
#     ARCH                        sparc, sparcv9, i586, amd64, or ia64
#     ARCH_FAMILY                 sparc or i586
#     ARCHPROP                    sparc or x86
#     ARCH_VM_SUBDIR              jre/bin, jre/lib/sparc, etc.
#     LIBARCH                     sparc, sparcv9, i386, amd64, or ia64
#     DEV_NULL                    destination of /dev/null, NUL or /dev/NULL
#     CLASSPATH_SEPARATOR         separator in classpath, ; or :
#     LIB_PREFIX                  dynamic or static library prefix, lib or empty
#     LIB_SUFFIX                  static library file suffix, .lib or .a?
#     LIBRARY_SUFFIX              dynamic library file suffix, .dll or .so
#     OBJECT_SUFFIX               object file suffix, .o or .obj
#     EXE_SUFFIX                  executable file suffix, .exe or empty
#     BUNDLE_FILE_SUFFIX          suffix for bundles: .tar or .tar.gz
#     ISA_DIR                     solaris only: /sparcv9 or /amd64
#     LIBARCH32                   solaris only: sparc or i386
#     LIBARCH64                   solaris only: sparcv9 or amd64
#     REQUIRED_WINDOWS_VERSION    windows only: specific version of windows 
#     USING_CYGWIN                windows only: true or false
#     WINDOWS_NT_VERSION_STRING   windows only: long version name
#     REQUIRED_OS_VERSION         required OS version, e.g. 5.10, 2.4
#     REQUIRED_FREE_SPACE         minimum disk space needed for outputdir
#     ISHIELD_TEMP_MIN            windows only: minimum disk space in temp area
#     REQUIRED_ZIP_VER            required version of zip
#     REQUIRED_UNZIP_VER          required version of unzip
#     REQUIRED_DXSDK_VER          windows only: required version of DirectX
#     LINUX_VERSION_INFO          linux only: location of linux release file
#     REQUIRED_LINUX_VER          linux only: required version of linux
#     REQUIRED_LINUX_FULLVER      linux only: required full version of linux
#     REQUIRED_ALSA_VERSION       linux only: required version of ALSA
#     REQUIRED_FREETYPE_VERSION   openjdk only: required version of freetype 

SYSTEM_UNAME := $(shell uname)

# Normal boot jdk is previous release, but a hard requirement is a 1.5 boot
REQUIRED_BOOT_VER = 1.5

# If we are using freetype, this is the required version
REQUIRED_FREETYPE_VERSION=2.3.0

#
# Prune out all known SCM (Source Code Management) directories
# so they will not be included when copying directory trees
# or packaging up .jar files, etc.  This applies to all workspaces.
#
SCM_DIRs = .hg .svn CVS RCS SCCS Codemgr_wsdata deleted_files .hgignore .hgtags
# When changing SCM_DIRs also change SCM_DIRS_rexp and SCM_DIRS_prune:
SCM_DIRS_rexp = ".hg|.svn|CVS|RCS|SCCS|Codemgr_wsdata|deleted_files|.hgignore|.hgtags"
SCM_DIRS_prune = \( -name .hg -o -name .svn -o -name CVS -o -name RCS -o -name SCCS -o -name Codemgr_wsdata -o -name deleted_files -o -name .hgignore -o -name .hgtags \) -prune

# Don't define this unless it's not defined
ifndef VARIANT
  VARIANT=OPT
endif

# Platform settings specific to Solaris
ifeq ($(SYSTEM_UNAME), SunOS)
  PLATFORM = solaris
  OS_NAME = solaris
  OS_VERSION := $(shell uname -r)
  # Solaris sparc build can be either 32-bit or 64-bit.
  #   Default to 32, but allow explicit setting to 32 or 64.
  ifndef ARCH_DATA_MODEL
    ARCH_DATA_MODEL=32
  endif
  ifeq ($(ARCH_DATA_MODEL), 32)
    processor := $(shell uname -p)
    archExpr = case "$(processor)" in  \
                i[3-9]86) \
                    echo i586 \
                    ;; \
                sparc*)  \
                    echo sparc \
                    ;; \
                *) \
                    echo $(processor)  \
                    ;; \
        esac
    ARCH        := $(shell $(archExpr))
  else
    ARCH := $(shell isainfo -n)
    # ISA_DIR is used to locate 64-bit specific libraries which are generally
    # in the same general place as other libraries under the ./$(ARCH) directory
    ISA_DIR = /$(ARCH)
  endif
  # Need to maintain the jre/lib/i386 location for 32-bit Intel
  ifeq ($(ARCH), i586)
     ARCH_FAMILY = $(ARCH)
     LIBARCH     = i386
     # Value of Java os.arch property
     ARCHPROP    = x86
  else
     ifeq ($(ARCH), amd64)
        ARCH_FAMILY = i586
     else
        ARCH_FAMILY = sparc
     endif
     LIBARCH  = $(ARCH)
     # Value of Java os.arch property
     ARCHPROP = $(LIBARCH)
  endif
  # The two LIBARCH names
  ifeq ($(ARCH_FAMILY), sparc)
    LIBARCH32 = sparc
    LIBARCH64 = sparcv9
  else
    LIBARCH32 = i386
    LIBARCH64 = amd64
  endif
  # Suffix for file bundles used in previous release
  BUNDLE_FILE_SUFFIX=.tar
  OS_VENDOR = Sun Microsystems
  # Required Solaris version
  REQUIRED_OS_VERSION = 5.10
  # Minimum disk space needed as determined by running 'du -sk' on 
  #    a fully built workspace.
  ifeq ($(ARCH_FAMILY), sparc)
    REQUIRED_FREE_SPACE=1300000
  else
    REQUIRED_FREE_SPACE=1040000
  endif
  # How much RAM does this machine have:
  MB_OF_MEMORY=$(shell /etc/prtconf | fgrep 'Memory size:' | expand | cut -d' ' -f3)
endif

# Platform settings specific to Linux
ifeq ($(SYSTEM_UNAME), Linux)
  PLATFORM = linux
  OS_NAME = linux
  OS_VERSION := $(shell uname -r)
  # Arch and OS name/version
  mach := $(shell uname -m)
  archExpr = case "$(mach)" in \
                i[3-9]86) \
                    echo i586 \
                    ;; \
                ia64) \
                    echo ia64 \
                    ;; \
                x86_64) \
                    echo amd64 \
                    ;; \
                sparc*) \
                    echo sparc \
                    ;; \
                *) \
                    echo $(mach) \
                    ;; \
      esac
  ARCH        := $(shell $(archExpr) )
  ARCH_FAMILY := $(ARCH)

  # Linux builds may be 32-bit or 64-bit data model.
  ifeq ($(ARCH), sparc)
    # Linux sparc build can be either 32-bit or 64-bit.
    #   Default to 32, but allow explicit setting to 32 or 64.
    ifndef ARCH_DATA_MODEL
      ARCH_DATA_MODEL=32
    endif
    ifeq ($(ARCH_DATA_MODEL), 32)
      ARCH=sparc
    else
      ARCH=sparcv9
    endif
  else
    # i586 is 32-bit, amd64 is 64-bit
    ifndef ARCH_DATA_MODEL
      ifeq ($(ARCH), i586)
        ARCH_DATA_MODEL=32
      else
        ARCH_DATA_MODEL=64
      endif
    endif
  endif

  # Need to maintain the jre/lib/i386 location for 32-bit Intel
  ifeq ($(ARCH), i586)
    LIBARCH = i386
  else
    LIBARCH = $(ARCH)
  endif

  # Value of Java os.arch property
  ARCHPROP  = $(LIBARCH)

  # Suffix for file bundles used in previous release
  BUNDLE_FILE_SUFFIX=.tar.gz
  # Minimum disk space needed as determined by running 'du -sk' on 
  #    a fully built workspace.
  REQUIRED_FREE_SPACE=1460000
  LINUX_VERSION_INFO = /etc/redhat-release
  OS_VENDOR = Red Hat
  ifeq ($(ARCH_DATA_MODEL), 32)
    REQUIRED_LINUX_VER = Advanced Server
    REQUIRED_LINUX_FULLVER = Advanced Server release 2.1AS
    REQUIRED_OS_VERSION = 2.4.9-e.3
  else
    ifeq ($(ARCH), amd64)
      LINUX_VERSION_INFO = /etc/SuSE-release
      OS_VENDOR = SuSE Enterprise
      REQUIRED_LINUX_VER = 8.1
      REQUIRED_LINUX_FULLVER = $(REQUIRED_LINUX_VER) SLSE AMD64
      REQUIRED_OS_VERSION = 2.4.19-SMP
    else
      REQUIRED_LINUX_VER = Advanced Server
      REQUIRED_LINUX_FULLVER = Advanced Server release 2.1AS 64 bit
      REQUIRED_OS_VERSION = 2.4.19-SMP
    endif
  endif
  ifneq ($(ARCH), ia64)
    # ALSA 0.9.1 and above
    REQUIRED_ALSA_VERSION = ^((0[.]9[.][1-9])|(1[.]0[.][0-9]))[0-9]*
  endif
  # How much RAM does this machine have:
  MB_OF_MEMORY := $(shell free -m | fgrep Mem: | awk '{print $$2;}' )
endif

# Windows with and without CYGWIN will be slightly different
ifeq ($(SYSTEM_UNAME), Windows_NT)
  PLATFORM = windows
  OS_VERSION := $(shell uname -r)
  WINDOWS_NT_VERSION_STRING=Windows_NT
  REQUIRED_MKS_VER=6.1
endif
ifneq (,$(findstring CYGWIN,$(SYSTEM_UNAME)))
  PLATFORM = windows
  OS_VERSION := 5
  USING_CYGWIN = true
  export USING_CYGWIN
  WINDOWS_NT_VERSION_STRING=CYGWIN_NT
  REQUIRED_CYGWIN_VER=4.0
endif

# Platform settings specific to Windows
ifeq ($(PLATFORM), windows)
  OS_NAME = nt
  REQUIRED_OS_VERSION=5
  # Windows builds default to the appropriate for the underlaying
  # architecture.
  # Temporary disk area
  TEMP_DISK=C:/temp
  # GNU Make or MKS overrides $(PROCESSOR_ARCHITECTURE) to always
  # return "x86". Use the first word of $(PROCESSOR_IDENTIFIER) instead.
  ifndef ARCH_DATA_MODEL
    ifeq ($(word 1, $(PROCESSOR_IDENTIFIER)),ia64)
      ARCH_DATA_MODEL=64
    else
      ifeq ($(word 1, $(PROCESSOR_IDENTIFIER)),AMD64)
        ARCH_DATA_MODEL=64
      else
        ARCH_DATA_MODEL=32
      endif
    endif
  endif
  export ARCH_DATA_MODEL
  ifeq ($(ARCH_DATA_MODEL), 64)
    # If the user wants to perform a cross compile build then they must
    # - set ARCH_DATA_MODEL=64 and either
    #      + set ARCH to ia64 or amd64, or
    REQUIRED_WINDOWS_VERSION=Server 2003 Enterprise x64 Edition
    ifeq ($(word 1, $(PROCESSOR_IDENTIFIER)), AMD64)
      ARCH=amd64
    else
      ARCH=ia64
    endif
    LIBARCH=$(ARCH)
    # Value of Java os.arch property
    ARCHPROP=$(LIBARCH)
  else
    REQUIRED_WINDOWS_VERSION=2000 or Unknown
    #REQUIRED_WINDOWS_VERSION=XP Professional
    # LIBARCH is used to preserve the jre/lib/i386 directory name for 32-bit intel
    ARCH=i586
    LIBARCH=i386
    # Value of Java os.arch property
    ARCHPROP=x86
  endif
  ARCH_FAMILY = $(ARCH)
  # Where is unwanted output to be delivered?
  DEV_NULL = NUL
  export DEV_NULL
  # Classpath separator
  CLASSPATH_SEPARATOR = ;
  # The suffix used for object file (.o for unix .obj for windows)
  OBJECT_SUFFIX = obj
  # The suffix applied to executables (.exe for windows, nothing for solaris)
  EXE_SUFFIX = .exe
  # The prefix applied to library files (lib for solaris, nothing for windows)
  LIB_PREFIX=
  LIBRARY_SUFFIX = dll
  LIB_SUFFIX     = lib
  # User name determination (set _USER)
  ifndef USER
    ifdef USERNAME
      _USER := $(USERNAME)
    else
      ifdef LOGNAME
        _USER := $(LOGNAME)
      else
        _USER := $(shell id -un)
      endif
    endif
  else
    _USER:=$(USER)
  endif
  # Location of client/server directories
  ARCH_VM_SUBDIR=jre/bin
  # Suffix for file bundles used in previous release
  BUNDLE_FILE_SUFFIX=.tar
  # Minimum disk space needed as determined by running 'du -sk' on 
  #    a fully built workspace.
  REQUIRED_FREE_SPACE=500000
  # ISHIELD_TEMP_MIN is the difference of an empty C:\TEMP vs. one after a
  #     bundles build on windows.
  ISHIELD_TEMP_MIN=250000
  REQUIRED_DXSDK_VER = 0x0900
  OS_VENDOR = Microsoft
  # How much RAM does this machine have:
  ifeq ($(USING_CYGWIN),true)
    # CYGWIN has the 'free' utility
    _MB_OF_MEMORY := \
	 $(shell free -m | grep Mem: | awk '{print $$2;}' )
  else
    # Windows 2000 has the mem utility, but two memory areas
    #    extended memory is what is beyond 1024M
    _B_OF_EXT_MEMORY := \
	 $(shell mem 2> $(DEV_NULL) | grep 'total contiguous extended memory' | awk '{print $$1;}')
    ifeq ($(_B_OF_EXT_MEMORY),)
      _B_OF_MEMORY := \
	 $(shell mem 2> $(DEV_NULL) | grep 'total conventional memory' | awk '{print $$1;}')
    else
      _B_OF_MEMORY := \
         $(shell expr 1048576 '+' $(_B_OF_EXT_MEMORY) 2> $(DEV_NULL))
    endif
    ifeq ($(_B_OF_MEMORY),)
      # Windows 2003 has the systeminfo utility use it if mem doesn't work
      _MB_OF_MEMORY := \
	  $(shell systeminfo 2> $(DEV_NULL) | grep 'Total Physical Memory:' | awk '{print $$4;}' | sed -e 's@,@@')
    else
      _MB_OF_MEMORY := $(shell expr $(_B_OF_MEMORY) '/' 1024 2> $(DEV_NULL))
    endif
  endif
  ifeq ($(shell expr $(_MB_OF_MEMORY) '+' 0 2> $(DEV_NULL)), $(_MB_OF_MEMORY))
    MB_OF_MEMORY := $(_MB_OF_MEMORY)
  else
    MB_OF_MEMORY := 512
  endif
endif

REQUIRED_ZIP_VER = 2.2
REQUIRED_UNZIP_VER = 5.12
REQUIRED_MAKE_VER = 3.78

# Unix type settings (same for all unix platforms)
ifneq ($(PLATFORM), windows)
  # Temporary disk area
  TEMP_DISK=/tmp
  # Where is unwanted output to be delivered?
  DEV_NULL = /dev/null
  export DEV_NULL
  # Character used between entries in classpath 
  CLASSPATH_SEPARATOR = :
  # suffix used for object file (.o for unix .obj for windows)
  OBJECT_SUFFIX = o
  # The suffix applied to runtime libraries
  LIBRARY_SUFFIX = so
  # The suffix applied to link libraries
  LIB_SUFFIX = so
  # The suffix applied to executables (.exe for windows, nothing for solaris)
  EXE_SUFFIX =
  # The prefix applied to library files (lib for solaris, nothing for windows)
  LIB_PREFIX = lib
  # User name determination (set _USER)
  ifndef USER
    ifdef LOGNAME
      _USER := $(LOGNAME)
    else
      _USER := $(shell logname)
    endif
  else
    _USER:=$(USER)
  endif
  # Location of client/server directories
  ARCH_VM_SUBDIR=jre/lib/$(LIBARCH)
endif

# Machines with 512Mb or less of real memory are considered low memory
#    build machines and adjustments will be made to prevent excessing
#    system swapping during the build.
#    If we don't know, assume 512. Subtract 128 from MB for VM MAX.
#    Don't set VM max over 1024-128=896.
ifneq ($(MB_OF_MEMORY),)
  LOW_MEMORY_MACHINE := $(shell \
    if [ $(MB_OF_MEMORY) -le 512 ] ; then \
      echo "true"; \
    else \
      echo "false"; \
    fi)
  MAX_VM_MEMORY := $(shell \
    if [ $(MB_OF_MEMORY) -le 1024 ] ; then \
      expr $(MB_OF_MEMORY) '-' 128 2> $(DEV_NULL) ; \
    else \
      echo "896"; \
    fi)
  MIN_VM_MEMORY := $(shell \
    if [ $(MAX_VM_MEMORY) -le 128 ] ; then \
      expr $(MAX_VM_MEMORY) '-' 8 2> $(DEV_NULL) ; \
    else \
      echo "128"; \
    fi)
else
  MB_OF_MEMORY       := unknown
  LOW_MEMORY_MACHINE := true
  MAX_VM_MEMORY      := 384
  MIN_VM_MEMORY      := 128
endif

# If blanks in the username, use the first 4 words and pack them together
_USER1:=$(subst ', ,$(_USER))
_USER2:=$(subst ", ,$(_USER1))
USER:=$(word 1,$(_USER2))$(word 2,$(_USER2))$(word 3,$(_USER2))$(word 4,$(_USER2))
export USER

export PLATFORM
endif