1*c8dee2aaSAndroid Build Coastguard Worker# Copyright 2022 Google LLC 2*c8dee2aaSAndroid Build Coastguard Worker# 3*c8dee2aaSAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be 4*c8dee2aaSAndroid Build Coastguard Worker# found in the LICENSE file. 5*c8dee2aaSAndroid Build Coastguard Worker 6*c8dee2aaSAndroid Build Coastguard Workerimport("skcms.gni") 7*c8dee2aaSAndroid Build Coastguard Worker 8*c8dee2aaSAndroid Build Coastguard Worker# Use for CPU-specific skcms transform code that needs particular compiler flags. 9*c8dee2aaSAndroid Build Coastguard Worker# (This is patterned after `opts` in Skia's BUILD.gn.) 10*c8dee2aaSAndroid Build Coastguard Workertemplate("arch") { 11*c8dee2aaSAndroid Build Coastguard Worker if (invoker.enabled) { 12*c8dee2aaSAndroid Build Coastguard Worker source_set(target_name) { 13*c8dee2aaSAndroid Build Coastguard Worker visibility = [ ":*" ] 14*c8dee2aaSAndroid Build Coastguard Worker check_includes = false 15*c8dee2aaSAndroid Build Coastguard Worker forward_variables_from(invoker, "*") 16*c8dee2aaSAndroid Build Coastguard Worker } 17*c8dee2aaSAndroid Build Coastguard Worker } else { 18*c8dee2aaSAndroid Build Coastguard Worker # If not enabled, a phony empty target that swallows all otherwise unused variables. 19*c8dee2aaSAndroid Build Coastguard Worker source_set(target_name) { 20*c8dee2aaSAndroid Build Coastguard Worker visibility = [ ":*" ] 21*c8dee2aaSAndroid Build Coastguard Worker check_includes = false 22*c8dee2aaSAndroid Build Coastguard Worker forward_variables_from(invoker, 23*c8dee2aaSAndroid Build Coastguard Worker "*", 24*c8dee2aaSAndroid Build Coastguard Worker [ 25*c8dee2aaSAndroid Build Coastguard Worker "sources", 26*c8dee2aaSAndroid Build Coastguard Worker "cflags", 27*c8dee2aaSAndroid Build Coastguard Worker "defines", 28*c8dee2aaSAndroid Build Coastguard Worker ]) 29*c8dee2aaSAndroid Build Coastguard Worker } 30*c8dee2aaSAndroid Build Coastguard Worker } 31*c8dee2aaSAndroid Build Coastguard Worker} 32*c8dee2aaSAndroid Build Coastguard Worker 33*c8dee2aaSAndroid Build Coastguard Workerarch("skcms_TransformHsw") { 34*c8dee2aaSAndroid Build Coastguard Worker enabled = current_cpu == "x64" && target_os != "android" 35*c8dee2aaSAndroid Build Coastguard Worker sources = skcms_TransformHsw 36*c8dee2aaSAndroid Build Coastguard Worker if (is_win) { 37*c8dee2aaSAndroid Build Coastguard Worker if (is_clang) { 38*c8dee2aaSAndroid Build Coastguard Worker cflags = [ 39*c8dee2aaSAndroid Build Coastguard Worker "/clang:-mavx2", 40*c8dee2aaSAndroid Build Coastguard Worker "/clang:-mf16c", 41*c8dee2aaSAndroid Build Coastguard Worker "/clang:-ffp-contract=off", 42*c8dee2aaSAndroid Build Coastguard Worker ] 43*c8dee2aaSAndroid Build Coastguard Worker } else { 44*c8dee2aaSAndroid Build Coastguard Worker cflags = [ "/arch:AVX2" ] 45*c8dee2aaSAndroid Build Coastguard Worker } 46*c8dee2aaSAndroid Build Coastguard Worker } else { 47*c8dee2aaSAndroid Build Coastguard Worker cflags = [ 48*c8dee2aaSAndroid Build Coastguard Worker "-mavx2", 49*c8dee2aaSAndroid Build Coastguard Worker "-mf16c", 50*c8dee2aaSAndroid Build Coastguard Worker "-std=c11", 51*c8dee2aaSAndroid Build Coastguard Worker ] 52*c8dee2aaSAndroid Build Coastguard Worker } 53*c8dee2aaSAndroid Build Coastguard Worker} 54*c8dee2aaSAndroid Build Coastguard Worker 55*c8dee2aaSAndroid Build Coastguard Workerarch("skcms_TransformSkx") { 56*c8dee2aaSAndroid Build Coastguard Worker enabled = current_cpu == "x64" && target_os != "android" 57*c8dee2aaSAndroid Build Coastguard Worker sources = skcms_TransformSkx 58*c8dee2aaSAndroid Build Coastguard Worker if (is_win) { 59*c8dee2aaSAndroid Build Coastguard Worker if (is_clang) { 60*c8dee2aaSAndroid Build Coastguard Worker cflags = [ 61*c8dee2aaSAndroid Build Coastguard Worker "/clang:-mavx512f", 62*c8dee2aaSAndroid Build Coastguard Worker "/clang:-mavx512dq", 63*c8dee2aaSAndroid Build Coastguard Worker "/clang:-mavx512cd", 64*c8dee2aaSAndroid Build Coastguard Worker "/clang:-mavx512bw", 65*c8dee2aaSAndroid Build Coastguard Worker "/clang:-mavx512vl", 66*c8dee2aaSAndroid Build Coastguard Worker "/clang:-ffp-contract=off", 67*c8dee2aaSAndroid Build Coastguard Worker ] 68*c8dee2aaSAndroid Build Coastguard Worker } else { 69*c8dee2aaSAndroid Build Coastguard Worker cflags = [ "/arch:AVX512" ] 70*c8dee2aaSAndroid Build Coastguard Worker } 71*c8dee2aaSAndroid Build Coastguard Worker } else { 72*c8dee2aaSAndroid Build Coastguard Worker cflags = [ 73*c8dee2aaSAndroid Build Coastguard Worker "-mavx512f", 74*c8dee2aaSAndroid Build Coastguard Worker "-mavx512dq", 75*c8dee2aaSAndroid Build Coastguard Worker "-mavx512cd", 76*c8dee2aaSAndroid Build Coastguard Worker "-mavx512bw", 77*c8dee2aaSAndroid Build Coastguard Worker "-mavx512vl", 78*c8dee2aaSAndroid Build Coastguard Worker "-std=c11", 79*c8dee2aaSAndroid Build Coastguard Worker ] 80*c8dee2aaSAndroid Build Coastguard Worker } 81*c8dee2aaSAndroid Build Coastguard Worker} 82*c8dee2aaSAndroid Build Coastguard Worker 83*c8dee2aaSAndroid Build Coastguard Workerstatic_library("skcms") { 84*c8dee2aaSAndroid Build Coastguard Worker cflags = [] 85*c8dee2aaSAndroid Build Coastguard Worker if (!is_win || is_clang) { 86*c8dee2aaSAndroid Build Coastguard Worker cflags += [ "-std=c11" ] 87*c8dee2aaSAndroid Build Coastguard Worker } 88*c8dee2aaSAndroid Build Coastguard Worker if (target_cpu != "x64" || target_os == "android") { 89*c8dee2aaSAndroid Build Coastguard Worker defines = [ 90*c8dee2aaSAndroid Build Coastguard Worker "SKCMS_DISABLE_HSW", 91*c8dee2aaSAndroid Build Coastguard Worker "SKCMS_DISABLE_SKX", 92*c8dee2aaSAndroid Build Coastguard Worker ] 93*c8dee2aaSAndroid Build Coastguard Worker } 94*c8dee2aaSAndroid Build Coastguard Worker public = skcms_public_headers 95*c8dee2aaSAndroid Build Coastguard Worker sources = skcms_public + skcms_TransformBaseline 96*c8dee2aaSAndroid Build Coastguard Worker deps = [ 97*c8dee2aaSAndroid Build Coastguard Worker ":skcms_TransformHsw", 98*c8dee2aaSAndroid Build Coastguard Worker ":skcms_TransformSkx", 99*c8dee2aaSAndroid Build Coastguard Worker ] 100*c8dee2aaSAndroid Build Coastguard Worker} 101