blob: 6dedb18e44d63bdabab1db048493962e45d878b8 [file] [log] [blame]
#
# Copyright 2006-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.
#
# Simple Makefile for javac
BUILD = build
BUILD_BOOTCLASSES = $(BUILD)/bootclasses
BUILD_CLASSES = $(BUILD)/classes
BUILD_JAVAC_SRCFILES = $(BUILD)/javac.srcfiles
GENSRCDIR = $(BUILD)/gensrc
DIST = dist
DIST_JAVAC = $(DIST)
ABS_DIST_JAVAC = $(shell cd $(DIST_JAVAC) ; pwd)
SRC_BIN = src/bin
SRC_CLASSES = src/share/classes
#--------------------------------------------------------------------------------
#
# version info for generated compiler
JDK_VERSION = 1.7.0
RELEASE=$(JDK_VERSION)-opensource
BUILD_NUMBER = b00
USER_RELEASE_SUFFIX := $(shell echo $(USER)_`date '+%d_%b_%Y_%H_%M' | tr "A-Z" "a-z"`)
FULL_VERSION = $(RELEASE)-$(USER_RELEASE_SUFFIX)-$(BUILD_NUMBER)
#--------------------------------------------------------------------------------
CAT = /bin/cat
CHMOD = /bin/chmod
CP = /bin/cp
MKDIR = /bin/mkdir
RM = /bin/rm
SED = /bin/sed
SYSTEM_UNAME := $(shell uname)
# Platform settings specific to Solaris
ifeq ($(SYSTEM_UNAME), SunOS)
# Intrinsic unix command, with backslash-escaped character interpretation
# (not using -e will cause build failure when using /bin/bash)
# (using -e breaks something else)
ECHO = /usr/bin/echo
PLATFORM = solaris
endif
# Platform settings specific to Linux
ifeq ($(SYSTEM_UNAME), Linux)
# Intrinsic unix command, with backslash-escaped character interpretation
ECHO = echo -e
PLATFORM = linux
endif
# Set BOOTDIR to specify the JDK used to build the compiler
ifdef BOOTDIR
JAR = $(BOOTDIR)/bin/jar
JAVA = $(BOOTDIR)/bin/java
JAVAC = $(BOOTDIR)/bin/javac
JAVADOC = $(BOOTDIR)/bin/javadoc
else
JAR = jar
JAVA = java
JAVAC = javac
JAVADOC = javadoc
endif
ifndef JTREG
ifdef JTREG_HOME
JTREG = $(JTREG_HOME)/$(PLATFORM)/bin/jtreg
else
JTREG = jtreg
endif
endif
ifndef JTREG_OPTS
JTREG_OPTS = -s -verbose:summary
endif
ifndef JTREG_TESTS
JTREG_TESTS = test/tools/javac
endif
# Set this to the baseline version of JDK used for the tests
# TESTJDKHOME =
COMPILER_SOURCE_LEVEL = 1.5
#--------------------------------------------------------------------------------
SCM_DIRS = -name .hg -o -name .svn -o -name CVS -o -name RCS -o -name SCCS
JAVAC_SRCS = $(shell find \
$(SRC_CLASSES)/javax/annotation/processing \
$(SRC_CLASSES)/javax/lang/model \
$(SRC_CLASSES)/javax/tools \
$(SRC_CLASSES)/com/sun/source \
$(SRC_CLASSES)/com/sun/tools/javac \
\( $(SCM_DIRS) -o -name \*-template.\* \) -prune -o -name \*.java -print )
JAVAC_RESOURCES = $(shell ls $(SRC_CLASSES)/com/sun/tools/javac/resources/*.properties | $(SED) -e 's/-template//' )
#--------------------------------------------------------------------------------
default: build
all: build docs
clean:
$(RM) -rf $(BUILD) $(DIST)
build: sanity $(DIST_JAVAC)/lib/javac.jar $(DIST_JAVAC)/bin/javac
# javac.jar
$(DIST_JAVAC)/lib/javac.jar: \
$(JAVAC_SRCS) \
$(patsubst $(SRC_CLASSES)/%,$(BUILD_BOOTCLASSES)/%,$(JAVAC_RESOURCES)) \
$(patsubst $(SRC_CLASSES)/%,$(BUILD_CLASSES)/%,$(JAVAC_RESOURCES))
@$(ECHO) $(JAVAC_SRCS) > $(BUILD_JAVAC_SRCFILES)
$(JAVAC) -d $(BUILD_BOOTCLASSES) -source $(COMPILER_SOURCE_LEVEL) -g:source,lines @$(BUILD_JAVAC_SRCFILES)
$(JAVA) -cp $(BUILD_BOOTCLASSES) com.sun.tools.javac.Main \
-d $(BUILD_CLASSES) -g:source,lines @$(BUILD_JAVAC_SRCFILES)
( $(ECHO) "Main-Class: com.sun.tools.javac.Main" ; \
$(ECHO) "Built-By: $$USER" ; \
$(ECHO) "Built-At: `date`" ) > $(BUILD)/javac.MF
$(MKDIR) -p $(DIST_JAVAC)/lib
$(JAR) -cmf $(BUILD)/javac.MF $(DIST_JAVAC)/lib/javac.jar -C ${BUILD_CLASSES} .
# javac resources
$(BUILD_BOOTCLASSES)/com/sun/tools/javac/resources/version.properties \
$(BUILD_CLASSES)/com/sun/tools/javac/resources/version.properties: \
$(SRC_CLASSES)/com/sun/tools/javac/resources/version-template.properties
$(MKDIR) -p $(@D)
$(SED) -e 's/$$(JDK_VERSION)/$(JDK_VERSION)/' \
-e 's/$$(FULL_VERSION)/$(FULL_VERSION)/' \
-e 's/$$(RELEASE)/$(RELEASE)/' \
< $< > $@
$(BUILD_BOOTCLASSES)/com/sun/tools/javac/resources/%.properties: \
$(SRC_CLASSES)/com/sun/tools/javac/resources/%.properties
$(MKDIR) -p $(@D)
$(CP) $^ $@
$(BUILD_CLASSES)/com/sun/tools/javac/resources/%.properties: \
$(SRC_CLASSES)/com/sun/tools/javac/resources/%.properties
$(MKDIR) -p $(@D)
$(CP) $^ $@
# javac wrapper script
$(DIST_JAVAC)/bin/javac: $(SRC_BIN)/javac.sh
$(MKDIR) -p $(@D)
$(CP) $^ $@
$(CHMOD) +x $@
# javadoc
JLS3_URL = http://java.sun.com/docs/books/jls/
JLS3_CITE = <a href="$(JLS3_URL)"> \
The Java Language Specification, Third Edition</a>
TAG_JLS3 = -tag 'jls3:a:See <cite>$(JLS3_CITE)</cite>:'
TAGS = $(IGNORED_TAGS:%=-tag %:X) $(TAG_JLS3)
docs:
$(JAVADOC) -sourcepath $(SRC_CLASSES) -d $(DIST_JAVAC)/doc/api \
$(TAGS) \
-subpackages javax.annotation.processing:javax.lang.model:javax.tools:com.sun.source:com.sun.tools.javac
#--------------------------------------------------------------------------------
test: test-sanity $(DIST_JAVAC)/lib/javac.jar
$(JTREG) $(JTREG_OPTS) -noshell \
-jdk:$(TESTJDKHOME) \
-Xbootclasspath/p:$(ABS_DIST_JAVAC)/lib/javac.jar \
-w:$(BUILD)/jtreg/work \
-r:$(BUILD)/jtreg/report \
$(JTREG_TESTS)
#--------------------------------------------------------------------------------
ifndef ERROR_FILE
ERROR_FILE = $(BUILD)/sanityCheckErrors.txt
endif
presanity:
@$(RM) -f $(ERROR_FILE)
@$(MKDIR) -p `dirname $(ERROR_FILE)`
######################################################
# CLASSPATH cannot be set, unless you are insane.
######################################################
sane-classpath:
ifdef CLASSPATH
@$(ECHO) "ERROR: Your CLASSPATH environment variable is set. This will \n" \
" most likely cause the build to fail. Please unset it \n" \
" and start your build again. \n" \
"" >> $(ERROR_FILE)
endif
######################################################
# JAVA_HOME cannot be set, unless you are insane.
######################################################
sane-java_home:
ifdef JAVA_HOME
@$(ECHO) "ERROR: Your JAVA_HOME environment variable is set. This will \n" \
" most likely cause the build to fail. Please unset it \n" \
" and start your build again. \n" \
"" >> $(ERROR_FILE)
endif
######################################################
# TESTJDKHOME needs to be set to run tests
######################################################
sane-testjdk:
ifndef TESTJDKHOME
@$(ECHO) "ERROR: TESTJDKHOME needs to be set to the baseline version \n" \
" version of JDK used to run the compiler tests.\n" \
"" >> $(ERROR_FILE)
endif
sane-lastrule:
@if [ -r $(ERROR_FILE) ]; then \
if [ "x$(INSANE)" = x ]; then \
$(ECHO) "Exiting because of the above error(s). \n" \
"">> $(ERROR_FILE); \
fi ; \
$(CAT) $(ERROR_FILE) ; \
if [ "x$(INSANE)" = x ]; then \
exit 1 ; \
fi ; \
fi
sanity \
build-sanity: presanity sane-classpath sane-java_home sane-lastrule
test-sanity: presanity sane-classpath sane-java_home sane-testjdk sane-lastrule
#--------------------------------------------------------------------------------
.PHONY: all build clean default docs prep test \
presanity sanity build-sanity test-sanity \
sane-classpath sane-java_home sane-testjdk sane-lastrule