[Mesa-dev] [PATCH] android: vulkan: add support for libmesa_vulkan_{util, wsi}

Emil Velikov emil.l.velikov at gmail.com
Tue Feb 28 14:06:14 UTC 2017


On 28 February 2017 at 11:58, Eric Engestrom <eric.engestrom at imgtec.com> wrote:
> On Tuesday, 2017-02-28 01:31:01 +0100, Mauro Rossi wrote:
>> Thanks a lot for your feedbacks.
>> Here follows final version.
>> Mauro
>>
>> From d0db1d0fd07fd0b5fb7580bb8dddf109389f28ba Mon Sep 17 00:00:00 2001
>> From: Mauro Rossi <issor.oruam at gmail.com>
>> Date: Tue, 28 Feb 2017 01:24:41 +0100
>> Subject: [PATCH] android: vulkan: add support for libmesa_vulkan_util
>>
>> The following changes are implemented:
>>
>> Add src/vulkan/Android.mk to build libmesa_vulkan_util
>> Android.mk: add src/vulkan to SUBDIR to build new module
>> intel/vulkan: fix libmesa_vulkan_util,vk_enum_to_str.h dependencies
>> Add -o OUTPUT_PATH option in src/vulkan/util/gen_enum_to_str.py script
>> Use -o OUTPUT_PATH option in automake generation rules for vk_enum_to_str.{c,h}
>>
>> Fixes: e9dcb17 "vulkan/util: Add generator for enum_to_str functions"
>> Fixes: 8e03250 "vulkan: Combine wsi and util makefiles"
>> ---
>>  Android.mk                         |  3 ++-
>>  src/intel/vulkan/Android.mk        |  8 ++++--
>>  src/vulkan/Android.mk              | 55 ++++++++++++++++++++++++++++++++++++++
>>  src/vulkan/Makefile.am             |  2 +-
>>  src/vulkan/util/gen_enum_to_str.py |  9 +++++--
>>  5 files changed, 71 insertions(+), 6 deletions(-)
>>  create mode 100644 src/vulkan/Android.mk
>>
>> diff --git a/Android.mk b/Android.mk
>> index 4168b4d..bb70321 100644
>> --- a/Android.mk
>> +++ b/Android.mk
>> @@ -92,7 +92,8 @@ SUBDIRS := \
>>   src/egl \
>>   src/amd \
>>   src/intel \
>> - src/mesa/drivers/dri
>> + src/mesa/drivers/dri \
>> + src/vulkan
>>
>>  INC_DIRS := $(call all-named-subdir-makefiles,$(SUBDIRS))
>>
>> diff --git a/src/intel/vulkan/Android.mk b/src/intel/vulkan/Android.mk
>> index 1e53970..a6a7d26 100644
>> --- a/src/intel/vulkan/Android.mk
>> +++ b/src/intel/vulkan/Android.mk
>> @@ -74,7 +74,8 @@ include $(BUILD_STATIC_LIBRARY)
>>  ANV_INCLUDES := \
>>   $(VULKAN_COMMON_INCLUDES) \
>>   $(call generated-sources-dir-for,STATIC_LIBRARIES,libmesa_anv_entrypoints,,) \
>> - $(call generated-sources-dir-for,STATIC_LIBRARIES,libmesa_nir,,)/nir
>> + $(call generated-sources-dir-for,STATIC_LIBRARIES,libmesa_nir,,)/nir \
>> + $(call generated-sources-dir-for,STATIC_LIBRARIES,libmesa_vulkan_util,,)/util
>>
>>  #
>>  # libanv for gen7
>> @@ -172,7 +173,10 @@ LOCAL_C_INCLUDES := \
>>   $(ANV_INCLUDES) \
>>   $(MESA_TOP)/src/compiler
>>
>> -LOCAL_WHOLE_STATIC_LIBRARIES := libmesa_anv_entrypoints libmesa_genxml
>> +LOCAL_WHOLE_STATIC_LIBRARIES := \
>> + libmesa_anv_entrypoints \
>> + libmesa_genxml \
>> + libmesa_vulkan_util
>>
>>  LOCAL_GENERATED_SOURCES += $(intermediates)/anv_entrypoints.c
>>
>> diff --git a/src/vulkan/Android.mk b/src/vulkan/Android.mk
>> new file mode 100644
>> index 0000000..871d7f3
>> --- /dev/null
>> +++ b/src/vulkan/Android.mk
>> @@ -0,0 +1,55 @@
>> +# Copyright © 2017 Mauro Rossi <issor.oruam at gmail.com>
>> +#
>> +# Permission is hereby granted, free of charge, to any person obtaining a
>> +# copy of this software and associated documentation files (the "Software"),
>> +# to deal in the Software without restriction, including without limitation
>> +# the rights to use, copy, modify, merge, publish, distribute, sublicense,
>> +# and/or sell copies of the Software, and to permit persons to whom the
>> +# Software is furnished to do so, subject to the following conditions:
>> +#
>> +# The above copyright notice and this permission notice (including the next
>> +# paragraph) shall be included in all copies or substantial portions of the
>> +# Software.
>> +#
>> +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
>> +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
>> +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
>> +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
>> +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
>> +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
>> +# IN THE SOFTWARE.
>> +
>> +LOCAL_PATH := $(call my-dir)
>> +
>> +# Import variables
>> +include $(LOCAL_PATH)/Makefile.sources
>> +
>> +#
>> +# libmesa_vulkan_util
>> +#
>> +
>> +include $(CLEAR_VARS)
>> +LOCAL_MODULE := libmesa_vulkan_util
>> +LOCAL_MODULE_CLASS := STATIC_LIBRARIES
>> +
>> +intermediates := $(call local-generated-sources-dir)
>> +
>> +LOCAL_C_INCLUDES := \
>> + $(MESA_TOP)/include/vulkan
>> +
>> +LOCAL_GENERATED_SOURCES := \
>> + $(intermediates)/util/vk_enum_to_str.c \
>> + $(intermediates)/util/vk_enum_to_str.h
>> +
>> +vulkan_api_xml = $(MESA_TOP)/src/vulkan/registry/vk.xml
>> +
>> +$(LOCAL_GENERATED_SOURCES):
>> $(MESA_TOP)/src/vulkan/util/gen_enum_to_str.py $(vulkan_api_xml)
>> + @echo "target Generated: $(PRIVATE_MODULE) <= $(notdir $(@))"
>> + @mkdir -p $(dir $@)
>> + $(hide) $(MESA_PYTHON2)
>> $(MESA_TOP)/src/vulkan/util/gen_enum_to_str.py -o
>> $(intermediates)/util
>> +
>> +LOCAL_EXPORT_C_INCLUDE_DIRS := \
>> +        $(intermediates)
>> +
>> +include $(MESA_COMMON_MK)
>> +include $(BUILD_STATIC_LIBRARY)
>> diff --git a/src/vulkan/Makefile.am b/src/vulkan/Makefile.am
>> index 5cdffbf..019da13 100644
>> --- a/src/vulkan/Makefile.am
>> +++ b/src/vulkan/Makefile.am
>> @@ -17,7 +17,7 @@ BUILT_SOURCES = \
>>
>>  util/vk_enum_to_str.c util/vk_enum_to_str.h: util/gen_enum_to_str.py
>> $(vulkan_api_xml)
>>   $(MKDIR_GEN)
>> - $(PYTHON_GEN) $(srcdir)/util/gen_enum_to_str.py
>> + $(PYTHON_GEN) $(srcdir)/util/gen_enum_to_str.py -o
>> $(top_builddir)/src/vulkan/util
>
> Just like the other Makefile patch a few days ago, this rule will run
> the python script twice, script which writes both files.
> Not performant, race condition, etc.
>
> The clean fix is to give `-o $@` to the script (ie. the target of the rule)
> and add an `if` in the script to only write the file given.
>
> The quick and dirty fix is to add a rule forcing the serialisation, like
> this:
>   util/vk_enum_to_str.c: util/vk_enum_to_str.h
> This fixes the race condition, but still writes both files twice for no
> reason.
>
Are you sure that will generate them twice - can you elaborate a bit ?

We can always purging the one of the two files from BUILT_SOURCES,
which should do it right ?

In either case I think those are simpler workarounds than writing more
python code ;-)
I think that we want to fix the whole tree in one go, otherwise people
end up copying "the wrong" ones.

-Emil


More information about the mesa-dev mailing list