1import("//build_overrides/clspv.gni") 2import("//build_overrides/spirv_tools.gni") 3 4declare_args() { 5 # spirv namespace 6 spirv_namespace_strings = "spv" 7 spirv_namespace_glsl = "glsl" 8 spirv_namespace_reflection = "reflection" 9 10 # bake file variable names 11 clspv_bake_file_data_variable_name = "clspv_builtins_header_data" 12 clspv_bake_file_size_variable_name = "clspv_builtins_header_size" 13 clspv_bake_file_data_base_variable_name = "opencl_base_builtins_header_data" 14 clspv_bake_file_size_base_variable_name = "opencl_base_builtins_header_size" 15 16 # clspv builtin library variable names 17 clspv_library_data_var_name = "clspv_builtin_library_data" 18 clspv_library_size_var_name = "clspv_builtin_library_size" 19 clspv64_library_data_var_name = "clspv64_builtin_library_data" 20 clspv64_library_size_var_name = "clspv64_builtin_library_size" 21} 22 23# Action scripts to generate headers 24action("clspv_c_strings") { 25 script = "src/cmake/spirv_c_strings.py" 26 27 inputs = 28 [ "${spirv_tools_spirv_headers_dir}/include/spirv/unified1/spirv.hpp" ] 29 30 outputs = [ "$target_gen_dir/clspv/spirv_c_strings.hpp" ] 31 32 args = [ 33 "--input-file=" + rebase_path(inputs[0], root_build_dir), 34 "--output-file=" + rebase_path(outputs[0], root_build_dir), 35 "--namespace=" + spirv_namespace_strings, 36 ] 37} 38 39action("clspv_glsl") { 40 script = "src/cmake/spirv_ext_inst.py" 41 42 inputs = [ "${spirv_tools_spirv_headers_dir}/include/spirv/unified1/extinst.glsl.std.450.grammar.json" ] 43 44 outputs = [ "$target_gen_dir/clspv/spirv_glsl.hpp" ] 45 46 args = [ 47 "--input-file=" + rebase_path(inputs[0], root_build_dir), 48 "--output-file=" + rebase_path(outputs[0], root_build_dir), 49 "--namespace=" + spirv_namespace_glsl, 50 ] 51} 52 53action("clspv_reflection") { 54 script = "src/cmake/spirv_ext_inst.py" 55 56 inputs = [ "${spirv_tools_spirv_headers_dir}/include/spirv/unified1/extinst.nonsemantic.clspvreflection.grammar.json" ] 57 58 outputs = [ "$target_gen_dir/clspv/spirv_reflection.hpp" ] 59 60 args = [ 61 "--input-file=" + rebase_path(inputs[0], root_build_dir), 62 "--output-file=" + rebase_path(outputs[0], root_build_dir), 63 "--namespace=" + spirv_namespace_reflection, 64 ] 65} 66 67action("clspv-builtins") { 68 script = "src/cmake/define_clspv_builtins.py" 69 70 outputs = [ "$target_gen_dir/clspv-builtins.h" ] 71 72 args = [ "--output-file=" + rebase_path(outputs[0], root_build_dir) ] 73} 74 75# The *.bc files are prebuilt binaries in the clspv. If these need to be regenerated, please refer 76# to the clspv README.md file for instructions. 77action("clspv_builtin_library") { 78 script = "src/cmake/bake_file.py" 79 inputs = [ "src/cmake/clspv--.bc" ] 80 outputs = [ "$target_gen_dir/clspv/clspv_builtin_library.h" ] 81 82 args = [ 83 "--input-header-file=" + rebase_path(inputs[0], root_build_dir), 84 "--output-file=" + rebase_path(outputs[0], root_build_dir), 85 "--header-var=" + clspv_library_data_var_name, 86 "--header-size=" + clspv_library_size_var_name, 87 ] 88} 89 90action("clspv64_builtin_library") { 91 script = "src/cmake/bake_file.py" 92 inputs = [ "src/cmake/clspv64--.bc" ] 93 outputs = [ "$target_gen_dir/clspv/clspv64_builtin_library.h" ] 94 95 args = [ 96 "--input-header-file=" + rebase_path(inputs[0], root_build_dir), 97 "--output-file=" + rebase_path(outputs[0], root_build_dir), 98 "--header-var=" + clspv64_library_data_var_name, 99 "--header-size=" + clspv64_library_size_var_name, 100 ] 101} 102 103action("clspv_baked_opencl_header") { 104 script = 105 "src/cmake/bake_file.py" # cannot use data_deps as that's a rutime dep 106 deps = [ ":clspv-builtins" ] 107 108 inputs = [ 109 "$target_gen_dir/clspv-builtins.h", 110 "//$clspv_llvm_dir/clang/lib/Headers/opencl-c-base.h", 111 ] 112 113 outputs = [ "$target_gen_dir/clspv/opencl_builtins_header.h" ] 114 115 args = [ 116 "--input-header-file=" + rebase_path(inputs[0], root_build_dir), 117 "--input-base-file=" + rebase_path(inputs[1], root_build_dir), 118 "--output-file=" + rebase_path(outputs[0], root_build_dir), 119 "--header-var=" + clspv_bake_file_data_variable_name, 120 "--header-size-var=" + clspv_bake_file_size_variable_name, 121 "--base-var=" + clspv_bake_file_data_base_variable_name, 122 "--base-size-var=" + clspv_bake_file_size_base_variable_name, 123 ] 124} 125 126# CLSPV Lib Targets 127# a common config that will be used by all the clspv targets 128config("clspv_common_config") { 129 include_dirs = [ 130 "src/include", 131 "${spirv_tools_spirv_headers_dir}/include", 132 "$root_gen_dir", 133 "$target_gen_dir/../", 134 ] 135 if (current_os != "win") { 136 cflags = [ "-Wno-deprecated-declarations" ] 137 } 138} 139 140source_set("clspv_passes") { 141 sources = [ 142 "src/lib/AddFunctionAttributesPass.cpp", 143 "src/lib/AllocateDescriptorsPass.cpp", 144 "src/lib/AnnotationToMetadataPass.cpp", 145 "src/lib/ArgKind.cpp", 146 "src/lib/AutoPodArgsPass.cpp", 147 "src/lib/BitcastUtils.cpp", 148 "src/lib/Builtins.cpp", 149 "src/lib/CallGraphOrderedFunctions.cpp", 150 "src/lib/ClusterConstants.cpp", 151 "src/lib/ClusterPodKernelArgumentsPass.cpp", 152 "src/lib/ComputeStructuredOrder.cpp", 153 "src/lib/ConstantEmitter.cpp", 154 "src/lib/Constants.cpp", 155 "src/lib/DeclarePushConstantsPass.cpp", 156 "src/lib/DefineOpenCLWorkItemBuiltinsPass.cpp", 157 "src/lib/DescriptorCounter.cpp", 158 "src/lib/DirectResourceAccessPass.cpp", 159 "src/lib/FeatureMacro.cpp", 160 "src/lib/FixupBuiltinsPass.cpp", 161 "src/lib/FixupStructuredCFGPass.cpp", 162 "src/lib/FunctionInternalizerPass.cpp", 163 "src/lib/HideConstantLoadsPass.cpp", 164 "src/lib/InlineEntryPointsPass.cpp", 165 "src/lib/InlineFuncWithImageMetadataGetterPass.cpp", 166 "src/lib/InlineFuncWithPointerBitCastArgPass.cpp", 167 "src/lib/InlineFuncWithPointerToFunctionArgPass.cpp", 168 "src/lib/InlineFuncWithReadImage3DNonLiteralSampler.cpp", 169 "src/lib/InlineFuncWithSingleCallSitePass.cpp", 170 "src/lib/KernelArgNamesToMetadataPass.cpp", 171 "src/lib/Layout.cpp", 172 "src/lib/LogicalPointerToIntPass.cpp", 173 "src/lib/LongVectorLoweringPass.cpp", 174 "src/lib/LowerAddrSpaceCastPass.cpp", 175 "src/lib/LowerPrivatePointerPHIPass.cpp", 176 "src/lib/MultiVersionUBOFunctionsPass.cpp", 177 "src/lib/NativeMathPass.cpp", 178 "src/lib/NormalizeGlobalVariable.cpp", 179 "src/lib/OpenCLInlinerPass.cpp", 180 "src/lib/Option.cpp", 181 "src/lib/Passes.cpp", 182 "src/lib/PhysicalPointerArgsPass.cpp", 183 "src/lib/PrintfPass.cpp", 184 "src/lib/PushConstant.cpp", 185 "src/lib/RemoveUnusedArguments.cpp", 186 "src/lib/ReorderBasicBlocksPass.cpp", 187 "src/lib/ReplaceLLVMIntrinsicsPass.cpp", 188 "src/lib/ReplaceOpenCLBuiltinPass.cpp", 189 "src/lib/ReplacePointerBitcastPass.cpp", 190 "src/lib/RewriteInsertsPass.cpp", 191 "src/lib/RewritePackedStructs.cpp", 192 "src/lib/SPIRVOp.cpp", 193 "src/lib/SPIRVProducerPass.cpp", 194 "src/lib/SamplerUtils.cpp", 195 "src/lib/ScalarizePass.cpp", 196 "src/lib/SetImageMetadataPass.cpp", 197 "src/lib/ShareModuleScopeVariables.cpp", 198 "src/lib/SignedCompareFixupPass.cpp", 199 "src/lib/SimplifyPointerBitcastPass.cpp", 200 "src/lib/SpecConstant.cpp", 201 "src/lib/SpecializeImageTypes.cpp", 202 "src/lib/SplatArgPass.cpp", 203 "src/lib/SplatSelectCondition.cpp", 204 "src/lib/StripFreezePass.cpp", 205 "src/lib/ThreeElementVectorLoweringPass.cpp", 206 "src/lib/Types.cpp", 207 "src/lib/UBOTypeTransformPass.cpp", 208 "src/lib/UndoBoolPass.cpp", 209 "src/lib/UndoByvalPass.cpp", 210 "src/lib/UndoGetElementPtrConstantExprPass.cpp", 211 "src/lib/UndoInstCombinePass.cpp", 212 "src/lib/UndoSRetPass.cpp", 213 "src/lib/UndoTranslateSamplerFoldPass.cpp", 214 "src/lib/UndoTruncateToOddIntegerPass.cpp", 215 "src/lib/WrapKernelPass.cpp", 216 "src/lib/ZeroInitializeAllocasPass.cpp", 217 ] 218 219 deps = [ 220 ":clspv_c_strings", 221 ":clspv_glsl", 222 ":clspv_reflection", 223 "gn/llvm/config:llvm-config", 224 "gn/llvm/sources:clspv_llvm_components", 225 "//third_party/spirv-headers/src:spv_headers", 226 ] 227 228 configs += [ 229 ":clspv_common_config", 230 "gn/llvm/sources:clspv_llvm_private_config", 231 ] 232 233 configs += clspv_configs_to_append 234 configs -= clspv_configs_to_remove 235 236 include_dirs = [ "$root_gen_dir/$clspv_llvm_dir" ] 237} 238 239static_library("clspv_core") { 240 configs += [ ":clspv_common_config" ] 241 configs += clspv_configs_to_append 242 configs -= clspv_configs_to_remove 243 deps = [ 244 "gn/llvm/sources:clspv_clang_lib_ast", 245 "gn/llvm/sources:clspv_clang_lib_basic", 246 "gn/llvm/sources:clspv_clang_lib_codegen", 247 "gn/llvm/sources:clspv_clang_lib_frontend", 248 "gn/llvm/sources:clspv_clang_lib_serialization", 249 250 # llvm/clang 251 ":clspv64_builtin_library", 252 ":clspv_baked_opencl_header", 253 ":clspv_builtin_library", 254 ":clspv_passes", 255 "gn/llvm/sources:clspv_llvm_components", 256 "gn/llvm/sources:clspv_llvm_lib_irreader", 257 "gn/llvm/sources:clspv_llvm_lib_linker", 258 ] 259 sources = [ 260 "src/lib/Compiler.cpp", 261 "src/lib/FrontendPlugin.cpp", 262 "src/lib/Sampler.cpp", 263 ] 264 include_dirs = [ 265 "//$clspv_llvm_dir/clang/include", 266 "//$clspv_llvm_dir/llvm/include", 267 "$root_gen_dir/$clspv_llvm_dir/", 268 "$target_gen_dir", 269 "$root_gen_dir/$clspv_llvm_dir/clang/include", 270 ] 271} 272 273shared_library("clspv_core_shared") { 274 configs += [ ":clspv_common_config" ] 275 configs += clspv_configs_to_append 276 configs -= clspv_configs_to_remove 277 278 if (is_android) { 279 # Removing this config, otherwise clspv API will not be visable 280 configs -= [ "//build/config/android:hide_all_but_jni_onload" ] 281 } 282 283 deps = [ 284 "gn/llvm/sources:clspv_clang_lib_ast", 285 "gn/llvm/sources:clspv_clang_lib_basic", 286 "gn/llvm/sources:clspv_clang_lib_codegen", 287 "gn/llvm/sources:clspv_clang_lib_frontend", 288 "gn/llvm/sources:clspv_clang_lib_serialization", 289 290 # llvm/clang 291 ":clspv64_builtin_library", 292 ":clspv_baked_opencl_header", 293 ":clspv_builtin_library", 294 ":clspv_passes", 295 "gn/llvm/sources:clspv_llvm_components", 296 "gn/llvm/sources:clspv_llvm_lib_irreader", 297 "gn/llvm/sources:clspv_llvm_lib_linker", 298 ] 299 sources = [ 300 "src/lib/Compiler.cpp", 301 "src/lib/FrontendPlugin.cpp", 302 "src/lib/Sampler.cpp", 303 ] 304 include_dirs = [ 305 "//$clspv_llvm_dir/clang/include", 306 "//$clspv_llvm_dir/llvm/include", 307 "$root_gen_dir/$clspv_llvm_dir/", 308 "$target_gen_dir", 309 "$root_gen_dir/$clspv_llvm_dir/clang/include", 310 ] 311} 312 313# CLSPV Tools Targets 314config("clspv_opt_config") { 315 include_dirs = [ 316 "src/include", 317 "$clspv_llvm_dir/llvm/tools/opt", 318 "$root_gen_dir/$clspv_llvm_dir", 319 ] 320 configs = [ "gn/build:llvm_code" ] 321} 322 323executable("clspv-opt") { 324 sources = [ "src/tools/clspv-opt/main.cpp" ] 325 326 configs += [ ":clspv_opt_config" ] 327 configs += clspv_configs_to_append 328 configs -= clspv_configs_to_remove 329 330 deps = [ ":clspv_passes" ] 331} 332 333executable("clspv") { 334 sources = [ "src/tools/driver/main.cpp" ] 335 336 configs += [ ":clspv_common_config" ] 337 configs += clspv_configs_to_append 338 configs -= clspv_configs_to_remove 339 340 include_dirs = [ 341 "$target_gen_dir", 342 "$root_gen_dir/$clspv_llvm_dir", 343 ] 344 345 deps = [ ":clspv_core" ] 346} 347 348executable("clspv-reflection") { 349 sources = [ 350 "src/tools/reflection/ReflectionParser.cpp", 351 "src/tools/reflection/main.cpp", 352 ] 353 354 configs += [ ":clspv_common_config" ] 355 configs += clspv_configs_to_append 356 configs -= clspv_configs_to_remove 357 358 deps = [ 359 ":clspv_core", 360 ":clspv_reflection", 361 "${spirv_tools_dir}:spvtools_link", 362 "//third_party/spirv-headers/src:spv_headers", 363 ] 364 365 include_dirs = [ 366 "$spirv_tools_spirv_headers_dir/include", 367 "$target_gen_dir", 368 ] 369} 370 371group("default") { 372 deps = [ 373 ":clspv", 374 ":clspv-opt", 375 ":clspv-reflection", 376 ] 377} 378