diff options
Diffstat (limited to 'libjava/Makefile.am')
| -rw-r--r-- | libjava/Makefile.am | 144 |
1 files changed, 86 insertions, 58 deletions
diff --git a/libjava/Makefile.am b/libjava/Makefile.am index be1affd0fce..c0aa90926d8 100644 --- a/libjava/Makefile.am +++ b/libjava/Makefile.am @@ -228,6 +228,63 @@ BOOTCLASSPATH = $(here)'$(CLASSPATH_SEPARATOR)'$(srcdir)'$(CLASSPATH_SEPARATOR)' ## ################################################################ +# Files for which we build .lo files +all_native_compiled_source_files = \ + $(java_source_files) \ + $(built_java_source_files) \ + $(xlib_java_source_files) + +# Files for which we build .class files +# It *must* begin with $(all_native_compiled_source_files) +all_java_source_files = \ + $(all_native_compiled_source_files) \ + $(gtk_awt_peer_source_files) \ + $(gnu_xml_source_files) \ + $(javax_imageio_source_files) \ + $(javax_xml_source_files) \ + $(gnu_java_beans_source_files) \ + gnu/gcj/tools/gcj_dbtool/Main.java + +EXTRA_DIST = $(all_java_source_files) + +# Build a list of native and bytecode-compiled directories. The Makefile +# depends on them, because they affect the definition of two variables +# below. +# Each directory's filelist file depends on the corresponding Java source files +# Each class file depends on the its directory's .stamp file +# Below, one .lo file is built per directory when the stamp file changes + +Makefile.deps: $(srcdir)/Makefile.in + @: $(call write_entries_to_file,$(all_java_source_files),files.tmplist) + sed 's,/[^/]*$$,,' \ + files.tmplist | sort | uniq > bytecodes.list + sed -n '1,$(words $(all_native_compiled_source_files))s,/[^/]*$$,,p' \ + files.tmplist | sort | uniq > native.list + echo 's,^\(.*\)/\([^/]*\)\.java$$,\1.list: \0\' > tmpsed + echo '\1/\2.class: \1.stamp,' >> tmpsed + sed -ftmpsed files.tmplist \ + > Makefile.deps + rm files.tmplist tmpsed + +all_native_compiled_dirs := $(shell test -f native.list && cat native.list) +all_java_dirs := $(shell test -f bytecodes.list && cat bytecodes.list) +all_java_lo_files = $(all_native_compiled_dirs:=.lo) +all_java_deps_files = $(all_java_dirs:=.deps) +all_java_stamp_files = $(all_java_dirs:=.stamp) +all_java_filelist_files = $(all_java_dirs:=.list) + +# In the future these may be defined manually, if we decide to split libgcj.so +# into multiple shared libraries. For now, everything but xlib goes into +# all_libgcj_lo_files +all_xlib_lo_files = gnu/gcj/xlib.lo gnu/awt/xlib.lo +all_libgcj_lo_files = $(filter-out $(all_xlib_lo_files), $(all_java_lo_files)) + +# Include automatically generated dependencies between Java source files. +-include Makefile.deps $(all_java_deps_files) + +all_property_files = $(property_files) \ + java/util/logging/logging.properties + ## ## How to build libgcj.a and libgcj.jar ## @@ -246,23 +303,22 @@ libgij_la_LDFLAGS = -rpath $(toolexeclibdir) \ # subsections in the linker, such as Alpha and MIPS. libgcj0_convenience_la_SOURCES = prims.cc jni.cc exception.cc stacktrace.cc \ link.cc defineclass.cc interpret.cc verify.cc \ - $(nat_source_files) $(math_c_source_files) $(java_source_files) \ - $(built_java_source_files) \ + $(nat_source_files) $(math_c_source_files) \ $(BOEHMGC_SRC) $(NOGC_SRC) \ $(BACKTRACE_SRC) \ $(POSIX_PLATFORM_SRC) $(WIN32_PLATFORM_SRC) $(ECOS_PLATFORM_SRC) \ $(DARWIN_CRT_SRC) \ $(POSIX_THREAD_SRC) $(WIN32_THREAD_SRC) $(NO_THREAD_SRC) libgcj0_convenience_la_LIBADD = \ + $(all_libgcj_lo_files) \ gnu-xml.lo javax-imageio.lo \ javax-xml.lo gnu-java-beans.lo \ external/sax/libsax-gcj.la \ external/w3c_dom/libw3c-gcj.la +libgcj0_convenience_la_DEPENDENCIES = $(libgcj0_convenience_la_LIBADD) noinst_LTLIBRARIES = libgcj0_convenience.la -libgcj_la_SOURCES = - ## Objects from C++ sources in subdirs. nat_files = $(nat_source_files:.cc=.lo) xlib_nat_files = $(xlib_nat_source_files:.cc=.lo) @@ -344,7 +400,7 @@ jni/gtk-peer/gtk_jawt.c \ jni/classpath/native_state.c ## Java sources for Gtk peers. -gtk_awt_peer_sources = \ +gtk_awt_peer_source_files = \ gnu/java/awt/peer/gtk/GdkTextLayout.java \ gnu/java/awt/peer/gtk/GdkFontMetrics.java \ gnu/java/awt/peer/gtk/GdkFontPeer.java \ @@ -393,7 +449,7 @@ gnu/java/awt/peer/gtk/GThreadMutex.java \ gnu/java/awt/peer/gtk/GThreadNativeMethodRunner.java -gtk_jni_headers = $(patsubst %.java,jniinclude/%.h,$(subst /,_,$(gtk_awt_peer_sources))) +gtk_jni_headers = $(patsubst %.java,jniinclude/%.h,$(subst /,_,$(gtk_awt_peer_source_files))) jniinclude/gnu_java_awt_peer_gtk_GdkGraphics.h: gnu/java/awt/peer/gtk/GdkGraphics.java jniinclude/gnu_java_awt_peer_gtk_GdkGraphics2D.h: gnu/java/awt/peer/gtk/GdkGraphics2D.java @@ -510,11 +566,10 @@ libgcjawt_la_LDFLAGS = \ $(LIBGCJ_LD_SYMBOLIC) libgcjawt_la_LINK = $(LIBLINK) -lib_gnu_awt_xlib_la_SOURCES = \ - $(xlib_java_source_files) \ - $(xlib_nat_source_files) -lib_gnu_awt_xlib_la_DEPENDENCIES = libgcj-$(gcc_version).jar libgcj.la libgcj.spec -lib_gnu_awt_xlib_la_LIBADD = $(xlib_javao_files) +lib_gnu_awt_xlib_la_SOURCES = $(xlib_nat_source_files) +lib_gnu_awt_xlib_la_LIBADD = $(all_xlib_lo_files) +lib_gnu_awt_xlib_la_DEPENDENCIES = libgcj-$(gcc_version).jar libgcj.la libgcj.spec \ + $(lib_gnu_awt_xlib_la_LIBADD) ## We require libstdc++-v3 to be in the same build tree. lib_gnu_awt_xlib_la_CPPFLAGS = \ $(AM_CPPFLAGS) \ @@ -528,21 +583,6 @@ lib_gnu_awt_xlib_la_LDFLAGS = ../libstdc++-v3/src/libstdc++.la \ -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(LIBGCJ_LD_SYMBOLIC) lib_gnu_awt_xlib_la_LINK = $(LIBLINK) -all_java_source_files = \ - $(java_source_files) \ - $(built_java_source_files) \ - $(gtk_awt_peer_sources) \ - $(xlib_java_source_files) \ - $(gnu_xml_source_files) \ - $(javax_imageio_source_files) \ - $(javax_xml_source_files) \ - $(gnu_java_beans_source_files) - -all_java_class_files = $(all_java_source_files:.java=.class) - -all_property_files = $(property_files) \ - java/util/logging/logging.properties - ## Build property files into the library. property_files = \ gnu/regexp/MessagesBundle.properties \ @@ -554,32 +594,24 @@ propertyo_files = $(property_files:.properties=.properties.lo) %.properties.lo: %.properties $(LTGCJCOMPILE) -o $@ -c $< -Wc,--resource,`echo $@ | sed "s/\.lo$$//"` -if ONESTEP - -# Compile all classfiles in one go. +# Compile one directory in one go. If the files have to be compiled with the +# binary compatibility ABI, only make the .class here -- the .lo is made +# elsewhere in this Makefile. -classes.stamp: $(all_java_source_files) gnu/gcj/tools/gcj_dbtool/Main.java - @echo Compiling Java sourcefiles... - @: $(call write_entries_to_file,$?,libgcj.sourcelist) - $(JAVAC) $(JCFLAGS) -classpath '' -bootclasspath $(BOOTCLASSPATH) -d $(here) @libgcj.sourcelist - echo > classes.stamp -# This next rule seems backward, but reflects the fact that 1) all -# classfiles are compiled in one go when classes.stamp is built and 2) -# anything which depends on a particular .class file must wait until -# this file is built. -$(all_java_class_files) gnu/gcj/tools/gcj_dbtool/Main.class: classes.stamp +%.list: + @: $(shell $(mkinstalldirs) $(basename $@)) + @: $(call write_entries_to_file,$^,$@) -else # !ONESTEP +$(all_java_lo_files): %.lo: %.stamp + $(LTGCJCOMPILE) -o $@ -c @${<:.stamp=.list} -# Compile each classfile individually. +$(all_java_stamp_files): %.stamp: %.list + $(JAVAC) $(JCFLAGS) -classpath '' -bootclasspath $(BOOTCLASSPATH) -d $(here) \ + -MD -MF ${@:.stamp=.deps} @$< + echo timestamp > $@ -.java.class: - $(JAVAC) $(JCFLAGS) -classpath '' -bootclasspath $(BOOTCLASSPATH) -d $(here) $< - -classes.stamp: $(all_java_class_files) $(all_property_files) - echo > classes.stamp - -endif +classes.stamp: $(all_property_files) $(all_java_stamp_files) + echo timestamp > classes.stamp libgcj-$(gcc_version).jar: classes.stamp -@rm -f libgcj-$(gcc_version).jar @@ -605,7 +637,9 @@ libgcj-$(gcc_version).jar: classes.stamp $(ZIP) -ufM0E@ $@; \ done -CLEANFILES = libgcj-$(gcc_version).jar classes.stamp +CLEANFILES = libgcj-$(gcc_version).jar classes.stamp $(all_java_stamp_files) \ + $(all_java_deps_files) $(all_java_filelist_files) +DISTCLEANFILES = Makefile.deps native.dirs bytecompile.dirs mostlyclean-local: ## Use libtool rm to remove each libtool object @@ -628,16 +662,10 @@ clean-nat: SUFFIXES = .class .java .h .properties -$(javao_files) $(xlib_javao_files): %.lo: %.java - $(LTGCJCOMPILE) -o $@ -c $< - ## Pass the list of object files to libtool in a temporary file to ## avoid tripping platform command line length limits. -libgcj.la: $(libgcj_la_OBJECTS) $(libgcj_la_DEPENDENCIES) - @echo Creating list of files to link... - @: $(call write_entries_to_file,$(libgcj_la_OBJECTS),libgcj.objectlist) - $(libgcj_la_LINK) -objectlist libgcj.objectlist \ - $(libgcj_la_LIBADD) \ +libgcj.la: $(libgcj_la_DEPENDENCIES) + $(libgcj_la_LINK) $(libgcj_la_LIBADD) \ -rpath $(toolexeclibdir) $(libgcj_la_LDFLAGS) $(LIBS) lib-gnu-awt-xlib.la: $(lib_gnu_awt_xlib_la_OBJECTS) $(lib_gnu_awt_xlib_la_DEPENDENCIES) @@ -700,7 +728,7 @@ gnu-java-beans.lo: $(gnu_java_beans_source_files) ## Depend on the sources, even though we are going to compile the ## classes. -gtk-awt-peer.lo: $(gtk_awt_peer_sources) +gtk-awt-peer.lo: $(gtk_awt_peer_source_files) ## FIXME: this is ugly. We want to make sure the .class files have ## been built, but we don't want a real dependency on them as this ## would cause our target to be rebuilt whenever any .java file is |

