1*8975f5c5SAndroid Build Coastguard Worker# Copyright 2019 The ANGLE Project Authors. All rights reserved. 2*8975f5c5SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be 3*8975f5c5SAndroid Build Coastguard Worker# found in the LICENSE file. 4*8975f5c5SAndroid Build Coastguard Worker# 5*8975f5c5SAndroid Build Coastguard Worker# This file houses the build configuration for the ANGLE Metal back-end. 6*8975f5c5SAndroid Build Coastguard Worker 7*8975f5c5SAndroid Build Coastguard Workerimport("../../../../gni/angle.gni") 8*8975f5c5SAndroid Build Coastguard Workerimport("metal_backend.gni") 9*8975f5c5SAndroid Build Coastguard Worker 10*8975f5c5SAndroid Build Coastguard Workerif (metal_internal_shader_compilation_supported) { 11*8975f5c5SAndroid Build Coastguard Worker import("//build/config/mac/mac_sdk.gni") 12*8975f5c5SAndroid Build Coastguard Worker} 13*8975f5c5SAndroid Build Coastguard Worker 14*8975f5c5SAndroid Build Coastguard Workerassert(is_mac || is_ios) 15*8975f5c5SAndroid Build Coastguard Workerassert(angle_enable_metal) 16*8975f5c5SAndroid Build Coastguard Worker 17*8975f5c5SAndroid Build Coastguard Workerconfig("angle_metal_backend_config") { 18*8975f5c5SAndroid Build Coastguard Worker defines = [ "ANGLE_ENABLE_METAL" ] 19*8975f5c5SAndroid Build Coastguard Worker ldflags = [ 20*8975f5c5SAndroid Build Coastguard Worker "-weak_framework", 21*8975f5c5SAndroid Build Coastguard Worker "Metal", 22*8975f5c5SAndroid Build Coastguard Worker ] 23*8975f5c5SAndroid Build Coastguard Worker include_dirs = [ "$root_gen_dir/angle" ] 24*8975f5c5SAndroid Build Coastguard Worker} 25*8975f5c5SAndroid Build Coastguard Worker 26*8975f5c5SAndroid Build Coastguard Workerif (metal_internal_shader_compilation_supported) { 27*8975f5c5SAndroid Build Coastguard Worker _metal_internal_shaders_air_file = 28*8975f5c5SAndroid Build Coastguard Worker "$root_gen_dir/angle/mtl_internal_shaders_autogen.air" 29*8975f5c5SAndroid Build Coastguard Worker 30*8975f5c5SAndroid Build Coastguard Worker action("angle_metal_internal_shaders_to_air") { 31*8975f5c5SAndroid Build Coastguard Worker script = "shaders/metal_wrapper.py" 32*8975f5c5SAndroid Build Coastguard Worker 33*8975f5c5SAndroid Build Coastguard Worker outputs = [ _metal_internal_shaders_air_file ] 34*8975f5c5SAndroid Build Coastguard Worker 35*8975f5c5SAndroid Build Coastguard Worker _metal_internal_shaders_metal_source = 36*8975f5c5SAndroid Build Coastguard Worker "shaders/mtl_internal_shaders_autogen.metal" 37*8975f5c5SAndroid Build Coastguard Worker sources = [ _metal_internal_shaders_metal_source ] 38*8975f5c5SAndroid Build Coastguard Worker 39*8975f5c5SAndroid Build Coastguard Worker args = [ 40*8975f5c5SAndroid Build Coastguard Worker mac_bin_path + "metal", 41*8975f5c5SAndroid Build Coastguard Worker "-c", 42*8975f5c5SAndroid Build Coastguard Worker rebase_path(_metal_internal_shaders_metal_source, root_build_dir), 43*8975f5c5SAndroid Build Coastguard Worker "-o", 44*8975f5c5SAndroid Build Coastguard Worker rebase_path(_metal_internal_shaders_air_file, root_build_dir), 45*8975f5c5SAndroid Build Coastguard Worker ] 46*8975f5c5SAndroid Build Coastguard Worker 47*8975f5c5SAndroid Build Coastguard Worker if (is_mac) { 48*8975f5c5SAndroid Build Coastguard Worker args += [ 49*8975f5c5SAndroid Build Coastguard Worker "--std=macos-metal2.1", 50*8975f5c5SAndroid Build Coastguard Worker "-mmacosx-version-min=10.14", 51*8975f5c5SAndroid Build Coastguard Worker ] 52*8975f5c5SAndroid Build Coastguard Worker } else if (is_ios) { 53*8975f5c5SAndroid Build Coastguard Worker args += [ 54*8975f5c5SAndroid Build Coastguard Worker "--std=ios-metal2.1", 55*8975f5c5SAndroid Build Coastguard Worker "-mios-version-min=12", 56*8975f5c5SAndroid Build Coastguard Worker ] 57*8975f5c5SAndroid Build Coastguard Worker } 58*8975f5c5SAndroid Build Coastguard Worker } 59*8975f5c5SAndroid Build Coastguard Worker 60*8975f5c5SAndroid Build Coastguard Worker _metal_internal_shaders_metallib_file = 61*8975f5c5SAndroid Build Coastguard Worker "$root_gen_dir/angle/mtl_internal_shaders_autogen.metallib" 62*8975f5c5SAndroid Build Coastguard Worker 63*8975f5c5SAndroid Build Coastguard Worker action("angle_metal_internal_shaders_to_mtllib") { 64*8975f5c5SAndroid Build Coastguard Worker script = "shaders/metal_wrapper.py" 65*8975f5c5SAndroid Build Coastguard Worker 66*8975f5c5SAndroid Build Coastguard Worker outputs = [ _metal_internal_shaders_metallib_file ] 67*8975f5c5SAndroid Build Coastguard Worker 68*8975f5c5SAndroid Build Coastguard Worker sources = [ _metal_internal_shaders_air_file ] 69*8975f5c5SAndroid Build Coastguard Worker 70*8975f5c5SAndroid Build Coastguard Worker deps = [ ":angle_metal_internal_shaders_to_air" ] 71*8975f5c5SAndroid Build Coastguard Worker 72*8975f5c5SAndroid Build Coastguard Worker args = [ 73*8975f5c5SAndroid Build Coastguard Worker mac_bin_path + "metallib", 74*8975f5c5SAndroid Build Coastguard Worker rebase_path(_metal_internal_shaders_air_file, root_build_dir), 75*8975f5c5SAndroid Build Coastguard Worker "-o", 76*8975f5c5SAndroid Build Coastguard Worker rebase_path(_metal_internal_shaders_metallib_file, root_build_dir), 77*8975f5c5SAndroid Build Coastguard Worker ] 78*8975f5c5SAndroid Build Coastguard Worker } 79*8975f5c5SAndroid Build Coastguard Worker 80*8975f5c5SAndroid Build Coastguard Worker config("angle_metal_internal_shaders_config") { 81*8975f5c5SAndroid Build Coastguard Worker include_dirs = [ "$root_gen_dir/angle" ] 82*8975f5c5SAndroid Build Coastguard Worker } 83*8975f5c5SAndroid Build Coastguard Worker 84*8975f5c5SAndroid Build Coastguard Worker action("angle_metal_internal_shaders") { 85*8975f5c5SAndroid Build Coastguard Worker script = "shaders/embed_in_header.py" 86*8975f5c5SAndroid Build Coastguard Worker 87*8975f5c5SAndroid Build Coastguard Worker outputs = [ metal_internal_shaders_header ] 88*8975f5c5SAndroid Build Coastguard Worker 89*8975f5c5SAndroid Build Coastguard Worker sources = [ _metal_internal_shaders_metallib_file ] 90*8975f5c5SAndroid Build Coastguard Worker 91*8975f5c5SAndroid Build Coastguard Worker deps = [ ":angle_metal_internal_shaders_to_mtllib" ] 92*8975f5c5SAndroid Build Coastguard Worker 93*8975f5c5SAndroid Build Coastguard Worker args = [ 94*8975f5c5SAndroid Build Coastguard Worker "--source", 95*8975f5c5SAndroid Build Coastguard Worker rebase_path(_metal_internal_shaders_metallib_file, root_build_dir), 96*8975f5c5SAndroid Build Coastguard Worker "--variable-name", 97*8975f5c5SAndroid Build Coastguard Worker "gDefaultMetallib", 98*8975f5c5SAndroid Build Coastguard Worker "--header", 99*8975f5c5SAndroid Build Coastguard Worker rebase_path(metal_internal_shaders_header, root_build_dir), 100*8975f5c5SAndroid Build Coastguard Worker ] 101*8975f5c5SAndroid Build Coastguard Worker 102*8975f5c5SAndroid Build Coastguard Worker public_configs = [ ":angle_metal_internal_shaders_config" ] 103*8975f5c5SAndroid Build Coastguard Worker } 104*8975f5c5SAndroid Build Coastguard Worker} 105*8975f5c5SAndroid Build Coastguard Worker 106*8975f5c5SAndroid Build Coastguard Workerangle_source_set("angle_metal_backend") { 107*8975f5c5SAndroid Build Coastguard Worker public_configs = [ ":angle_metal_backend_config" ] 108*8975f5c5SAndroid Build Coastguard Worker 109*8975f5c5SAndroid Build Coastguard Worker sources = metal_backend_sources 110*8975f5c5SAndroid Build Coastguard Worker 111*8975f5c5SAndroid Build Coastguard Worker cflags = [] 112*8975f5c5SAndroid Build Coastguard Worker cflags_cc = [] 113*8975f5c5SAndroid Build Coastguard Worker cflags_objc = [] 114*8975f5c5SAndroid Build Coastguard Worker cflags_objcc = [] 115*8975f5c5SAndroid Build Coastguard Worker ldflags = [] 116*8975f5c5SAndroid Build Coastguard Worker libs = [] 117*8975f5c5SAndroid Build Coastguard Worker defines = [] 118*8975f5c5SAndroid Build Coastguard Worker 119*8975f5c5SAndroid Build Coastguard Worker public_deps = [ 120*8975f5c5SAndroid Build Coastguard Worker "${angle_root}:angle_common", 121*8975f5c5SAndroid Build Coastguard Worker "${angle_root}:angle_gpu_info_util", 122*8975f5c5SAndroid Build Coastguard Worker "${angle_root}:angle_image_util", 123*8975f5c5SAndroid Build Coastguard Worker "${angle_root}:libANGLE_headers", 124*8975f5c5SAndroid Build Coastguard Worker "${angle_root}:translator", 125*8975f5c5SAndroid Build Coastguard Worker ] 126*8975f5c5SAndroid Build Coastguard Worker 127*8975f5c5SAndroid Build Coastguard Worker if (metal_internal_shader_compilation_supported) { 128*8975f5c5SAndroid Build Coastguard Worker public_deps += [ ":angle_metal_internal_shaders" ] 129*8975f5c5SAndroid Build Coastguard Worker defines += [ "ANGLE_METAL_HAS_PREBUILT_INTERNAL_SHADERS" ] 130*8975f5c5SAndroid Build Coastguard Worker } 131*8975f5c5SAndroid Build Coastguard Worker 132*8975f5c5SAndroid Build Coastguard Worker objc_flags = [ 133*8975f5c5SAndroid Build Coastguard Worker "-Wno-nullability-completeness", 134*8975f5c5SAndroid Build Coastguard Worker "-Wno-unguarded-availability", 135*8975f5c5SAndroid Build Coastguard Worker "-fno-objc-arc", 136*8975f5c5SAndroid Build Coastguard Worker ] 137*8975f5c5SAndroid Build Coastguard Worker cflags_objc += objc_flags 138*8975f5c5SAndroid Build Coastguard Worker cflags_objcc += objc_flags 139*8975f5c5SAndroid Build Coastguard Worker 140*8975f5c5SAndroid Build Coastguard Worker if (is_apple) { 141*8975f5c5SAndroid Build Coastguard Worker frameworks = [ 142*8975f5c5SAndroid Build Coastguard Worker "IOSurface.framework", 143*8975f5c5SAndroid Build Coastguard Worker "QuartzCore.framework", 144*8975f5c5SAndroid Build Coastguard Worker ] 145*8975f5c5SAndroid Build Coastguard Worker if (is_mac) { 146*8975f5c5SAndroid Build Coastguard Worker frameworks += [ "Cocoa.framework" ] 147*8975f5c5SAndroid Build Coastguard Worker } 148*8975f5c5SAndroid Build Coastguard Worker } 149*8975f5c5SAndroid Build Coastguard Worker} 150