duke@1: # katleman@1448: # Copyright (c) 2007, 2012, Oracle and/or its affiliates. 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 ohair@554: # published by the Free Software Foundation. Oracle designates this duke@1: # particular file as subject to the "Classpath" exception as provided ohair@554: # by Oracle 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: # ohair@554: # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA ohair@554: # or visit www.oracle.com if you need additional information or have any ohair@554: # questions. duke@1: # duke@1: duke@1: # duke@1: # Makefile for building the langtools workspace. duke@1: # duke@1: duke@1: # jjg@582: # On Solaris, the standard 'make' utility will not work with these makefiles. jjg@582: # This little rule is only understood by Solaris make, and is harmless jjg@582: # when seen by the GNU make tool. If using Solaris 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: #----- cancel implicit rules duke@1: duke@1: %: %.o duke@1: %: %.obj duke@1: %: %.dll duke@1: %: %.c duke@1: %: %.cc duke@1: %: %.C duke@1: %: %.p duke@1: %: %.f duke@1: %: %.s duke@1: %: %.F duke@1: %: %.r duke@1: %: %.S duke@1: %: %.mod duke@1: %: %.sh duke@1: %: %,v duke@1: %: RCS/%,v duke@1: duke@1: #----- imports duke@1: duke@1: ifdef ALT_BOOT_JAVA_HOME duke@1: BOOT_JAVA_HOME = $(ALT_BOOT_JAVA_HOME) duke@1: else duke@1: ifdef ALT_BOOTDIR duke@1: BOOT_JAVA_HOME = $(ALT_BOOTDIR) duke@1: else duke@1: BOOT_JAVA_HOME=/java/re/jdk/1.5.0/archive/fcs/binaries/solaris-sparc duke@1: endif duke@1: endif duke@1: duke@1: BOOT_JAVA=$(BOOT_JAVA_HOME)/bin/java duke@1: BOOT_JAVAC=$(BOOT_JAVA_HOME)/bin/javac duke@1: BOOTJAR=$(BOOT_JAVA_HOME)/bin/jar duke@1: duke@1: ifdef ALT_TESTJAVA_HOME duke@1: TESTJAVA_HOME = $(ALT_TESTJAVA_HOME) duke@1: else duke@1: TESTJAVA_HOME=/java/re/jdk/1.6.0/archive/fcs/binaries/solaris-sparc duke@1: endif duke@1: duke@1: TESTJAVA=$(TESTJAVA_HOME)/bin/java duke@1: duke@1: ifdef ALT_FINDBUGS_HOME duke@1: FINDBUGS_HOME = $(ALT_FINDBUGS_HOME) duke@1: else duke@1: FINDBUGS_HOME = /java/devtools/share/findbugs/1.1.2-rc4 duke@1: endif duke@1: duke@1: FINDBUGS = $(FINDBUGS_HOME)/bin/findbugs duke@1: duke@1: #----- commands duke@1: duke@1: CHMOD = chmod duke@1: CP = cp duke@1: ECHO = echo # FIXME duke@1: FIND = find duke@1: MKDIR = mkdir duke@1: SED = sed duke@1: ZIP = zip duke@1: duke@1: #----- locations and deliverables duke@1: duke@1: TOPDIR = .. duke@1: SRC_BIN_DIR = $(TOPDIR)/src/share/bin duke@1: SRC_CLASSES_DIR = $(TOPDIR)/src/share/classes duke@1: duke@1: BUILD_DIR = $(TOPDIR)/build duke@1: duke@1: CLASSES_DIR = $(BUILD_DIR)/classes duke@1: GENSRC_DIR = $(BUILD_DIR)/gensrc duke@1: duke@1: DIST_DIR = $(TOPDIR)/dist duke@1: BIN_DIR = $(DIST_DIR)/bin duke@1: LIB_DIR = $(DIST_DIR)/lib duke@1: duke@1: JAVAC_JAR = $(LIB_DIR)/javac.jar duke@1: JAVADOC_JAR = $(LIB_DIR)/javadoc.jar duke@1: JAVAH_JAR = $(LIB_DIR)/javah.jar duke@1: JAVAP_JAR = $(LIB_DIR)/javap.jar duke@1: duke@1: CLASSES_JAR = $(DIST_DIR)/classes.jar duke@1: SRC_ZIP = $(DIST_DIR)/src.zip duke@1: duke@1: BUILDTOOLSRC_DIR = tools duke@1: BUILDTOOLCLASSES_DIR = $(BUILD_DIR)/toolclasses duke@1: duke@1: #----- duke@1: duke@1: ifndef JDK_MAJOR_VERSION duke@1: JDK_MAJOR_VERSION = 1 duke@1: endif duke@1: duke@1: ifndef JDK_MINOR_VERSION duke@1: JDK_MINOR_VERSION = 7 duke@1: endif duke@1: duke@1: ifndef JDK_MICRO_VERSION duke@1: JDK_MICRO_VERSION = 0 duke@1: endif duke@1: duke@1: ifndef JDK_VERSION duke@1: JDK_VERSION = $(JDK_MAJOR_VERSION).$(JDK_MINOR_VERSION).$(JDK_MICRO_VERSION) duke@1: endif duke@1: duke@1: ifndef MILESTONE duke@1: MILESTONE = internal duke@1: endif duke@1: duke@1: # RELEASE is JDK_VERSION and -MILESTONE if MILESTONE is set duke@1: ifneq ($(MILESTONE),fcs) duke@1: RELEASE = $(JDK_VERSION)-$(MILESTONE)$(BUILD_VARIANT_RELEASE) duke@1: else duke@1: RELEASE = $(JDK_VERSION)$(BUILD_VARIANT_RELEASE) duke@1: endif duke@1: duke@1: # FULL_VERSION is RELEASE and -BUILD_NUMBER if BUILD_NUMBER is set duke@1: ifdef BUILD_NUMBER duke@1: FULL_VERSION = $(RELEASE)-$(BUILD_NUMBER) duke@1: else duke@1: BUILD_NUMBER = b00 duke@1: USER_RELEASE_SUFFIX := $(shell echo $(USER)_`date '+%d_%b_%Y_%H_%M' | tr "A-Z" "a-z"`) duke@1: FULL_VERSION = $(RELEASE)-$(USER_RELEASE_SUFFIX)-$(BUILD_NUMBER) duke@1: endif duke@1: duke@1: #----- useful macros duke@1: darcy@1194: TOOLS = javac javadoc javah javap duke@1: duke@1: SOURCE_LEVEL = 5 duke@1: BOOTSTRAP_TARGET_LEVEL = 5 duke@1: TARGET_LEVEL = 6 duke@1: duke@1: ifndef TARGET_JAVA duke@1: TARGET_JAVA = java duke@1: endif duke@1: duke@1: NO_PROPRIETARY_API_WARNINGS = -XDignore.symbol.file=true duke@1: duke@1: SELF = $(lastword $(MAKEFILE_LIST)) duke@1: duke@1: #----- duke@1: duke@1: # the default is to generate the following: duke@1: # dist/{bin,lib}: duke@1: # lang tools compiled to run on the target JDK duke@1: duke@1: default: duke@1: $(MAKE) -f $(SELF) \ duke@1: MILESTONE=bootstrap \ duke@1: TARGET_LEVEL=$(BOOTSTRAP_TARGET_LEVEL) \ duke@1: TARGET_JAVA=$(BOOT_JAVA_HOME)/bin/java \ duke@1: GENSRC_DIR=$(BUILD_DIR)/bootstrap/gensrc \ duke@1: CLASSES_DIR=$(BUILD_DIR)/bootstrap/classes \ duke@1: BIN_DIR=$(BUILD_DIR)/bootstrap/bin \ duke@1: LIB_DIR=$(BUILD_DIR)/bootstrap/lib \ duke@1: $(BUILD_DIR)/bootstrap/lib/javac.jar \ duke@1: $(BUILD_DIR)/bootstrap/bin/javac duke@1: $(MAKE) -f $(SELF) \ duke@1: BOOT_JAVAC=$(BUILD_DIR)/bootstrap/bin/javac \ duke@1: tools duke@1: duke@1: # for jdk, we generate the following: duke@1: # dist/bootstrap/{bin,lib}: duke@1: # lang tools compiled to run on the boot JDK duke@1: # dist/lib/classes.jar: duke@1: # lang tools recompiled to run on the target JDK, duke@1: # ready for inclusion in rt.jar and tools.jar duke@1: # dist/lib/src.zip duke@1: # .properties and .java files for classes in classes.jar, duke@1: # ready for jdk src.zip duke@1: duke@1: jdk: duke@1: $(MAKE) -f $(SELF) \ duke@1: MILESTONE=bootstrap \ duke@1: TARGET_LEVEL=$(BOOTSTRAP_TARGET_LEVEL) \ duke@1: TARGET_JAVA=$(BOOT_JAVA_HOME)/bin/java \ duke@1: GENSRC_DIR=$(BUILD_DIR)/bootstrap/gensrc \ duke@1: CLASSES_DIR=$(BUILD_DIR)/bootstrap/classes \ duke@1: BIN_DIR=$(DIST_DIR)/bootstrap/bin \ duke@1: LIB_DIR=$(DIST_DIR)/bootstrap/lib \ duke@1: tools duke@1: $(MAKE) -f $(SELF) \ duke@1: BOOT_JAVAC=$(DIST_DIR)/bootstrap/bin/javac \ duke@1: LIB_DIR=$(BUILD_DIR)/jdk/lib \ duke@1: $(DIST_DIR)/lib/classes.jar \ duke@1: $(DIST_DIR)/lib/src.zip duke@1: duke@1: tools: $(TOOLS:%=$(LIB_DIR)/%.jar) $(TOOLS:%=$(BIN_DIR)/%) duke@1: duke@1: clean: duke@1: $(RM) -r $(BUILD_DIR) duke@1: duke@1: really-clean: clean duke@1: $(RM) -r $(DIST_DIR) duke@1: duke@1: jprt_product_build \ duke@1: jprt_debug_build \ duke@1: jprt_fastdebug_build: lib duke@1: duke@1: #----- javac duke@1: duke@1: JAVAC_DIRS = \ duke@1: javax/annotation/processing \ duke@1: javax/lang/model \ duke@1: javax/tools \ duke@1: com/sun/source \ duke@1: com/sun/tools/javac duke@1: duke@1: JAVAC_RESOURCE_FILES = \ duke@1: $(shell find $(patsubst %,$(SRC_CLASSES_DIR)/%,$(JAVAC_DIRS)) -name SCCS -prune -o -name \*.properties -print ) duke@1: duke@1: JAVAC_JAVA_FILES = \ duke@1: $(shell find $(patsubst %,$(SRC_CLASSES_DIR)/%,$(JAVAC_DIRS)) -name SCCS -prune -o -name \*.java -print ) \ duke@1: $(patsubst $(SRC_CLASSES_DIR)/%.properties,$(GENSRC_DIR)/%.java,$(JAVAC_RESOURCE_FILES)) \ duke@1: $(GENSRC_DIR)/com/sun/tools/javac/resources/version.java duke@1: duke@1: $(JAVAC_JAR): $(JAVAC_JAVA_FILES) duke@1: $(MKDIR) -p $(CLASSES_DIR) $(@D) duke@1: $(BOOT_JAVAC) -d $(CLASSES_DIR) -target $(TARGET_LEVEL) $(NO_PROPRIETARY_API_WARNINGS) $(JAVAC_JAVA_FILES) duke@1: ( $(ECHO) Main-Class: com.sun.tools.javac.Main ) > $(BUILD_DIR)/javac.mf duke@1: $(BOOTJAR) -cfm $@ $(BUILD_DIR)/javac.mf $(patsubst %,-C $(CLASSES_DIR) %, $(JAVAC_DIRS)) duke@1: duke@1: #----- javadoc duke@1: duke@1: ### FIXME -- javadoc has a couple of extra non-property resource files duke@1: ### that need to be included duke@1: duke@1: JAVADOC_DIRS = \ duke@1: com/sun/javadoc \ duke@1: com/sun/tools/doclets \ duke@1: com/sun/tools/javadoc duke@1: duke@1: JAVADOC_RESOURCE_FILES = \ duke@1: $(shell find $(patsubst %,$(SRC_CLASSES_DIR)/%,$(JAVADOC_DIRS)) -name SCCS -prune -o -name \*.properties -print ) duke@1: duke@1: JAVADOC_JAVA_FILES = \ duke@1: $(shell find $(patsubst %,$(SRC_CLASSES_DIR)/%,$(JAVADOC_DIRS)) -name SCCS -prune -o -name \*.java -print ) \ duke@1: $(patsubst $(SRC_CLASSES_DIR)/%.properties,$(GENSRC_DIR)/%.java,$(JAVADOC_RESOURCE_FILES)) duke@1: duke@1: $(JAVADOC_JAR): $(JAVADOC_JAVA_FILES) $(JAVAC_JAR) duke@1: $(MKDIR) -p $(CLASSES_DIR) $(@D) duke@1: $(BOOT_JAVAC) -sourcepath "" -classpath $(JAVAC_JAR) -d $(CLASSES_DIR) -target $(TARGET_LEVEL) $(JAVADOC_JAVA_FILES) duke@1: ( $(ECHO) Main-Class: com.sun.tools.javadoc.Main ; $(ECHO) Class-Path: javac.jar ) > $(BUILD_DIR)/javadoc.mf duke@1: $(BOOTJAR) -cfm $@ $(BUILD_DIR)/javadoc.mf $(patsubst %,-C $(CLASSES_DIR) %, $(JAVADOC_DIRS)) duke@1: duke@1: #----- javah duke@1: duke@1: JAVAH_DIRS = \ duke@1: com/sun/tools/javah duke@1: duke@1: JAVAH_RESOURCE_FILES = \ duke@1: $(shell find $(patsubst %,$(SRC_CLASSES_DIR)/%,$(JAVAH_DIRS)) -name SCCS -prune -o -name \*.properties -print ) duke@1: duke@1: JAVAH_JAVA_FILES = \ duke@1: $(shell find $(patsubst %,$(SRC_CLASSES_DIR)/%,$(JAVAH_DIRS)) -name SCCS -prune -o -name \*.java -print ) \ duke@1: $(patsubst $(SRC_CLASSES_DIR)/%.properties,$(GENSRC_DIR)/%.java,$(JAVAH_RESOURCE_FILES)) duke@1: duke@1: $(JAVAH_JAR): $(JAVAH_JAVA_FILES) $(JAVADOC_JAR) duke@1: $(MKDIR) -p $(CLASSES_DIR) $(@D) duke@1: $(BOOT_JAVAC) -sourcepath "" -classpath $(CLASSES_DIR) -d $(CLASSES_DIR) -target $(TARGET_LEVEL) $(JAVAH_JAVA_FILES) duke@1: ( $(ECHO) Main-Class: com.sun.tools.javah.Main ; $(ECHO) Class-Path: javadoc.jar ) > $(BUILD_DIR)/javah.mf duke@1: $(BOOTJAR) -cfm $@ $(BUILD_DIR)/javah.mf $(patsubst %,-C $(CLASSES_DIR) %, $(JAVAH_DIRS)) duke@1: duke@1: #----- javap duke@1: duke@1: JAVAP_DIRS = \ duke@1: sun/tools/javap duke@1: duke@1: JAVAP_RESOURCE_FILES = \ duke@1: $(shell find $(patsubst %,$(SRC_CLASSES_DIR)/%,$(JAVAP_DIRS)) -name SCCS -prune -o -name \*.properties -print ) duke@1: duke@1: JAVAP_JAVA_FILES = \ duke@1: $(shell find $(patsubst %,$(SRC_CLASSES_DIR)/%,$(JAVAP_DIRS)) -name SCCS -prune -o -name \*.java -print ) \ duke@1: $(patsubst $(SRC_CLASSES_DIR)/%.properties,$(GENSRC_DIR)/%.java,$(JAVAP_RESOURCE_FILES)) duke@1: duke@1: $(JAVAP_JAR): $(JAVAP_JAVA_FILES) \ duke@1: $(patsubst $(SRC_CLASSES_DIR)/%.properties,$(GENSRC_DIR)/%.java,$(JAVAP_RESOURCE_FILES)) duke@1: $(MKDIR) -p $(CLASSES_DIR) duke@1: $(BOOT_JAVAC) -sourcepath "" -classpath $(CLASSES_DIR) -d $(CLASSES_DIR) -target $(TARGET_LEVEL) $(JAVAP_JAVA_FILES) duke@1: ( $(ECHO) Main-Class: sun.tools.javap.Main ) > $(BUILD_DIR)/javap.mf duke@1: $(BOOTJAR) -cfm $@ $(BUILD_DIR)/javap.mf $(patsubst %,-C $(CLASSES_DIR) %, $(JAVAP_DIRS)) duke@1: duke@1: #----- duke@1: duke@1: build-tools: $(BUILDTOOLCLASSES_DIR)/CompileProperties/CompileProperties.class duke@1: duke@1: $(GENSRC_DIR)/%.java: $(SRC_CLASSES_DIR)/%.properties $(BUILDTOOLCLASSES_DIR)/CompileProperties/CompileProperties.class duke@1: $(MKDIR) -p $(@D) duke@1: $(BOOT_JAVA) -cp $(BUILDTOOLCLASSES_DIR)/CompileProperties CompileProperties $< $(patsubst $(CLASSES_DIR)/%.class,$(GENSRC_DIR)/%.java,$@) duke@1: duke@1: $(GENSRC_DIR)/%.java: $(GENSRC_DIR)/%.properties $(BUILDTOOLCLASSES_DIR)/CompileProperties/CompileProperties.class duke@1: $(MKDIR) -p $(@D) duke@1: $(BOOT_JAVA) -cp $(BUILDTOOLCLASSES_DIR)/CompileProperties CompileProperties $< $(patsubst $(CLASSES_DIR)/%.class,$(GENSRC_DIR)/%.java,$@) duke@1: duke@1: $(GENSRC_DIR)/%.properties: $(SRC_CLASSES_DIR)/%.properties-template duke@1: $(MKDIR) -p $(@D) duke@1: $(SED) -e 's/$$(JDK_VERSION)/$(JDK_VERSION)/' \ duke@1: -e 's/$$(FULL_VERSION)/$(FULL_VERSION)/' \ duke@1: -e 's/$$(RELEASE)/$(RELEASE)/' \ duke@1: < $< > $@ duke@1: duke@1: $(BUILDTOOLCLASSES_DIR)/%.class : $(BUILDTOOLSRC_DIR)/%.java duke@1: $(MKDIR) -p $(@D) duke@1: $(BOOT_JAVAC) -d $(@D) $< duke@1: duke@1: #----- all classes duke@1: darcy@1194: $(DIST_DIR)/%/classes.jar: $(JAVAC_JAR) $(JAVADOC_JAR) $(JAVAH_JAR) $(JAVAP_JAR) duke@1: $(MKDIR) -p $(@D) duke@1: $(BOOTJAR) -cf $@ -C $(CLASSES_DIR) . duke@1: duke@1: #----- src.zip duke@1: duke@1: SRC_ZIP_FILES = $(shell $(FIND) $(SRC_CLASSES_DIR) \( -name SCCS -o -name \*-template \) -prune -o -type f -print ) duke@1: duke@1: $(DIST_DIR)/%/src.zip: $(SRC_ZIP_FILES) duke@1: abs_src_zip=`cd $(@D) ; pwd`/$(@F) ; \ duke@1: ( cd $(SRC_CLASSES_DIR) ; $(FIND) . \( -name SCCS -o -name \*-template \) -prune -o -type f -print | $(ZIP) -q $$abs_src_zip -@ ) ; \ duke@1: ( cd $(SRC_CLASSES_DIR) ; $(FIND) . -name SCCS -prune -o -name \*-template -print | $(SED) -e 's/-template//' ) | ( cd $(GENSRC_DIR) ; $(ZIP) -q $$abs_src_zip -@ ) duke@1: duke@1: #----- bin files duke@1: duke@1: $(BIN_DIR)/%: $(SRC_BIN_DIR)/launcher.sh-template duke@1: $(MKDIR) -p $(@D) duke@1: $(SED) -e 's|#PROGRAM#|$(@F)|' -e 's|#TARGET_JAVA#|$(TARGET_JAVA)|' $< > $@ duke@1: $(CHMOD) +x $@ duke@1: duke@1: #----- duke@1: duke@1: findbugs: $(BUILD_DIR)/findbugs.txt duke@1: duke@1: $(BUILD_DIR)/findbugs.txt: $(CLASSES_JAR) duke@1: $(MKDIR) -p $(@D) duke@1: $(FINDBUGS) -textui -javahome $(BOOT_JAVA_HOME) -high -emacs -outputFile $@ $< duke@1: duke@1: #----- duke@1: duke@1: quick-check: $(patsubst %, $(DIST_LIB_DIR)/%.jar, $(TOOLS)) duke@1: $(TESTJAVA) -jar $(JAVAC_JAR) -version duke@1: - $(TESTJAVA) -jar $(JAVADOC_JAR) -version duke@1: $(TESTJAVA) -jar $(JAVAH_JAR) -version duke@1: - $(TESTJAVA) -jar $(JAVAP_JAR) -version duke@1: duke@1: #----- duke@1: duke@1: .PHONY: \ duke@1: all \ duke@1: build \ duke@1: build-tools \ duke@1: clean \ duke@1: default \ duke@1: findbugs \ duke@1: jprt_product_build \ duke@1: jprt_debug_build \ duke@1: jprt_fastdebug_build \ duke@1: tools duke@1: