duke@1: # duke@1: # Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. duke@1: # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. duke@1: # duke@1: # This code is free software; you can redistribute it and/or modify it duke@1: # under the terms of the GNU General Public License version 2 only, as duke@1: # published by the Free Software Foundation. Sun designates this duke@1: # particular file as subject to the "Classpath" exception as provided duke@1: # by Sun in the LICENSE file that accompanied this code. duke@1: # duke@1: # This code is distributed in the hope that it will be useful, but WITHOUT duke@1: # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or duke@1: # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License duke@1: # version 2 for more details (a copy is included in the LICENSE file that duke@1: # accompanied this code). duke@1: # duke@1: # You should have received a copy of the GNU General Public License version duke@1: # 2 along with this work; if not, write to the Free Software Foundation, duke@1: # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. duke@1: # duke@1: # Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, duke@1: # CA 95054 USA or visit www.sun.com if you need additional information or duke@1: # have any questions. duke@1: # duke@1: duke@1: # Makefile for langtools: wrapper around Ant build.xml file duke@1: duke@1: # duke@1: # On Solaris, the 'make' utility from Sun will not work with these makefiles. duke@1: # This little rule is only understood by Sun's make, and is harmless duke@1: # when seen by the GNU make tool. If using Sun's make, this causes the duke@1: # make command to fail. duke@1: # duke@1: SUN_MAKE_TEST:sh = @echo "ERROR: PLEASE USE GNU VERSION OF MAKE"; exit 33 duke@1: duke@1: # duke@1: # Minimal platform defs duke@1: # Need FullPath because we can't rely on gnumake abspath, until we use v3.81 duke@1: # duke@1: duke@1: SYSTEM_UNAME := $(shell uname) duke@1: duke@1: ifeq ($(SYSTEM_UNAME), Windows_NT) duke@1: DEV_NULL = NUL duke@1: else duke@1: ifneq (,$(findstring CYGWIN,$(SYSTEM_UNAME))) duke@1: DEV_NULL = NUL duke@1: USING_CYGWIN = true duke@1: else duke@1: DEV_NULL = /dev/null duke@1: endif duke@1: endif duke@1: duke@1: ifdef USING_CYGWIN duke@1: define FullPath duke@1: $(shell cygpath -a -s -m $1 2> $(DEV_NULL)) duke@1: endef duke@1: else duke@1: define FullPath duke@1: $(shell cd $1 2> $(DEV_NULL) && pwd) duke@1: endef duke@1: endif duke@1: duke@1: # duke@1: # Makefile args duke@1: # duke@1: duke@1: ifdef QUIET duke@1: ANT_OPTIONS += -quiet duke@1: endif duke@1: duke@1: ifdef VERBOSE andrew@501: ANT_OPTIONS += -verbose -debug duke@1: endif duke@1: duke@1: ifdef JDK_VERSION duke@1: ANT_OPTIONS += -Djdk.version=$(JDK_VERSION) duke@1: endif duke@1: duke@1: ifdef FULL_VERSION duke@1: ANT_OPTIONS += -Dfull.version='$(FULL_VERSION)' # will contain spaces duke@1: endif duke@1: duke@1: ifdef MILESTONE jjg@172: ifneq ($(MILESTONE),fcs) duke@1: ANT_OPTIONS += -Dmilestone=$(MILESTONE) jjg@172: else jjg@172: ANT_OPTIONS += -Drelease=$(JDK_VERSION) jjg@172: endif duke@1: endif duke@1: duke@1: ifdef BUILD_NUMBER duke@1: ANT_OPTIONS += -Dbuild.number=$(BUILD_NUMBER) duke@1: else duke@1: ifdef JDK_BUILD_NUMBER duke@1: ANT_OPTIONS += -Dbuild.number=$(JDK_BUILD_NUMBER) duke@1: endif duke@1: endif duke@1: duke@1: ifeq ($(VARIANT), DBG) duke@1: ANT_OPTIONS += -Djavac.debug=true duke@1: else duke@1: ifeq ($(VARIANT), OPT) duke@1: ANT_OPTIONS += -Djavac.debug=false duke@1: endif duke@1: endif duke@1: aph@271: ifeq ($(DEBUG_CLASSFILES), true) aph@271: ANT_OPTIONS += -Djavac.debug=true aph@273: ANT_OPTIONS += -Ddebug.classfiles=true aph@271: endif aph@271: duke@1: # Note: jdk/make/common/Defs.gmk uses LANGUAGE_VERSION (-source NN) duke@1: # and the somewhat misnamed CLASS_VERSION (-target NN) duke@1: ifdef TARGET_CLASS_VERSION duke@1: ANT_OPTIONS += -Djavac.target=$(TARGET_CLASS_VERSION) duke@1: else duke@1: ifdef JAVAC_TARGET_ARG duke@1: ANT_OPTIONS += -Djavac.target=$(JAVAC_TARGET_ARG) duke@1: endif duke@1: endif duke@1: jjg@286: ifdef SOURCE_LANGUAGE_VERSION jjg@286: ANT_OPTIONS += -Djavac.source=$(SOURCE_LANGUAGE_VERSION) jjg@286: else jjg@286: ifdef JAVAC_SOURCE_ARG jjg@286: ANT_OPTIONS += -Djavac.source=$(JAVAC_SOURCE_ARG) jjg@286: endif jjg@286: endif jjg@286: duke@1: ifdef ALT_BOOTDIR duke@1: ANT_OPTIONS += -Dboot.java.home=$(ALT_BOOTDIR) duke@1: ANT_JAVA_HOME = JAVA_HOME=$(ALT_BOOTDIR) duke@1: endif duke@1: jjg@441: # To facilitate bootstrapping, much of langtools can be compiled with (just) jjg@441: # a boot JDK. However, some source files need to be compiled against jjg@441: # new JDK API. In a bootstrap build, an import JDK may not be available, jjg@441: # so build.xml can also build against the source files in a jdk repo, jjg@441: # in which case it will automatically generate stub files for the new JDK API. jjg@441: ifdef JDK_TOPDIR jjg@441: ANT_OPTIONS += -Dimport.jdk=$(JDK_TOPDIR) jjg@441: else jjg@441: ifdef ALT_JDK_TOPDIR jjg@441: ANT_OPTIONS += -Dimport.jdk=$(ALT_JDK_TOPDIR) jjg@441: else jjg@462: ifdef ALT_JDK_IMPORT_PATH jjg@462: ANT_OPTIONS += -Dimport.jdk=$(ALT_JDK_IMPORT_PATH) jjg@441: endif jjg@441: endif jjg@441: endif jjg@441: duke@1: ifdef ALT_OUTPUTDIR duke@1: OUTPUTDIR = $(ALT_OUTPUTDIR) duke@1: ANT_OPTIONS += -Dbuild.dir=$(ALT_OUTPUTDIR)/build duke@1: ANT_OPTIONS += -Ddist.dir=$(ALT_OUTPUTDIR)/dist duke@1: else duke@1: OUTPUTDIR = .. duke@1: endif duke@1: #ABS_OUTPUTDIR = $(abspath $(OUTPUTDIR)) duke@1: ABS_OUTPUTDIR = $(call FullPath,$(OUTPUTDIR)) duke@1: duke@1: ANT_TMPDIR = $(ABS_OUTPUTDIR)/build/ant-tmp duke@1: ANT_OPTS = ANT_OPTS=-Djava.io.tmpdir='$(ANT_TMPDIR)' duke@1: duke@1: ifdef FINDBUGS_HOME duke@1: ANT_OPTIONS += -Dfindbugs.home=$(FINDBUGS_HOME) duke@1: endif duke@1: duke@1: ifdef ANT_HOME duke@1: ANT = $(ANT_HOME)/bin/ant duke@1: ifneq ($(shell test -x $(ANT) && echo OK), OK) duke@1: $(error $(ANT) not found -- please update ANT_HOME) duke@1: endif duke@1: else duke@1: ANT = ant duke@1: ifneq ($(shell test -x "`which $(ANT)`" && echo OK), OK) duke@1: $(error 'ant' not found -- please set ANT_HOME or put 'ant' on your PATH) duke@1: endif duke@1: endif duke@1: duke@1: # Default target and expected 'do everything' target duke@1: all: build duke@1: duke@1: # Standard make clobber target duke@1: clobber: clean duke@1: duke@1: # All ant targets of interest duke@1: ANT_TARGETS = build clean sanity post-sanity diagnostics # for now duke@1: duke@1: # Create a make target for each duke@1: $(ANT_TARGETS): duke@1: @ mkdir -p $(OUTPUTDIR)/build $(ANT_TMPDIR) duke@1: $(ANT_JAVA_HOME) $(ANT_OPTS) $(ANT) -diagnostics > $(OUTPUTDIR)/build/ant-diagnostics.log duke@1: $(ANT_JAVA_HOME) $(ANT_OPTS) $(ANT) $(ANT_OPTIONS) $@ duke@1: duke@1: #------------------------------------------------------------------- duke@1: # duke@1: # Targets for Sun's internal JPRT build system duke@1: duke@1: CD = cd duke@1: ZIP = zip duke@1: duke@1: JPRT_ARCHIVE_BUNDLE=$(ABS_OUTPUTDIR)/$(JPRT_BUILD_FLAVOR)-bundle.zip duke@1: duke@1: jprt_build_product jprt_build_debug jprt_build_fastdebug: all duke@1: ( $(CD) $(OUTPUTDIR) && \ duke@1: $(ZIP) -q -r $(JPRT_ARCHIVE_BUNDLE) build dist ) duke@1: duke@1: #------------------------------------------------------------------- duke@1: duke@1: # Declare these phony (not filenames) duke@1: .PHONY: $(ANT_TARGETS) all clobber \ duke@1: jprt_build_product jprt_build_debug jprt_build_fastdebug