1# Copyright © 2018 Collabora Ltd 2# SPDX-License-Identifier: MIT 3 4files_libzink = files( 5 'zink_lower_cubemap_to_array.c', 6 'nir_to_spirv/nir_to_spirv.c', 7 'nir_to_spirv/spirv_builder.c', 8 'zink_batch.c', 9 'zink_blit.c', 10 'zink_bo.c', 11 'zink_clear.c', 12 'zink_compiler.c', 13 'zink_context.c', 14 'zink_kopper.c', 15 'zink_descriptors.c', 16 'zink_draw.cpp', 17 'zink_fence.c', 18 'zink_format.c', 19 'zink_framebuffer.c', 20 'zink_pipeline.c', 21 'zink_program.c', 22 'zink_query.c', 23 'zink_render_pass.c', 24 'zink_resource.c', 25 'zink_screen.c', 26 'zink_state.c', 27 'zink_surface.c', 28 'zink_synchronization.cpp', 29) 30 31zink_device_info = custom_target( 32 'zink_device_info.c', 33 input : ['zink_device_info.py'], 34 output : ['zink_device_info.h', 'zink_device_info.c'], 35 command : [ 36 prog_python, '@INPUT@', '@OUTPUT@', vk_api_xml 37 ] 38) 39 40zink_instance = custom_target( 41 'zink_instance.c', 42 input : ['zink_instance.py'], 43 output : ['zink_instance.h', 'zink_instance.c'], 44 command : [ 45 prog_python, '@INPUT@', '@OUTPUT@', vk_api_xml 46 ] 47) 48 49zink_nir_algebraic_c = custom_target( 50 'zink_nir_algebraic.c', 51 input : 'nir_to_spirv/zink_nir_algebraic.py', 52 output : 'zink_nir_algebraic.c', 53 command : [ 54 prog_python, '@INPUT@', '-p', dir_compiler_nir, 55 ], 56 capture : true, 57 depend_files : nir_algebraic_depends, 58) 59 60zink_c_args = [] 61inc_zink_vk = [] 62 63if host_machine.system() == 'darwin' 64 65 # MoltenVK options 66 if with_moltenvk_dir != '' 67 fs = import('fs') 68 # Vulkan SDK 1.3.250 to 1.3.268 support 69 moltenvk_includes = join_paths(with_moltenvk_dir, 'MoltenVK', 'include') 70 if not fs.is_dir(moltenvk_includes) 71 # Vulkan SDK 1.3.275 onwards support 72 moltenvk_includes = join_paths(with_moltenvk_dir, 'macos', 'include') 73 if not fs.is_dir(moltenvk_includes) 74 # MoltenVK from brew support 75 moltenvk_includes = join_paths(with_moltenvk_dir, 'include') 76 if not fs.is_dir(moltenvk_includes) 77 error(f'moltenvk includes cannot be found in moltenvk-dir="@with_moltenvk_dir@"') 78 endif 79 endif 80 endif 81 inc_zink_vk += include_directories(moltenvk_includes) 82 else 83 error('moltenvk-dir is required but not set.') 84 endif 85 86 zink_c_args += ['-x','objective-c'] # Put compiler into objective-C mode to allow for MacOS types, like IOSurface and CAMetalLayer 87 zink_c_args += ['-iframework' , 'Foundation'] 88 89endif 90 91libzink = static_library( 92 'zink', 93 [files_libzink, zink_device_info, zink_instance, zink_nir_algebraic_c, vk_dispatch_table], 94 gnu_symbol_visibility : 'hidden', 95 include_directories : [inc_include, inc_src, inc_mapi, inc_mesa, inc_gallium, inc_gallium_aux, inc_vulkan_util, inc_zink_vk], 96 link_args : [ld_args_build_id], 97 dependencies: [ 98 idep_nir_headers, idep_mesautil, idep_vulkan_util_headers, 99 idep_vulkan_wsi_defines, idep_vulkan_util, dep_libdrm, vulkan_wsi_deps 100 ], 101 c_args: zink_c_args, 102) 103 104driver_zink = declare_dependency( 105 compile_args : '-DGALLIUM_ZINK', 106 link_with : [libzink], 107) 108 109if with_tests 110 test( 111 'zink_format_test', 112 executable( 113 'zink_format_test', 114 ['zink_format_test.c', 'zink_format.c'], 115 dependencies : [idep_mesautil, idep_vulkan_util], 116 include_directories : [inc_gallium, inc_gallium_aux, inc_include, inc_src], 117 ), 118 suite : ['zink'], 119 ) 120endif 121