jdk/make/Makefile
changeset 21805 c7d7946239de
parent 19870 19ebc43b932b
child 23010 6dadb192ad81
--- a/jdk/make/Makefile	Mon Nov 18 20:22:49 2013 +0400
+++ b/jdk/make/Makefile	Thu Nov 14 11:19:32 2013 +0100
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 1995, 2012, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2012, 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
@@ -23,369 +23,27 @@
 # questions.
 #
 
-#
-# Makefile for building and packaging all of the JDK and the JRE. See
-# also included files.
-#
-
-BUILDDIR=.
-
-include $(BUILDDIR)/common/Defs.gmk
-
-#
-# Make sure we are clear what the default target is
-#
-default_target: all
-
-#
-# Check target
-#
-
-check: variable_check
-
-#
-# Help target
-#
-help: intro_help target_help variable_help notes_help examples_help
-
-# Intro help message
-intro_help:
-	@$(ECHO) "\
-Makefile for the main JDK workspace. \n\
-Default behavior is to use the BOOTDIR javac to bootstrap the build and \n\
-import in pre-built components like the VM from the JDK_IMPORT_PATH. \n\
-"
-
-# Target help
-target_help:
-	@$(ECHO) "\
---- Common Targets ---  \n\
-all               -- build the core JDK (default target) \n\
-help              -- Print out help information \n\
-check             -- Check make variable values for correctness \n\
-sanity            -- Perform detailed sanity checks on system and settings \n\
-openjdk           -- synonym for 'OPENJDK=true all' \n\
-fastdebug         -- build the core JDK in 'fastdebug' mode (-g -O) \n\
-debug             -- build the core JDK in 'debug' mode (-g) \n\
-clean             -- remove all built and imported files \n\
-clobber           -- same as clean \n\
-docs              -- run javadoc to generate the JDK documentation \n\
-images            -- build the jdk and jre image directories \n\
-import            -- copy in the pre-built components (e.g. VM) \n\
-import_product    -- copy in the product components \n\
-import_fastdebug  -- copy in the fastdebug components \n\
-import_debug      -- copy in the debug components \n\
-create_links      -- create softlinks in Solaris 32bit build to 64bit dirs \n\
-"
-
-# Variable help (only common ones used by this workspace)
-variable_help: variable_help_intro variable_list variable_help_end
-variable_help_intro:
-	@$(ECHO) "--- Common Variables ---"
-variable_help_end:
-	@$(ECHO) " "
-
-# One line descriptions for the variables
-OUTPUTDIR.desc             = Output directory
-PARALLEL_COMPILE_JOBS.desc = Solaris/Linux parallel compile run count
-SLASH_JAVA.desc            = Root of all build tools, e.g. /java or J:
-BOOTDIR.desc               = JDK used to boot the build
-LANGTOOLS_DIST.desc        = langtools dist area used to build
-CORBA_DIST.desc            = corba dist area
-JAXP_DIST.desc             = jaxp dist area
-JAXWS_DIST.desc            = jaxws dist area
-JDK_IMPORT_PATH.desc       = JDK used to import components of the build
-COMPILER_PATH.desc         = Compiler install directory
-CACERTS_FILE.desc          = Location of certificates file
-DEVTOOLS_PATH.desc         = Directory containing zip and unzip
-CUPS_HEADERS_PATH.desc     = Include directory location for CUPS header files
-
-# Make variables to print out (description and value)
-VARIABLE_PRINTVAL_LIST +=       \
-    OUTPUTDIR                   \
-    PARALLEL_COMPILE_JOBS       \
-    SLASH_JAVA                  \
-    BOOTDIR                     \
-    LANGTOOLS_DIST              \
-    JAXWS_DIST                  \
-    CORBA_DIST                  \
-    JAXP_DIST                   \
-    JDK_IMPORT_PATH             \
-    COMPILER_PATH               \
-    CACERTS_FILE                \
-    DEVTOOLS_PATH
-
-# Make variables that should refer to directories that exist
-VARIABLE_CHECKDIR_LIST +=       \
-    SLASH_JAVA                  \
-    BOOTDIR                     \
-    JDK_IMPORT_PATH             \
-    COMPILER_PATH               \
-    DEVTOOLS_PATH
-
-# Make variables that should refer to files that exist
-VARIABLE_CHECKFIL_LIST +=       \
-    CACERTS_FILE
+# Locate this Makefile
+ifeq ($(filter /%, $(lastword $(MAKEFILE_LIST))), )
+  makefile_path := $(CURDIR)/$(lastword $(MAKEFILE_LIST))
+else
+  makefile_path := $(lastword $(MAKEFILE_LIST))
+endif
+repo_dir := $(patsubst %/make/Makefile, %, $(makefile_path))
 
-# For pattern rules below, so all are treated the same
-DO_PRINTVAL_LIST=$(VARIABLE_PRINTVAL_LIST:%=%.printval)
-DO_CHECKDIR_LIST=$(VARIABLE_CHECKDIR_LIST:%=%.checkdir)
-DO_CHECKFIL_LIST=$(VARIABLE_CHECKFIL_LIST:%=%.checkfil)
-
-# Complete variable check
-variable_check: $(DO_CHECKDIR_LIST) $(DO_CHECKFIL_LIST)
-variable_list: $(DO_PRINTVAL_LIST) variable_check
-
-# Pattern rule for printing out a variable
-%.printval:
-	@$(ECHO) "  ALT_$* - $($*.desc)"
-	@$(ECHO) "  \t $*=$($*)"
-
-# Pattern rule for checking to see if a variable with a directory exists
-%.checkdir:
-	@if [ ! -d $($*) ] ; then \
-	    $(ECHO) "WARNING: $* does not exist, try $(MAKE) sanity"; \
-	fi
-
-# Pattern rule for checking to see if a variable with a file exists
-%.checkfil:
-	@if [ ! -f $($*) ] ; then \
-	    $(ECHO) "WARNING: $* does not exist, try $(MAKE) sanity"; \
-	fi
-
-# Misc notes on help
-notes_help:
-	@$(ECHO) "\
---- Notes --- \n\
-- All builds use same output directory unless overridden with \n\
- \t ALT_OUTPUTDIR=<dir>, changing from product to fastdebug you may want \n\
- \t to use the clean target first. \n\
-- LANGTOOLS_DIST must refer to a langtools dist area,  used to build. \n\
-- CORBA_DIST must refer to a corba dist area. \n\
-- JAXP_DIST must refer to a jaxp dist area. \n\
-- JAXWS_DIST must refer to a jaxws dist area. \n\
-- JDK_IMPORT_PATH must refer to a compatible build, not all past promoted \n\
- \t builds or previous release JDK builds will work. \n\
-- The 'debug' target and 'import_debug' only works when a debug promoted \n\
- \t build is available, and they currently are not. \n\
-- The fastest builds have been when the workspace and the BOOTDIR are on \n\
- \t local disk. \n\
-"
+# What is the name of this subsystem (langtools, corba, etc)?
+subsystem_name := $(notdir $(repo_dir))
 
-examples_help:
-	@$(ECHO) "\
---- Examples --- \n\
-  $(MAKE) fastdebug \n\
-  $(MAKE) ALT_OUTPUTDIR=/tmp/foobar all \n\
-  $(MAKE) ALT_OUTPUTDIR=/tmp/foobar fastdebug images \n\
-  $(MAKE) ALT_OUTPUTDIR=/tmp/foobar all docs images \n\
-  $(MAKE) ALT_BOOTDIR=/opt/java/jdk1.6.0 \n\
-  $(MAKE) ALT_JDK_IMPORT_PATH=/opt/java/jdk1.7.0 \n\
-"
-
-#
-# 'all' target intro
-#
-all::
-	@$(ECHO) $(PLATFORM) $(ARCH) $(RELEASE) build started: $(shell $(DATE) '+%y-%m-%d %H:%M')
-
-# Just in case anyone uses this old name, same as 'build'
-optimized: build
-
-openjdk:
-	$(MAKE) OPENJDK=true all
-
-#
-# Special debug rules (You may also want to set ALT_OUTPUTDIR)
-#
-debug:
-	$(MAKE) VARIANT=DBG all
-fastdebug:
-	$(MAKE) VARIANT=DBG FASTDEBUG=true all
-
-#
-# Rules to re-import VM and other JDK files
-#
-import:
-	$(CD) java/redist; $(MAKE) clean all
-
-import_fastdebug:
-	$(MAKE) VARIANT=DBG FASTDEBUG=true import
-
-import_product:
-	$(MAKE) VARIANT=OPT FASTDEBUG=false import
-
-#
-# Core.
-#
-
-all build:: sanity-all post-sanity-all
-
-SUBDIRS       = tools java javax sun com jdk
-ifeq ($(PLATFORM), macosx)
-  SUBDIRS += apple
-endif
-ifeq ($(PLATFORM), windows)
-  SUBDIRS += bridge
-endif
-SUBDIRS_tools = launchers
-SUBDIRS_misc  = org jpda
-
-# demos
-ifndef NO_DEMOS
-  SUBDIRS_misc += mkdemo
+# Try to locate top-level makefile
+top_level_makefile := $(repo_dir)/../Makefile
+ifneq ($(wildcard $(top_level_makefile)), )
+  $(info Will run $(subsystem_name) target on top-level Makefile)
+  $(info WARNING: This is a non-recommended way of building!)
+  $(info ===================================================)
+else
+  $(info Cannot locate top-level Makefile. Is this repo not checked out as part of a complete forest?)
+  $(error Build from top-level Makefile instead)
 endif
 
-# samples
-ifndef NO_SAMPLES
-  SUBDIRS_misc += mksample
-endif
-
-# Alternate classes implementation
-ifndef OPENJDK
-  SUBDIRS_misc += altclasses
-endif
-
-include $(BUILDDIR)/common/Subdirs.gmk
-
-all build::
-	$(SUBDIRS-loop)
-
-clean clobber::
-	$(RM) -r $(OUTPUTDIR)
-
-#
-# Docs
-#
-OTHERSUBDIRS = docs
-docs:: sanity-docs post-sanity-docs
-	$(OTHERSUBDIRS-loop)
-
-#
-# Release engineering targets.
-#
-include $(BUILDDIR)/common/Release.gmk
--include $(CUSTOM_MAKE_DIR)/Release.gmk
-
-#
-# Cscope targets.
-#
-include $(BUILDDIR)/common/Cscope.gmk
-
-#
-# Sanity checks.
-#
-include $(BUILDDIR)/common/Sanity.gmk
-
-$(OUTPUTDIR) $(TEMPDIR):
-	$(MKDIR) -p $@
-
-# this should be the last rule in this file:
-all::
-	@if [ -r $(WARNING_FILE) ]; then \
-	  $(CAT) $(WARNING_FILE) ; \
-	fi
-	@$(ECHO) $(PLATFORM) $(ARCH) $(RELEASE) build finished: $(shell $(DATE) '+%y-%m-%d %H:%M')
-
-#
-# Developer rule that links 32 and 64 bit builds on Solaris by creating
-#   softlinks in the 32bit outputdir to the 64bit outputdir.
-#
-ifeq ($(PLATFORM), solaris)
-  ifeq ($(ARCH_FAMILY), sparc)
-    ARCH32 = sparc
-    ARCH64 = sparcv9
-  else
-    ARCH32 = i586
-    ARCH64 = amd64
-  endif
-  OUTPUTDIR32      = $(ABS_OUTPUTDIR)/../$(PLATFORM)-$(ARCH32)
-  OUTPUTDIR64      = $(ABS_OUTPUTDIR)/../$(PLATFORM)-$(ARCH64)
-endif
-
-create_links:
-ifeq ($(PLATFORM), solaris)
-	@if [ -d $(OUTPUTDIR32) -a -d $(OUTPUTDIR64) ] ; then \
-	    dirlist=`($(CD) $(OUTPUTDIR64); $(FIND) . -name $(ARCH64))`; \
-	    for sd in $$dirlist ; do \
-	      pdir=`$(DIRNAME) $$sd`; \
-	      if [ -d $(OUTPUTDIR32)/$$pdir ] ; then \
-	        echo "Creating link for $$sd"; \
-	        (cd $(OUTPUTDIR32)/$$pdir; $(RM) $(ARCH64); \
-	         $(LN) -s $(OUTPUTDIR64)/$$sd ); \
-	      fi; \
-	    done; \
-	else \
-	    $(ECHO) "Build both 32 and 64 bit versions first"; \
-	fi
-else
-	$(ECHO) "Rule $@ does not apply on $(PLATFORM)-$(ARCH)"
-endif
-
-#
-# Test rule
-#
-
-.NOTPARALLEL: test_run
-
-test:
-	$(MAKE) test_run
-
-test_run: test_clean test_start test_summary
-
-test_start:
-	@$(ECHO) "Tests started at `$(DATE)`"
-
-test_clean:
-	$(RM) $(OUTPUTDIR)/test_failures.txt $(OUTPUTDIR)/test_log.txt
-
-test_summary: $(OUTPUTDIR)/test_failures.txt
-	@$(ECHO) "#################################################"
-	@$(ECHO) "Tests completed at `$(DATE)`"
-	@( $(EGREP) '^TEST STATS:' $(OUTPUTDIR)/test_log.txt \
-          || $(ECHO) "No TEST STATS seen in log" )
-	@$(ECHO) "For complete details see: $(OUTPUTDIR)/test_log.txt"
-	@$(ECHO) "#################################################"
-	@if [ -s $< ] ; then                                           \
-          $(ECHO) "ERROR: Test failure count: `$(CAT) $< | $(WC) -l`"; \
-          $(CAT) $<;                                                   \
-          exit 1;                                                      \
-        else                                                           \
-          $(ECHO) "Success! No failures detected";                     \
-        fi
-
-# Get failure list from log
-$(OUTPUTDIR)/test_failures.txt: $(OUTPUTDIR)/test_log.txt
-	@$(RM) $@
-	@( $(EGREP) '^FAILED:' $< || $(ECHO) "" ) | $(NAWK) 'length>0' > $@
-
-# Get log file of all tests run
-JDK_TO_TEST := $(shell 							\
-  if [ -d "$(ABS_OUTPUTDIR)/j2sdk-image" ] ; then 			\
-    $(ECHO) "$(ABS_OUTPUTDIR)/j2sdk-image"; 				\
-  elif [ -d "$(ABS_OUTPUTDIR)/bin" ] ; then 				\
-    $(ECHO) "$(ABS_OUTPUTDIR)"; 					\
-  elif [ "$(PRODUCT_HOME)" != "" -a -d "$(PRODUCT_HOME)/bin" ] ; then 	\
-    $(ECHO) "$(PRODUCT_HOME)"; 						\
-  fi 									\
-)
-
-TEST_TARGETS=jdk_all
-$(OUTPUTDIR)/test_log.txt:
-	$(RM) $@
-	( $(CD) ../test &&                                              \
-          $(MAKE) NO_STOPPING=- PRODUCT_HOME=$(JDK_TO_TEST) $(TEST_TARGETS) \
-        ) | tee $@
-
-#
-# JPRT rules
-#
-
-include jprt.gmk
-
-#
-# Phonies to avoid accidents.
-#
-.PHONY: all build clean clobber optimized debug fastdebug create_links \
-	import import_product import_fastdebug import_debug \
-	test test_run test_start test_clean test_summary
+all:
+	@$(MAKE) -f $(top_level_makefile) $(subsystem_name)