Hi Dylan, Awesome work. I noticed though that when llvm-config gives 6.0.0svn we don't strip the svn away when passing to HAVE_LLVM and MESA_LLVM_VERSION_PATCH, which results in compile errors.
- Bas On Sun, Sep 24, 2017 at 12:08 AM, Dylan Baker <dy...@pnwbakers.com> wrote: > I have tested this, and as of v2 it actually works. I'll update the > commitment message. > > Dylan > > On September 23, 2017 8:39:06 AM PDT, Dylan Baker <dy...@pnwbakers.com> wrote: >>This builds and installs, but I haven't had a chance to test it yet. >> >>v2: - enable radv by default >> - add shader cache support and enforce that it's built for radv >> >>Signed-off-by: Dylan Baker <dylanx.c.ba...@intel.com> >>--- >> meson.build | 27 ++++++++- >> meson_options.txt | 4 +- >> src/{ => amd/addrlib}/meson.build | 69 ++++++++++++--------- >> src/{ => amd/common}/meson.build | 65 ++++++++++++-------- >> src/{ => amd}/meson.build | 33 ++-------- >>src/amd/vulkan/meson.build | 124 >>++++++++++++++++++++++++++++++++++++++ >> src/meson.build | 2 +- >> 7 files changed, 240 insertions(+), 84 deletions(-) >> copy src/{ => amd/addrlib}/meson.build (51%) >> copy src/{ => amd/common}/meson.build (51%) >> copy src/{ => amd}/meson.build (65%) >> create mode 100644 src/amd/vulkan/meson.build >> >>diff --git a/meson.build b/meson.build >>index 09e53957fe9..0b3e6f61545 100644 >>--- a/meson.build >>+++ b/meson.build >>@@ -71,6 +71,12 @@ if get_option('buildtype').startswith('debug') >> pre_args += '-DDEBUG' >> endif >> >>+if get_option('shader-cache') >>+ pre_args += '-DENABLE_SHADER_CACHE' >>+elif with_amd_vk >>+ error('Radv requires shader cache support') >>+endif >>+ >> # Check for GCC style builtins >>foreach b : ['bswap32', 'bswap64', 'clz', 'clzll', 'ctz', 'expect', >>'ffs', >> 'ffsll', 'popcount', 'popcountll', 'unreachable'] >>@@ -79,7 +85,7 @@ foreach b : ['bswap32', 'bswap64', 'clz', 'clzll', >>'ctz', 'expect', 'ffs', >> endif >> endforeach >> >>-# check for GCC __attribute__ s >>+# check for GCC __attribute__ >> foreach a : ['const', 'flatten', 'malloc', 'pure', 'unused', >> 'warn_unused_result', 'weak',] >> if cc.compiles('int foo(void) __attribute__((@0@));'.format(a), >>@@ -291,6 +297,23 @@ dep_m = cc.find_library('m', required : false) >> # TODO: conditionalize libdrm requirement >> dep_libdrm = dependency('libdrm', version : '>= 2.4.75') >> pre_args += '-DHAVE_LIBDRM' >>+dep_libdrm_amdgpu = [] >>+if with_amd_vk >>+ dep_libdrm_amdgpu = dependency('libdrm_amdgpu', version : '>= >>2.4.82') >>+endif >>+ >>+dep_llvm = dependency('llvm', version : '>= 3.9.0', required : false) >>+if not dep_llvm.found() >>+ if with_amd_vk >>+ error('Radv requires llvm.') >>+ endif >>+else >>+ _llvm_version = dep_llvm.version().split('.') >>+ pre_args += [ >>+ '-DHAVE_LLVM=0x0@0@@1@@2@'.format(_llvm_version[0], >>_llvm_version[1], _llvm_version[2]), >>+ '-DMESA_LLVM_VERSION_PATCH=@0@'.format(_llvm_version[2]), >>+ ] >>+endif >> >> # TODO: make this conditional >> dep_valgrind = dependency('valgrind', required : false) >>@@ -304,8 +327,6 @@ endif >> >> # TODO: llvm-prefix and llvm-shared-libs >> >>-# TODO: llvm dependency (that's all native now, yay!) >>- >> # TODO: unwind (llvm [radeon, gallivm] and gallium) >> >> # TODO: flags for opengl, gles, dri >>diff --git a/meson_options.txt b/meson_options.txt >>index e52cec31f11..854cba851d7 100644 >>--- a/meson_options.txt >>+++ b/meson_options.txt >>@@ -20,8 +20,10 @@ >> >> option('platforms', type : 'string', value : 'x11,wayland', >>description : 'comma separated list of window systems to support. >>wayland, x11, surfaceless, drm, etc.') >>-option('vulkan-drivers', type : 'string', value : 'intel', >>+option('vulkan-drivers', type : 'string', value : 'intel,amd', >> description : 'comma separated list of vulkan drivers to build.') >>+option('shader-cache', type : 'boolean', vaule : true, >>+ description : 'Build with on-disk shader cache support') >> option('vulkan_icd_dir', type : 'string', value : '', >>description : 'Location relative to prefix to put vulkan icds on >>install. Default: $datadir/vulkan/icd.d') >> option('valgrind', type : 'boolean', vaule : true, >>diff --git a/src/meson.build b/src/amd/addrlib/meson.build >>similarity index 51% >>copy from src/meson.build >>copy to src/amd/addrlib/meson.build >>index 4c82eec70f1..a6cad1207b0 100644 >>--- a/src/meson.build >>+++ b/src/amd/addrlib/meson.build >>@@ -18,31 +18,46 @@ >># OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER >>DEALINGS IN THE >> # SOFTWARE. >> >>-# TODO: libglsl_util >>+files_addrlib = files( >>+ 'addrinterface.cpp', >>+ 'addrinterface.h', >>+ 'addrtypes.h', >>+ 'core/addrcommon.h', >>+ 'core/addrelemlib.cpp', >>+ 'core/addrelemlib.h', >>+ 'core/addrlib.cpp', >>+ 'core/addrlib.h', >>+ 'core/addrlib1.cpp', >>+ 'core/addrlib1.h', >>+ 'core/addrlib2.cpp', >>+ 'core/addrlib2.h', >>+ 'core/addrobject.cpp', >>+ 'core/addrobject.h', >>+ 'gfx9/chip/gfx9_enum.h', >>+ 'gfx9/coord.cpp', >>+ 'gfx9/coord.h', >>+ 'gfx9/gfx9addrlib.cpp', >>+ 'gfx9/gfx9addrlib.h', >>+ 'gfx9/rbmap.cpp', >>+ 'gfx9/rbmap.h', >>+ 'inc/chip/gfx9/gfx9_gb_reg.h', >>+ 'inc/chip/r800/si_gb_reg.h', >>+ 'inc/lnx_common_defs.h', >>+ 'r800/chip/si_ci_vi_merged_enum.h', >>+ 'r800/ciaddrlib.cpp', >>+ 'r800/ciaddrlib.h', >>+ 'r800/egbaddrlib.cpp', >>+ 'r800/egbaddrlib.h', >>+ 'r800/siaddrlib.cpp', >>+ 'r800/siaddrlib.h', >>+) >> >>-# TODO: git_sha. There's a meson builtin for this >>- >>-inc_common = include_directories( >>- '../include', '.', 'mapi', 'mesa', 'gallium/include', >>'gallium/auxiliary') >>-inc_mesa = include_directories('mesa') >>-inc_mapi = include_directories('mapi') >>- >>-subdir('gtest') >>-subdir('util') >>-#subdir('mapi/glapi/gen') >>-# TODO: mapi >>-# TODO: opengl >>-# TODO: glx >>-# TODO: osmesa >>-subdir('compiler') >>-subdir('egl/wayland/wayland-drm') >>-subdir('vulkan') >>-# TODO: amd >>-subdir('intel') >>-# TODO: vc4 >>-# TODO: opengl_common >>-# TODO: dri_glx >>-# TODO: gbm >>-# TODO: egl >>-# TODO: radv >>-# TODO: gallium >>+libamdgpu_addrlib = static_library( >>+ 'addrlib', >>+ files_addrlib, >>+ include_directories : include_directories( >>+ 'core', 'inc/chip/gfx9', 'inc/chip/r800', 'gfx9/chip', >>'r800/chip', >>+ '../common', '../../'), >>+ cpp_args : [cpp_vis_args, '-DBRAHMA_BUILD=1'], >>+ build_by_default : false, >>+) >>diff --git a/src/meson.build b/src/amd/common/meson.build >>similarity index 51% >>copy from src/meson.build >>copy to src/amd/common/meson.build >>index 4c82eec70f1..842b42f897e 100644 >>--- a/src/meson.build >>+++ b/src/amd/common/meson.build >>@@ -18,31 +18,46 @@ >># OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER >>DEALINGS IN THE >> # SOFTWARE. >> >>-# TODO: libglsl_util >>+inc_amd_common = include_directories('.') >> >>-# TODO: git_sha. There's a meson builtin for this >>+sid_tables_h = custom_target( >>+ 'sid_tables_h', >>+ input : ['sid_tables.py', 'sid.h', 'gfx9d.h'], >>+ output : 'sid_tables.h', >>+ command : [prog_python2, '@INPUT@'], >>+ capture : true, >>+) >> >>-inc_common = include_directories( >>- '../include', '.', 'mapi', 'mesa', 'gallium/include', >>'gallium/auxiliary') >>-inc_mesa = include_directories('mesa') >>-inc_mapi = include_directories('mapi') >>+amd_common_files = files( >>+ 'ac_binary.c', >>+ 'ac_binary.h', >>+ 'ac_exp_param.h', >>+ 'ac_llvm_build.c', >>+ 'ac_llvm_build.h', >>+ 'ac_llvm_helper.cpp', >>+ 'ac_llvm_util.c', >>+ 'ac_llvm_util.h', >>+ 'ac_shader_abi.h', >>+ 'ac_shader_info.c', >>+ 'ac_shader_info.h', >>+ 'ac_nir_to_llvm.c', >>+ 'ac_nir_to_llvm.h', >>+ 'ac_gpu_info.c', >>+ 'ac_gpu_info.h', >>+ 'ac_surface.c', >>+ 'ac_surface.h', >>+ 'ac_debug.c', >>+ 'ac_debug.h', >>+) >> >>-subdir('gtest') >>-subdir('util') >>-#subdir('mapi/glapi/gen') >>-# TODO: mapi >>-# TODO: opengl >>-# TODO: glx >>-# TODO: osmesa >>-subdir('compiler') >>-subdir('egl/wayland/wayland-drm') >>-subdir('vulkan') >>-# TODO: amd >>-subdir('intel') >>-# TODO: vc4 >>-# TODO: opengl_common >>-# TODO: dri_glx >>-# TODO: gbm >>-# TODO: egl >>-# TODO: radv >>-# TODO: gallium >>+libamd_common = static_library( >>+ 'amd_common', >>+ [amd_common_files, sid_tables_h, nir_opcodes_h], >>+ include_directories : [inc_common, inc_compiler, inc_nir, inc_mesa, >>inc_mapi, >>+ inc_amd], >>+ dependencies : [dep_llvm, dep_thread, dep_elf, dep_libdrm_amdgpu, >>+ dep_valgrind], >>+ c_args : [c_vis_args], >>+ cpp_args : [cpp_vis_args], >>+ build_by_default : false, >>+) >>diff --git a/src/meson.build b/src/amd/meson.build >>similarity index 65% >>copy from src/meson.build >>copy to src/amd/meson.build >>index 4c82eec70f1..f96a9aac095 100644 >>--- a/src/meson.build >>+++ b/src/amd/meson.build >>@@ -18,31 +18,10 @@ >># OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER >>DEALINGS IN THE >> # SOFTWARE. >> >>-# TODO: libglsl_util >>+inc_amd = include_directories('.') >> >>-# TODO: git_sha. There's a meson builtin for this >>- >>-inc_common = include_directories( >>- '../include', '.', 'mapi', 'mesa', 'gallium/include', >>'gallium/auxiliary') >>-inc_mesa = include_directories('mesa') >>-inc_mapi = include_directories('mapi') >>- >>-subdir('gtest') >>-subdir('util') >>-#subdir('mapi/glapi/gen') >>-# TODO: mapi >>-# TODO: opengl >>-# TODO: glx >>-# TODO: osmesa >>-subdir('compiler') >>-subdir('egl/wayland/wayland-drm') >>-subdir('vulkan') >>-# TODO: amd >>-subdir('intel') >>-# TODO: vc4 >>-# TODO: opengl_common >>-# TODO: dri_glx >>-# TODO: gbm >>-# TODO: egl >>-# TODO: radv >>-# TODO: gallium >>+subdir('addrlib') >>+subdir('common') >>+if with_amd_vk >>+ subdir('vulkan') >>+endif >>diff --git a/src/amd/vulkan/meson.build b/src/amd/vulkan/meson.build >>new file mode 100644 >>index 00000000000..02a2703a5c1 >>--- /dev/null >>+++ b/src/amd/vulkan/meson.build >>@@ -0,0 +1,124 @@ >>+# Copyright �� 2017 Intel Corporation >>+ >>+# 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 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. >>+ >>+radv_entrypoints = custom_target( >>+ 'radv_entrypoints.[ch]', >>+ input : ['radv_entrypoints_gen.py', vk_api_xml], >>+ output : ['radv_entrypoints.h', 'radv_entrypoints.c'], >>+ command : [prog_python2, '@INPUT0@', '--xml', '@INPUT1@', >>+ '--outdir', meson.current_build_dir()], >>+) >>+ >>+vk_format_table_c = custom_target( >>+ 'vk_format_table.c', >>+ input : ['vk_format_table.py', 'vk_format_layout.csv'], >>+ output : 'vk_format_table.c', >>+ command : [prog_python2, '@INPUT@'], >>+ depend_files : files('vk_format_parse.py'), >>+ capture : true, >>+) >>+ >>+libradv_files = files( >>+ 'winsys/amdgpu/radv_amdgpu_bo.c', >>+ 'winsys/amdgpu/radv_amdgpu_bo.h', >>+ 'winsys/amdgpu/radv_amdgpu_cs.c', >>+ 'winsys/amdgpu/radv_amdgpu_cs.h', >>+ 'winsys/amdgpu/radv_amdgpu_surface.c', >>+ 'winsys/amdgpu/radv_amdgpu_surface.h', >>+ 'winsys/amdgpu/radv_amdgpu_winsys.c', >>+ 'winsys/amdgpu/radv_amdgpu_winsys.h', >>+ 'winsys/amdgpu/radv_amdgpu_winsys_public.h', >>+ 'radv_cmd_buffer.c', >>+ 'radv_cs.h', >>+ 'radv_debug.c', >>+ 'radv_debug.h', >>+ 'radv_device.c', >>+ 'radv_descriptor_set.c', >>+ 'radv_descriptor_set.h', >>+ 'radv_formats.c', >>+ 'radv_image.c', >>+ 'radv_meta.c', >>+ 'radv_meta.h', >>+ 'radv_meta_blit.c', >>+ 'radv_meta_blit2d.c', >>+ 'radv_meta_buffer.c', >>+ 'radv_meta_bufimage.c', >>+ 'radv_meta_clear.c', >>+ 'radv_meta_copy.c', >>+ 'radv_meta_decompress.c', >>+ 'radv_meta_fast_clear.c', >>+ 'radv_meta_resolve.c', >>+ 'radv_meta_resolve_cs.c', >>+ 'radv_meta_resolve_fs.c', >>+ 'radv_pass.c', >>+ 'radv_pipeline.c', >>+ 'radv_pipeline_cache.c', >>+ 'radv_private.h', >>+ 'radv_radeon_winsys.h', >>+ 'radv_shader.c', >>+ 'radv_shader.h', >>+ 'radv_query.c', >>+ 'radv_util.c', >>+ 'radv_util.h', >>+ 'radv_wsi.c', >>+ 'si_cmd_buffer.c', >>+ 'vk_format.h', >>+) >>+ >>+radv_deps = [] >>+radv_flags = [] >>+ >>+if with_platform_x11 >>+ radv_deps += dep_xcb_dri3 >>+ radv_flags += [ >>+ '-DVK_USE_PLATFORM_XCB_KHR', >>+ '-DVK_USE_PLATFORM_XLIB_KHR', >>+ ] >>+ libradv_files += files('radv_wsi_x11.c') >>+endif >>+ >>+if with_platform_wayland >>+ radv_deps += dep_wayland_client >>+ radv_flags += '-DVK_USE_PLATFORM_WAYLAND_KHR' >>+ libradv_files += files('radv_wsi_wayland.c') >>+endif >>+ >>+libvulkan_radeon = shared_library( >>+ 'vulkan_radeon', >>+ [libradv_files, radv_entrypoints, nir_opcodes_h, vk_format_table_c], >>+ include_directories : [inc_common, inc_amd, inc_amd_common, >>inc_compiler, >>+ inc_vulkan_util, inc_vulkan_wsi], >>+ link_with : [libamd_common, libamdgpu_addrlib, libvulkan_util, >>+ libvulkan_wsi, libnir, libmesa_util], >>+ dependencies : [dep_llvm, dep_libdrm_amdgpu, dep_thread, dep_elf, >>dep_dl, >>+ dep_m, dep_valgrind], >>+ c_args : [c_vis_args, no_override_init_args, radv_flags], >>+ link_args : [ld_args_bsymbolic, ld_args_gc_sections], >>+ install : true, >>+) >>+ >>+radv_data = configuration_data() >>+radv_data.set('install_libdir', join_paths(get_option('prefix'), >>get_option('libdir'))) >>+configure_file( >>+ configuration : radv_data, >>+ input : 'radeon_icd.json.in', >>+ output : 'radeon_icd.@0@.json'.format(target_machine.cpu()), >>+ install_dir : with_vulkan_icd_dir, >>+) >>diff --git a/src/meson.build b/src/meson.build >>index 4c82eec70f1..76ff497e565 100644 >>--- a/src/meson.build >>+++ b/src/meson.build >>@@ -37,7 +37,7 @@ subdir('util') >> subdir('compiler') >> subdir('egl/wayland/wayland-drm') >> subdir('vulkan') >>-# TODO: amd >>+subdir('amd') >> subdir('intel') >> # TODO: vc4 >> # TODO: opengl_common > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev