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 80 # TODO(hoonee.cho): fix the GN script to build libclc libraries with clspv 81 # The recent CLSPV's commit changed a way to get clspv--.bc and clspv64--.bc when building CLSPV. 82 # https://github.com/google/clspv/commit/769daac0f9b7ace2d6fb9839f18ba82f9751aefd 83 # Before: use prebuilt clspv--.bc and clspv64--.bc 84 # After: build clang/libclc with target set to clspv--.bc and clspv64--.bc 85 inputs = [ "gn/clspv--.bc" ] 86 outputs = [ "$target_gen_dir/clspv/clspv_builtin_library.h" ] 87 88 args = [ 89 "--input-header-file=" + rebase_path(inputs[0], root_build_dir), 90 "--output-file=" + rebase_path(outputs[0], root_build_dir), 91 "--header-var=" + clspv_library_data_var_name, 92 "--header-size=" + clspv_library_size_var_name, 93 ] 94} 95 96action("clspv64_builtin_library") { 97 script = "src/cmake/bake_file.py" 98 inputs = [ "gn/clspv64--.bc" ] 99 outputs = [ "$target_gen_dir/clspv/clspv64_builtin_library.h" ] 100 101 args = [ 102 "--input-header-file=" + rebase_path(inputs[0], root_build_dir), 103 "--output-file=" + rebase_path(outputs[0], root_build_dir), 104 "--header-var=" + clspv64_library_data_var_name, 105 "--header-size=" + clspv64_library_size_var_name, 106 ] 107} 108 109action("clspv_baked_opencl_header") { 110 script = 111 "src/cmake/bake_file.py" # cannot use data_deps as that's a rutime dep 112 deps = [ ":clspv-builtins" ] 113 114 inputs = [ 115 "$target_gen_dir/clspv-builtins.h", 116 "//$clspv_llvm_dir/clang/lib/Headers/opencl-c-base.h", 117 ] 118 119 outputs = [ "$target_gen_dir/clspv/opencl_builtins_header.h" ] 120 121 args = [ 122 "--input-header-file=" + rebase_path(inputs[0], root_build_dir), 123 "--input-base-file=" + rebase_path(inputs[1], root_build_dir), 124 "--output-file=" + rebase_path(outputs[0], root_build_dir), 125 "--header-var=" + clspv_bake_file_data_variable_name, 126 "--header-size-var=" + clspv_bake_file_size_variable_name, 127 "--base-var=" + clspv_bake_file_data_base_variable_name, 128 "--base-size-var=" + clspv_bake_file_size_base_variable_name, 129 ] 130} 131 132# CLSPV Lib Targets 133# a common config that will be used by all the clspv targets 134config("clspv_common_config") { 135 include_dirs = [ 136 "src/include", 137 "${spirv_tools_spirv_headers_dir}/include", 138 "$root_gen_dir", 139 "$target_gen_dir/../", 140 ] 141 if (current_os != "win") { 142 cflags = [ "-Wno-deprecated-declarations" ] 143 } 144} 145 146source_set("clspv_passes") { 147 sources = [ 148 "src/lib/AddFunctionAttributesPass.cpp", 149 "src/lib/AllocateDescriptorsPass.cpp", 150 "src/lib/AnnotationToMetadataPass.cpp", 151 "src/lib/ArgKind.cpp", 152 "src/lib/AutoPodArgsPass.cpp", 153 "src/lib/BitcastUtils.cpp", 154 "src/lib/Builtins.cpp", 155 "src/lib/CallGraphOrderedFunctions.cpp", 156 "src/lib/ClusterConstants.cpp", 157 "src/lib/ClusterPodKernelArgumentsPass.cpp", 158 "src/lib/ComputeStructuredOrder.cpp", 159 "src/lib/ConstantEmitter.cpp", 160 "src/lib/Constants.cpp", 161 "src/lib/DeclarePushConstantsPass.cpp", 162 "src/lib/DefineOpenCLWorkItemBuiltinsPass.cpp", 163 "src/lib/DescriptorCounter.cpp", 164 "src/lib/DirectResourceAccessPass.cpp", 165 "src/lib/FeatureMacro.cpp", 166 "src/lib/FixupBuiltinsPass.cpp", 167 "src/lib/FixupStructuredCFGPass.cpp", 168 "src/lib/FunctionInternalizerPass.cpp", 169 "src/lib/HideConstantLoadsPass.cpp", 170 "src/lib/InlineEntryPointsPass.cpp", 171 "src/lib/InlineFuncWithImageMetadataGetterPass.cpp", 172 "src/lib/InlineFuncWithPointerBitCastArgPass.cpp", 173 "src/lib/InlineFuncWithPointerToFunctionArgPass.cpp", 174 "src/lib/InlineFuncWithReadImage3DNonLiteralSampler.cpp", 175 "src/lib/InlineFuncWithSingleCallSitePass.cpp", 176 "src/lib/KernelArgNamesToMetadataPass.cpp", 177 "src/lib/Layout.cpp", 178 "src/lib/LogicalPointerToIntPass.cpp", 179 "src/lib/LongVectorLoweringPass.cpp", 180 "src/lib/LowerAddrSpaceCastPass.cpp", 181 "src/lib/LowerPrivatePointerPHIPass.cpp", 182 "src/lib/MultiVersionUBOFunctionsPass.cpp", 183 "src/lib/NativeMathPass.cpp", 184 "src/lib/NormalizeGlobalVariable.cpp", 185 "src/lib/OpenCLInlinerPass.cpp", 186 "src/lib/Option.cpp", 187 "src/lib/Passes.cpp", 188 "src/lib/PhysicalPointerArgsPass.cpp", 189 "src/lib/PrintfPass.cpp", 190 "src/lib/PushConstant.cpp", 191 "src/lib/RemoveUnusedArguments.cpp", 192 "src/lib/ReorderBasicBlocksPass.cpp", 193 "src/lib/ReplaceLLVMIntrinsicsPass.cpp", 194 "src/lib/ReplaceOpenCLBuiltinPass.cpp", 195 "src/lib/ReplacePointerBitcastPass.cpp", 196 "src/lib/RewriteInsertsPass.cpp", 197 "src/lib/RewritePackedStructs.cpp", 198 "src/lib/SPIRVOp.cpp", 199 "src/lib/SPIRVProducerPass.cpp", 200 "src/lib/SamplerUtils.cpp", 201 "src/lib/ScalarizePass.cpp", 202 "src/lib/SetImageMetadataPass.cpp", 203 "src/lib/ShareModuleScopeVariables.cpp", 204 "src/lib/SignedCompareFixupPass.cpp", 205 "src/lib/SimplifyPointerBitcastPass.cpp", 206 "src/lib/SpecConstant.cpp", 207 "src/lib/SpecializeImageTypes.cpp", 208 "src/lib/SplatArgPass.cpp", 209 "src/lib/SplatSelectCondition.cpp", 210 "src/lib/StripFreezePass.cpp", 211 "src/lib/ThreeElementVectorLoweringPass.cpp", 212 "src/lib/Types.cpp", 213 "src/lib/UBOTypeTransformPass.cpp", 214 "src/lib/UndoBoolPass.cpp", 215 "src/lib/UndoByvalPass.cpp", 216 "src/lib/UndoGetElementPtrConstantExprPass.cpp", 217 "src/lib/UndoInstCombinePass.cpp", 218 "src/lib/UndoSRetPass.cpp", 219 "src/lib/UndoTranslateSamplerFoldPass.cpp", 220 "src/lib/UndoTruncateToOddIntegerPass.cpp", 221 "src/lib/WrapKernelPass.cpp", 222 "src/lib/ZeroInitializeAllocasPass.cpp", 223 ] 224 225 deps = [ 226 ":clspv_c_strings", 227 ":clspv_glsl", 228 ":clspv_reflection", 229 "gn/llvm/config:llvm-config", 230 "gn/llvm/sources:clspv_llvm_components", 231 "//third_party/spirv-headers/src:spv_headers", 232 ] 233 234 configs += [ 235 ":clspv_common_config", 236 "gn/llvm/sources:clspv_llvm_private_config", 237 ] 238 239 configs += clspv_configs_to_append 240 configs -= clspv_configs_to_remove 241 242 include_dirs = [ "$root_gen_dir/$clspv_llvm_dir" ] 243} 244 245static_library("clspv_core") { 246 configs += [ ":clspv_common_config" ] 247 configs += clspv_configs_to_append 248 configs -= clspv_configs_to_remove 249 deps = [ 250 "gn/llvm/sources:clspv_clang_lib_ast", 251 "gn/llvm/sources:clspv_clang_lib_basic", 252 "gn/llvm/sources:clspv_clang_lib_codegen", 253 "gn/llvm/sources:clspv_clang_lib_frontend", 254 "gn/llvm/sources:clspv_clang_lib_serialization", 255 256 # llvm/clang 257 ":clspv64_builtin_library", 258 ":clspv_baked_opencl_header", 259 ":clspv_builtin_library", 260 ":clspv_passes", 261 "gn/llvm/sources:clspv_llvm_components", 262 "gn/llvm/sources:clspv_llvm_lib_irreader", 263 "gn/llvm/sources:clspv_llvm_lib_linker", 264 ] 265 sources = [ 266 "src/lib/Compiler.cpp", 267 "src/lib/FrontendPlugin.cpp", 268 "src/lib/Sampler.cpp", 269 ] 270 include_dirs = [ 271 "//$clspv_llvm_dir/clang/include", 272 "//$clspv_llvm_dir/llvm/include", 273 "$root_gen_dir/$clspv_llvm_dir/", 274 "$target_gen_dir", 275 "$root_gen_dir/$clspv_llvm_dir/clang/include", 276 ] 277} 278 279shared_library("clspv_core_shared") { 280 configs += [ ":clspv_common_config" ] 281 configs += clspv_configs_to_append 282 configs -= clspv_configs_to_remove 283 284 if (is_android) { 285 # Removing this config, otherwise clspv API will not be visable 286 configs -= [ "//build/config/android:hide_all_but_jni_onload" ] 287 } 288 289 deps = [ 290 "gn/llvm/sources:clspv_clang_lib_ast", 291 "gn/llvm/sources:clspv_clang_lib_basic", 292 "gn/llvm/sources:clspv_clang_lib_codegen", 293 "gn/llvm/sources:clspv_clang_lib_frontend", 294 "gn/llvm/sources:clspv_clang_lib_serialization", 295 296 # llvm/clang 297 ":clspv64_builtin_library", 298 ":clspv_baked_opencl_header", 299 ":clspv_builtin_library", 300 ":clspv_passes", 301 "gn/llvm/sources:clspv_llvm_components", 302 "gn/llvm/sources:clspv_llvm_lib_irreader", 303 "gn/llvm/sources:clspv_llvm_lib_linker", 304 ] 305 sources = [ 306 "src/lib/Compiler.cpp", 307 "src/lib/FrontendPlugin.cpp", 308 "src/lib/Sampler.cpp", 309 ] 310 include_dirs = [ 311 "//$clspv_llvm_dir/clang/include", 312 "//$clspv_llvm_dir/llvm/include", 313 "$root_gen_dir/$clspv_llvm_dir/", 314 "$target_gen_dir", 315 "$root_gen_dir/$clspv_llvm_dir/clang/include", 316 ] 317} 318 319# CLSPV Tools Targets 320config("clspv_opt_config") { 321 include_dirs = [ 322 "src/include", 323 "$clspv_llvm_dir/llvm/tools/opt", 324 "$root_gen_dir/$clspv_llvm_dir", 325 ] 326 configs = [ "gn/build:llvm_code" ] 327} 328 329executable("clspv-opt") { 330 sources = [ "src/tools/clspv-opt/main.cpp" ] 331 332 configs += [ ":clspv_opt_config" ] 333 configs += clspv_configs_to_append 334 configs -= clspv_configs_to_remove 335 336 deps = [ ":clspv_passes" ] 337} 338 339executable("clspv") { 340 sources = [ "src/tools/driver/main.cpp" ] 341 342 configs += [ ":clspv_common_config" ] 343 configs += clspv_configs_to_append 344 configs -= clspv_configs_to_remove 345 346 include_dirs = [ 347 "$target_gen_dir", 348 "$root_gen_dir/$clspv_llvm_dir", 349 ] 350 351 deps = [ ":clspv_core" ] 352} 353 354executable("clspv-reflection") { 355 sources = [ 356 "src/tools/reflection/ReflectionParser.cpp", 357 "src/tools/reflection/main.cpp", 358 ] 359 360 configs += [ ":clspv_common_config" ] 361 configs += clspv_configs_to_append 362 configs -= clspv_configs_to_remove 363 364 deps = [ 365 ":clspv_core", 366 ":clspv_reflection", 367 "${spirv_tools_dir}:spvtools_link", 368 "//third_party/spirv-headers/src:spv_headers", 369 ] 370 371 include_dirs = [ 372 "$spirv_tools_spirv_headers_dir/include", 373 "$target_gen_dir", 374 ] 375} 376 377group("default") { 378 deps = [ 379 ":clspv", 380 ":clspv-opt", 381 ":clspv-reflection", 382 ] 383} 384