xref: /aosp_15_r20/external/mesa3d/src/compiler/clc/meson.build (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1*61046927SAndroid Build Coastguard Worker# Copyright © Microsoft Corporation
2*61046927SAndroid Build Coastguard Worker# SPDX-License-Identifier: MIT
3*61046927SAndroid Build Coastguard Worker
4*61046927SAndroid Build Coastguard Workerfiles_libmesaclc = files(
5*61046927SAndroid Build Coastguard Worker  'clc.c',
6*61046927SAndroid Build Coastguard Worker  'clc_helpers.cpp',
7*61046927SAndroid Build Coastguard Worker  'nir_load_libclc.c',
8*61046927SAndroid Build Coastguard Worker)
9*61046927SAndroid Build Coastguard Worker
10*61046927SAndroid Build Coastguard Worker_libmesaclc_c_args = []
11*61046927SAndroid Build Coastguard Worker_libmesaclc_cpp_args = ['-DLLVM_LIB_DIR="@0@"'.format(llvm_libdir)]
12*61046927SAndroid Build Coastguard Worker_libmesaclc_sources = []
13*61046927SAndroid Build Coastguard Worker
14*61046927SAndroid Build Coastguard Workerif not _shared_llvm
15*61046927SAndroid Build Coastguard Worker  # LLVM 16 moved clang header path from using full version to only major version
16*61046927SAndroid Build Coastguard Worker  if dep_llvm.version().version_compare('< 16')
17*61046927SAndroid Build Coastguard Worker    # Prior to LLVM 16, this path used a full version
18*61046927SAndroid Build Coastguard Worker    clang_version_dir = dep_llvm.version()
19*61046927SAndroid Build Coastguard Worker  else
20*61046927SAndroid Build Coastguard Worker    # LLVM 16 changed to only using a major version
21*61046927SAndroid Build Coastguard Worker    clang_version_dir = dep_llvm.version().split('.')[0]
22*61046927SAndroid Build Coastguard Worker  endif
23*61046927SAndroid Build Coastguard Worker  clang_resource_dir = join_paths(llvm_libdir, 'clang', clang_version_dir, 'include')
24*61046927SAndroid Build Coastguard Worker
25*61046927SAndroid Build Coastguard Worker  opencl_c_base_h = custom_target(
26*61046927SAndroid Build Coastguard Worker    'opencl-c-base.h',
27*61046927SAndroid Build Coastguard Worker    input : [files_xxd, join_paths(clang_resource_dir, 'opencl-c-base.h')],
28*61046927SAndroid Build Coastguard Worker    output : 'opencl-c-base.h.h',
29*61046927SAndroid Build Coastguard Worker    command : [prog_python, '@INPUT@', '@OUTPUT@', '-n', 'opencl_c_base_source'],
30*61046927SAndroid Build Coastguard Worker  )
31*61046927SAndroid Build Coastguard Worker
32*61046927SAndroid Build Coastguard Worker  opencl_c_h = custom_target(
33*61046927SAndroid Build Coastguard Worker    'opencl-c.h',
34*61046927SAndroid Build Coastguard Worker    input : [files_xxd, join_paths(clang_resource_dir, 'opencl-c.h')],
35*61046927SAndroid Build Coastguard Worker    output : 'opencl-c.h.h',
36*61046927SAndroid Build Coastguard Worker    command : [prog_python, '@INPUT@', '@OUTPUT@', '-n', 'opencl_c_source'],
37*61046927SAndroid Build Coastguard Worker  )
38*61046927SAndroid Build Coastguard Worker
39*61046927SAndroid Build Coastguard Worker  _libmesaclc_sources += [opencl_c_base_h, opencl_c_h]
40*61046927SAndroid Build Coastguard Worker  _libmesaclc_cpp_args += ['-DUSE_STATIC_OPENCL_C_H=1']
41*61046927SAndroid Build Coastguard Workerendif
42*61046927SAndroid Build Coastguard Worker
43*61046927SAndroid Build Coastguard Worker_basedir = dep_clc.get_variable(pkgconfig : 'libexecdir')
44*61046927SAndroid Build Coastguard Worker
45*61046927SAndroid Build Coastguard Worker_static_libclc = get_option('static-libclc')
46*61046927SAndroid Build Coastguard Workerif _static_libclc.length() > 0
47*61046927SAndroid Build Coastguard Worker  if _static_libclc.contains('all')
48*61046927SAndroid Build Coastguard Worker    _static_libclc = ['spirv', 'spirv64']
49*61046927SAndroid Build Coastguard Worker  endif
50*61046927SAndroid Build Coastguard Worker  prog_zstd = find_program('zstd', required : false, native : true)
51*61046927SAndroid Build Coastguard Worker  _zstd_static_libclc = dep_zstd.found() and prog_zstd.found()
52*61046927SAndroid Build Coastguard Worker  if _zstd_static_libclc
53*61046927SAndroid Build Coastguard Worker    _libmesaclc_c_args += '-DHAVE_STATIC_LIBCLC_ZSTD'
54*61046927SAndroid Build Coastguard Worker  endif
55*61046927SAndroid Build Coastguard Worker  foreach s : _static_libclc
56*61046927SAndroid Build Coastguard Worker    _libmesaclc_c_args += '-DHAVE_STATIC_LIBCLC_@0@'.format(s.to_upper())
57*61046927SAndroid Build Coastguard Worker    f = '@[email protected]'.format(s)
58*61046927SAndroid Build Coastguard Worker    _libclc_file = _basedir / f
59*61046927SAndroid Build Coastguard Worker    if _zstd_static_libclc
60*61046927SAndroid Build Coastguard Worker      _libclc_file = custom_target(
61*61046927SAndroid Build Coastguard Worker        '@[email protected]'.format(f),
62*61046927SAndroid Build Coastguard Worker        command : [prog_zstd, '-f', '@INPUT@', '-o', '@OUTPUT@'],
63*61046927SAndroid Build Coastguard Worker        input : [_libclc_file],
64*61046927SAndroid Build Coastguard Worker        output : '@[email protected]'.format(f),
65*61046927SAndroid Build Coastguard Worker      )
66*61046927SAndroid Build Coastguard Worker    endif
67*61046927SAndroid Build Coastguard Worker    files_libmesaclc += custom_target(
68*61046927SAndroid Build Coastguard Worker      '@[email protected]'.format(f),
69*61046927SAndroid Build Coastguard Worker      command : [
70*61046927SAndroid Build Coastguard Worker        prog_python, files_xxd, '-b', '@INPUT@', '@OUTPUT@',
71*61046927SAndroid Build Coastguard Worker        '-n', 'libclc_@0@_mesa3d_spv'.format(s),
72*61046927SAndroid Build Coastguard Worker      ],
73*61046927SAndroid Build Coastguard Worker      input : [_libclc_file],
74*61046927SAndroid Build Coastguard Worker      output : '@[email protected]'.format(f),
75*61046927SAndroid Build Coastguard Worker      depend_files : files_xxd,
76*61046927SAndroid Build Coastguard Worker    )
77*61046927SAndroid Build Coastguard Worker  endforeach
78*61046927SAndroid Build Coastguard Workerelse
79*61046927SAndroid Build Coastguard Worker  _libmesaclc_c_args += ['-DDYNAMIC_LIBCLC_PATH="@0@/"'.format(_basedir)]
80*61046927SAndroid Build Coastguard Worker  if not cc.has_function('mmap')
81*61046927SAndroid Build Coastguard Worker    error('mmap required for dynamic libCLC loading')
82*61046927SAndroid Build Coastguard Worker  endif
83*61046927SAndroid Build Coastguard Workerendif
84*61046927SAndroid Build Coastguard Worker
85*61046927SAndroid Build Coastguard Workerhas_spirv_link_workaround = cpp.has_member(
86*61046927SAndroid Build Coastguard Worker  'spvtools::LinkerOptions',
87*61046927SAndroid Build Coastguard Worker  'SetAllowPtrTypeMismatch(true)',
88*61046927SAndroid Build Coastguard Worker  prefix : [
89*61046927SAndroid Build Coastguard Worker    '#include <spirv-tools/linker.hpp>',
90*61046927SAndroid Build Coastguard Worker  ],
91*61046927SAndroid Build Coastguard Worker  dependencies : dep_spirv_tools,
92*61046927SAndroid Build Coastguard Worker)
93*61046927SAndroid Build Coastguard Worker
94*61046927SAndroid Build Coastguard Workerif has_spirv_link_workaround
95*61046927SAndroid Build Coastguard Worker  _libmesaclc_c_args += ['-DHAS_SPIRV_LINK_LLVM_WORKAROUND=1']
96*61046927SAndroid Build Coastguard Workerendif
97*61046927SAndroid Build Coastguard Worker
98*61046927SAndroid Build Coastguard Worker_libmesaclc = static_library(
99*61046927SAndroid Build Coastguard Worker  'libmesaclc',
100*61046927SAndroid Build Coastguard Worker  files_libmesaclc,
101*61046927SAndroid Build Coastguard Worker  sources: _libmesaclc_sources,
102*61046927SAndroid Build Coastguard Worker  include_directories : [inc_include, inc_src, inc_spirv],
103*61046927SAndroid Build Coastguard Worker  c_args : _libmesaclc_c_args,
104*61046927SAndroid Build Coastguard Worker  cpp_args : [_libmesaclc_cpp_args, _libmesaclc_c_args],
105*61046927SAndroid Build Coastguard Worker  dependencies: [idep_nir, dep_clang, dep_llvm, dep_llvmspirvlib,
106*61046927SAndroid Build Coastguard Worker                 idep_mesautil, dep_spirv_tools, idep_vtn]
107*61046927SAndroid Build Coastguard Worker)
108*61046927SAndroid Build Coastguard Worker
109*61046927SAndroid Build Coastguard Worker_idep_mesaclc_link_args = []
110*61046927SAndroid Build Coastguard Workerif _shared_llvm
111*61046927SAndroid Build Coastguard Worker  _idep_mesaclc_link_args += cc.get_supported_link_arguments('-fPIC')
112*61046927SAndroid Build Coastguard Workerendif
113*61046927SAndroid Build Coastguard Worker
114*61046927SAndroid Build Coastguard Workeridep_mesaclc = declare_dependency(
115*61046927SAndroid Build Coastguard Worker  link_with : _libmesaclc,
116*61046927SAndroid Build Coastguard Worker  include_directories : include_directories('.'),
117*61046927SAndroid Build Coastguard Worker  link_args : _idep_mesaclc_link_args,
118*61046927SAndroid Build Coastguard Worker)
119