jdk/make/modules/tools/Makefile
changeset 4681 7d382dfe6e55
parent 4524 697144bd8b04
child 4975 fff33270dd84
equal deleted inserted replaced
4680:925408ac04c2 4681:7d382dfe6e55
    26 #
    26 #
    27 # Makefile for building the classanalyzer tool
    27 # Makefile for building the classanalyzer tool
    28 #
    28 #
    29 
    29 
    30 BUILDDIR = ../..
    30 BUILDDIR = ../..
    31 PACKAGE = com.sun.classanalyzer
       
    32 PRODUCT = tools
       
    33 PROGRAM = classanalyzer
       
    34 include $(BUILDDIR)/common/Defs.gmk
    31 include $(BUILDDIR)/common/Defs.gmk
    35 
    32 
       
    33 PKGDIR = com/sun/classanalyzer
    36 BUILDTOOL_SOURCE_ROOT = src
    34 BUILDTOOL_SOURCE_ROOT = src
    37 BUILDTOOL_MAIN        = $(PKGDIR)/ClassAnalyzer.java
    35 BUILDTOOL_MAIN        = $(PKGDIR)/ClassAnalyzer.java
    38 BUILTTOOL_MAINCLASS   = $(subst /,.,$(BUILDTOOL_MAIN:%.java=%))
    36 BUILTTOOL_MAINCLASS   = $(subst /,.,$(BUILDTOOL_MAIN:%.java=%))
    39 
    37 
    40 BUILDTOOL_MAIN_SOURCE_FILE = $(BUILDTOOL_SOURCE_ROOT)/$(BUILDTOOL_MAIN)
    38 BUILDTOOL_MAIN_SOURCE_FILE = $(BUILDTOOL_SOURCE_ROOT)/$(BUILDTOOL_MAIN)
    41 BUILDTOOL_MANIFEST_FILE    = $(BUILDTOOLCLASSDIR)/$(PROGRAM)_manifest.mf
    39 BUILDTOOL_MANIFEST_FILE    = $(BUILDTOOLCLASSDIR)/classanalyzer_manifest.mf
    42 BUILDTOOL_JAR_FILE         = $(BUILDTOOLJARDIR)/$(PROGRAM).jar
       
    43 
    40 
    44 FILES_java := $(shell $(CD) $(BUILDTOOL_SOURCE_ROOT) \
    41 FILES_java := $(shell $(CD) $(BUILDTOOL_SOURCE_ROOT) \
    45     && $(FIND) $(PKGDIR) $(SCM_DIRS_prune) -o -type f -print)
    42     && $(FIND) $(PKGDIR) -type f -print)
       
    43 
    46 FILES_class = $(FILES_java:%.java=$(BUILDTOOLCLASSDIR)/%.class)
    44 FILES_class = $(FILES_java:%.java=$(BUILDTOOLCLASSDIR)/%.class)
    47 
    45 
    48 all build: $(BUILDTOOL_JAR_FILE) tool_info
    46 CLASSANALYZER_JAR_FILE     = $(BUILDTOOLJARDIR)/classanalyzer.jar
       
    47 
       
    48 #
       
    49 # ClassAnalyzer depends on the com.sun.tools.classfile API.
       
    50 # The tool is compiled with the latest version of the classfile 
       
    51 # library in the langtools repo to make sure that synchronized
       
    52 # change is made if the classfile API is changed. 
       
    53 #
       
    54 # If langtools repo exists, build its own copy of the
       
    55 # classfile library and use it for compile time and runtime.
       
    56 # If not exist (the top level repo is not a forest), use 
       
    57 # the built jdk tools that imports tools.jar from the latest
       
    58 # promoted build.
       
    59 #
       
    60 # If the classfile API is changed but not yet in a promoted build,
       
    61 # the build might fail and the tool would need the langtools repo
       
    62 # to build in that case.
       
    63 #
       
    64 ifndef LANGTOOLS_TOPDIR
       
    65   LANGTOOLS_TOPDIR=$(JDK_TOPDIR)/../langtools
       
    66 endif
       
    67 
       
    68 LANGTOOLS_TOPDIR_EXISTS := $(shell \
       
    69   if [ -d $(LANGTOOLS_TOPDIR) ] ; then \
       
    70     echo true; \
       
    71   else \
       
    72     echo false; \
       
    73   fi)
       
    74 
       
    75 CLASSFILE_SRC = $(LANGTOOLS_TOPDIR)/src/share/classes
       
    76 CLASSFILE_PKGDIR = com/sun/tools/classfile
       
    77 
       
    78 ifeq ($(LANGTOOLS_TOPDIR_EXISTS), true)
       
    79   FILES_classfile_java := $(shell \
       
    80        $(CD) $(CLASSFILE_SRC) && \
       
    81            $(FIND) $(CLASSFILE_PKGDIR) -name '*.java' -print)
       
    82   FILES_classfile_class = $(FILES_classfile_java:%.java=$(BUILDTOOLCLASSDIR)/%.class)
       
    83   CLASSFILE_JAR_FILE = $(BUILDTOOLJARDIR)/classfile.jar
       
    84   BUILDTOOL_JAVAC    = $(BOOT_JAVAC_CMD) $(JAVAC_JVM_FLAGS) \
       
    85                           $(BOOT_JAVACFLAGS) -classpath $(CLASSFILE_JAR_FILE)
       
    86   BUILDTOOL_JAVA     = $(BOOT_JAVA_CMD) $(JAVA_TOOLS_FLAGS) \
       
    87                           -Xbootclasspath/p:$(CLASSFILE_JAR_FILE)
       
    88 else
       
    89   # if langtools doesn't exist, use tools from the built jdk
       
    90   BUILDTOOL_JAVAC = $(BINDIR)/javac $(JAVAC_JVM_FLAGS) \
       
    91                        $(BOOT_JAVACFLAGS)
       
    92   BUILDTOOL_JAVA  = $(BINDIR)/java $(JAVA_TOOLS_FLAGS)
       
    93 endif
       
    94 
       
    95 # Location of the output modules.list, <module>.classlist
       
    96 # and other output files generated by the class analyzer tool.
       
    97 #
       
    98 MODULE_CLASSLIST = $(MODULES_TEMPDIR)/classlist
       
    99 
       
   100 all build: classanalyzer gen-classlist
       
   101 
       
   102 classanalyzer: $(CLASSFILE_JAR_FILE) $(CLASSANALYZER_JAR_FILE) 
       
   103 
       
   104 gen-classlist:
       
   105 	@$(ECHO) ">>>Making "$@" @ `$(DATE)` ..."
       
   106 	@$(RM) -rf $(MODULE_CLASSLIST)
       
   107 	@$(MKDIR) -p $(MODULE_CLASSLIST)
       
   108 	$(BUILDTOOL_JAVA) \
       
   109                 -Dclassanalyzer.debug \
       
   110                 -jar $(CLASSANALYZER_JAR_FILE) \
       
   111                 -jdkhome $(OUTPUTDIR) \
       
   112                 -config ../modules.config \
       
   113                 -config ../modules.group \
       
   114                 -depconfig ../jdk7.depconfig \
       
   115                 -depconfig ../optional.depconfig \
       
   116                 -showdynamic \
       
   117                 -output $(MODULE_CLASSLIST)
       
   118 	@$(ECHO) ">>>Finished making "$@" @ `$(DATE)` ..."
    49 
   119 
    50 $(BUILDTOOL_MANIFEST_FILE): $(BUILDTOOL_MAIN_SOURCE_FILE)
   120 $(BUILDTOOL_MANIFEST_FILE): $(BUILDTOOL_MAIN_SOURCE_FILE)
    51 	@$(prep-target)
   121 	@$(prep-target)
    52 	$(ECHO) "Main-Class: $(BUILTTOOL_MAINCLASS)" > $@
   122 	$(ECHO) "Main-Class: $(BUILTTOOL_MAINCLASS)" > $@
    53 
   123 
       
   124 $(BUILDTOOLCLASSDIR)/$(CLASSFILE_PKGDIR)/%.class : $(CLASSFILE_SRC)/$(CLASSFILE_PKGDIR)/%.java
       
   125 	@$(prep-target)
       
   126 	@$(BUILDTOOL_JAVAC) \
       
   127             -sourcepath $(CLASSFILE_SRC) \
       
   128             -d $(BUILDTOOLCLASSDIR) $<
       
   129 
    54 $(BUILDTOOLCLASSDIR)/%.class : $(BUILDTOOL_SOURCE_ROOT)/%.java
   130 $(BUILDTOOLCLASSDIR)/%.class : $(BUILDTOOL_SOURCE_ROOT)/%.java
    55 	@$(prep-target)
   131 	@$(prep-target)
    56 	$(JAVAC_CMD) \
   132 	$(BUILDTOOL_JAVAC) \
    57             -sourcepath $(BUILDTOOL_SOURCE_ROOT) \
   133             -sourcepath $(BUILDTOOL_SOURCE_ROOT) \
    58             -d $(BUILDTOOLCLASSDIR) $<
   134             -d $(BUILDTOOLCLASSDIR) $<
    59 
   135 
    60 $(BUILDTOOL_JAR_FILE): $(BUILDTOOL_MANIFEST_FILE) $(FILES_class)
   136 $(CLASSANALYZER_JAR_FILE): $(BUILDTOOL_MANIFEST_FILE) $(FILES_class)
    61 	@$(prep-target)
   137 	@$(prep-target)
    62 	$(BOOT_JAR_CMD) cfm $@ $(BUILDTOOL_MANIFEST_FILE) \
   138 	$(CD) $(BUILDTOOLCLASSDIR) && \
    63 	    -C $(BUILDTOOLCLASSDIR) $(PKGDIR) \
   139 	    $(BOOT_JAR_CMD) cfm $@ $(BUILDTOOL_MANIFEST_FILE) \
    64 	    $(BOOT_JAR_JFLAGS) || $(RM) $@
   140 	       $(PKGDIR) $(BOOT_JAR_JFLAGS) || $(RM) $@
    65 	$(java-vm-cleanup)
   141 	@$(java-vm-cleanup)
    66 
   142 
    67 # Printing out a build tool information line
   143 $(BUILDTOOLJARDIR)/classfile.jar: $(FILES_classfile_class)
    68 define printBuildToolSetting
   144 	@$(prep-target)
    69 if [ "$2" != "" ] ; then $(PRINTF) "%-25s %s\n" "$1:" "$2"; fi
   145 	$(CD) $(BUILDTOOLCLASSDIR) && \
    70 endef
   146 	    $(BOOT_JAR_CMD) cf $@ \
    71 
   147 	        $(CLASSFILE_PKGDIR) $(BOOT_JAR_JFLAGS) || $(RM) $@
    72 # Print out the build tool information
   148 	@$(java-vm-cleanup)
    73 tool_info:
       
    74 	@$(ECHO) "========================================================="
       
    75 	@$(call printBuildToolSetting,BUILDTOOL,$(PROGRAM))
       
    76 	@$(call printBuildToolSetting,PACKAGE,$(PACKAGE))
       
    77 	@$(call printBuildToolSetting,BUILDTOOL_SOURCE_ROOT,$(BUILDTOOL_SOURCE_ROOT))
       
    78 	@$(call printBuildToolSetting,BUILTTOOL_MAINCLASS,$(BUILTTOOL_MAINCLASS))
       
    79 	@$(call printBuildToolSetting,BUILDTOOL_JAR_FILE,$(BUILDTOOL_JAR_FILE))
       
    80 	@$(ECHO) "========================================================="
       
    81 
   149 
    82 clean clobber::
   150 clean clobber::
    83 	@$(RM) -rf $(BUILDTOOLCLASSDIR)/$(PKGDIR)
   151 	@$(RM) -rf $(BUILDTOOLCLASSDIR)/$(PKGDIR)
       
   152 	@$(RM) -rf $(BUILDTOOLCLASSDIR)/$(CLASSFILE_PKGDIR)
    84 	@$(RM) $(BUILDTOOL_MANIFEST_FILE)
   153 	@$(RM) $(BUILDTOOL_MANIFEST_FILE)
    85 	@$(RM) $(BUILDTOOL_JAR_FILE)
   154 	@$(RM) $(CLASSANALYZER_JAR_FILE)
       
   155 	@$(RM) $(CLASSFILE_JAR_FILE)