From 0a11724f15709778a259bfcb8598dc5bc1bfada2 Mon Sep 17 00:00:00 2001 From: BCG Date: Thu, 16 Jul 2015 09:44:55 -0400 Subject: [PATCH] Added targets for Eclipse environment descriptor. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Someone on the Google Groups site asked how to set up an Eclipse project with Avian classpath. This patch creates the descriptor that you can you use to do that at `$(build)/eclipse/jdk/avian.ee`. The descriptor includes the Avian version, platform, architecture, and build options to allow for multiple versions to exist side by side. Users can import the descriptor into Eclipse via: Window >> Preferences >> Java >> Installed JREs >> Add >> Execution Environment Description Once the descriptor is imported, Avian can be used just like any other JVM installation for Eclipse projects. Personally I use this in conjunction with Eclim to gain code completion for Avian in vim. The new targets also create symlinks to loosely mimic OpenJDK's filenames and folder layout: build/linux-x86_64-tails-continuations/eclipse/jdk/ ├── avian.ee ├── bin │   └── java -> ../../../avian ├── jre │   └── lib │   └── rt.jar -> ../../../../classpath.jar └── src -> ../../classpath Annoyingly, Eclipse for some reason expects this layout to exist even though the descriptor format has required parameters for specifying these locations. I suppose that other software may look for this "standard" layout in a JVM installation so it may be generally useful. These artifacts are only built if the platform is one of `windows`, `linux`, or `macosx`. The symlinks might not actually work at all on Windows, I'm not sure how things like cygwin/msys handle that and I do not have the means to test it. If they do not work a fallback for windows might be to actually copy the files instead of symlinking. I realize this can be done outside of the makefile but it seemed useful to put it here to gain access to the information about the build location, platform, architecture, and other build options. For the record, this contribution is my original work and is released under the same license that Avian uses, found in the license.txt file in this repository. --- makefile | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 55 insertions(+), 1 deletion(-) diff --git a/makefile b/makefile index 906fafb89c..ede80f3211 100755 --- a/makefile +++ b/makefile @@ -1580,11 +1580,32 @@ test-flags = -Djava.library.path=$(build) \ test-args = $(test-flags) $(input) +ifneq ($(filter linux windows macosx,$(platform)),) +eclipse-exec-env = eclipse-ee +eclipse-jdk-dir = $(build)/eclipse/jdk +eclipse-ee-file = $(eclipse-jdk-dir)/avian.ee +eclipse-bin-dir = $(eclipse-jdk-dir)/bin +eclipse-lib-dir = $(eclipse-jdk-dir)/jre/lib +eclipse-src-dir = $(eclipse-jdk-dir)/src +define eclipse-ee-descriptor +# An Eclipse execution environment for the Avian JVM\ +\n-Dee.executable=bin/java${exe-suffix}\ +\n-Dee.bootclasspath=jre/lib/rt.jar\ +\n-Dee.language.level=1.7\ +\n-Dee.name=$(name)-$(version)-$(platform)-$(arch)$(options)\ +\n-Dee.src=src\ +\n-Dee.javadoc=file://$${ee.home}/doc\ +\n-Djava.home=$${ee.home}\n +endef +else +eclipse-exec-env = +endif + .PHONY: build ifneq ($(supports_avian_executable),false) build: $(static-library) $(executable) $(dynamic-library) $(lzma-library) \ $(lzma-encoder) $(executable-dynamic) $(classpath-dep) $(test-dep) \ - $(test-extra-dep) $(embed) $(build)/classpath.jar + $(test-extra-dep) $(embed) $(build)/classpath.jar $(eclipse-exec-env) else build: $(static-library) $(dynamic-library) $(lzma-library) \ $(lzma-encoder) $(classpath-dep) $(test-dep) \ @@ -1646,6 +1667,39 @@ clean: @echo "removing build directories" rm -rf build cmake-build distrib lib +.PHONY: eclipse-ee +ifneq ($(strip $(eclipse-exec-env)),) +eclipse-ee: $(eclipse-ee-file) $(eclipse-lib-dir)/rt.jar $(eclipse-bin-dir)/java${exe-suffix} $(eclipse-src-dir) + +$(eclipse-bin-dir): + @mkdir -p $(@) + +$(eclipse-lib-dir): + @mkdir -p $(@) + +$(eclipse-jdk-dir): + @mkdir -p $(@) + +$(eclipse-ee-file): $(eclipse-jdk-dir) + @echo "writing eclipse execution environment descriptor to $(@)" + @printf '${eclipse-ee-descriptor}' > $(@) + +$(eclipse-src-dir): $(eclipse-jdk-dir) + @echo "symlinking classpath for $(@)" + @ln -sf ../../classpath $(@) + +$(eclipse-bin-dir)/java$(exe-suffix): $(eclipse-bin-dir) $(executable) + @echo "symlinking $(executable) for $(@)" + @ln -sf ../../../$(name)${exe-suffix} $(@) + +$(eclipse-lib-dir)/rt.jar: $(eclipse-lib-dir) $(build)/classpath.jar + @echo "symlinking $(build)/classpath.jar for $(@)" + @ln -sf ../../../../classpath.jar $(@) +else +eclipse-ee: + $(error "Eclipse execution environment for platform '$(platform)' is not supported") +endif + ifeq ($(continuations),true) $(build)/compile-x86-asm.o: $(src)/continuations-x86.$(asm-format) endif