# Copyright 2015 The Chromium Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. import("//build/config/sanitizers/sanitizers.gni") import("//third_party/openh264/openh264_args.gni") import("//third_party/openh264/openh264_sources.gni") import("//third_party/yasm/yasm_assemble.gni") # Config shared by all openh264 targets. config("config") { cflags = [] defines = [] # GCC and clang flags. MSVS (is_win && !is_clang) does not use cflags. if (!is_win || is_clang) { cflags += [ "-Wno-format", "-Wno-header-hygiene", "-Wno-unused-function", "-Wno-unused-value", ] } # Platform-specific defines. if (is_android) { # Android NDK is necessary for its cpufeatures and this define is what # OpenH264 code uses to check if it should be used. defines += [ "ANDROID_NDK" ] } } # YASM assembly is only checked to be working on Windows and Linux. # Mac is known to fail certain tests when building, but actual assembly # is believed to work. # MSAN builds are flaky with assembler. crbug.com/685168 use_assembler = (is_win || is_linux) && (target_cpu == "x86" || target_cpu == "x64") && !is_msan # This IF statement will make the targets visible only on specific builds, # which will lead to failures on other platforms if accidentally invoked. if (use_assembler) { yasm_assemble("openh264_common_yasm") { include_dirs = openh264_common_include_dirs sources = openh264_common_sources_asm_x86 if (target_cpu == "x86") { defines = [ "X86_32" ] } else { # x64 if (is_mac) { defines = [ "PREFIX", "UNIX64", ] } else if (is_win) { defines = [ "WIN64" ] } else if (is_linux) { defines = [ "UNIX64" ] } } } yasm_assemble("openh264_processing_yasm") { include_dirs = openh264_processing_include_dirs include_dirs += [ "./src/codec/common/x86" ] sources = openh264_processing_sources_asm_x86 if (target_cpu == "x86") { defines = [ "X86_32" ] } else { # x64 if (is_mac) { defines = [ "PREFIX", "UNIX64", ] } else if (is_win) { defines = [ "WIN64" ] } else if (is_linux) { defines = [ "UNIX64" ] } } } yasm_assemble("openh264_encoder_yasm") { include_dirs = openh264_encoder_include_dirs include_dirs += [ "./src/codec/common/x86" ] sources = openh264_encoder_sources_asm_x86 if (target_cpu == "x86") { defines = [ "X86_32" ] } else { # x64 if (is_mac) { defines = [ "PREFIX", "UNIX64", ] } else if (is_win) { defines = [ "WIN64" ] } else if (is_linux) { defines = [ "UNIX64" ] } } } } # if (is_win || is_linux) source_set("common") { sources = openh264_common_sources include_dirs = openh264_common_include_dirs configs -= [ "//build/config/compiler:chromium_code" ] configs += [ "//build/config/compiler:no_chromium_code" ] configs += [ ":config" ] deps = [] if (use_assembler) { defines = [ "X86_ASM" ] deps += [ ":openh264_common_yasm" ] } if (is_android) { deps += [ # Defines "android_get/setCpu..." functions. The original OpenH264 build # files replaces these using macros for "wels_..." versions of the same # functions. We do not have access to these and use the # ones instead. "//third_party/android_tools:cpu_features", ] } } source_set("processing") { sources = openh264_processing_sources include_dirs = openh264_processing_include_dirs configs -= [ "//build/config/compiler:chromium_code" ] configs += [ "//build/config/compiler:no_chromium_code" ] configs += [ ":config" ] deps = [ ":common", ] if (use_assembler) { defines = [ "X86_ASM" ] deps += [ ":openh264_processing_yasm" ] } } source_set("encoder") { sources = openh264_encoder_sources include_dirs = openh264_encoder_include_dirs configs -= [ "//build/config/compiler:chromium_code" ] configs += [ "//build/config/compiler:no_chromium_code" ] configs += [ ":config" ] # TODO: Remove after fixing always-true condition # third_party/openh264/src/codec/encoder/core/src/encoder_ext.cpp:142. if (is_clang) { configs -= [ "//build/config/clang:extra_warnings" ] } deps = [ ":common", ":processing", ] if (use_assembler) { defines = [ "X86_ASM" ] deps += [ ":openh264_encoder_yasm" ] } }