From 678702573531f19ae36847a6a07257aaae623fbe Mon Sep 17 00:00:00 2001 From: Sadaf Ebrahimi Date: Fri, 25 Aug 2023 16:27:50 +0000 Subject: Move libyuv/files/ directly under libyuv Test: TreeHugger Merged-In: I773d1ae01539cc5d200768b526f10b2922567f72 Change-Id: I4ba1f1e781d7fd3ad96639dfdc08f654e45ae3d3 --- BUILD.gn | 394 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 394 insertions(+) create mode 100644 BUILD.gn (limited to 'BUILD.gn') diff --git a/BUILD.gn b/BUILD.gn new file mode 100644 index 00000000..adaae9d8 --- /dev/null +++ b/BUILD.gn @@ -0,0 +1,394 @@ +# Copyright 2014 The LibYuv 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 in the root of the source +# tree. An additional intellectual property rights grant can be found +# in the file PATENTS. All contributing project authors may +# be found in the AUTHORS file in the root of the source tree. + +import("//build/config/features.gni") +import("//testing/test.gni") +import("libyuv.gni") + +declare_args() { + # Set to false to disable building with absl flags. + libyuv_use_absl_flags = true + + # When building a shared library using a target in WebRTC or + # Chromium projects that depends on libyuv, setting this flag + # to true makes libyuv symbols visible inside that library. + libyuv_symbols_visible = false +} + +config("libyuv_config") { + include_dirs = [ "include" ] + if (is_android) { + if (target_cpu == "arm" || target_cpu == "x86" || target_cpu == "mipsel") { + ldflags = [ "-Wl,--dynamic-linker,/system/bin/linker" ] + } else { + ldflags = [ "-Wl,--dynamic-linker,/system/bin/linker64" ] + } + } + defines = [] + if (!libyuv_use_neon) { + defines += [ "LIBYUV_DISABLE_NEON" ] + } + if (libyuv_disable_rvv) { + defines += [ "LIBYUV_DISABLE_RVV" ] + } +} + +# This target is built when no specific target is specified on the command line. +group("default") { + testonly = true + deps = [ ":libyuv" ] + if (libyuv_include_tests) { + deps += [ + ":compare", + ":cpuid", + ":i444tonv12_eg", + ":libyuv_unittest", + ":psnr", + ":yuvconstants", + ":yuvconvert", + ] + } +} + +group("libyuv") { + all_dependent_configs = [ ":libyuv_config" ] + deps = [] + + if (is_win && target_cpu == "x64") { + # Compile with clang in order to get inline assembly + public_deps = [ ":libyuv_internal(//build/toolchain/win:win_clang_x64)" ] + } else { + public_deps = [ ":libyuv_internal" ] + } + + if (libyuv_use_neon) { + deps += [ ":libyuv_neon" ] + } + + if (libyuv_use_msa) { + deps += [ ":libyuv_msa" ] + } + + if (!is_ios && !libyuv_disable_jpeg) { + # Make sure that clients of libyuv link with libjpeg. This can't go in + # libyuv_internal because in Windows x64 builds that will generate a clang + # build of libjpeg, and we don't want two copies. + deps += [ "//third_party:jpeg" ] + } +} + +static_library("libyuv_internal") { + visibility = [ ":*" ] + + sources = [ + # Headers + "include/libyuv.h", + "include/libyuv/basic_types.h", + "include/libyuv/compare.h", + "include/libyuv/convert.h", + "include/libyuv/convert_argb.h", + "include/libyuv/convert_from.h", + "include/libyuv/convert_from_argb.h", + "include/libyuv/cpu_id.h", + "include/libyuv/mjpeg_decoder.h", + "include/libyuv/planar_functions.h", + "include/libyuv/rotate.h", + "include/libyuv/rotate_argb.h", + "include/libyuv/rotate_row.h", + "include/libyuv/row.h", + "include/libyuv/scale.h", + "include/libyuv/scale_argb.h", + "include/libyuv/scale_rgb.h", + "include/libyuv/scale_row.h", + "include/libyuv/scale_uv.h", + "include/libyuv/version.h", + "include/libyuv/video_common.h", + + # Source Files + "source/compare.cc", + "source/compare_common.cc", + "source/compare_gcc.cc", + "source/compare_win.cc", + "source/convert.cc", + "source/convert_argb.cc", + "source/convert_from.cc", + "source/convert_from_argb.cc", + "source/convert_jpeg.cc", + "source/convert_to_argb.cc", + "source/convert_to_i420.cc", + "source/cpu_id.cc", + "source/mjpeg_decoder.cc", + "source/mjpeg_validate.cc", + "source/planar_functions.cc", + "source/rotate.cc", + "source/rotate_any.cc", + "source/rotate_argb.cc", + "source/rotate_common.cc", + "source/rotate_gcc.cc", + "source/rotate_win.cc", + "source/row_any.cc", + "source/row_common.cc", + "source/row_gcc.cc", + "source/row_rvv.cc", + "source/row_win.cc", + "source/scale.cc", + "source/scale_any.cc", + "source/scale_argb.cc", + "source/scale_common.cc", + "source/scale_gcc.cc", + "source/scale_rgb.cc", + "source/scale_uv.cc", + "source/scale_win.cc", + "source/video_common.cc", + ] + + configs += [ ":libyuv_config" ] + defines = [] + deps = [] + + if (libyuv_symbols_visible) { + configs -= [ "//build/config/gcc:symbol_visibility_hidden" ] + configs += [ "//build/config/gcc:symbol_visibility_default" ] + } + + if ((!is_ios || use_blink) && !libyuv_disable_jpeg) { + defines += [ "HAVE_JPEG" ] + + # Needed to pull in libjpeg headers. Can't add //third_party:jpeg to deps + # because in Windows x64 build it will get compiled with clang. + deps += [ "//third_party:jpeg_includes" ] + } + + # Always enable optimization for Release and NaCl builds (to workaround + # crbug.com/538243). + if (!is_debug || is_nacl) { + configs -= [ "//build/config/compiler:default_optimization" ] + + # Enable optimize for speed (-O2) over size (-Os). + configs += [ "//build/config/compiler:optimize_max" ] + } + + # To enable AVX2 or other cpu optimization, pass flag here + if (!is_win) { + cflags = [ + # "-mpopcnt", + # "-mavx2", + # "-mfma", + "-ffp-contract=fast", # Enable fma vectorization for NEON. + ] + } +} + +if (libyuv_use_neon) { + static_library("libyuv_neon") { + sources = [ + # ARM Source Files + "source/compare_neon.cc", + "source/compare_neon64.cc", + "source/rotate_neon.cc", + "source/rotate_neon64.cc", + "source/row_neon.cc", + "source/row_neon64.cc", + "source/scale_neon.cc", + "source/scale_neon64.cc", + ] + + deps = [ ":libyuv_internal" ] + + public_configs = [ ":libyuv_config" ] + + # Always enable optimization for Release and NaCl builds (to workaround + # crbug.com/538243). + if (!is_debug) { + configs -= [ "//build/config/compiler:default_optimization" ] + + # Enable optimize for speed (-O2) over size (-Os). + # TODO(fbarchard): Consider optimize_speed which is O3. + configs += [ "//build/config/compiler:optimize_max" ] + } + + if (current_cpu != "arm64") { + configs -= [ "//build/config/compiler:compiler_arm_fpu" ] + cflags = [ "-mfpu=neon" ] + } + } +} + +if (libyuv_use_msa) { + static_library("libyuv_msa") { + sources = [ + # MSA Source Files + "source/compare_msa.cc", + "source/rotate_msa.cc", + "source/row_msa.cc", + "source/scale_msa.cc", + ] + + deps = [ ":libyuv_internal" ] + + public_configs = [ ":libyuv_config" ] + } +} + +if (libyuv_include_tests) { + config("libyuv_unittest_warnings_config") { + if (!is_win) { + cflags = [ + # TODO(fbarchard): Fix sign and unused variable warnings. + "-Wno-sign-compare", + "-Wno-unused-variable", + ] + } + if (is_win) { + cflags = [ + "/wd4245", # signed/unsigned mismatch + "/wd4189", # local variable is initialized but not referenced + ] + } + } + config("libyuv_unittest_config") { + defines = [ "GTEST_RELATIVE_PATH" ] + } + + test("libyuv_unittest") { + testonly = true + + sources = [ + "unit_test/basictypes_test.cc", + "unit_test/color_test.cc", + "unit_test/compare_test.cc", + "unit_test/convert_test.cc", + "unit_test/cpu_test.cc", + "unit_test/cpu_thread_test.cc", + "unit_test/math_test.cc", + "unit_test/planar_test.cc", + "unit_test/rotate_argb_test.cc", + "unit_test/rotate_test.cc", + "unit_test/scale_argb_test.cc", + "unit_test/scale_rgb_test.cc", + "unit_test/scale_test.cc", + "unit_test/scale_uv_test.cc", + "unit_test/unit_test.cc", + "unit_test/unit_test.h", + "unit_test/video_common_test.cc", + ] + + deps = [ + ":libyuv", + "//testing/gtest", + ] + + defines = [] + if (libyuv_use_absl_flags) { + defines += [ "LIBYUV_USE_ABSL_FLAGS" ] + deps += [ + "//third_party/abseil-cpp/absl/flags:flag", + "//third_party/abseil-cpp/absl/flags:parse", + ] + } + + configs += [ ":libyuv_unittest_warnings_config" ] + + public_deps = [ "//testing/gtest" ] + public_configs = [ ":libyuv_unittest_config" ] + + if (is_linux || is_chromeos) { + cflags = [ "-fexceptions" ] + } + if (is_ios) { + configs -= [ "//build/config/compiler:default_symbols" ] + configs += [ "//build/config/compiler:symbols" ] + cflags = [ "-Wno-sometimes-uninitialized" ] + } + if (!is_ios && !libyuv_disable_jpeg) { + defines += [ "HAVE_JPEG" ] + } + if (is_android) { + deps += [ "//testing/android/native_test:native_test_native_code" ] + } + + # TODO(YangZhang): These lines can be removed when high accuracy + # YUV to RGB to Neon is ported. + if ((target_cpu == "armv7" || target_cpu == "armv7s" || + (target_cpu == "arm" && arm_version >= 7) || target_cpu == "arm64") && + (arm_use_neon || arm_optionally_use_neon)) { + defines += [ "LIBYUV_NEON" ] + } + + defines += [ + # Enable the following 3 macros to turn off assembly for specified CPU. + # "LIBYUV_DISABLE_X86", + # "LIBYUV_DISABLE_NEON", + # Enable the following macro to build libyuv as a shared library (dll). + # "LIBYUV_USING_SHARED_LIBRARY" + ] + } + + executable("compare") { + sources = [ + # sources + "util/compare.cc", + ] + deps = [ ":libyuv" ] + if (is_linux || is_chromeos) { + cflags = [ "-fexceptions" ] + } + } + + executable("yuvconvert") { + sources = [ + # sources + "util/yuvconvert.cc", + ] + deps = [ ":libyuv" ] + if (is_linux || is_chromeos) { + cflags = [ "-fexceptions" ] + } + } + + executable("yuvconstants") { + sources = [ + # sources + "util/yuvconstants.c", + ] + deps = [ ":libyuv" ] + if (is_linux || is_chromeos) { + cflags = [ "-fexceptions" ] + } + } + + executable("psnr") { + sources = [ + # sources + "util/psnr.cc", + "util/psnr_main.cc", + "util/ssim.cc", + ] + deps = [ ":libyuv" ] + + if (!is_ios && !libyuv_disable_jpeg) { + defines = [ "HAVE_JPEG" ] + } + } + + executable("i444tonv12_eg") { + sources = [ + # sources + "util/i444tonv12_eg.cc", + ] + deps = [ ":libyuv" ] + } + + executable("cpuid") { + sources = [ + # sources + "util/cpuid.c", + ] + deps = [ ":libyuv" ] + } +} -- cgit v1.2.3