|
1 # |
|
2 # Copyright 1995-2007 Sun Microsystems, Inc. All Rights Reserved. |
|
3 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
|
4 # |
|
5 # This code is free software; you can redistribute it and/or modify it |
|
6 # under the terms of the GNU General Public License version 2 only, as |
|
7 # published by the Free Software Foundation. Sun designates this |
|
8 # particular file as subject to the "Classpath" exception as provided |
|
9 # by Sun in the LICENSE file that accompanied this code. |
|
10 # |
|
11 # This code is distributed in the hope that it will be useful, but WITHOUT |
|
12 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
|
13 # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
|
14 # version 2 for more details (a copy is included in the LICENSE file that |
|
15 # accompanied this code). |
|
16 # |
|
17 # You should have received a copy of the GNU General Public License version |
|
18 # 2 along with this work; if not, write to the Free Software Foundation, |
|
19 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
|
20 # |
|
21 # Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, |
|
22 # CA 95054 USA or visit www.sun.com if you need additional information or |
|
23 # have any questions. |
|
24 # |
|
25 |
|
26 # |
|
27 # Common variables used by all the Java makefiles. This file should |
|
28 # not contain rules. |
|
29 # |
|
30 |
|
31 # |
|
32 # On Solaris, the 'make' utility from Sun will not work with these makefiles. |
|
33 # This little rule is only understood by Sun's make, and is harmless |
|
34 # when seen by the GNU make tool. If using Sun's make, this causes the |
|
35 # make command to fail. |
|
36 # |
|
37 SUN_MAKE_TEST:sh = echo "ERROR: PLEASE USE GNU VERSION OF MAKE"; exit 33 |
|
38 |
|
39 include $(BUILDDIR)/common/shared/Platform.gmk |
|
40 |
|
41 TOPDIR=$(BUILDDIR)/.. |
|
42 |
|
43 include $(TOPDIR)/make/common/CancelImplicits.gmk |
|
44 |
|
45 # Historically PLATFORM_SRC used to be src/$(PLATFORM), but we switched it to |
|
46 # src/solaris so if you want to build on Linux you didn't need a src/linux |
|
47 # directory. In an ideal world it would be called src/genunix but we are not |
|
48 # there yet. |
|
49 # |
|
50 ifndef SHARE_SRC |
|
51 SHARE_SRC = $(TOPDIR)/src/share |
|
52 endif |
|
53 |
|
54 _OUTPUTDIR=$(TOPDIR)/build/$(PLATFORM)-$(ARCH) |
|
55 |
|
56 # |
|
57 # Get platform definitions |
|
58 # |
|
59 |
|
60 include $(TOPDIR)/make/common/Defs-$(PLATFORM).gmk |
|
61 |
|
62 # |
|
63 # Localizations for the different parts of the product beyond English |
|
64 # |
|
65 |
|
66 JRE_LOCALES = de es fr it ja ko sv zh_CN zh_TW zh_HK |
|
67 PLUGIN_LOCALES = de es fr it ja ko sv zh_CN zh_TW zh_HK |
|
68 JDK_LOCALES = ja zh_CN |
|
69 |
|
70 # |
|
71 # A list of locales we support but don't have resource files. |
|
72 # This is defined to optimize the search of resource bundles. |
|
73 # |
|
74 JRE_NONEXIST_LOCALES = en en_US de_DE es_ES fr_FR it_IT ja_JP ko_KR sv_SE zh |
|
75 |
|
76 # |
|
77 # All libraries except libjava and libjvm itself link against libjvm and |
|
78 # libjava, the latter for its exported common utilities. libjava only links |
|
79 # against libjvm. Programs' makefiles take their own responsibility for |
|
80 # adding other libs. |
|
81 # |
|
82 ifdef PACKAGE |
|
83 # put JAVALIB first, but do not lose any platform specific values.... |
|
84 LDLIBS_COMMON = $(JAVALIB) |
|
85 endif # PACKAGE |
|
86 |
|
87 # |
|
88 # Libraries that must appear ahead of libc.so on the link command line |
|
89 # |
|
90 ifdef PROGRAM |
|
91 |
|
92 ifeq ($(PLATFORM), solaris) |
|
93 LDLIBS_COMMON = -lthread -ldl |
|
94 endif |
|
95 |
|
96 ifeq ($(PLATFORM), linux) |
|
97 LDLIBS_COMMON = -ldl |
|
98 endif |
|
99 |
|
100 endif # PROGRAM |
|
101 |
|
102 LDLIBS_COMMON += $(EXTRA_LIBS) |
|
103 |
|
104 # |
|
105 # Default is to build, not import native binaries |
|
106 # |
|
107 ifndef IMPORT_NATIVE_BINARIES |
|
108 IMPORT_NATIVE_BINARIES=false |
|
109 endif |
|
110 # If importing libraries in, no incremental builds |
|
111 ifeq ($(IMPORT_NATIVE_BINARIES),true) |
|
112 INCREMENTAL_BUILD=false |
|
113 endif |
|
114 |
|
115 # for generated libraries |
|
116 LIBDIR = $(OUTPUTDIR)/lib |
|
117 ABS_LIBDIR = $(ABS_OUTPUTDIR)/lib |
|
118 # Optional place to save the windows .lib files |
|
119 LIBFILES_DIR = $(OUTPUTDIR)/libfiles |
|
120 # for ext jre files |
|
121 EXTDIR = $(LIBDIR)/ext |
|
122 # for generated include files |
|
123 INCLUDEDIR = $(OUTPUTDIR)/include |
|
124 # for generated class files |
|
125 CLASSBINDIR = $(OUTPUTDIR)/classes |
|
126 DEMOCLASSDIR = $(OUTPUTDIR)/democlasses |
|
127 # for generated tool class files |
|
128 BUILDTOOLCLASSDIR = $(OUTPUTDIR)/btclasses |
|
129 # for build tool jar files |
|
130 BUILDTOOLJARDIR = $(OUTPUTDIR)/btjars |
|
131 ABS_BUILDTOOLJARDIR = $(ABS_OUTPUTDIR)/btjars |
|
132 # for generated java source files |
|
133 GENSRCDIR = $(OUTPUTDIR)/gensrc |
|
134 # for generated C source files (not javah) |
|
135 GENNATIVESRCDIR = $(OUTPUTDIR)/gennativesrc |
|
136 # for imported source files |
|
137 IMPORTSRCDIR = $(OUTPUTDIR)/impsrc |
|
138 # for imported documents |
|
139 IMPORTDOCDIR = $(OUTPUTDIR)/impdoc |
|
140 # for generated demo |
|
141 DEMODIR = $(OUTPUTDIR)/demo |
|
142 # for sample code |
|
143 SAMPLEDIR = $(OUTPUTDIR)/sample |
|
144 # for generated documentation |
|
145 DOCSDIR = $(OUTPUTDIR)/docs$(DOCSDIRSUFFIX) |
|
146 DOCSDIRSUFFIX = |
|
147 |
|
148 # An attempt is made to generate unique enough directories for the |
|
149 # generated files to not have name collisisons. Most build units |
|
150 # defines PRODUCT (except Release.gmk), but then they may or may |
|
151 # not define PACKAGE, THREADIR (only HPI uses this), PROGRAM, and |
|
152 # LIBRARY. This code chunk attempts to generate a unique |
|
153 # OBJDIR/CLASSHDRDIR for each build unit based on which of those |
|
154 # values are set within each build unit. |
|
155 |
|
156 UNIQUE_LOCATION_STRING = tmp |
|
157 |
|
158 ifneq ($(PRODUCT),) |
|
159 UNIQUE_LOCATION_STRING += /$(PRODUCT) |
|
160 endif |
|
161 |
|
162 ifneq ($(PACKAGE),) |
|
163 UNIQUE_LOCATION_STRING += /$(PACKAGE) |
|
164 endif |
|
165 |
|
166 ifneq ($(PROGRAM),) |
|
167 UNIQUE_LOCATION_STRING += /$(PROGRAM) |
|
168 endif |
|
169 |
|
170 ifneq ($(LIBRARY),) |
|
171 ifneq ($(LIBRARY_OUTPUT),) |
|
172 UNIQUE_LOCATION_STRING += /$(LIBRARY_OUTPUT) |
|
173 else |
|
174 UNIQUE_LOCATION_STRING += /$(LIBRARY) |
|
175 endif |
|
176 endif |
|
177 |
|
178 ifneq ($(THREADDIR),) |
|
179 UNIQUE_LOCATION_STRING += /$(THREADDIR) |
|
180 endif |
|
181 |
|
182 # the use of += above makes a space separated list which we need to |
|
183 # remove for filespecs. |
|
184 # |
|
185 NULLSTRING := |
|
186 ONESPACE := $(NULLSTRING) # space before this comment is required. |
|
187 UNIQUE_PATH = $(subst $(ONESPACE),,$(UNIQUE_LOCATION_STRING)) |
|
188 |
|
189 # TEMPDIR is a unique general purpose directory |
|
190 # need to use 'override' because GNU Make on Linux exports the wrong |
|
191 # value. |
|
192 override TEMPDIR = $(OUTPUTDIR)/$(UNIQUE_PATH) |
|
193 override ABS_TEMPDIR = $(ABS_OUTPUTDIR)/$(UNIQUE_PATH) |
|
194 |
|
195 # This must be created right away for pattern rules in Sanity.gmk to work. |
|
196 dummy1:=$(shell $(MKDIR) -p $(TEMPDIR)) |
|
197 dummy2:=$(shell $(MKDIR) -p $(TEMP_DISK)) |
|
198 |
|
199 # OBJDIRNAME is the name of the directory where the object code is to |
|
200 # be placed. It's name depends on whether the data model architecture |
|
201 # is 32-bit or not. |
|
202 ifneq ($(ARCH_DATA_MODEL), 32) |
|
203 OBJDIRNAME = obj$(ARCH_DATA_MODEL)$(OBJDIRNAME_SUFFIX) |
|
204 else |
|
205 OBJDIRNAME = obj$(OBJDIRNAME_SUFFIX) |
|
206 endif |
|
207 OBJDIR = $(TEMPDIR)/$(OBJDIRNAME) |
|
208 |
|
209 # CLASSHDRDIR is where the generated C Class Header files go. |
|
210 CLASSHDRDIR = $(TEMPDIR)/CClassHeaders |
|
211 |
|
212 # |
|
213 # CLASSDESTDIR can be used to specify the directory where generated classes |
|
214 # are to be placed. The default is CLASSBINDIR. |
|
215 # |
|
216 ifndef CLASSDESTDIR |
|
217 CLASSDESTDIR = $(CLASSBINDIR) |
|
218 endif |
|
219 |
|
220 INCLUDES = -I. -I$(CLASSHDRDIR) \ |
|
221 $(patsubst %,-I%,$(subst $(CLASSPATH_SEPARATOR), ,$(VPATH.h))) $(OTHER_INCLUDES) |
|
222 OTHER_CPPFLAGS = $(INCLUDES) |
|
223 |
|
224 |
|
225 # |
|
226 # vpaths. These are the default locations searched for source files. |
|
227 # GNUmakefiles of individual areas often override the default settings. |
|
228 # There are no longer default vpath entries for C and assembler files |
|
229 # so we can ensure that libraries don't get their hands on JVM files. |
|
230 # |
|
231 # We define an intermediate variable for Java files because |
|
232 # we use its value later to help define $SOURCEPATH |
|
233 |
|
234 VPATH0.java = $(GENSRCDIR)$(CLASSPATH_SEPARATOR)$(PLATFORM_SRC)/classes$(CLASSPATH_SEPARATOR)$(SHARE_SRC)/classes |
|
235 VPATH.java = $(VPATH0.java) |
|
236 vpath %.java $(VPATH.java) |
|
237 vpath %.class $(CLASSBINDIR) |
|
238 vpath %.$(OBJECT_SUFFIX) $(OBJDIR) |
|
239 |
|
240 # |
|
241 # VPATH.h is used elsewhere to generate include flags. By default, |
|
242 # anyone has access to the include files that the JVM area exports, |
|
243 # namely jni.h, jvm.h, and jni_utils.h, plus their platform-specific |
|
244 # relatives. |
|
245 # |
|
246 ifeq ($(PLATFORM), windows) |
|
247 VPATH.h = $(BOOTDIR)/include;$(BOOTDIR)/include/$(PLATFORM_INCLUDE_NAME) |
|
248 else |
|
249 VPATH.h = $(PLATFORM_SRC)/javavm/export$(CLASSPATH_SEPARATOR)$(SHARE_SRC)/javavm/export$(CLASSPATH_SEPARATOR)$(SHARE_SRC)/javavm/include$(CLASSPATH_SEPARATOR)$(PLATFORM_SRC)/javavm/include |
|
250 endif |
|
251 vpath %.h $(VPATH.h) |
|
252 |
|
253 # |
|
254 # Used in two ways: helps link against libjava.so. Also if overridden |
|
255 # determines where your shared library is installed. |
|
256 # |
|
257 ifndef LIB_LOCATION |
|
258 LIB_LOCATION = $(LIBDIR)/$(LIBARCH) |
|
259 endif |
|
260 |
|
261 # |
|
262 # Java header and stub variables |
|
263 # |
|
264 CLASSHDRS = $(patsubst %,$(CLASSHDRDIR)/%.h,$(subst .,_,$(CLASSES.export))) |
|
265 CLASSSTUBOBJS = classstubs.$(OBJECT_SUFFIX) |
|
266 STUBPREAMBLE = $(INCLUDEDIR)/StubPreamble.h |
|
267 |
|
268 # |
|
269 # Classpath seen by javac (different from the one seen by the VM |
|
270 # running javac), and useful variables. |
|
271 # |
|
272 SOURCEPATH = $(VPATH.java) |
|
273 PKG = $(shell $(EXPR) $(PACKAGE) : '\([a-z]*\)') |
|
274 PKGDIR = $(subst .,/,$(PACKAGE)) |
|
275 |
|
276 # |
|
277 # The java/javac/jdk variables (JAVAC_CMD, JAVA_CMD, etc.) |
|
278 # |
|
279 include $(BUILDDIR)/common/shared/Defs-java.gmk |
|
280 |
|
281 # |
|
282 # Set opt level to ALT_OPT if set otherwise _OPT |
|
283 # |
|
284 POPT = $(_OPT$(ALT_OPT))$(ALT_OPT) |
|
285 |
|
286 # |
|
287 # Convenient macros |
|
288 # |
|
289 |
|
290 # Prepare $@ target, remove old one and making sure directory exists |
|
291 define prep-target |
|
292 $(MKDIR) -p $(@D) |
|
293 $(RM) $@ |
|
294 endef |
|
295 |
|
296 # Simple install of $< file to $@ |
|
297 define install-file |
|
298 $(prep-target) |
|
299 $(CP) $< $@ |
|
300 endef |
|
301 |
|
302 # Cleanup rule for after debug java run (hotspot.log file is left around) |
|
303 # (This could be an old leftover file in a read-only area, use the @- prefix) |
|
304 HOTSPOT_LOG_NAME = hotspot.log |
|
305 define java-vm-cleanup |
|
306 if [ -w $(HOTSPOT_LOG_NAME) ] ; then $(RM) $(HOTSPOT_LOG_NAME); fi |
|
307 endef |
|
308 |
|
309 # Default make settings for processing SUBDIRS with clobber or clean names |
|
310 SUBDIRS_MAKEFLAGS-clobber = INCREMENTAL_BUILD=false |
|
311 SUBDIRS_MAKEFLAGS-clean = INCREMENTAL_BUILD=false |
|
312 |
|
313 # Current directory |
|
314 CURRENT_DIRECTORY := $(shell $(PWD)) |
|
315 |
|
316 # If no timing wanted, we need to define these as empty |
|
317 ifdef NO_TIMING |
|
318 |
|
319 TIMING_ID:=NA |
|
320 |
|
321 define TIMING_start |
|
322 t=0:0:0:0 |
|
323 endef |
|
324 |
|
325 define TIMING_end |
|
326 time_used=0 |
|
327 endef |
|
328 |
|
329 else # NO_TIMING |
|
330 |
|
331 # Default timing id |
|
332 TIMING_ID:=$(shell $(BASENAME) $(CURRENT_DIRECTORY)) |
|
333 |
|
334 # Timing start (must be used in same shell, e.g. same command line) |
|
335 # Defines the shell variable $1 to have the start time. |
|
336 define TIMING_start |
|
337 $1=`$(DATE) +%j:%H:%M:%S` |
|
338 endef |
|
339 |
|
340 # Timing end (must be used in same shell, e.g. same command line) |
|
341 # Expects shell variable $1 to have been defined as the start time. |
|
342 # Expects shell variable $2 to have timing id string |
|
343 # Sets total_seconds shell variable as the total seconds used. |
|
344 # Sets time_used shell variable to contain format "%dh%dm%ds" |
|
345 define TIMING_end |
|
346 begTime="$${$1}"; \ |
|
347 timing_id="$${$2}"; \ |
|
348 endTime=`$(DATE) +%j:%H:%M:%S`; \ |
|
349 d1=`$(ECHO) $${begTime} | $(CUT) -d':' -f1 | $(SED) -e 's@^0*@@'`; \ |
|
350 if [ "$${d1}" = "" ] ; then d1=0; fi; \ |
|
351 h1=`$(ECHO) $${begTime} | $(CUT) -d':' -f2 | $(SED) -e 's@^0*@@'`; \ |
|
352 if [ "$${h1}" = "" ] ; then h1=0; fi; \ |
|
353 m1=`$(ECHO) $${begTime} | $(CUT) -d':' -f3 | $(SED) -e 's@^0*@@'`; \ |
|
354 if [ "$${m1}" = "" ] ; then m1=0; fi; \ |
|
355 s1=`$(ECHO) $${begTime} | $(CUT) -d':' -f4 | $(SED) -e 's@^0*@@'`; \ |
|
356 if [ "$${s1}" = "" ] ; then s1=0; fi; \ |
|
357 d2=`$(ECHO) $${endTime} | $(CUT) -d':' -f1 | $(SED) -e 's@^0*@@'`; \ |
|
358 if [ "$${d2}" = "" ] ; then d2=0; fi; \ |
|
359 h2=`$(ECHO) $${endTime} | $(CUT) -d':' -f2 | $(SED) -e 's@^0*@@'`; \ |
|
360 if [ "$${h2}" = "" ] ; then h2=0; fi; \ |
|
361 m2=`$(ECHO) $${endTime} | $(CUT) -d':' -f3 | $(SED) -e 's@^0*@@'`; \ |
|
362 if [ "$${m2}" = "" ] ; then m2=0; fi; \ |
|
363 s2=`$(ECHO) $${endTime} | $(CUT) -d':' -f4 | $(SED) -e 's@^0*@@'`; \ |
|
364 if [ "$${s2}" = "" ] ; then s2=0; fi; \ |
|
365 t1_secs=`$(EXPR) $${d1} '*' 60 '*' 60 '*' 24 '+' $${h1} '*' 60 '*' 60 \ |
|
366 '+' $${m1} '*' 60 '+' $${s1}`; \ |
|
367 t2_secs=`$(EXPR) $${d2} '*' 60 '*' 60 '*' 24 '+' $${h2} '*' 60 '*' 60 \ |
|
368 '+' $${m2} '*' 60 '+' $${s2}`; \ |
|
369 total_seconds=`$(EXPR) $${t2_secs} '-' $${t1_secs}`; \ |
|
370 if [ "$${total_seconds}" -lt 0 ] ; then total_seconds=0; fi; \ |
|
371 t_hour=`$(EXPR) $${total_seconds} '/' '(' 60 '*' 60 ')'`h; \ |
|
372 t_min=`$(EXPR) '(' $${total_seconds} '%' '(' 60 '*' 60 ')' ')' '/' 60`m; \ |
|
373 t_sec=`$(EXPR) $${total_seconds} '%' 60`s; \ |
|
374 time_used=$${t_sec}; \ |
|
375 if [ "$${t_hour}" != "0h" ] ; then \ |
|
376 time_used=$${t_hour}$${t_min}$${t_sec}; \ |
|
377 elif [ "$${t_min}" != "0m" ] ; then \ |
|
378 time_used=$${t_min}$${t_sec}; \ |
|
379 else \ |
|
380 time_used=$${t_sec}; \ |
|
381 fi; \ |
|
382 $(PRINTF) " Timing: %05d seconds or %s for %s\n" \ |
|
383 $${total_seconds} $${time_used} $${timing_id} |
|
384 endef |
|
385 |
|
386 endif # NO_TIMING |
|
387 |
|
388 # Given a SUBDIRS list, cd into them and make them |
|
389 # SUBDIRS_MAKEFLAGS Make settings for a subdir make |
|
390 # SUBDIRS_MAKEFLAGS-$@ Make settings specific to this target |
|
391 define SUBDIRS-loop |
|
392 @$(ECHO) "Begin Processing SUBDIRS: $(SUBDIRS)" |
|
393 @for i in DUMMY $(SUBDIRS) ; do \ |
|
394 if [ "$$i" != "DUMMY" ] ; then \ |
|
395 $(ECHO) ">>>Recursively making "$$i" "$@" @ `$(DATE)` ..."; \ |
|
396 timing_id="$(TIMING_ID)-`$(BASENAME) $${i}`"; \ |
|
397 $(call TIMING_start,startTime); \ |
|
398 curDir=$(CURRENT_DIRECTORY); \ |
|
399 $(CD) $$i; $(MAKE) $@ TIMING_ID=$${timing_id} \ |
|
400 $(SUBDIRS_MAKEFLAGS) \ |
|
401 $(SUBDIRS_MAKEFLAGS-$@) \ |
|
402 FULL_VERSION=$(FULL_VERSION) \ |
|
403 RELEASE=$(RELEASE) || exit 1; \ |
|
404 $(CD) $${curDir}; \ |
|
405 $(call TIMING_end,startTime,timing_id); \ |
|
406 $(ECHO) "<<<Finished Recursively making "$$i" "$@" @ `$(DATE)`." ; \ |
|
407 fi ; \ |
|
408 done |
|
409 @$(ECHO) "Done Processing SUBDIRS: $(SUBDIRS)" |
|
410 endef |
|
411 |
|
412 # Given a OTHERSUBDIRS list, cd into them and make them (extra loop define) |
|
413 # OTHERSUBDIRS_MAKEFLAGS Make settings for a subdir make |
|
414 define OTHERSUBDIRS-loop |
|
415 @$(ECHO) "Begin Processing OTHERSUBDIRS: $(OTHERSUBDIRS)" |
|
416 @for i in DUMMY $(OTHERSUBDIRS) ; do \ |
|
417 if [ "$$i" != "DUMMY" ] ; then \ |
|
418 $(ECHO) ">>>Recursively making "$$i" "$@" @ `$(DATE)` ..."; \ |
|
419 timing_id="$(TIMING_ID)-`$(BASENAME) $${i}`"; \ |
|
420 $(call TIMING_start,startTime); \ |
|
421 curDir=$(CURRENT_DIRECTORY); \ |
|
422 $(CD) $$i; $(MAKE) $@ TIMING_ID=$${timing_id} \ |
|
423 $(OTHERSUBDIRS_MAKEFLAGS) \ |
|
424 FULL_VERSION=$(FULL_VERSION) \ |
|
425 RELEASE=$(RELEASE) || exit 1; \ |
|
426 $(CD) $${curDir}; \ |
|
427 $(call TIMING_end,startTime,timing_id); \ |
|
428 $(ECHO) "<<<Finished Recursively making "$$i" "$@" @ `$(DATE)`." ; \ |
|
429 fi ; \ |
|
430 done |
|
431 @$(ECHO) "Done Processing OTHERSUBDIRS: $(OTHERSUBDIRS)" |
|
432 endef |
|
433 |
|
434 # |
|
435 # Create BYFILE OPT and DBG settings, if CFLAGS_OPT/foobar.o is set then it is |
|
436 # used for this file, otherwise the default settings are used. |
|
437 # |
|
438 CFLAGS_$(VARIANT)/BYFILE = $(CFLAGS_$(VARIANT)/$(@F)) \ |
|
439 $(CFLAGS_$(VARIANT)$(CFLAGS_$(VARIANT)/$(@F))) |
|
440 CXXFLAGS_$(VARIANT)/BYFILE = $(CXXFLAGS_$(VARIANT)/$(@F)) \ |
|
441 $(CXXFLAGS_$(VARIANT)$(CXXFLAGS_$(VARIANT)/$(@F))) |
|
442 |
|
443 # |
|
444 # Tool flags |
|
445 # |
|
446 ASFLAGS = $(ASFLAGS_$(VARIANT)) $(ASFLAGS_COMMON) $(OTHER_ASFLAGS) |
|
447 CFLAGS = $(CFLAGS_$(VARIANT)/BYFILE) $(CFLAGS_COMMON) $(OTHER_CFLAGS) |
|
448 CXXFLAGS = $(CXXFLAGS_$(VARIANT)/BYFILE) $(CXXFLAGS_COMMON) $(OTHER_CXXFLAGS) |
|
449 CPPFLAGS = $(CPPFLAGS_$(VARIANT)) $(CPPFLAGS_COMMON) $(OTHER_CPPFLAGS) \ |
|
450 $(DEFINES) $(OPTIONS:%=-D%) |
|
451 LDFLAGS = $(LDFLAGS_$(VARIANT)) $(LDFLAGS_COMMON) $(OTHER_LDFLAGS) |
|
452 LDLIBS = $(OTHER_LDLIBS) $(LDLIBS_$(VARIANT)) $(LDLIBS_COMMON) |
|
453 LINTFLAGS = $(LINTFLAGS_$(VARIANT)) $(LINTFLAGS_COMMON) \ |
|
454 $(OTHER_LINTFLAGS) |
|
455 |
|
456 # this should be moved into Defs-<platform>.gmk..... |
|
457 ifeq ($(PLATFORM), windows) |
|
458 VERSION_DEFINES = -DRELEASE="\"$(RELEASE)\"" |
|
459 else |
|
460 VERSION_DEFINES = -DRELEASE='"$(RELEASE)"' |
|
461 endif |
|
462 |
|
463 # Note: As a rule, GNU Make rules should not appear in any of the |
|
464 # Defs*.gmk files. These were added for Kestrel-Solaris and do address |
|
465 # a TeamWare bug. They should be moved elsewhere for Merlin. |
|
466 # |
|
467 # Override gnumake built-in rules which do sccs get operations badly. |
|
468 # (They put the checked out code in the current directory, not in the |
|
469 # directory of the original file.) |
|
470 # Since this is a symptom of a teamware failure, complain and die on the spot. |
|
471 |
|
472 # This message immediately goes to stdout and the build terminates. |
|
473 define SCCS-trouble |
|
474 $(error \ |
|
475 "ERROR: File $@ referenced while building in $(CURRENT_DIRECTORY) \ |
|
476 is out of date with respect to its SCCS file $<. \ |
|
477 This can happen from an unresolved Teamware conflict, a file movement, or \ |
|
478 a failure in which SCCS files are updated but the 'sccs get' was not done. \ |
|
479 You should double check for other out of date files in your workspace. \ |
|
480 Or run: cd $(TOPDIR) && $(MAKE) sccs_get") |
|
481 endef |
|
482 |
|
483 %:: s.% |
|
484 @$(SCCS-trouble) |
|
485 %:: SCCS/s.% |
|
486 @$(SCCS-trouble) |
|
487 @$(ECHO) " is out of date with respect to its SCCS file." >> $(WARNING_FILE) |
|
488 @$(ECHO) " This file may be from an unresolved Teamware conflict." >> $(WARNING_FILE) |
|
489 @$(ECHO) " This is also a symptom of a Teamware bringover/putback failure" >> $(WARNING_FILE) |
|
490 @$(ECHO) " in which SCCS files are updated but not checked out." >> $(WARNING_FILE) |
|
491 @$(ECHO) " Check for other out of date files in your workspace." >> $(WARNING_FILE) |
|
492 @$(ECHO) "" >> $(WARNING_FILE) |
|
493 @#exit 666 |
|
494 |
|
495 ifdef INSANE |
|
496 export INSANE |
|
497 endif |
|
498 |
|
499 ifdef ALT_COPYRIGHT_YEAR |
|
500 COPYRIGHT_YEAR = $(ALT_COPYRIGHT_YEAR) |
|
501 else |
|
502 COPYRIGHT_YEAR = $(shell $(DATE) '+%Y') |
|
503 endif |
|
504 |
|
505 # Install of imported file (JDK_IMPORT_PATH, or some other external location) |
|
506 define install-import-file |
|
507 @$(ECHO) "ASSEMBLY_IMPORT: $@" |
|
508 $(install-file) |
|
509 endef |
|
510 |
|
511 .PHONY: all build clean clobber |