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 # Vulkan SDK 1.3.250 to 1.3.268 support 68 moltenvk_includes = join_paths(with_moltenvk_dir, 'MoltenVK', 'include') 69 if not fs.is_dir(moltenvk_includes) 70 # Vulkan SDK 1.3.275 onwards support 71 moltenvk_includes = join_paths(with_moltenvk_dir, 'macos', 'include') 72 if not fs.is_dir(moltenvk_includes) 73 # MoltenVK from brew support 74 moltenvk_includes = join_paths(with_moltenvk_dir, 'include') 75 if not fs.is_dir(moltenvk_includes) 76 error(f'moltenvk includes cannot be found in moltenvk-dir="@with_moltenvk_dir@"') 77 endif 78 endif 79 endif 80 inc_zink_vk += include_directories(moltenvk_includes) 81 else 82 error('moltenvk-dir is required but not set.') 83 endif 84 85 zink_c_args += ['-x','objective-c'] # Put compiler into objective-C mode to allow for MacOS types, like IOSurface and CAMetalLayer 86 zink_c_args += ['-iframework' , 'Foundation'] 87 88endif 89 90libzink = static_library( 91 'zink', 92 [files_libzink, zink_device_info, zink_instance, zink_nir_algebraic_c, vk_dispatch_table, spirv_info_h], 93 gnu_symbol_visibility : 'hidden', 94 include_directories : [inc_include, inc_src, inc_mapi, inc_mesa, inc_gallium, inc_gallium_aux, inc_vulkan_util, inc_zink_vk], 95 link_args : [ld_args_build_id], 96 dependencies: [ 97 idep_nir_headers, idep_mesautil, idep_vulkan_util_headers, 98 idep_vulkan_wsi_defines, idep_vulkan_util, dep_libdrm, vulkan_wsi_deps 99 ], 100 c_args: zink_c_args, 101) 102 103driver_zink = declare_dependency( 104 compile_args : '-DGALLIUM_ZINK', 105 link_with : [libzink], 106) 107 108if with_tests 109 test( 110 'zink_format_test', 111 executable( 112 'zink_format_test', 113 ['zink_format_test.c', 'zink_format.c'], 114 dependencies : [idep_mesautil, idep_vulkan_util], 115 include_directories : [inc_gallium, inc_gallium_aux, inc_include, inc_src], 116 ), 117 suite : ['zink'], 118 ) 119endif 120