Re: [PATCH] libdrm: intel/Android.mk: Filter libdrm_intel library requirements on x86

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 1 February 2018 at 14:59, Rob Herring <robh@xxxxxxxxxx> wrote:
> On Wed, Jan 31, 2018 at 12:46 PM, John Stultz <john.stultz@xxxxxxxxxx> wrote:
>> On Wed, Jan 31, 2018 at 8:01 AM, Emil Velikov <emil.l.velikov@xxxxxxxxx> wrote:
>>> On 30 January 2018 at 05:42, John Stultz <john.stultz@xxxxxxxxxx> wrote:
>>>> On Fri, Jan 26, 2018 at 10:33 AM, Emil Velikov <emil.l.velikov@xxxxxxxxx> wrote:
>>>>> Hi all,
>>>>>
>>>>> Couple of ideas/notes,
>>>>>
>>>>> On 10 January 2018 at 20:36, Rob Herring <robh@xxxxxxxxxx> wrote:
>>>>>> On Wed, Jan 10, 2018 at 1:09 PM, John Stultz <john.stultz@xxxxxxxxxx> wrote:
>>>>>>> On Wed, Jan 10, 2018 at 5:48 AM, Rob Herring <robh@xxxxxxxxxx> wrote:
>>>>>>>> On Tue, Jan 9, 2018 at 11:25 PM, John Stultz <john.stultz@xxxxxxxxxx> wrote:
>>>>>>>>> When building AOSP after updating libdrm project to the
>>>>>>>>> freedesktop/master branch, I've seen the following build errors:
>>>>>>>>>
>>>>>>>>> external/libdrm/intel/Android.mk: error: libdrm_intel
>>>>>>>>
>>>>>>>> This is only needed for i915 (not i965) now BTW. I'm not sure at what
>>>>>>>> point we stop caring about i915.
>>>>> If you're using any other Intel components - say Beignet or the va
>>>>> driver, I think those still use libdrm_intel.
>>>>>
>>>>> An alternative solution IMHO, is to drop/tweak the API to not bother
>>>>> libpciaccess.
>>>>> I have some ancient cleanup/rework branch
>>>>>
>>>>> https://github.com/evelikov/libdrm/commits/intel-remove-legacy
>>>>
>>>> I'm not opposed to this, but I'm really not familiar with intel use
>>>> cases and what would be ok or not there.
>>>>
>>>>
>>> The unfortunate part is that people familiar don't have to
>>> time/interest to weight in :-(
>>> I might give it another try, one of these days. Unless someone beats me to it.
>>>
>>>>>>>>> (SHARED_LIBRARIES android-arm64) missing libpciaccess
>>>>>>>>> (SHARED_LIBRARIES android-arm64) You can set
>>>>>>>>> ALLOW_MISSING_DEPENDENCIES=true in your environment if this is
>>>>>>>>> intentional, but that may defer real problems until later in the
>>>>>>>>> build.
>>>>>>>>>
>>>>>>>>> Using ALLOW_MISSING_DEPENDENCIES=true when building allows
>>>>>>>>> things to function properly, but is not ideal.
>>>>>>>>>
>>>>>>>>> So basically, while I'm not including the libdrm_intel package
>>>>>>>>> into the build, just the fact that the Android.mk file references
>>>>>>>>> libpciaccess which isn't a repo included in AOSP causes the build
>>>>>>>>> failure.
>>>>>>>>>
>>>>>>>>> So it seems we need some sort of conditional filter in the
>>>>>>>>> Android.mk to skip over it if we're not building for intel.
>>>>>>>>>
>>>>>>>>> This is my initial attempt at solving this.
>>>>>>>>>
>>>>>>>>> Feedback would be greatly appreciated!
>>>>>>>>>
>>>>>>>>> I note that in the AOSP version of libdrm, the reference to
>>>>>>>>> libpciaccess has been removed. See:
>>>>>>>>>  https://android.googlesource.com/platform/external/libdrm/+/f6a1130dffae8de9ddd0c379066daf1df27fc8af%5E%21/
>>>>>>>>> So I wonder if it make sense to instead remove this upstream as
>>>>>>>>> well?
>>>>>>>>
>>>>>>>> Only if we drop i915.
>>>>>>>
>>>>>>> To be more precise, drop i915 for Android builds (I'm not suggesting
>>>>>>> dropping it elsewhere, just for the Android.mk). I'm really not sure
>>>>>>> which devices might be affected. Anyone able to point me to someone in
>>>>>>> Intel who would know?
>>>>>>
>>>>>> The android-x86 folks would be the ones to ask. I added Chih-Wei.
>>>>>>
>>>>> A really silly question - how are you triggering any of this if you're
>>>>> building on !x86?
>>>>> Is that because the GPU driver is not selected thus you we fall-back
>>>>> to "build all"?
>>>>
>>>> I think its mostly due the fact we're using the toplevel Android.mk
>>>> which includes all Android.mk files in subdirectories.
>>>>
>>> That does not matter. Unless otherwise stated the objects are optional.
>>> Thus they should not be build, unless...
>>>
>>> Android changed the policy or you're somehow building stuff that's not required?
>>
>> I don't think its a policy, its seems its just how the toplevel
>> Android.mk file is setup:
>>    https://cgit.freedesktop.org/drm/libdrm/tree/Android.mk#n63
>>
>> Where it includes all the Android.mk from all subdirectories, which
>> pulls in the intel/Android.mk, which adds libpciaccess to the
>> LOCAL_SHARED_LIBRARIES
>>    https://cgit.freedesktop.org/drm/libdrm/tree/intel/Android.mk#n36
>
> That's not quite right. The build system descends directories til it
> finds an Android.mk. For subdirs under that Android.mk, the Android.mk
> file must descend. That's why we have:
>
> include $(call all-makefiles-under,$(LOCAL_PATH))
>
AFAICT the "include" has nothing to do with what gets build (by default).

This page [1] states that, LOCAL_MODULE_TAGS - it's not set, defaults
to optional.
And anything optional is not build/installed.

[1] https://source.android.com/setup/add-device

>>>> I'm not sure quite how to select a gpu driver with the Android build
>>>> system, other then specifying it via a build variable, which is in
>>>> effect what I'm trying to do with this patch.
>>>>
>>>> Other ideas?
>>>>
>>> Based on your input seems like it's not set (grep for
>>> BOARD_GPU_DRIVERS), which results in "everything" being build.
>>> Thus optional libraries (like libdrm_intel) are pulled causing the problem.
>>>
>>> My earlier suggestion doesn't sound too crazy, although I'd check with
>>> RobH and the Android-x86 people.
>>> It might require one line change to the device manifest ;-)
>>
>> So I looked a bit at this, but it seems that just controls which
>> components gets added from the libkms dir, not the top level
>> directories.
>>
Please grep through the whole tree - namely device manifests, Mesa,
libdrm and gralloc(s).
With my proposed solution:
 - device manifest - say, "x86-generic", "arm-generic" "nouveau",
"x86-only" [etc. but no "all"] sets BOARD_GPU_DRIVERS
 - mesa adds the respective dri module(s) to LOCAL_REQUIRED_MODULES
 - drm/gbm/other gralloc does pretty much the same thing
With the correct (until sorted otherwise) gralloc is pulled from the
device manifest

>> But we could add similar logic to the top level Android.mk file, using
>> the same BOARD_GPU_DRIVERS value. Hopefully that wouldn't break folks.
>
> I prefer to not expand the use of BOARD_GPU_DRIVERS and leave it to
> dependencies setting what to build.
>
That also works. For example the "nouveau" case pulls nouveau_dri.so
and libdrm_nouveau.so
Advantages of the BOARD_GPU_DRIVERS are that:
 - set once, don't care about gralloc/mesa/libdrm/other specifics
 - can have meta groups - the above generic/only ones

>> Since I'm not sure what else would be a better idea, I'll take a spin
>> at that, but if you have thoughts on it please do let me know.
>
> I think we've beat this one to death. Just fix the TARGET_ARCH check
> to cover x86 and x86_64. The filter or filter-out make function should
> work for this.
>
Pardon for being a pest, but can someone explain why/how say
libdrm_intel gets pulled?

Is that because BOARD_GPU_DRIVERS is not set, thus Mesa falls back to
"all dri modules" and that attempts to build i915/i965_dri.so.
With the tatter of which pulling libdrm_intel?

If that's the case, special casing on ARCH is not good, since
foo_dri.so may end up without libdrm_foo.

Thanks
Emil
_______________________________________________
dri-devel mailing list
dri-devel@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/dri-devel




[Index of Archives]     [Linux DRI Users]     [Linux Intel Graphics]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux