mirror of
https://github.com/Mercury-Language/mercury.git
synced 2025-12-10 11:23:15 +00:00
Introduce hacks to make it possible to build the standard library in the Java
Branches: main
Introduce hacks to make it possible to build the standard library in the Java
grade, even though sub-modules aren't yet supported by the Java backend.
library/Mmakefile:
Copy submodule source files into package directories as expected by
javac, e.g. thread.mvar.java -> thread_/mvar.java
Make `jars' target include source files in package directories.
This commit is contained in:
@@ -248,17 +248,25 @@ endif
|
||||
# likewise use `mr_enum'. Since Java implementations often assume that
|
||||
# a class foo is located in a file foo.java, we similarly mangle the
|
||||
# Java file names for these standard library modules.
|
||||
# We also need to fix up the file names for nested modules.
|
||||
JAVAS = ` echo $($(STD_LIB_NAME).javas) | sed \
|
||||
-e 's/ int.java/ mr_int.java/' \
|
||||
-e 's/ float.java/ mr_float.java/' \
|
||||
-e 's/ char.java/ mr_char.java/' \
|
||||
-e 's/ enum.java/ mr_enum.java/' `
|
||||
-e 's/ enum.java/ mr_enum.java/' \
|
||||
-e 's: bit_buffer.read.java: bit_buffer_/read.java:' \
|
||||
-e 's: bit_buffer.write.java: bit_buffer_/write.java:' \
|
||||
-e 's: stream.string_writer.java: stream_/string_writer.java:' \
|
||||
-e 's: string.builder.java: string_/builder.java:' \
|
||||
-e 's: thread.channel.java: thread_/channel.java:' \
|
||||
-e 's: thread.mvar.java: thread_/mvar.java:' \
|
||||
-e 's: thread.semaphore.java: thread_/semaphore.java:' `
|
||||
|
||||
# We need to invoke javac on all of the classes at the same time,
|
||||
# rather than compiling them separately. This is needed because
|
||||
# otherwise javac doesn't handle cyclic dependencies between different
|
||||
# modules.
|
||||
classes: javas java_symlinks
|
||||
classes: javas java_symlinks java_subdir_copies
|
||||
$(JAVAC) $(ALL_JAVACFLAGS) $(JAVAS)
|
||||
|
||||
# javac expects to find the sources for symbols named mercury.* in
|
||||
@@ -272,6 +280,22 @@ java_symlinks:
|
||||
[ -d mercury ] || ln -s . mercury
|
||||
[ -d runtime ] || ln -s $(MERCURY_DIR)/java/runtime .
|
||||
|
||||
# Mercury doesn't yet put .java files in the directory hierarchies that Java
|
||||
# expects. For now we copy a few files manually.
|
||||
.PHONY: java_subdir_copies
|
||||
java_subdir_copies:
|
||||
[ -d bit_buffer_ ] || mkdir bit_buffer_
|
||||
[ -d stream_ ] || mkdir stream_
|
||||
[ -d string_ ] || mkdir string_
|
||||
[ -d thread_ ] || mkdir thread_
|
||||
cp bit_buffer.read.java bit_buffer_/read.java
|
||||
cp bit_buffer.write.java bit_buffer_/write.java
|
||||
cp stream.string_writer.java stream_/string_writer.java
|
||||
cp string.builder.java string_/builder.java
|
||||
cp thread.channel.java thread_/channel.java
|
||||
cp thread.mvar.java thread_/mvar.java
|
||||
cp thread.semaphore.java thread_/semaphore.java
|
||||
|
||||
# Once all of the library classes have been compiled, we put them in a single
|
||||
# jar file. At this point we also add the runtime classes to a jar file.
|
||||
# Note that this stage makes use of the symbolic links created earlier to
|
||||
@@ -286,7 +310,11 @@ JARS = $(STD_LIB_NAME).jar $(RT_LIB_NAME).jar
|
||||
# any architecture-specific objects.
|
||||
.PHONY: jars
|
||||
jars: classes
|
||||
$(JAR) $(JAR_CREATE_FLAGS) $(STD_LIB_NAME).jar mercury/*.class
|
||||
$(JAR) $(JAR_CREATE_FLAGS) $(STD_LIB_NAME).jar mercury/*.class \
|
||||
mercury/bit_buffer_/*.class \
|
||||
mercury/stream_/*.class \
|
||||
mercury/string_/*.class \
|
||||
mercury/thread_/*.class
|
||||
$(JAR) $(JAR_CREATE_FLAGS) $(RT_LIB_NAME).jar mercury/runtime/*.class
|
||||
-+cd mercury/runtime && mmake $(NATIVE_SO)
|
||||
-cp mercury/runtime/$(NATIVE_SO) .
|
||||
|
||||
Reference in New Issue
Block a user