1bf215546Sopenharmony_ci# Copyright © 2017 Rob Clark 2bf215546Sopenharmony_ci 3bf215546Sopenharmony_ci# Permission is hereby granted, free of charge, to any person obtaining a copy 4bf215546Sopenharmony_ci# of this software and associated documentation files (the "Software"), to deal 5bf215546Sopenharmony_ci# in the Software without restriction, including without limitation the rights 6bf215546Sopenharmony_ci# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7bf215546Sopenharmony_ci# copies of the Software, and to permit persons to whom the Software is 8bf215546Sopenharmony_ci# furnished to do so, subject to the following conditions: 9bf215546Sopenharmony_ci 10bf215546Sopenharmony_ci# The above copyright notice and this permission notice shall be included in 11bf215546Sopenharmony_ci# all copies or substantial portions of the Software. 12bf215546Sopenharmony_ci 13bf215546Sopenharmony_ci# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14bf215546Sopenharmony_ci# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15bf215546Sopenharmony_ci# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16bf215546Sopenharmony_ci# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17bf215546Sopenharmony_ci# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18bf215546Sopenharmony_ci# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 19bf215546Sopenharmony_ci# SOFTWARE. 20bf215546Sopenharmony_ci 21bf215546Sopenharmony_cifiles_libfreedreno = files( 22bf215546Sopenharmony_ci 'freedreno_autotune.c', 23bf215546Sopenharmony_ci 'freedreno_autotune.h', 24bf215546Sopenharmony_ci 'freedreno_batch.c', 25bf215546Sopenharmony_ci 'freedreno_batch.h', 26bf215546Sopenharmony_ci 'freedreno_batch_cache.c', 27bf215546Sopenharmony_ci 'freedreno_batch_cache.h', 28bf215546Sopenharmony_ci 'freedreno_blitter.c', 29bf215546Sopenharmony_ci 'freedreno_blitter.h', 30bf215546Sopenharmony_ci 'freedreno_context.c', 31bf215546Sopenharmony_ci 'freedreno_context.h', 32bf215546Sopenharmony_ci 'freedreno_draw.c', 33bf215546Sopenharmony_ci 'freedreno_draw.h', 34bf215546Sopenharmony_ci 'freedreno_fence.c', 35bf215546Sopenharmony_ci 'freedreno_fence.h', 36bf215546Sopenharmony_ci 'freedreno_gmem.c', 37bf215546Sopenharmony_ci 'freedreno_gmem.h', 38bf215546Sopenharmony_ci 'freedreno_program.c', 39bf215546Sopenharmony_ci 'freedreno_program.h', 40bf215546Sopenharmony_ci 'freedreno_query.c', 41bf215546Sopenharmony_ci 'freedreno_query.h', 42bf215546Sopenharmony_ci 'freedreno_query_acc.c', 43bf215546Sopenharmony_ci 'freedreno_query_acc.h', 44bf215546Sopenharmony_ci 'freedreno_query_hw.c', 45bf215546Sopenharmony_ci 'freedreno_query_hw.h', 46bf215546Sopenharmony_ci 'freedreno_query_sw.c', 47bf215546Sopenharmony_ci 'freedreno_query_sw.h', 48bf215546Sopenharmony_ci 'freedreno_resource.c', 49bf215546Sopenharmony_ci 'freedreno_resource.h', 50bf215546Sopenharmony_ci 'freedreno_screen.c', 51bf215546Sopenharmony_ci 'freedreno_screen.h', 52bf215546Sopenharmony_ci 'freedreno_state.c', 53bf215546Sopenharmony_ci 'freedreno_state.h', 54bf215546Sopenharmony_ci 'freedreno_surface.c', 55bf215546Sopenharmony_ci 'freedreno_surface.h', 56bf215546Sopenharmony_ci 'freedreno_texture.c', 57bf215546Sopenharmony_ci 'freedreno_texture.h', 58bf215546Sopenharmony_ci 'freedreno_util.c', 59bf215546Sopenharmony_ci 'freedreno_util.h', 60bf215546Sopenharmony_ci 'a2xx/fd2_blend.c', 61bf215546Sopenharmony_ci 'a2xx/fd2_blend.h', 62bf215546Sopenharmony_ci 'a2xx/fd2_context.c', 63bf215546Sopenharmony_ci 'a2xx/fd2_context.h', 64bf215546Sopenharmony_ci 'a2xx/fd2_draw.c', 65bf215546Sopenharmony_ci 'a2xx/fd2_draw.h', 66bf215546Sopenharmony_ci 'a2xx/fd2_emit.c', 67bf215546Sopenharmony_ci 'a2xx/fd2_emit.h', 68bf215546Sopenharmony_ci 'a2xx/fd2_gmem.c', 69bf215546Sopenharmony_ci 'a2xx/fd2_gmem.h', 70bf215546Sopenharmony_ci 'a2xx/fd2_program.c', 71bf215546Sopenharmony_ci 'a2xx/fd2_program.h', 72bf215546Sopenharmony_ci 'a2xx/fd2_query.c', 73bf215546Sopenharmony_ci 'a2xx/fd2_query.h', 74bf215546Sopenharmony_ci 'a2xx/fd2_rasterizer.c', 75bf215546Sopenharmony_ci 'a2xx/fd2_rasterizer.h', 76bf215546Sopenharmony_ci 'a2xx/fd2_resource.c', 77bf215546Sopenharmony_ci 'a2xx/fd2_resource.h', 78bf215546Sopenharmony_ci 'a2xx/fd2_screen.c', 79bf215546Sopenharmony_ci 'a2xx/fd2_screen.h', 80bf215546Sopenharmony_ci 'a2xx/fd2_texture.c', 81bf215546Sopenharmony_ci 'a2xx/fd2_texture.h', 82bf215546Sopenharmony_ci 'a2xx/fd2_util.c', 83bf215546Sopenharmony_ci 'a2xx/fd2_util.h', 84bf215546Sopenharmony_ci 'a2xx/fd2_zsa.c', 85bf215546Sopenharmony_ci 'a2xx/fd2_zsa.h', 86bf215546Sopenharmony_ci 'a2xx/ir2.c', 87bf215546Sopenharmony_ci 'a2xx/ir2.h', 88bf215546Sopenharmony_ci 'a2xx/ir2_assemble.c', 89bf215546Sopenharmony_ci 'a2xx/ir2_cp.c', 90bf215546Sopenharmony_ci 'a2xx/ir2_nir.c', 91bf215546Sopenharmony_ci 'a2xx/ir2_private.h', 92bf215546Sopenharmony_ci 'a2xx/ir2_ra.c', 93bf215546Sopenharmony_ci 'a3xx/fd3_blend.c', 94bf215546Sopenharmony_ci 'a3xx/fd3_blend.h', 95bf215546Sopenharmony_ci 'a3xx/fd3_context.c', 96bf215546Sopenharmony_ci 'a3xx/fd3_context.h', 97bf215546Sopenharmony_ci 'a3xx/fd3_draw.c', 98bf215546Sopenharmony_ci 'a3xx/fd3_draw.h', 99bf215546Sopenharmony_ci 'a3xx/fd3_emit.c', 100bf215546Sopenharmony_ci 'a3xx/fd3_emit.h', 101bf215546Sopenharmony_ci 'a3xx/fd3_format.c', 102bf215546Sopenharmony_ci 'a3xx/fd3_format.h', 103bf215546Sopenharmony_ci 'a3xx/fd3_gmem.c', 104bf215546Sopenharmony_ci 'a3xx/fd3_gmem.h', 105bf215546Sopenharmony_ci 'a3xx/fd3_program.c', 106bf215546Sopenharmony_ci 'a3xx/fd3_program.h', 107bf215546Sopenharmony_ci 'a3xx/fd3_query.c', 108bf215546Sopenharmony_ci 'a3xx/fd3_query.h', 109bf215546Sopenharmony_ci 'a3xx/fd3_rasterizer.c', 110bf215546Sopenharmony_ci 'a3xx/fd3_rasterizer.h', 111bf215546Sopenharmony_ci 'a3xx/fd3_resource.c', 112bf215546Sopenharmony_ci 'a3xx/fd3_resource.h', 113bf215546Sopenharmony_ci 'a3xx/fd3_screen.c', 114bf215546Sopenharmony_ci 'a3xx/fd3_screen.h', 115bf215546Sopenharmony_ci 'a3xx/fd3_texture.c', 116bf215546Sopenharmony_ci 'a3xx/fd3_texture.h', 117bf215546Sopenharmony_ci 'a3xx/fd3_zsa.c', 118bf215546Sopenharmony_ci 'a3xx/fd3_zsa.h', 119bf215546Sopenharmony_ci 'a4xx/fd4_blend.c', 120bf215546Sopenharmony_ci 'a4xx/fd4_blend.h', 121bf215546Sopenharmony_ci 'a4xx/fd4_compute.c', 122bf215546Sopenharmony_ci 'a4xx/fd4_compute.h', 123bf215546Sopenharmony_ci 'a4xx/fd4_context.c', 124bf215546Sopenharmony_ci 'a4xx/fd4_context.h', 125bf215546Sopenharmony_ci 'a4xx/fd4_draw.c', 126bf215546Sopenharmony_ci 'a4xx/fd4_draw.h', 127bf215546Sopenharmony_ci 'a4xx/fd4_emit.c', 128bf215546Sopenharmony_ci 'a4xx/fd4_emit.h', 129bf215546Sopenharmony_ci 'a4xx/fd4_format.c', 130bf215546Sopenharmony_ci 'a4xx/fd4_format.h', 131bf215546Sopenharmony_ci 'a4xx/fd4_gmem.c', 132bf215546Sopenharmony_ci 'a4xx/fd4_gmem.h', 133bf215546Sopenharmony_ci 'a4xx/fd4_image.c', 134bf215546Sopenharmony_ci 'a4xx/fd4_image.h', 135bf215546Sopenharmony_ci 'a4xx/fd4_program.c', 136bf215546Sopenharmony_ci 'a4xx/fd4_program.h', 137bf215546Sopenharmony_ci 'a4xx/fd4_query.c', 138bf215546Sopenharmony_ci 'a4xx/fd4_query.h', 139bf215546Sopenharmony_ci 'a4xx/fd4_rasterizer.c', 140bf215546Sopenharmony_ci 'a4xx/fd4_rasterizer.h', 141bf215546Sopenharmony_ci 'a4xx/fd4_resource.c', 142bf215546Sopenharmony_ci 'a4xx/fd4_resource.h', 143bf215546Sopenharmony_ci 'a4xx/fd4_screen.c', 144bf215546Sopenharmony_ci 'a4xx/fd4_screen.h', 145bf215546Sopenharmony_ci 'a4xx/fd4_texture.c', 146bf215546Sopenharmony_ci 'a4xx/fd4_texture.h', 147bf215546Sopenharmony_ci 'a4xx/fd4_zsa.c', 148bf215546Sopenharmony_ci 'a4xx/fd4_zsa.h', 149bf215546Sopenharmony_ci 'a5xx/fd5_blend.c', 150bf215546Sopenharmony_ci 'a5xx/fd5_blend.h', 151bf215546Sopenharmony_ci 'a5xx/fd5_blitter.c', 152bf215546Sopenharmony_ci 'a5xx/fd5_blitter.h', 153bf215546Sopenharmony_ci 'a5xx/fd5_compute.c', 154bf215546Sopenharmony_ci 'a5xx/fd5_compute.h', 155bf215546Sopenharmony_ci 'a5xx/fd5_context.c', 156bf215546Sopenharmony_ci 'a5xx/fd5_context.h', 157bf215546Sopenharmony_ci 'a5xx/fd5_draw.c', 158bf215546Sopenharmony_ci 'a5xx/fd5_draw.h', 159bf215546Sopenharmony_ci 'a5xx/fd5_emit.c', 160bf215546Sopenharmony_ci 'a5xx/fd5_emit.h', 161bf215546Sopenharmony_ci 'a5xx/fd5_format.c', 162bf215546Sopenharmony_ci 'a5xx/fd5_format.h', 163bf215546Sopenharmony_ci 'a5xx/fd5_gmem.c', 164bf215546Sopenharmony_ci 'a5xx/fd5_gmem.h', 165bf215546Sopenharmony_ci 'a5xx/fd5_image.c', 166bf215546Sopenharmony_ci 'a5xx/fd5_image.h', 167bf215546Sopenharmony_ci 'a5xx/fd5_program.c', 168bf215546Sopenharmony_ci 'a5xx/fd5_program.h', 169bf215546Sopenharmony_ci 'a5xx/fd5_query.c', 170bf215546Sopenharmony_ci 'a5xx/fd5_query.h', 171bf215546Sopenharmony_ci 'a5xx/fd5_rasterizer.c', 172bf215546Sopenharmony_ci 'a5xx/fd5_rasterizer.h', 173bf215546Sopenharmony_ci 'a5xx/fd5_resource.c', 174bf215546Sopenharmony_ci 'a5xx/fd5_resource.h', 175bf215546Sopenharmony_ci 'a5xx/fd5_screen.c', 176bf215546Sopenharmony_ci 'a5xx/fd5_screen.h', 177bf215546Sopenharmony_ci 'a5xx/fd5_texture.c', 178bf215546Sopenharmony_ci 'a5xx/fd5_texture.h', 179bf215546Sopenharmony_ci 'a5xx/fd5_zsa.c', 180bf215546Sopenharmony_ci 'a5xx/fd5_zsa.h', 181bf215546Sopenharmony_ci 'a6xx/fd6_blend.c', 182bf215546Sopenharmony_ci 'a6xx/fd6_blend.h', 183bf215546Sopenharmony_ci 'a6xx/fd6_blitter.c', 184bf215546Sopenharmony_ci 'a6xx/fd6_blitter.h', 185bf215546Sopenharmony_ci 'a6xx/fd6_compute.c', 186bf215546Sopenharmony_ci 'a6xx/fd6_compute.h', 187bf215546Sopenharmony_ci 'a6xx/fd6_const.c', 188bf215546Sopenharmony_ci 'a6xx/fd6_const.h', 189bf215546Sopenharmony_ci 'a6xx/fd6_context.c', 190bf215546Sopenharmony_ci 'a6xx/fd6_context.h', 191bf215546Sopenharmony_ci 'a6xx/fd6_draw.c', 192bf215546Sopenharmony_ci 'a6xx/fd6_draw.h', 193bf215546Sopenharmony_ci 'a6xx/fd6_emit.c', 194bf215546Sopenharmony_ci 'a6xx/fd6_emit.h', 195bf215546Sopenharmony_ci 'a6xx/fd6_gmem.c', 196bf215546Sopenharmony_ci 'a6xx/fd6_gmem.h', 197bf215546Sopenharmony_ci 'a6xx/fd6_image.c', 198bf215546Sopenharmony_ci 'a6xx/fd6_image.h', 199bf215546Sopenharmony_ci 'a6xx/fd6_program.c', 200bf215546Sopenharmony_ci 'a6xx/fd6_program.h', 201bf215546Sopenharmony_ci 'a6xx/fd6_query.c', 202bf215546Sopenharmony_ci 'a6xx/fd6_query.h', 203bf215546Sopenharmony_ci 'a6xx/fd6_rasterizer.c', 204bf215546Sopenharmony_ci 'a6xx/fd6_rasterizer.h', 205bf215546Sopenharmony_ci 'a6xx/fd6_resource.c', 206bf215546Sopenharmony_ci 'a6xx/fd6_resource.h', 207bf215546Sopenharmony_ci 'a6xx/fd6_screen.c', 208bf215546Sopenharmony_ci 'a6xx/fd6_screen.h', 209bf215546Sopenharmony_ci 'a6xx/fd6_texture.c', 210bf215546Sopenharmony_ci 'a6xx/fd6_texture.h', 211bf215546Sopenharmony_ci 'a6xx/fd6_vsc.c', 212bf215546Sopenharmony_ci 'a6xx/fd6_vsc.h', 213bf215546Sopenharmony_ci 'a6xx/fd6_zsa.c', 214bf215546Sopenharmony_ci 'a6xx/fd6_zsa.h', 215bf215546Sopenharmony_ci 'ir3/ir3_cache.c', 216bf215546Sopenharmony_ci 'ir3/ir3_cache.h', 217bf215546Sopenharmony_ci 'ir3/ir3_const.h', 218bf215546Sopenharmony_ci 'ir3/ir3_gallium.c', 219bf215546Sopenharmony_ci 'ir3/ir3_gallium.h', 220bf215546Sopenharmony_ci) 221bf215546Sopenharmony_ci 222bf215546Sopenharmony_cifreedreno_tracepoints = custom_target( 223bf215546Sopenharmony_ci 'freedreno_tracepoints.[ch]', 224bf215546Sopenharmony_ci input: 'freedreno_tracepoints.py', 225bf215546Sopenharmony_ci output: ['freedreno_tracepoints.c', 'freedreno_tracepoints.h'], 226bf215546Sopenharmony_ci command: [ 227bf215546Sopenharmony_ci prog_python, '@INPUT@', 228bf215546Sopenharmony_ci '-p', join_paths(meson.source_root(), 'src/util/perf/'), 229bf215546Sopenharmony_ci '-C', '@OUTPUT0@', 230bf215546Sopenharmony_ci '-H', '@OUTPUT1@', 231bf215546Sopenharmony_ci ], 232bf215546Sopenharmony_ci depend_files: u_trace_py, 233bf215546Sopenharmony_ci) 234bf215546Sopenharmony_ci 235bf215546Sopenharmony_cifiles_libfreedreno += freedreno_tracepoints 236bf215546Sopenharmony_ci 237bf215546Sopenharmony_cifreedreno_includes = [ 238bf215546Sopenharmony_ci inc_mesa, inc_mapi, 239bf215546Sopenharmony_ci inc_src, inc_include, inc_gallium, inc_gallium_aux, 240bf215546Sopenharmony_ci inc_freedreno, include_directories('ir3'), 241bf215546Sopenharmony_ci] 242bf215546Sopenharmony_ci 243bf215546Sopenharmony_cifreedreno_c_args = [no_override_init_args] 244bf215546Sopenharmony_ciif cc.has_argument('-Wpacked-bitfield-compat') 245bf215546Sopenharmony_ci freedreno_c_args += '-Wno-packed-bitfield-compat' 246bf215546Sopenharmony_ciendif 247bf215546Sopenharmony_ci 248bf215546Sopenharmony_cifreedreno_cpp_args = [] 249bf215546Sopenharmony_ciif cpp.has_argument('-Wpacked-bitfield-compat') 250bf215546Sopenharmony_ci freedreno_cpp_args += '-Wno-packed-bitfield-compat' 251bf215546Sopenharmony_ciendif 252bf215546Sopenharmony_ci 253bf215546Sopenharmony_cilibfreedreno_dependencies = [ 254bf215546Sopenharmony_ci dep_libdrm, 255bf215546Sopenharmony_ci idep_mesautil, 256bf215546Sopenharmony_ci idep_nir_headers, 257bf215546Sopenharmony_ci idep_libfreedreno_common, 258bf215546Sopenharmony_ci idep_u_tracepoints, 259bf215546Sopenharmony_ci] 260bf215546Sopenharmony_ci 261bf215546Sopenharmony_ciif with_perfetto 262bf215546Sopenharmony_ci libfreedreno_dependencies += dep_perfetto 263bf215546Sopenharmony_ci files_libfreedreno += 'freedreno_perfetto.cc' 264bf215546Sopenharmony_ciendif 265bf215546Sopenharmony_ci 266bf215546Sopenharmony_ci# The header file ends up part of the build (but just a stub) 267bf215546Sopenharmony_ci# in either case: 268bf215546Sopenharmony_cifiles_libfreedreno += 'freedreno_perfetto.h' 269bf215546Sopenharmony_ci 270bf215546Sopenharmony_cilibfreedreno = static_library( 271bf215546Sopenharmony_ci 'freedreno', 272bf215546Sopenharmony_ci [files_libfreedreno, freedreno_xml_header_files], 273bf215546Sopenharmony_ci include_directories : freedreno_includes, 274bf215546Sopenharmony_ci c_args : [freedreno_c_args], 275bf215546Sopenharmony_ci cpp_args : [freedreno_cpp_args], 276bf215546Sopenharmony_ci gnu_symbol_visibility : 'hidden', 277bf215546Sopenharmony_ci dependencies : libfreedreno_dependencies, 278bf215546Sopenharmony_ci override_options : ['cpp_std=c++17'], 279bf215546Sopenharmony_ci) 280bf215546Sopenharmony_ci 281bf215546Sopenharmony_cidriver_freedreno = declare_dependency( 282bf215546Sopenharmony_ci compile_args : '-DGALLIUM_FREEDRENO', 283bf215546Sopenharmony_ci link_with : [ 284bf215546Sopenharmony_ci libfreedrenowinsys, 285bf215546Sopenharmony_ci libfreedreno, 286bf215546Sopenharmony_ci libfreedreno_drm, 287bf215546Sopenharmony_ci libfreedreno_ir2, 288bf215546Sopenharmony_ci libfreedreno_ir3, 289bf215546Sopenharmony_ci libfreedreno_layout, 290bf215546Sopenharmony_ci libfreedreno_perfcntrs 291bf215546Sopenharmony_ci ], 292bf215546Sopenharmony_ci dependencies : [ 293bf215546Sopenharmony_ci idep_nir, 294bf215546Sopenharmony_ci idep_xmlconfig, 295bf215546Sopenharmony_ci ], 296bf215546Sopenharmony_ci) 297bf215546Sopenharmony_ci 298bf215546Sopenharmony_ciir3_compiler = executable( 299bf215546Sopenharmony_ci 'ir3_compiler', 300bf215546Sopenharmony_ci ['ir3/ir3_cmdline.c', freedreno_xml_header_files], 301bf215546Sopenharmony_ci include_directories : freedreno_includes, 302bf215546Sopenharmony_ci dependencies : [ 303bf215546Sopenharmony_ci idep_nir, 304bf215546Sopenharmony_ci idep_mesautil, 305bf215546Sopenharmony_ci ], 306bf215546Sopenharmony_ci link_with : [ 307bf215546Sopenharmony_ci libfreedreno, 308bf215546Sopenharmony_ci libfreedreno_drm, 309bf215546Sopenharmony_ci libfreedreno_ir3, 310bf215546Sopenharmony_ci libfreedreno_layout, 311bf215546Sopenharmony_ci libgallium, 312bf215546Sopenharmony_ci libglsl_standalone, 313bf215546Sopenharmony_ci ], 314bf215546Sopenharmony_ci build_by_default : with_tools.contains('freedreno'), 315bf215546Sopenharmony_ci install : false, 316bf215546Sopenharmony_ci) 317bf215546Sopenharmony_ci 318bf215546Sopenharmony_cigmemtool = executable( 319bf215546Sopenharmony_ci 'gmemtool', 320bf215546Sopenharmony_ci [ 321bf215546Sopenharmony_ci 'gmemtool.c', 322bf215546Sopenharmony_ci freedreno_tracepoints[1] 323bf215546Sopenharmony_ci ], 324bf215546Sopenharmony_ci include_directories : freedreno_includes, 325bf215546Sopenharmony_ci dependencies : [ 326bf215546Sopenharmony_ci idep_nir, 327bf215546Sopenharmony_ci idep_mesautil, 328bf215546Sopenharmony_ci idep_u_tracepoints, 329bf215546Sopenharmony_ci idep_xmlconfig, 330bf215546Sopenharmony_ci ], 331bf215546Sopenharmony_ci link_with : [ 332bf215546Sopenharmony_ci libfreedreno, 333bf215546Sopenharmony_ci libfreedreno_drm, 334bf215546Sopenharmony_ci libfreedreno_ir2, 335bf215546Sopenharmony_ci libfreedreno_ir3, 336bf215546Sopenharmony_ci libfreedreno_layout, 337bf215546Sopenharmony_ci libgallium, 338bf215546Sopenharmony_ci libglsl_standalone, 339bf215546Sopenharmony_ci libfreedreno_perfcntrs, 340bf215546Sopenharmony_ci ], 341bf215546Sopenharmony_ci build_by_default : with_tools.contains('freedreno'), 342bf215546Sopenharmony_ci install : false, 343bf215546Sopenharmony_ci) 344