--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/make/common/Program.gmk Sat Dec 01 00:00:00 2007 +0000
@@ -0,0 +1,294 @@
+#
+# Copyright 1995-2007 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.
+#
+
+#
+# Generic makefile for building executables.
+#
+
+# WARNING: This file is shared with other workspaces.
+# So when it includes other files, it must use JDK_TOPDIR.
+#
+
+#
+# If building programs, use a normal compile approach
+#
+ifeq ($(COMPILE_APPROACH),batch)
+ override COMPILE_APPROACH = normal
+endif
+
+ifndef LAUNCHER_PLATFORM_SRC
+LAUNCHER_PLATFORM_SRC = $(PLATFORM_SRC)
+endif
+
+ifndef LAUNCHER_SHARE_SRC
+LAUNCHER_SHARE_SRC = $(SHARE_SRC)
+endif
+
+ACTUAL_PROGRAM_NAME = $(PROGRAM)$(EXE_SUFFIX)
+ACTUAL_PROGRAM_DIR = $(BINDIR)
+ACTUAL_PROGRAM = $(ACTUAL_PROGRAM_DIR)/$(ACTUAL_PROGRAM_NAME)
+
+JVMCFG = $(LIBDIR)/$(LIBARCH)/jvm.cfg
+
+# Make sure the default rule is all
+program_default_rule: all
+
+program: $(ACTUAL_PROGRAM)
+
+include $(JDK_TOPDIR)/make/common/Rules.gmk
+
+ifdef NEVER_ACT_AS_SERVER_CLASS_MACHINE
+OTHER_CPPFLAGS += -DNEVER_ACT_AS_SERVER_CLASS_MACHINE
+endif
+
+#
+# Create a dependency on libjli (Java Launcher Infrastructure)
+#
+# On UNIX, this is a relative dependency using $ORIGIN. Unfortunately, to
+# do this reliably on Linux takes a different syntax than Solaris.
+#
+# On Windows, this is done by using the same directory as the executable
+# itself, as with all the Windows libraries.
+#
+ifneq (,$(findstring $(PLATFORM), linux solaris)) # UNIX systems
+ LDFLAGS += -L $(LIBDIR)/$(LIBARCH)/jli
+ OTHER_LDLIBS += -ljli
+ ifeq ($(PLATFORM), solaris)
+ ifeq ($(ARCH_DATA_MODEL), 32)
+ LDFLAGS += -R \$$ORIGIN/../lib/$(LIBARCH)/jli
+ LDFLAGS += -R \$$ORIGIN/../jre/lib/$(LIBARCH)/jli
+ else
+ LDFLAGS += -R \$$ORIGIN/../../lib/$(LIBARCH)/jli
+ LDFLAGS += -R \$$ORIGIN/../../jre/lib/$(LIBARCH)/jli
+ endif
+ endif
+ ifeq ($(PLATFORM), linux)
+ LDFLAGS += -z origin
+ LDFLAGS += -Wl,--allow-shlib-undefined
+ LDFLAGS += -Wl,-rpath -Wl,\$$ORIGIN/../lib/$(LIBARCH)/jli
+ LDFLAGS += -Wl,-rpath -Wl,\$$ORIGIN/../jre/lib/$(LIBARCH)/jli
+ endif
+endif
+ifeq ($(PLATFORM), windows)
+ JLI_LCF = $(OUTPUTDIR)/tmp/java/jli/$(OBJDIRNAME)/jli.lcf
+ ifdef STATIC_JLI
+ LDFLAGS += -libpath:$(OUTPUTDIR)/tmp/java/jli/$(OBJDIRNAME)/static
+ else
+ LDFLAGS += -libpath:$(OUTPUTDIR)/tmp/java/jli/$(OBJDIRNAME)
+ endif
+ OTHER_LDLIBS += jli.lib
+endif
+
+#
+# Launcher specific files.
+#
+FILES_o = \
+ $(OBJDIR)/main.$(OBJECT_SUFFIX)
+
+# We either need to import (copy) binaries in, or build them
+ifneq ($(IMPORT_NATIVE_BINARIES),true)
+ COMPILE_IT=true
+else
+ COMPILE_IT=false
+endif
+
+ifeq ($(COMPILE_IT),true)
+
+$(ACTUAL_PROGRAM):: classes $(JVMCFG) $(INIT)
+
+#
+# Windows only
+#
+ifeq ($(PLATFORM), windows)
+
+# J2SE name required here
+RC_FLAGS += /D "J2SE_FNAME=$(PROGRAM)$(EXE_SUFFIX)" \
+ /D "J2SE_INTERNAL_NAME=$(PROGRAM)" \
+ /D "J2SE_FTYPE=0x1L"
+
+$(OBJDIR)/$(PROGRAM).res: $(VERSIONINFO_RESOURCE)
+ @$(prep-target)
+ifndef LOCAL_RESOURCE_FILE
+ $(RC) $(RC_FLAGS) $(CC_OBJECT_OUTPUT_FLAG)$(@) $(VERSIONINFO_RESOURCE)
+endif
+
+$(OBJDIR)/$(PROGRAM).lcf: $(OBJDIR)/$(PROGRAM).res $(FILES_o)
+ @$(prep-target)
+ @$(ECHO) $(FILES_o) > $@
+ ifndef LOCAL_RESOURCE_FILE
+ @$(ECHO) $(OBJDIR)/$(PROGRAM).res >> $@
+ endif
+ @$(ECHO) setargv.obj >> $@
+ @$(ECHO) Created $@
+
+$(ACTUAL_PROGRAM):: $(OBJDIR)/$(PROGRAM)$(EXE_SUFFIX)
+ @$(install-file)
+
+ifeq ($(ARCH_DATA_MODEL), 32)
+ STACK_SIZE=327680
+else
+# We need more Stack for Windows 64bit
+ STACK_SIZE=1048576
+endif
+
+$(OBJDIR)/$(PROGRAM)$(EXE_SUFFIX):: $(OBJDIR)/$(PROGRAM).lcf $(FILES_o) $(JLI_LCF)
+ @$(prep-target)
+ @set -- $?; \
+ $(ECHO) Rebuilding $@ because of $$1 $$2 $$3 $$4 $$5 $$6 $${7:+...};
+ $(LINK) -out:$@ /STACK:$(STACK_SIZE) \
+ -map:$(OBJDIR)/$(PROGRAM).map $(LFLAGS) $(LDFLAGS) \
+ @$(OBJDIR)/$(PROGRAM).lcf $(LDLIBS)
+
+else # PLATFORM
+
+#
+# Note that we have to link -lthread even when USE_PTHREADS is true.
+# This is becuase checkForCorrectLibthread() croaks otherwise.
+#
+LIBTHREAD = -lthread
+ifeq ($(USE_PTHREADS),true)
+ THREADLIBS = -lpthread $(LIBTHREAD)
+else # USE_PTHREADS
+ THREADLIBS = $(LIBTHREAD)
+endif # USE_PTHREADS
+
+#
+# This rule only applies on unix. It supports quantify and its ilk.
+#
+$(ACTUAL_PROGRAM):: $(FILES_o)
+ @$(prep-target)
+ @set -- $?; \
+ $(ECHO) Rebuilding $@ because of $$1 $$2 $$3 $$4 $$5 $$6 $${7:+...};
+ @$(MKDIR) -p $(TEMPDIR)
+ $(LINK_PRE_CMD) $(CC) $(CC_OBJECT_OUTPUT_FLAG)$@ $(LDFLAGS) \
+ $(FILES_o) $(THREADLIBS) $(LDLIBS)
+
+endif # PLATFORM
+
+else # COMPILE_IT
+
+$(ACTUAL_PROGRAM):: $(JVMCFG)
+
+# Copies in the file from the JDK_IMPORT_PATH area
+$(ACTUAL_PROGRAM_DIR)/%: $(JDK_IMPORT_PATH)/jre/bin/%
+ @$(install-import-file)
+$(ACTUAL_PROGRAM_DIR)/%: $(JDK_IMPORT_PATH)/bin/%
+ @$(install-import-file)
+
+endif # COMPILE_IT
+
+
+clean::
+ifeq ($(PLATFORM), windows)
+ $(RM) $(OBJDIR)/$(PROGRAM).rc
+ $(RM) $(OBJDIR)/$(PROGRAM).ico
+ $(RM) $(OBJDIR)/$(PROGRAM).lcf
+ $(RM) $(OBJDIR)/$(PROGRAM).map
+ $(RM) $(OBJDIR)/$(PROGRAM).exp
+ $(RM) $(OBJDIR)/$(PROGRAM).lib
+ $(RM) $(OBJDIR)/$(PROGRAM)$(EXE_SUFFIX)
+ $(RM) $(OBJDIR)/$(PROGRAM).ilk
+ $(RM) *.pdb
+endif
+
+
+clobber::
+ $(RM) $(ACTUAL_PROGRAM)
+
+#
+# Now include make dependencies (created during compilation, see Rules.gmk)
+#
+ifeq ($(INCREMENTAL_BUILD),true)
+# Workaround: gnumake sometimes says files is empty when it shouldn't
+# was: files := $(foreach file, $(wildcard */$(ARCH)/*.$(DEPEND_SUFFIX)), $(file))
+files := $(shell $(LS) $(OBJDIR)/*.$(DEPEND_SUFFIX) 2>/dev/null)
+ifneq ($(strip $(files)),)
+include $(files)
+endif # files
+endif # INCREMENTAL_BUILD
+
+ifdef JAVA_ARGS
+OTHER_CPPFLAGS += -DJAVA_ARGS=$(JAVA_ARGS)
+OTHER_CPPFLAGS += -DLAUNCHER_NAME=\"$(LAUNCHER_NAME)\"
+endif
+
+ifeq ($(PLATFORM), windows)
+ifdef RELEASE
+OTHER_CPPFLAGS += -DVERSION="$(RELEASE)"
+endif
+endif
+
+
+ifneq ($(PLATFORM), windows)
+HAVE_GETHRTIME=true
+endif
+
+ifeq ($(HAVE_GETHRTIME),true)
+OTHER_CPPFLAGS += -DHAVE_GETHRTIME
+endif
+
+OTHER_INCLUDES += -I$(LAUNCHER_SHARE_SRC)/bin -I$(LAUNCHER_PLATFORM_SRC)/bin
+OTHER_INCLUDES += -I$(SHARE_SRC)/native/java/util/zip/zlib-1.1.3
+
+# this may not be necessary...
+ifeq ($(PLATFORM), windows)
+OTHER_CPPFLAGS += -DPROGNAME="\"$(PROGRAM)\""
+VERSION_DEFINES += -DFULL_VERSION="\"$(FULL_VERSION)\""
+else
+OTHER_CPPFLAGS += -DPROGNAME='"$(PROGRAM)"'
+VERSION_DEFINES += -DFULL_VERSION='"$(FULL_VERSION)"'
+endif
+
+VERSION_DEFINES += -DJDK_MAJOR_VERSION='"$(JDK_MAJOR_VERSION)"' \
+ -DJDK_MINOR_VERSION='"$(JDK_MINOR_VERSION)"'
+
+
+
+$(OBJDIR)/main.$(OBJECT_SUFFIX): $(LAUNCHER_SHARE_SRC)/bin/main.c
+ @$(prep-target)
+ $(COMPILE.c) $(CC_OBJECT_OUTPUT_FLAG)$(OBJDIR)/main.$(OBJECT_SUFFIX) \
+ $(VERSION_DEFINES) $<
+
+#
+# How to install jvm.cfg.
+#
+$(JVMCFG): $(LAUNCHER_PLATFORM_SRC)/bin/$(ARCH)/jvm.cfg
+ $(install-file)
+
+#
+# Default dependencies
+#
+
+all: build
+
+build: program
+
+debug:
+ $(MAKE) VARIANT=DBG build
+
+fastdebug:
+ $(MAKE) VARIANT=DBG FASTDEBUG=true build
+
+.PHONY: all build program clean clobber debug fastdebug