| # |
| # Copyright (c) 1995, 2008, Oracle and/or its affiliates. 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. Oracle designates this |
| # particular file as subject to the "Classpath" exception as provided |
| # by Oracle 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
| # or visit www.oracle.com if you need additional information or have any |
| # questions. |
| # |
| |
| # |
| # Common variables used by all the Java makefiles. This file should |
| # not contain rules. |
| # |
| |
| # WARNING: This file is shared with other workspaces. |
| # So when it includes other files, it must use JDK_TOPDIR. |
| # |
| |
| # Check for strange explicit settings (change to empty or true) |
| ifdef OPENJDK |
| ifneq ($(OPENJDK),true) |
| x:=$(error "OPENJDK (if defined) can only be set to true") |
| endif |
| endif |
| |
| # |
| # On Solaris, the 'make' utility from Sun will not work with these makefiles. |
| # This little rule is only understood by Sun's make, and is harmless |
| # when seen by the GNU make tool. If using Sun's make, this causes the |
| # make command to fail. |
| # |
| SUN_MAKE_TEST:sh = echo "ERROR: PLEASE USE GNU VERSION OF MAKE"; exit 33 |
| |
| ifndef JDK_TOPDIR |
| ifdef BUILDDIR |
| JDK_TOPDIR=$(BUILDDIR)/.. |
| else |
| JDK_TOPDIR:=$(error "ERROR: Cannot define top of jdk repository") |
| endif |
| endif |
| ifndef BUILDDIR |
| # Hack, due to deploy repository using this file. |
| BUILDDIR=$(JDK_TOPDIR)/make |
| endif |
| ifndef JDK_MAKE_SHARED_DIR |
| JDK_MAKE_SHARED_DIR=$(JDK_TOPDIR)/make/common/shared |
| endif |
| |
| include $(JDK_MAKE_SHARED_DIR)/Platform.gmk |
| |
| TOPDIR=$(BUILDDIR)/.. |
| |
| include $(JDK_TOPDIR)/make/common/CancelImplicits.gmk |
| |
| # Historically PLATFORM_SRC used to be src/$(PLATFORM), but we switched it to |
| # src/solaris so if you want to build on Linux you didn't need a src/linux |
| # directory. In an ideal world it would be called src/genunix but we are not |
| # there yet. |
| # |
| ifndef SHARE_SRC |
| SHARE_SRC = $(BUILDDIR)/../src/share |
| endif |
| |
| # Files that cannot be included in the OpenJDK distribution are |
| # collected under a parent directory which contains just those files. |
| ifndef CLOSED_SRC |
| CLOSED_SRC = $(BUILDDIR)/../src/closed |
| endif |
| |
| # If we have no closed directory, force it to an openjdk build |
| CLOSED_SRC_DIR_EXISTS := $(shell \ |
| if [ -d $(CLOSED_SRC) ] ; then \ |
| echo true; \ |
| else \ |
| echo false; \ |
| fi) |
| ifeq ($(CLOSED_SRC_DIR_EXISTS), false) |
| OPENJDK = true |
| endif |
| |
| # Define where closed directories are |
| ifdef OPENJDK |
| CLOSED_SRC = |
| CLOSED_SHARE_SRC = |
| else |
| ifndef CLOSED_SHARE_SRC |
| CLOSED_SHARE_SRC = $(CLOSED_SRC)/share |
| endif |
| endif |
| |
| # If OPENJDK is defined, we may still need to use some native libraries that |
| # exist only as part of the closed source. If the closed sources are not |
| # available, the libraries must have been pre-built. Since these libraries |
| # and the JDK internal interfaces to these are reasonably stable this is not |
| # a significant problem. But we do need to provide a way to locate them, |
| # including a way to point to a new one when there have been changes. |
| # |
| # If you have a formal binary plugs download, set ALT_BINARY_PLUGS_PATH |
| # to the location. |
| # (Optionally you can set ALT_CLOSED_JDK_IMPORT_PATH to point to the latest |
| # build JDK, or last promotion for this JDK version, but will not work |
| # on windows). |
| # |
| # As the OPENJDK is built, the binary plugs are used instead of building the |
| # libraries. |
| # Individual Makefiles that specify USE_BINARY_PLUG_LIBRARY, will get |
| # the binary plug copy (or a copy from a built JDK). |
| # |
| # See common/internal/BinaryPlugs.gmk for more information. |
| # |
| # Usage notes: |
| # |
| # ALT_BINARY_PLUGS_JARFILE is probably rarely needed. It can be used |
| # to identify the exact jar file to be used for all closed classes.. |
| # |
| # ALT_BINARY_PLUGS_PATH points to a directory containing precisely the |
| # binaries needed to build. |
| # |
| # ALT_BUILD_BINARY_PLUGS_PATH points to a directory containing binary plug dirs |
| # multiple architectures named using the standard conventions |
| # This is useful for build scripts that need to build multiple architectures |
| # of the OpenJDK. |
| # |
| # ALT_CLOSED_JDK_IMPORT_PATH points to the top-level of a specific platform |
| # JDK image. |
| # |
| # The precedence is that |
| # 1. ALT_BINARY_PLUGS_JARFILE overrides any other location of the classes |
| # 2. ALT_BINARY_PLUGS_PATH overrides all locations of classes and libraries |
| # 3. ALT_BUILD_BINARY_PLUGS_PATH is used to find a ALT_BINARY_PLUGS_PATH |
| # 4. ALT_CLOSED_JDK_IMPORT_PATH is used to locate classes and libraries |
| # Note: If any of the ALT_ variables are modified here, it is assumed |
| # that the build should be done with IMPORT_BINARY_PLUGS=true as |
| # well. Otherwise the default will be IMPORT_BINARY_PLUGS=false. |
| # Lastly, setting IMPORT_BINARY_PLUGS=false on the command line |
| # will override this logic, and plugs will not be imported. |
| # |
| |
| # Always needed, defines the name of the imported/exported jarfile |
| BINARY_PLUGS_JARNAME = rt-closed.jar |
| |
| ifdef OPENJDK |
| ifdef ALT_CLOSED_JDK_IMPORT_PATH |
| CLOSED_JDK_IMPORT_PATH = $(ALT_CLOSED_JDK_IMPORT_PATH) |
| BINARY_PLUGS_PATH = $(CLOSED_JDK_IMPORT_PATH) |
| BINARY_PLUGS_JARFILE = $(CLOSED_JDK_IMPORT_PATH)/jre/lib/rt.jar |
| IMPORT_BINARY_PLUGS=true |
| endif |
| ifdef ALT_BUILD_BINARY_PLUGS_PATH |
| BUILD_BINARY_PLUGS_PATH = $(ALT_BUILD_BINARY_PLUGS_PATH) |
| IMPORT_BINARY_PLUGS=true |
| else |
| BUILD_BINARY_PLUGS_PATH = $(SLASH_JAVA)/re/jdk/$(JDK_VERSION)/promoted/latest/openjdk/binaryplugs |
| endif |
| BINARY_PLUGS_PATH = $(BUILD_BINARY_PLUGS_PATH)/$(PLATFORM)-$(ARCH) |
| BINARY_PLUGS_JARFILE = $(BINARY_PLUGS_PATH)/jre/lib/$(BINARY_PLUGS_JARNAME) |
| ifdef ALT_BINARY_PLUGS_PATH |
| BINARY_PLUGS_PATH = $(ALT_BINARY_PLUGS_PATH) |
| BINARY_PLUGS_JARFILE = $(BINARY_PLUGS_PATH)/jre/lib/$(BINARY_PLUGS_JARNAME) |
| IMPORT_BINARY_PLUGS=true |
| endif |
| ifdef ALT_BINARY_PLUGS_JARFILE |
| BINARY_PLUGS_JARFILE = $(ALT_BINARY_PLUGS_JARFILE) |
| IMPORT_BINARY_PLUGS=true |
| endif |
| endif # OPENJDK |
| |
| # |
| # Get platform definitions |
| # |
| |
| include $(JDK_TOPDIR)/make/common/Defs-$(PLATFORM).gmk |
| |
| # |
| # Freetype logic is applicable to OpenJDK only |
| # |
| ifdef OPENJDK |
| |
| #if we use system lib we do not need to copy it to build tree |
| USING_SYSTEM_FT_LIB=false |
| |
| ifeq ($(PLATFORM), windows) |
| DEVTOOLS_FT_DIR=$(JDK_DEVTOOLS_DIR)/win32/freetype-$(ARCH) |
| endif |
| ifeq ($(PLATFORM), linux) |
| DEVTOOLS_FT_DIR=$(JDK_DEVTOOLS_DIR)/$(PLATFORM)/freetype-$(ARCH) |
| endif |
| ifeq ($(PLATFORM), solaris) |
| # historically for Solaris we have slightly different devtools |
| # naming conventions |
| DEVTOOLS_FT_DIR=$(JDK_DEVTOOLS_DIR)/$(ARCH_FAMILY)/freetype-$(ARCH) |
| endif |
| |
| DEVTOOLS_FT_DIR_EXISTS = $(shell \ |
| if [ -f $(DEVTOOLS_FT_DIR)/include/ft2build.h ] ; then \ |
| echo true; \ |
| else \ |
| echo false; \ |
| fi) |
| |
| ifdef ALT_FREETYPE_LIB_PATH |
| FREETYPE_LIB_PATH = $(ALT_FREETYPE_LIB_PATH) |
| else |
| ifeq ($(DEVTOOLS_FT_DIR_EXISTS), true) |
| FREETYPE_LIB_PATH = $(DEVTOOLS_FT_DIR)/lib |
| else |
| FREETYPE_LIB_PATH = /usr/lib |
| USING_SYSTEM_FT_LIB=true |
| endif |
| endif |
| |
| ifdef ALT_FREETYPE_HEADERS_PATH |
| FREETYPE_HEADERS_PATH = $(ALT_FREETYPE_HEADERS_PATH) |
| else |
| ifeq ($(DEVTOOLS_FT_DIR_EXISTS), true) |
| FREETYPE_HEADERS_PATH = $(DEVTOOLS_FT_DIR)/include |
| else |
| FREETYPE_HEADERS_PATH = /usr/include |
| endif |
| endif |
| endif |
| |
| # |
| # zlib version |
| # |
| ZLIB_VERSION = 1.2.3 |
| |
| |
| # |
| # Localizations for the different parts of the product beyond English |
| # |
| |
| JRE_LOCALES = de es fr it ja ko sv zh_CN zh_TW zh_HK |
| PLUGIN_LOCALES = de es fr it ja ko sv zh_CN zh_TW zh_HK |
| JDK_LOCALES = ja zh_CN |
| |
| # |
| # A list of locales we support but don't have resource files. |
| # This is defined to optimize the search of resource bundles. |
| # |
| JRE_NONEXIST_LOCALES = en en_US de_DE es_ES fr_FR it_IT ja_JP ko_KR sv_SE zh |
| |
| # |
| # All libraries except libjava and libjvm itself link against libjvm and |
| # libjava, the latter for its exported common utilities. libjava only links |
| # against libjvm. Programs' makefiles take their own responsibility for |
| # adding other libs. |
| # |
| ifdef PACKAGE |
| # put JAVALIB first, but do not lose any platform specific values.... |
| LDLIBS_COMMON = $(JAVALIB) |
| endif # PACKAGE |
| |
| # |
| # Libraries that must appear ahead of libc.so on the link command line |
| # |
| ifdef PROGRAM |
| |
| ifeq ($(PLATFORM), solaris) |
| LDLIBS_COMMON = -lthread -ldl |
| endif |
| |
| ifeq ($(PLATFORM), linux) |
| LDLIBS_COMMON = -ldl |
| endif |
| |
| endif # PROGRAM |
| |
| LDLIBS_COMMON += $(EXTRA_LIBS) |
| |
| # |
| # Default is to build, not import native binaries |
| # |
| ifndef IMPORT_NATIVE_BINARIES |
| IMPORT_NATIVE_BINARIES=false |
| endif |
| # If importing libraries in, no incremental builds |
| ifeq ($(IMPORT_NATIVE_BINARIES),true) |
| INCREMENTAL_BUILD=false |
| endif |
| |
| # for generated libraries |
| LIBDIR = $(OUTPUTDIR)/lib |
| ABS_LIBDIR = $(ABS_OUTPUTDIR)/lib |
| # Optional place to save the windows .lib files |
| LIBFILES_DIR = $(OUTPUTDIR)/libfiles |
| # for ext jre files |
| EXTDIR = $(LIBDIR)/ext |
| # for generated include files |
| INCLUDEDIR = $(OUTPUTDIR)/include |
| # for generated class files |
| CLASSBINDIR = $(OUTPUTDIR)/classes |
| DEMOCLASSDIR = $(OUTPUTDIR)/democlasses |
| # for modules |
| MODULES_DIR = $(OUTPUTDIR)/modules |
| ABS_MODULES_DIR = $(ABS_OUTPUTDIR)/modules |
| # for generated tool class files |
| BUILDTOOLCLASSDIR = $(OUTPUTDIR)/btclasses |
| # for build tool jar files |
| BUILDTOOLJARDIR = $(OUTPUTDIR)/btjars |
| ABS_BUILDTOOLJARDIR = $(ABS_OUTPUTDIR)/btjars |
| # for generated tool class files |
| BUILDTOOLBINDIR = $(OUTPUTDIR)/btbins |
| # for generated java source files |
| GENSRCDIR = $(OUTPUTDIR)/gensrc |
| # for generated C source files (not javah) |
| GENNATIVESRCDIR = $(OUTPUTDIR)/gennativesrc |
| # for imported source files |
| IMPORTSRCDIR = $(OUTPUTDIR)/impsrc |
| # for imported documents |
| IMPORTDOCDIR = $(OUTPUTDIR)/impdoc |
| # for generated demo |
| DEMODIR = $(OUTPUTDIR)/demo |
| # for sample code |
| SAMPLEDIR = $(OUTPUTDIR)/sample |
| # for generated documentation |
| DOCSDIR = $(OUTPUTDIR)/docs$(DOCSDIRSUFFIX) |
| DOCSDIRSUFFIX = |
| |
| # The MESSAGE, WARNING and ERROR files are used to store sanityck and |
| # SCCS check messages, warnings and errors. |
| ifndef ERROR_FILE |
| ERROR_FILE = $(OUTPUTDIR)/sanityCheckErrors.txt |
| endif |
| ifndef WARNING_FILE |
| WARNING_FILE = $(OUTPUTDIR)/sanityCheckWarnings.txt |
| endif |
| ifndef MESSAGE_FILE |
| MESSAGE_FILE = $(OUTPUTDIR)/sanityCheckMessages.txt |
| endif |
| |
| JDK_IMAGE_DIR = $(ABS_OUTPUTDIR)/j2sdk-image |
| JRE_IMAGE_DIR = $(ABS_OUTPUTDIR)/j2re-image |
| |
| #where the demo source can be found |
| DEMOSRCDIR = $(SHARE_SRC)/demo |
| |
| # An attempt is made to generate unique enough directories for the |
| # generated files to not have name collisisons. Most build units |
| # defines PRODUCT (except Release.gmk), but then they may or may |
| # not define PACKAGE, THREADIR (only HPI uses this), PROGRAM, and |
| # LIBRARY. This code chunk attempts to generate a unique |
| # OBJDIR/CLASSHDRDIR for each build unit based on which of those |
| # values are set within each build unit. |
| |
| UNIQUE_LOCATION_STRING = tmp |
| |
| ifneq ($(PRODUCT),) |
| UNIQUE_LOCATION_STRING += /$(PRODUCT) |
| endif |
| |
| ifneq ($(PACKAGE),) |
| UNIQUE_LOCATION_STRING += /$(PACKAGE) |
| endif |
| |
| ifneq ($(PROGRAM),) |
| UNIQUE_LOCATION_STRING += /$(PROGRAM) |
| endif |
| |
| ifneq ($(LIBRARY),) |
| ifneq ($(LIBRARY_OUTPUT),) |
| UNIQUE_LOCATION_STRING += /$(LIBRARY_OUTPUT) |
| else |
| UNIQUE_LOCATION_STRING += /$(LIBRARY) |
| endif |
| endif |
| |
| ifneq ($(THREADDIR),) |
| UNIQUE_LOCATION_STRING += /$(THREADDIR) |
| endif |
| |
| # |
| # Build units may or may not define MODULE. Default to "other". |
| # |
| # MODULE variable defines the lowest-level module name that |
| # might or might not be the name of the modules created in |
| # the modules build (see make/modules/modules.config and |
| # modules.group). |
| # |
| MODULES_TEMPDIR = $(OUTPUTDIR)/tmp/modules |
| ABS_MODULES_TEMPDIR = $(ABS_OUTPUTDIR)/tmp/modules |
| |
| ifndef MODULE |
| MODULE = other |
| endif |
| override MODULE_DEST_DIR = $(MODULES_TEMPDIR)/$(MODULE) |
| |
| # the use of += above makes a space separated list which we need to |
| # remove for filespecs. |
| # |
| NULLSTRING := |
| ONESPACE := $(NULLSTRING) # space before this comment is required. |
| UNIQUE_PATH = $(subst $(ONESPACE),,$(UNIQUE_LOCATION_STRING)) |
| |
| # TEMPDIR is a unique general purpose directory |
| # need to use 'override' because GNU Make on Linux exports the wrong |
| # value. |
| override TEMPDIR = $(OUTPUTDIR)/$(UNIQUE_PATH) |
| override ABS_TEMPDIR = $(ABS_OUTPUTDIR)/$(UNIQUE_PATH) |
| |
| # This must be created right away for pattern rules in Sanity.gmk to work. |
| dummy1:=$(shell $(MKDIR) -p $(TEMPDIR)) |
| dummy2:=$(shell $(MKDIR) -p $(TEMP_DISK)) |
| |
| # OBJDIRNAME is the name of the directory where the object code is to |
| # be placed. It's name depends on whether the data model architecture |
| # is 32-bit or not. |
| ifneq ($(ARCH_DATA_MODEL), 32) |
| OBJDIRNAME = obj$(ARCH_DATA_MODEL)$(OBJDIRNAME_SUFFIX) |
| else |
| OBJDIRNAME = obj$(OBJDIRNAME_SUFFIX) |
| endif |
| OBJDIR = $(TEMPDIR)/$(OBJDIRNAME) |
| |
| # CLASSHDRDIR is where the generated C Class Header files go. |
| CLASSHDRDIR = $(TEMPDIR)/CClassHeaders |
| |
| # |
| # CLASSDESTDIR can be used to specify the directory where generated classes |
| # are to be placed. The default is CLASSBINDIR. |
| # |
| ifndef CLASSDESTDIR |
| CLASSDESTDIR = $(CLASSBINDIR) |
| endif |
| |
| INCLUDES = -I. -I$(CLASSHDRDIR) \ |
| $(patsubst %,-I%,$(subst $(CLASSPATH_SEPARATOR), ,$(VPATH.h))) $(OTHER_INCLUDES) |
| OTHER_CPPFLAGS = $(INCLUDES) |
| |
| |
| # |
| # vpaths. These are the default locations searched for source files. |
| # GNUmakefiles of individual areas often override the default settings. |
| # There are no longer default vpath entries for C and assembler files |
| # so we can ensure that libraries don't get their hands on JVM files. |
| # |
| # We define an intermediate variable for Java files because |
| # we use its value later to help define $SOURCEPATH |
| |
| VPATH0.java = $(GENSRCDIR)$(CLASSPATH_SEPARATOR)$(PLATFORM_SRC)/classes$(CLASSPATH_SEPARATOR)$(SHARE_SRC)/classes |
| ifdef OPENJDK |
| VPATH.java = $(VPATH0.java) |
| else |
| # |
| # If filenames are duplicated between open/closed workspaces, prefer |
| # the closed files. |
| # |
| # Source ordering is important: some targets depend on closed files |
| # replacing open ones, and thus the closed file sources must be found |
| # before the open ones. |
| # |
| # Don't reorder without consulting the teams that depend on this behavior. |
| # |
| VPATH.java = $(CLOSED_PLATFORM_SRC)/classes$(CLASSPATH_SEPARATOR)$(CLOSED_SHARE_SRC)/classes$(CLASSPATH_SEPARATOR)$(VPATH0.java) |
| endif |
| vpath %.java $(VPATH.java) |
| vpath %.class $(CLASSBINDIR) |
| vpath %.$(OBJECT_SUFFIX) $(OBJDIR) |
| |
| # |
| # VPATH.h is used elsewhere to generate include flags. By default, |
| # anyone has access to the include files that the JVM area exports, |
| # namely jni.h, jvm.h, and jni_utils.h, plus their platform-specific |
| # relatives. |
| # |
| VPATH.h = $(PLATFORM_SRC)/javavm/export$(CLASSPATH_SEPARATOR)$(SHARE_SRC)/javavm/export |
| vpath %.h $(VPATH.h) |
| |
| # |
| # Used in two ways: helps link against libjava.so. Also if overridden |
| # determines where your shared library is installed. |
| # |
| ifndef LIB_LOCATION |
| LIB_LOCATION = $(LIBDIR)/$(LIBARCH) |
| endif |
| |
| # |
| # Java header and stub variables |
| # |
| CLASSHDRS = $(patsubst %,$(CLASSHDRDIR)/%.h,$(subst .,_,$(CLASSES.export))) |
| CLASSSTUBOBJS = classstubs.$(OBJECT_SUFFIX) |
| STUBPREAMBLE = $(INCLUDEDIR)/StubPreamble.h |
| |
| # |
| # Classpath seen by javac (different from the one seen by the VM |
| # running javac), and useful variables. |
| # |
| SOURCEPATH = $(VPATH.java) |
| PKG = $(shell $(EXPR) $(PACKAGE) : '\([a-z]*\)') |
| PKGDIR = $(subst .,/,$(PACKAGE)) |
| |
| # |
| # The java/javac/jdk variables (JAVAC_CMD, JAVA_CMD, etc.) |
| # |
| include $(JDK_MAKE_SHARED_DIR)/Defs-java.gmk |
| |
| # |
| # Macros to find the module that $@ belongs to |
| # |
| |
| UNIQUE_PATH_PATTERN = $(subst /,.,$(UNIQUE_PATH)) |
| MODULE_PATH_PATTERN = -e 's%.*\/classes\/%classes\/%' \ |
| -e 's%.*\/$(UNIQUE_PATH_PATTERN)\/%classes\/%' \ |
| -e 's%.*\/lib\/%lib\/%' \ |
| -e 's%.*\/bin\/%bin\/%' \ |
| -e 's%.*\/include\/%include\/%' \ |
| -e 's%.*\/demo\/%demo\/%' \ |
| -e 's%.*\/sample\/%sample\/%' |
| |
| # Install a file to its module |
| define install-module-file |
| dest=`echo $(@D)/ | $(SED) $(MODULE_PATH_PATTERN)` ; \ |
| $(MKDIR) -p $(MODULE_DEST_DIR)/$$dest; \ |
| $(CP) -f $@ $(MODULE_DEST_DIR)/$$dest |
| endef |
| |
| # Install all files from the directory to its module |
| define install-module-dir |
| dest=`echo $(@D)/ | $(SED) $(MODULE_PATH_PATTERN)` ; \ |
| $(MKDIR) -p $(MODULE_DEST_DIR)/$$dest; \ |
| $(CP) -rf $(@D)/* $(MODULE_DEST_DIR)/$$dest |
| endef |
| |
| # chmod the file in its module |
| define chmod-module-file |
| dest=`echo $@ | $(SED) $(MODULE_PATH_PATTERN)` ; \ |
| $(CHMOD) $1 $(MODULE_DEST_DIR)/$$dest |
| endef |
| |
| # install a sym link in its module |
| define install-module-sym-link |
| dest=`echo $@ | $(SED) $(MODULE_PATH_PATTERN)` ; \ |
| $(LN) -sf $1 $(MODULE_DEST_DIR)/$$dest |
| endef |
| |
| |
| # Run MAKE $@ for a launcher: |
| # $(call make-launcher, name, mainclass, java-args, main-args) |
| define make-launcher |
| $(CD) $(BUILDDIR)/launchers && \ |
| $(MAKE) -f Makefile.launcher \ |
| MODULE=$(MODULE) \ |
| PROGRAM=$(strip $1) \ |
| MAIN_CLASS=$(strip $2) \ |
| MAIN_JAVA_ARGS="$(strip $3)" \ |
| MAIN_ARGS="$(strip $4)" |
| endef |
| |
| # |
| # Convenient macros |
| # |
| |
| # Prepare $@ target, remove old one and making sure directory exists |
| define prep-target |
| $(MKDIR) -p $(@D) |
| $(RM) $@ |
| endef |
| |
| # Simple install of $< file to $@ |
| define install-file |
| $(prep-target) |
| $(CP) $< $@ |
| @$(install-module-file) |
| endef |
| |
| define chmod-file |
| $(CHMOD) $1 $@ |
| @$(call chmod-module-file, $1) |
| endef |
| |
| define install-sym-link |
| $(LN) -s $1 $@ |
| @$(call install-module-sym-link, $1) |
| endef |
| |
| # |
| # Marcos for files not belonging to any module |
| define install-non-module-file |
| $(prep-target) |
| $(CP) $< $@ |
| endef |
| |
| define install-manifest-file |
| $(install-non-module-file) |
| endef |
| |
| # Cleanup rule for after debug java run (hotspot.log file is left around) |
| # (This could be an old leftover file in a read-only area, use the @- prefix) |
| HOTSPOT_LOG_NAME = hotspot.log |
| define java-vm-cleanup |
| if [ -w $(HOTSPOT_LOG_NAME) ] ; then $(RM) $(HOTSPOT_LOG_NAME); fi |
| endef |
| |
| # Current directory |
| CURRENT_DIRECTORY := $(shell $(PWD)) |
| |
| # |
| # Create BYFILE OPT and DBG settings, if CFLAGS_OPT/foobar.o is set then it is |
| # used for this file, otherwise the default settings are used. |
| # |
| CFLAGS_$(VARIANT)/BYFILE = $(CFLAGS_$(VARIANT)/$(@F)) \ |
| $(CFLAGS_$(VARIANT)$(CFLAGS_$(VARIANT)/$(@F))) |
| CXXFLAGS_$(VARIANT)/BYFILE = $(CXXFLAGS_$(VARIANT)/$(@F)) \ |
| $(CXXFLAGS_$(VARIANT)$(CXXFLAGS_$(VARIANT)/$(@F))) |
| |
| # |
| # Tool flags |
| # |
| ASFLAGS = $(ASFLAGS_$(VARIANT)) $(ASFLAGS_COMMON) $(OTHER_ASFLAGS) |
| CFLAGS = $(CFLAGS_$(VARIANT)/BYFILE) $(CFLAGS_COMMON) $(OTHER_CFLAGS) |
| CXXFLAGS = $(CXXFLAGS_$(VARIANT)/BYFILE) $(CXXFLAGS_COMMON) $(OTHER_CXXFLAGS) |
| CPPFLAGS = $(CPPFLAGS_$(VARIANT)) $(CPPFLAGS_COMMON) $(OTHER_CPPFLAGS) \ |
| $(DEFINES) $(OPTIONS:%=-D%) |
| LDFLAGS = $(LDFLAGS_$(VARIANT)) $(LDFLAGS_COMMON) $(OTHER_LDFLAGS) |
| LDLIBS = $(OTHER_LDLIBS) $(LDLIBS_$(VARIANT)) $(LDLIBS_COMMON) |
| LINTFLAGS = $(LINTFLAGS_$(VARIANT)) $(LINTFLAGS_COMMON) \ |
| $(OTHER_LINTFLAGS) |
| |
| VERSION_DEFINES = -DRELEASE='"$(RELEASE)"' |
| |
| # Note: As a rule, GNU Make rules should not appear in any of the |
| # Defs*.gmk files. These were added for Kestrel-Solaris and do address |
| # a TeamWare bug. They should be moved elsewhere for Merlin. |
| # |
| # Override gnumake built-in rules which do sccs get operations badly. |
| # (They put the checked out code in the current directory, not in the |
| # directory of the original file.) |
| # Since this is a symptom of a teamware failure, complain and die on the spot. |
| |
| # This message immediately goes to stdout and the build terminates. |
| define SCCS-trouble |
| $(error \ |
| "ERROR: File $@ referenced while building in $(CURRENT_DIRECTORY) \ |
| is out of date with respect to its SCCS file $<. \ |
| This can happen from an unresolved Teamware conflict, a file movement, or \ |
| a failure in which SCCS files are updated but the 'sccs get' was not done. \ |
| You should double check for other out of date files in your workspace. \ |
| Or run: cd $(TOPDIR) && $(MAKE) sccs_get") |
| endef |
| |
| %:: s.% |
| @$(SCCS-trouble) |
| %:: SCCS/s.% |
| @$(SCCS-trouble) |
| @$(ECHO) " is out of date with respect to its SCCS file." >> $(WARNING_FILE) |
| @$(ECHO) " This file may be from an unresolved Teamware conflict." >> $(WARNING_FILE) |
| @$(ECHO) " This is also a symptom of a Teamware bringover/putback failure" >> $(WARNING_FILE) |
| @$(ECHO) " in which SCCS files are updated but not checked out." >> $(WARNING_FILE) |
| @$(ECHO) " Check for other out of date files in your workspace." >> $(WARNING_FILE) |
| @$(ECHO) "" >> $(WARNING_FILE) |
| @#exit 666 |
| |
| ifdef INSANE |
| export INSANE |
| endif |
| |
| ifdef ALT_COPYRIGHT_YEAR |
| COPYRIGHT_YEAR = $(ALT_COPYRIGHT_YEAR) |
| else |
| COPYRIGHT_YEAR := $(shell $(DATE) '+%Y') |
| endif |
| |
| # Install of imported file (JDK_IMPORT_PATH, or some other external location) |
| define install-importonly-file |
| @$(ECHO) "ASSEMBLY_IMPORT: $@" |
| $(prep-target) |
| $(CP) $< $@ |
| @if [ "$(PLATFORM)" = "linux" -a "$(@F)" = "libjvm.so" ] ; then \ |
| if [ -x /usr/sbin/selinuxenabled ] ; then \ |
| /usr/sbin/selinuxenabled; \ |
| if [ $$? = 0 ] ; then \ |
| $(ECHO) "/usr/bin/chcon -t textrel_shlib_t $@"; \ |
| /usr/bin/chcon -t textrel_shlib_t $@; \ |
| if [ $$? != 0 ]; then \ |
| echo "ERROR: Cannot chcon $@"; \ |
| fi; \ |
| fi; \ |
| fi; \ |
| fi |
| endef |
| |
| define install-import-file |
| $(install-importonly-file) |
| @$(install-module-file) |
| endef |
| |
| .PHONY: all build clean clobber |