# Copyright 2019 The ANGLE Project Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. # # This file houses the build configuration for the ANGLE Metal back-end. import("../../../../gni/angle.gni") import("metal_backend.gni") if (metal_internal_shader_compilation_supported) { import("//build/config/mac/mac_sdk.gni") } assert(is_mac || is_ios) assert(angle_enable_metal) config("angle_metal_backend_config") { defines = [ "ANGLE_ENABLE_METAL" ] ldflags = [ "-weak_framework", "Metal", ] include_dirs = [ "$root_gen_dir/angle" ] } if (metal_internal_shader_compilation_supported) { _metal_internal_shaders_air_file = "$root_gen_dir/angle/mtl_internal_shaders_autogen.air" action("angle_metal_internal_shaders_to_air") { script = "shaders/metal_wrapper.py" outputs = [ _metal_internal_shaders_air_file ] _metal_internal_shaders_metal_source = "shaders/mtl_internal_shaders_autogen.metal" sources = [ _metal_internal_shaders_metal_source ] args = [ mac_bin_path + "metal", "-c", rebase_path(_metal_internal_shaders_metal_source, root_build_dir), "-o", rebase_path(_metal_internal_shaders_air_file, root_build_dir), ] if (is_mac) { args += [ "--std=macos-metal2.1", "-mmacosx-version-min=10.14", ] } else if (is_ios) { args += [ "--std=ios-metal2.1", "-mios-version-min=12", ] } } _metal_internal_shaders_metallib_file = "$root_gen_dir/angle/mtl_internal_shaders_autogen.metallib" action("angle_metal_internal_shaders_to_mtllib") { script = "shaders/metal_wrapper.py" outputs = [ _metal_internal_shaders_metallib_file ] sources = [ _metal_internal_shaders_air_file ] deps = [ ":angle_metal_internal_shaders_to_air" ] args = [ mac_bin_path + "metallib", rebase_path(_metal_internal_shaders_air_file, root_build_dir), "-o", rebase_path(_metal_internal_shaders_metallib_file, root_build_dir), ] } config("angle_metal_internal_shaders_config") { include_dirs = [ "$root_gen_dir/angle" ] } action("angle_metal_internal_shaders") { script = "shaders/embed_in_header.py" outputs = [ metal_internal_shaders_header ] sources = [ _metal_internal_shaders_metallib_file ] deps = [ ":angle_metal_internal_shaders_to_mtllib" ] args = [ "--source", rebase_path(_metal_internal_shaders_metallib_file, root_build_dir), "--variable-name", "gDefaultMetallib", "--header", rebase_path(metal_internal_shaders_header, root_build_dir), ] public_configs = [ ":angle_metal_internal_shaders_config" ] } } angle_source_set("angle_metal_backend") { public_configs = [ ":angle_metal_backend_config" ] sources = metal_backend_sources cflags = [] cflags_cc = [] cflags_objc = [] cflags_objcc = [] ldflags = [] libs = [] defines = [] public_deps = [ "${angle_root}:angle_common", "${angle_root}:angle_gpu_info_util", "${angle_root}:angle_image_util", "${angle_root}:libANGLE_headers", "${angle_root}:translator", ] if (metal_internal_shader_compilation_supported) { public_deps += [ ":angle_metal_internal_shaders" ] defines += [ "ANGLE_METAL_HAS_PREBUILT_INTERNAL_SHADERS" ] } objc_flags = [ "-Wno-nullability-completeness", "-Wno-unguarded-availability", "-fno-objc-arc", ] cflags_objc += objc_flags cflags_objcc += objc_flags if (is_apple) { frameworks = [ "IOSurface.framework", "QuartzCore.framework", ] if (is_mac) { frameworks += [ "Cocoa.framework" ] } } }