Hi Erik,

with the small changes proposed in "8026964: Building with an IBM J9
boot jdk requires special settings for BOOT_RTJAR"

https://bugs.openjdk.java.net/browse/JDK-8026964

I could finally successfully build with J9 as bootstrap jdk.

I saw that you already submitted this change so I'm probably to late,
but I think you could also have removed

BOOTJDK_CHECK_TOOL_IN_BOOTJDK(RMIC,rmic)

from boot-jdk.m4 and

RMIC=@FIXPATH@ $(BOOT_JDK)/bin/rmic

from spec.gmk.in because it is not used anymore.

Maybe you can remove it with another change.

Thank you and best regards,
Volker


On Fri, Oct 18, 2013 at 5:50 PM, Erik Joelsson <erik.joels...@oracle.com> wrote:
> Hello Volker,
>
> Building without a -bootclasspath results in the following warning which is
> likely why it was added in the first place:
>
> warning: [options] bootstrap class path not set in conjunction with -source
> 1.7
>
> Note that we are using the bootstrap javac, so it's not the one bundled with
> the bootjdk. Bootstrap javac wants to generate jdk8 classes by default.
>
> When using an OracleJDK as boot, tools.jar needs to be on the classpath when
> building BUILD_BOOTSTRAP_CORBA. I put BOOT_TOOLSJAR there, but that's
> actually incorrect. I should have put the bootstrap javac jar instead. And
> it doesn't need to be on the bootclasspath, just -classpath.
>
> I tried building without -bootclasspath in corba, but it generates a big
> chunk of warnings:
>
> /localhome/hg/jdk8-tl/corba/src/share/classes/com/sun/corba/se/spi/orb/ORB.java:100:
> warning: AppContext is internal proprietary API and may be removed in a
> future release
> import sun.awt.AppContext;
>               ^
> /localhome/hg/jdk8-tl/corba/src/share/classes/sun/corba/Bridge.java:39:
> warning: Unsafe is internal proprietary API and may be removed in a future
> release
> import sun.misc.Unsafe ;
>                ^
> /localhome/hg/jdk8-tl/corba/src/share/classes/sun/corba/Bridge.java:40:
> warning: ReflectionFactory is internal proprietary API and may be removed in
> a future release
> import sun.reflect.ReflectionFactory ;
>
> I don't know why these aren't showing otherwise.
>
> Could we figure out a more general way of expressing a proper bootclasspath
> that works for J9 too?
>
> /Erik
>
>
> On 2013-10-18 17:15, Volker Simonis wrote:
>>
>> Hi Erik,
>>
>> I had to fix another issue in the JAXWS build
>> (https://bugs.openjdk.java.net/browse/JDK-8026874) but with that I've
>> finally managed to get to the Corba build with a J9 bootstrap JDK.
>>
>> With the following small change in BuildCorba.gmk:
>>
>> -     FLAGS:=$(BOOT_JDK_SOURCETARGET) -bootclasspath $(BOOT_RTJAR)
>> $(DISABLE_CORBA_WARNINGS),\
>> +     FLAGS:=$(BOOT_JDK_SOURCETARGET) $(DISABLE_CORBA_WARNINGS),\
>>
>> I could successfully build Corba with J9 as bootstrap JDK. So you (and
>> the others) were right with your observation that during build time we
>> don not call the boot JDKs idlj/rmic compilers any more. That's good!
>>
>> Now to your change (and my two changes lines above). You did the
>> following in BuildCorba.gmk:
>>
>> -    FLAGS := $(BOOT_JDK_SOURCETARGET) -bootclasspath $(BOOT_RTJAR)
>> $(DISABLE_CORBA_WARNINGS), \
>> +    FLAGS := $(BOOT_JDK_SOURCETARGET) -bootclasspath
>> $(BOOT_RTJAR)$(PATH_SEP)$(BOOT_TOOLSJAR) \
>> +        $(DISABLE_CORBA_WARNINGS), \
>>
>> This probably doesn't do what you intended because $(BOOT_RTJAR)
>> already expands to a complete path and you then append another path
>> which will give you an invalid file. So actually it turns out that
>> your change is equivalent to mine where I completely eliminated the
>> '-bootclasspath' option (although I think mine is cleaner :)
>>
>> So I wanted to know why we need the '-bootclasspath' option at all,
>> because we are anyway compiling with the boot JDK and it will use its
>> $(BOOT_RTJAR) by default.
>>
>> The same problem also exists in makefiles/Setup.gmk
>>
>>   $(eval $(call SetupJavaCompiler,GENERATE_OLDBYTECODE,\
>>        JVM:=$(JAVA),\
>>        JAVAC:=$(NEW_JAVAC),\
>> -     FLAGS:=-source 7 -target 7 -bootclasspath $(BOOT_RTJAR)
>> $(DISABLE_WARNINGS),\
>> +     FLAGS:=-source 7 -target 7  $(DISABLE_WARNINGS),\
>>        SERVER_DIR:=$(SJAVAC_SERVER_DIR),\
>>        SERVER_JVM:=$(SJAVAC_SERVER_JAVA)))
>>
>> I don't understand why we need the '-bootclasspath' option to javac
>> because this will executed by the boot JDK and as far as I understand
>> it will pick up its $(BOOT_RTJAR) anyway.
>>
>> The problem I have with this construct is that other VMs may not have
>> all required classes in rt.jar and as far as I know that's not part of
>> the Java 7 specification. For example J9 has jre/lib/rt.jar but some
>> classes like Object are in another jar file
>> (jre/lib/ppc64/{compressedrefs|default}/jclSC170/vm.jar).
>>
>> So if this '-bootclasspath' option is really needed, I will be
>> necessary to rework the $(BOOT_RTJAR) detection for every distinct
>> boot JDK which is not very nice because I think any Java 7 compliant
>> JDK should work as boot JDK out of the box.
>>
>> What do you think?
>>
>> Regards,
>> Volker
>>
>>
>>
>>
>> On Wed, Oct 16, 2013 at 2:51 PM, Volker Simonis
>> <volker.simo...@gmail.com> wrote:
>>>
>>> On Wed, Oct 16, 2013 at 12:22 PM, Erik Joelsson
>>> <erik.joels...@oracle.com> wrote:
>>>>
>>>> On 2013-10-15 17:29, Volker Simonis wrote:
>>>>>
>>>>> Hi Erik, Alan,
>>>>>
>>>>> first of all I think this is a good change because it helps porters to
>>>>> build a complete JDK even if the newly build rmic wouldn't run.
>>>>>
>>>>> On the other hand I'm a little bit concerned if this change still
>>>>> allows it to bootstrap with a non-Oracle based bootstrap JDK. I
>>>>> remember that we had some problems with IBM J9 as bootstrap JDK
>>>>> because they have different default implementations of idlj and rmic
>>>>> (see
>>>>>
>>>>> http://hg.openjdk.java.net/ppc-aix-port/jdk7u/raw-file/tip/README-ppc.html#_TOC_ANCHOR_4_)
>>>>>
>>>>> Fortunately, the IBM J9 also contains the original Oracle idlj and
>>>>> rmic versions and with the old build it was possible to use them by
>>>>> specifying the two variables:
>>>>>
>>>>> IDLJ='$(ALT_BOOTDIR)/bin/java -cp $(ALT_BOOTDIR)/lib/tools.jar
>>>>> com.sun.tools.corba.se.idl.toJavaPortable.Compile'
>>>>> RMIC='$(ALT_BOOTDIR)/bin/java -cp $(ALT_BOOTDIR)/lib/tools.jar
>>>>> sun.rmi.rmic.Main'
>>>>>
>>>>> I'm not sure if this is still possible with the new build system.
>>>>>
>>>>> By the way, the main problem why the IBM J9 idlj and rmic didn't work
>>>>> out of the box were some command line options which were only
>>>>> supported by the Oracle implementation. It would therefore be very
>>>>> nice if you could completely remove such options from the build.
>>>>>
>>>>> And you can easily check this by trying the IBM J9 as bootstrap JDK on
>>>>> Linux/x86_64.
>>>>
>>>> I tried building with J9, but it broke in Hotspot already so couldn't
>>>> get to
>>>> the relevant parts of the build.
>>>
>>> Just realised this myself and opened "JDK-8026703: Wrongly placed
>>> <xsl:import> element in Event-Based JVM Tracing .xsl  files"
>>> (https://bugs.openjdk.java.net/browse/JDK-8026703). The fix will
>>> follow in the next minutes...
>>>
>>> Unfortunately, this is not the last problem before getting to the
>>> "relevant parts" :(
>>>
>>>> But as David pointed out, this should work
>>>> as we aren't running the rmic or idlj in the bootjdk at all now.
>>>
>>> This sounds good!
>>> But nevertheless I'll try to verify it if I'll manage to get around
>>> the other build issues :)
>>>
>>>> /Erik
>>>>
>>>>> Thank you and best regards,
>>>>> Volker
>>>>>
>>>>>
>>>>> On Tue, Oct 15, 2013 at 4:40 PM, Alan Bateman <alan.bate...@oracle.com>
>>>>> wrote:
>>>>>>
>>>>>> On 15/10/2013 15:30, Erik Joelsson wrote:
>>>>>>>
>>>>>>> Currently the RMI stubs in the jdk are built with the newly built
>>>>>>> rmic
>>>>>>> binary at the end of the build. This patch changes that and instead
>>>>>>> builds a
>>>>>>> bootstrap version of the rmic classes, much like bootstrap javac in
>>>>>>> langtools, which runs on the bootjdk, but generates classes for the
>>>>>>> new
>>>>>>> jdk.
>>>>>>> The new solution is more friendly to cross compilation.
>>>>>>>
>>>>>>> A few notes on the patch:
>>>>>>>
>>>>>>> * In src/share/classes/sun/tools/tree/Node.java, I had to change a
>>>>>>> call
>>>>>>> to
>>>>>>> a jdk8 only constructor in java.lang.InternalError.
>>>>>>> * The packages included when compiling rmic were just picked by
>>>>>>> extending
>>>>>>> for each missing class until the compilation succeeded. If someone
>>>>>>> knows
>>>>>>> of
>>>>>>> a crucial package or class that needs to be included, please say so.
>>>>>>> * I renamed a parameter to SetupJavaCompilation. I do not consider
>>>>>>> the
>>>>>>> parameter a hack anymore, but a necessary option for this case.
>>>>>>> * In RMICompilation, the dependency file is now a real touch file
>>>>>>> instead
>>>>>>> of a virtual one. This was needed for proper dependencies in
>>>>>>> GenerateClasses.gmk.
>>>>>>> * All of corba is compiled twice since I have no idea which parts
>>>>>>> would
>>>>>>> actually be needed. This doesn't add much build time since it can be
>>>>>>> run
>>>>>>> effectively in parallel with the rest of the corba build.
>>>>>>> * I put the compilation of bootstrap rmic in GenerateClasses.gmk
>>>>>>> directly
>>>>>>> instead of Tools.gmk. This was to not add much compile time, since
>>>>>>> Tools.gmk
>>>>>>> is included and therefore parsed a lot.
>>>>>>>
>>>>>>> Bug: https://bugs.openjdk.java.net/browse/JDK-6604021
>>>>>>> Webrev: http://cr.openjdk.java.net/~erikj/6604021/webrev.01/
>>>>>>>
>>>>>>> /Erik
>>>>>>
>>>>>> It's great to see a solution coming for this, it was always been
>>>>>> troublesome
>>>>>> to run the newly built rmic.
>>>>>>
>>>>>> So what are the implications of this? I assume it means that we need
>>>>>> to
>>>>>> be
>>>>>> careful in sun.rmi.rmic, sun.tools.{asm,java,javac,tree,util} and
>>>>>> restrict
>>>>>> API usage to what is available in the boot JDK - is that right?
>>>>>>
>>>>>> -Alan.
>>>>
>>>>
>

Reply via email to