De-universalizing hotspot in jdk8u

David Holmes david.holmes at
Mon Jan 12 11:26:37 UTC 2015

cc'ing macosx-port-dev and hotspot-dev

On 12/01/2015 8:41 PM, Erik Joelsson wrote:
> On 2015-01-12 00:02, David Holmes wrote:
>> Hi David,
>> On 10/01/2015 2:00 AM, David DeHaven wrote:
>>> We have this nice little comment in common/autoconf/jdk-options.m4:
>>>    # On Macosx universal binaries are produced, but they only contain
>>>    # 64 bit intel. This invalidates control of which jvms are built
>>>    # from configure, but only server is valid anyway. Fix this
>>>    # when hotspot makefiles are rewritten.
>>>    if test "x$MACOSX_UNIVERSAL" = xtrue; then
>>>    fi
>>> So.. I turned it off:
>>>    if test "x$OPENJDK_TARGET_OS" = "xmacosx"; then
>>> #    MACOSX_UNIVERSAL="true"
>>>      MACOSX_UNIVERSAL="false"
>>>    fi
>>> And in hotspot/make/bsd/makefiles/defs.make:
>>> # Universal build settings
>>> ifeq ($(OS_VENDOR), Darwin)
>>>    # Build universal binaries by default on Mac OS X
>>> #  MACOSX_UNIVERSAL = true
>>>    MACOSX_UNIVERSAL = false
>>>    ifneq ($(ALT_MACOSX_UNIVERSAL),)
>>> hotspot still seems to build happily (I'm kicking off tests now). Is
>>> there are particular reason this hasn't been done yet? I'd like to
>>> know before I pursue this as a means of eliminating our dependency on
>>> lipo which is causing an inordinate amount of grief when trying to
>>> build on 10.9 and later when Xcode 5+ is coinstalled. I have some
>>> logic to work around using the broken /usr/bin/lipo, but it doesn't
>>> help later in some "other" build target that ends up using '-arch
>>> i386 -arch x86_64'. It does not explicitly run lipo, it relies on gcc
>>> to do the fattening itself and so it fails even though I've gone to
>>> the effort of working around the broken lipo (and it isn't necessary
>>> anyways because it doesn't even build the i386 binaries even though
>>> it's supposed to be "universal").
>> The hotspot makefiles still haven't been rewritten (though Magnus had
>> been working on it).
>> Also I was under the impression that we used the universal stuff
>> because we had to deliver in a particular way on OSX. But I don't know
>> the details and the people who dealt with the original OSX port effort
>> are no longer here.
> I don't know why Hotspot is packaged as a universal binary. In the jdk,
> only libJObjC was built as a universal binary and that lib was removed
> before JDK 8 shipped. What part of Macosx would need to interact
> directly with libjvm.dylib in a way that required a (fake) universal
> format, but no other libs in the jdk? I would say go ahead and change it.

In the spirit of "never take down a fence until you know why it was put 
up in the first place" I've cc'd macosx-port-dev to see if there is 
anyone around who recalls why hotspot is using the universal binary feature.

David H.

> /Erik
>> David H.
>>> Quite frankly I'd rather just remove all the universal binary stuff
>>> from hotspot, but I'm trying my best to minimize the changes there...
>>> the "other" problem I can handle easily.
>>> -DrD-

More information about the hotspot-dev mailing list