[OpenJDK 2D-Dev] RFR: JDK-8196218: [linux] libfontmanager should be linked against headless awt library

Phil Race philip.race at oracle.com
Fri Jan 26 17:44:08 UTC 2018


 > I could not remove -lawt however.

Ah yes, Erik sent me the errors and yes there are some 2D functions that are
defined in libawt that fontmanager needs for text rendering support, so 
we can't remove that.

libawt on these platforms with separate headless and xawt libraries 
could have
more aptly be called lib2d .. since most of the true AWT functionality 
is in the xawt library.


-phil.

On 01/26/2018 09:23 AM, Erik Joelsson wrote:
> This patch builds on Solaris:
>
> diff -r 50cd89fe209f make/lib/Awt2dLibraries.gmk
> --- a/make/lib/Awt2dLibraries.gmk
> +++ b/make/lib/Awt2dLibraries.gmk
> @@ -683,15 +683,15 @@
>          hidevf w_novirtualdescr arrowrtn2, \
>      DISABLED_WARNINGS_microsoft := 4267 4244 4018 4090 4996 4146 4334 
> 4819 4101, \
>      MAPFILE := $(BUILD_LIBFONTMANAGER_MAPFILE), \
> -    LDFLAGS := $(subst -Wl$(COMMA)-z$(COMMA)defs,,$(LDFLAGS_JDKLIB)) 
> $(LDFLAGS_CXX_JDK) \
> +    LDFLAGS := $(LDFLAGS_JDKLIB) $(LDFLAGS_CXX_JDK) \
>          $(call SET_SHARED_LIBRARY_ORIGIN), \
>      LDFLAGS_unix := -L$(INSTALL_LIBRARIES_HERE), \
>      LDFLAGS_macosx := -undefined dynamic_lookup, \
>      LIBS := $(BUILD_LIBFONTMANAGER_FONTLIB), \
>      LIBS_unix := -lawt -ljava -ljvm $(LIBM) $(LIBCXX), \
> -    LIBS_linux := -lc, \
> +    LIBS_linux := -lawt_headless -lc, \
>      LIBS_solaris := -lawt_headless -lc, \
>      LIBS_aix := -lawt_headless,\
>
> I could not remove -lawt however.
>
> /Erik
>
> On 2018-01-26 09:15, Erik Joelsson wrote:
>> On 2018-01-26 09:02, Severin Gehwolf wrote:
>>> On Fri, 2018-01-26 at 08:54 -0800, Erik Joelsson wrote:
>>>> On 2018-01-26 08:44, Phil Race wrote:
>>>>> When this was fixed for Solaris
>>>>> https://bugs.openjdk.java.net/browse/JDK-8071710
>>>>> the observed problem was not building (although it could have been)
>>>>> but at runtime.
>>>>> I think you can verify what you've done with "ldd" ..
>>>>>
>>>>> This patch adds awt_headless.so, but does not remove awt.so.
>>>>>
>>>>> Perhaps the line
>>>>>
>>>>> LIBS_unix := -lawt -ljava -ljvm $(LIBM) $(LIBCXX)
>>>>> After your fix I expect "ldd" should not need to show awt .. just
>>>>> awt_headless
>>>>>
>>>>> ie linux should not have this -lawt dependency any more and the -lawt
>>>>> dependency should be specific to windows + mac ..
>>> Thanks for the review, Phil. I'll post an updated webrev shortly.
>>>
>>> Any thoughts on the LDFLAGS filtering? Shouldn't this only be done on
>>> platforms that need it? solaris, linux, aix should already be fine
>>> without filtering.
>> I would say try removing the filtering. The affected flags are 
>> currently only set on linux and solaris. I will do a test build on 
>> the latter and see if the filtering is actually needed.
>>
>> /Erik
>>> Thanks,
>>> Severin
>>>
>>>> So we already use -lawt_headless on solaris and aix, then I really 
>>>> can't
>>>> see a reason not to do the same for linux.
>>>>> On 01/26/2018 08:10 AM, Severin Gehwolf wrote:
>>>>>> Hi,
>>>>>>
>>>>>> Could I please get a review for this rather small patch which
>>>>>> originally occurred for us on JDK 8 (Fedora) which recently 
>>>>>> switched to
>>>>>> building with "-Wl,-z,defs" linker flags. The result was a build
>>>>>> failure, due to unresolved symbols. Indeed libfontmanager.so should
>>>>>> have -lawt_headless in the list of dependent libs as symbols such as
>>>>>> AWTLoadFont come from libawt_headless.so, not libawt.so on Linux. 
>>>>>> Some
>>>>>> more details are on the bug.
>>>>>>
>>>>>> webrev:
>>>>>> http://cr.openjdk.java.net/~sgehwolf/webrevs/JDK-8196218/webrev.01/
>>>>>> Bug: https://bugs.openjdk.java.net/browse/JDK-8196218
>>>>>>
>>>>>> Testing: Build fails with configure option
>>>>>>            --with-extra-ldflags="-Xlinker -z -Xlinker defs"
>>>>>>            prior the fix. Succeeds after.
>>>>>>
>>>>>> Question for 2d-folks/build-dev folks:
>>>>> I don't know about this, build folks probably know.
>>>>>
>>>> This is from way ahead of my time. The filtering is simply the
>>>> build-infra way of achieving the same thing as in the old build 
>>>> system.
>>>> Here is the corresponding code in jdk7:
>>>>
>>>> $ hg annotate make/sun/font/Makefile
>>>> ...
>>>>      0: #
>>>>      0: # Created without -z defs on linux
>>>>      0: #
>>>>      0: ifeq ($(PLATFORM), linux)
>>>>      0:   LDFLAGS_DEFS_OPTION =
>>>>      0: endif
>>>> ...
>>>>
>>>> /Erik
>>>>
>>>>> -phil.
>>>>>> There is this snippet in the libfontmanager block in
>>>>>> make/lib/Awt2dLibraries.gmk, line 686:
>>>>>>
>>>>>>       LDFLAGS := $(subst 
>>>>>> -Wl$(COMMA)-z$(COMMA)defs,,$(LDFLAGS_JDKLIB))
>>>>>> $(LDFLAGS_CXX_JDK) \
>>>>>>           $(call SET_SHARED_LIBRARY_ORIGIN), \
>>>>>>
>>>>>> It's my understanding that this is supposed to filter "-Wl,-z,defs"
>>>>>> from LDFLAGS_JDKLIB. Does anybody know why it does so? Is there a 
>>>>>> legit
>>>>>> reason when unresolved symbols at link time are OK? Besides, why 
>>>>>> does
>>>>>> it not also filter "-Xlinker -z -Xlinker defs"? FWIW, in JDK 8 
>>>>>> it's the
>>>>>> other way round. Xlinker flags are filtered, but -Wl,-z,defs is not.
>>>>>> Thoughts?
>>>>>>
>>>>>> Thanks,
>>>>>> Severin
>>>>
>>
>



More information about the build-dev mailing list