Index: third_party/openh264/BUILD.gn |
diff --git a/third_party/openh264/BUILD.gn b/third_party/openh264/BUILD.gn |
index 4301abd65e1ad83b9156bd46b2d9b750270be0b8..dfefac587585017937c962e544e5c393a9d3ca71 100644 |
--- a/third_party/openh264/BUILD.gn |
+++ b/third_party/openh264/BUILD.gn |
@@ -4,6 +4,7 @@ |
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") { |
@@ -28,6 +29,79 @@ config("config") { |
} |
} |
+# 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. |
+# |
+# This IF statement will make the targets visible only on specific builds, |
+# which will lead to failures on other platforms if accidentally invoked. |
+if (is_win || is_linux) { |
+ yasm_assemble("openh264_common_yasm") { |
+ include_dirs = openh264_common_include_dirs |
+ assert(target_cpu == "x86" || target_cpu == "x64", |
+ "Assembly not defined for this CPU") |
+ 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" ] |
+ assert(target_cpu == "x86" || target_cpu == "x64", |
+ "Assembly not defined for this CPU") |
+ 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" ] |
+ assert(target_cpu == "x86" || target_cpu == "x64", |
+ "Assembly not defined for this CPU") |
+ 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 |
@@ -36,6 +110,10 @@ source_set("common") { |
configs += [ "//build/config/compiler:no_chromium_code" ] |
configs += [ ":config" ] |
deps = [] |
+ if ((is_win || is_linux) && (target_cpu == "x86" || target_cpu == "x64")) { |
+ defines = [ "X86_ASM" ] |
+ deps += [ ":openh264_common_yasm" ] |
+ } |
if (is_android) { |
deps += [ |
# Defines "android_get/setCpu..." functions. The original OpenH264 build |
@@ -57,6 +135,10 @@ source_set("processing") { |
deps = [ |
":common", |
] |
+ if ((is_win || is_linux) && (target_cpu == "x86" || target_cpu == "x64")) { |
+ defines = [ "X86_ASM" ] |
+ deps += [ ":openh264_processing_yasm" ] |
+ } |
} |
source_set("encoder") { |
@@ -76,4 +158,8 @@ source_set("encoder") { |
":common", |
":processing", |
] |
+ if ((is_win || is_linux) && (target_cpu == "x86" || target_cpu == "x64")) { |
+ defines = [ "X86_ASM" ] |
+ deps += [ ":openh264_encoder_yasm" ] |
+ } |
} |