| # Copyright 2019 The ANGLE 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. |
| |
| import("//build_overrides/angle.gni") |
| |
| declare_args() { |
| is_ggp = false |
| |
| # Extract native libs in ANGLE apk. Useful for flamegraph generation. |
| angle_extract_native_libs = false |
| } |
| |
| if (angle_has_build) { |
| import("//build/config/dcheck_always_on.gni") |
| import("//build/config/sanitizers/sanitizers.gni") |
| import("//build/config/ui.gni") # import the use_x11 variable |
| import("//build_overrides/build.gni") |
| import("//testing/test.gni") |
| if (is_android) { |
| import("//build/config/android/config.gni") |
| } |
| |
| if (is_win) { |
| import("//build/config/win/visual_studio_version.gni") |
| } |
| |
| angle_use_x11 = use_x11 && !is_ggp |
| } else { |
| declare_args() { |
| is_ubsan = false |
| is_tsan = false |
| is_asan = false |
| build_with_chromium = false |
| dcheck_always_on = false |
| angle_use_x11 = is_linux && !is_ggp |
| use_ozone = false |
| use_fuzzing_engine = false |
| } |
| } |
| |
| if (build_with_chromium) { |
| import("//ui/ozone/ozone.gni") |
| } else { |
| declare_args() { |
| ozone_platform_gbm = false |
| } |
| } |
| |
| # Subdirectory to place data files (e.g. layer JSON files). |
| angle_data_dir = "angledata" |
| |
| declare_args() { |
| if (current_cpu == "arm64" || current_cpu == "x64" || |
| current_cpu == "mips64el" || current_cpu == "s390x" || |
| current_cpu == "ppc64") { |
| angle_64bit_current_cpu = true |
| } else if (current_cpu == "arm" || current_cpu == "x86" || |
| current_cpu == "mipsel" || current_cpu == "s390" || |
| current_cpu == "ppc") { |
| angle_64bit_current_cpu = false |
| } else { |
| assert(false, "Unknown current CPU: $current_cpu") |
| } |
| } |
| |
| declare_args() { |
| if (!is_android) { |
| ndk_api_level_at_least_26 = false |
| } else { |
| ndk_api_level_at_least_26 = |
| (!angle_64bit_current_cpu && android32_ndk_api_level >= 26) || |
| (angle_64bit_current_cpu && android64_ndk_api_level >= 26) |
| } |
| |
| # Vulkan loader is statically linked on Mac. http://anglebug.com/4477 |
| angle_shared_libvulkan = !is_mac |
| |
| # There's no "is_winuwp" helper in BUILDCONFIG.gn, so we define one ourselves |
| angle_is_winuwp = is_win && current_os == "winuwp" |
| |
| # Default to using "_angle" suffix on Android |
| if (is_android) { |
| angle_libs_suffix = "_angle" |
| } else { |
| angle_libs_suffix = "" |
| } |
| |
| # Currently Windows on Arm doesn't support OpenGL or Vulkan. |
| is_win_arm64 = is_win && target_cpu == "arm64" |
| } |
| |
| declare_args() { |
| angle_enable_d3d9 = is_win && !angle_is_winuwp |
| angle_enable_d3d11 = is_win |
| angle_enable_gl = |
| (ozone_platform_gbm || !is_linux || (angle_use_x11 && !is_chromeos)) && |
| !is_fuchsia && !angle_is_winuwp && !is_ggp && !is_win_arm64 |
| |
| # ANGLE Vulkan backend on Android requires API level 26, i.e. Oreo, due to |
| # Vulkan Validation Layers compatibility issues, see http://crrev/c/1405714. |
| # Otherwise, API level 24 would have been enough. |
| angle_enable_vulkan = |
| angle_has_build && ((is_win && !angle_is_winuwp) || |
| (is_linux && angle_use_x11 && !is_chromeos) || |
| (is_android && ndk_api_level_at_least_26) || |
| is_fuchsia || is_ggp || is_mac) |
| angle_enable_null = true |
| angle_enable_essl = true |
| angle_enable_glsl = true |
| |
| # http://anglebug.com/2634 |
| angle_enable_metal = is_mac |
| } |
| |
| declare_args() { |
| # Currently SwiftShader's Vulkan front-end doesn't build on Android. |
| # SwiftShader is not needed on Fuchsia because Vulkan is supported on all |
| # devices that run Fuchsia. |
| angle_enable_swiftshader = |
| angle_enable_vulkan && !is_android && !is_fuchsia && !is_ggp |
| |
| angle_enable_gl_null = angle_enable_gl |
| angle_enable_hlsl = angle_enable_d3d9 || angle_enable_d3d11 |
| angle_enable_trace = false |
| |
| # Disable the layers in ubsan builds because of really slow builds. |
| # TODO(anglebug.com/4082) enable validation layers on mac for swiftshader |
| angle_enable_vulkan_validation_layers = |
| angle_enable_vulkan && !is_ubsan && !is_tsan && !is_asan && |
| (is_debug || dcheck_always_on) && !is_mac |
| |
| # Disable overlay by default |
| angle_enable_overlay = false |
| } |
| |
| angle_common_configs = [ |
| angle_root + ":angle_release_asserts_config", |
| angle_root + ":better_linux_stack_traces", |
| angle_root + ":constructor_and_destructor_warnings", |
| angle_root + ":extra_warnings", |
| angle_root + ":internal_config", |
| ] |
| |
| angle_remove_configs = [] |
| |
| if (angle_has_build) { |
| angle_remove_configs += [ "//build/config/compiler:default_include_dirs" ] |
| } |
| angle_better_stack_traces = |
| (is_debug || dcheck_always_on) && is_linux && !is_asan && !is_cfi |
| |
| if (angle_has_build && is_clang) { |
| angle_remove_configs += [ "//build/config/clang:find_bad_constructs" ] |
| |
| # Disabled to enable better stack traces. |
| if (angle_better_stack_traces) { |
| # This line causes in-class-inline-functions in glslang to be weak symbols. The KHR dEQP tests |
| # link against glslang as well as libGLESv2.so, resulting in angle_deqp_khr_gles*_tests to link |
| # those weak symbols. Due to glslang's usage of a global variable in InitializeDll.cpp, a bug |
| # is created where ANGLE sometimes calls into its own copy of glslang and sometimes the KHR |
| # dEQP's version, with the two copies of the global variable being inconsistent. |
| # Commented out until the underlying issue is resolved. http://anglebug.com/4123 |
| # angle_remove_configs += [ "//build/config/gcc:symbol_visibility_hidden" ] |
| } |
| } |
| |
| set_defaults("angle_executable") { |
| configs = angle_common_configs |
| public_configs = [] |
| suppressed_configs = angle_remove_configs |
| } |
| |
| set_defaults("angle_shared_library") { |
| configs = angle_common_configs |
| public_configs = [] |
| suppressed_configs = angle_remove_configs |
| } |
| |
| set_defaults("angle_source_set") { |
| configs = angle_common_configs |
| public_configs = [] |
| suppressed_configs = angle_remove_configs |
| } |
| |
| set_defaults("angle_static_library") { |
| configs = angle_common_configs |
| public_configs = [] |
| suppressed_configs = angle_remove_configs |
| } |
| |
| set_defaults("angle_test") { |
| configs = angle_common_configs |
| public_configs = [] |
| public_deps = [] |
| sources = [] |
| data = [] |
| defines = [] |
| main = "" |
| suppressed_configs = angle_remove_configs |
| |
| # By default use the Chromium harness in Chromium. Can be overriden in a target. |
| standalone_harness = !build_with_chromium |
| |
| if (!standalone_harness) { |
| suppressed_configs -= [ "//build/config/compiler:default_include_dirs" ] |
| } |
| |
| if (is_android) { |
| if (build_with_chromium) { |
| use_native_activity = true |
| } else { |
| use_raw_android_executable = true |
| } |
| } |
| } |
| |
| template("angle_executable") { |
| executable(target_name) { |
| forward_variables_from(invoker, |
| "*", |
| [ |
| "configs", |
| "suppressed_configs", |
| "visibility", |
| ]) |
| |
| # Needed because visibility is global. |
| forward_variables_from(invoker, [ "visibility" ]) |
| |
| configs += invoker.configs |
| configs -= invoker.suppressed_configs |
| } |
| } |
| |
| template("angle_shared_library") { |
| shared_library(target_name) { |
| forward_variables_from(invoker, |
| "*", |
| [ |
| "configs", |
| "suppressed_configs", |
| "visibility", |
| ]) |
| |
| # Needed because visibility is global. |
| forward_variables_from(invoker, [ "visibility" ]) |
| |
| configs += invoker.configs |
| configs -= invoker.suppressed_configs |
| |
| public_configs += [ angle_root + ":shared_library_public_config" ] |
| |
| if (is_android) { |
| configs += [ angle_root + ":build_id_config" ] |
| configs -= [ "//build/config/android:hide_all_but_jni_onload" ] |
| } |
| } |
| } |
| |
| template("angle_source_set") { |
| source_set(target_name) { |
| forward_variables_from(invoker, |
| "*", |
| [ |
| "configs", |
| "suppressed_configs", |
| "visibility", |
| ]) |
| |
| # Needed because visibility is global. |
| forward_variables_from(invoker, [ "visibility" ]) |
| |
| configs += invoker.configs |
| configs -= invoker.suppressed_configs |
| } |
| } |
| |
| template("angle_static_library") { |
| static_library(target_name) { |
| forward_variables_from(invoker, |
| "*", |
| [ |
| "configs", |
| "suppressed_configs", |
| "visibility", |
| ]) |
| |
| # Needed because visibility is global. |
| forward_variables_from(invoker, [ "visibility" ]) |
| |
| configs += invoker.configs |
| configs -= invoker.suppressed_configs |
| } |
| } |
| |
| template("angle_test") { |
| test(target_name) { |
| forward_variables_from(invoker, |
| "*", |
| [ |
| "configs", |
| "suppressed_configs", |
| "visibility", |
| ]) |
| |
| # Needed because visibility is global. |
| forward_variables_from(invoker, [ "visibility" ]) |
| |
| configs += invoker.configs |
| configs -= invoker.suppressed_configs + [ |
| "$angle_root:constructor_and_destructor_warnings", |
| "$angle_root:extra_warnings", |
| ] |
| |
| if (is_linux && !is_component_build) { |
| # Set rpath to find shared libs in a non-component build. |
| configs += [ "//build/config/gcc:rpath_for_built_shared_libraries" ] |
| } |
| |
| if (is_android) { |
| configs += [ "$angle_root:build_id_config" ] |
| } |
| |
| deps += [ |
| "$angle_root:angle_common", |
| "$angle_root:includes", |
| "$angle_root/third_party/rapidjson:rapidjson", |
| "$angle_root/util:angle_test_utils", |
| "//testing/gmock", |
| "//testing/gtest", |
| "//third_party/googletest:gmock", |
| "//third_party/googletest:gtest", |
| ] |
| |
| sources += [ |
| "$angle_root/src/tests/test_utils/runner/TestSuite.cpp", |
| "$angle_root/src/tests/test_utils/runner/TestSuite.h", |
| ] |
| |
| # To use the Chromium test infrastructure we must currently use the //base test launcher. |
| # Eventually we could switch to using standalone testing. See http://crbug.com/837741 |
| if (standalone_harness) { |
| if (invoker.main != "") { |
| sources += [ "${invoker.main}.cpp" ] |
| } |
| } else { |
| if (invoker.main != "") { |
| sources += [ "//gpu/${invoker.main}.cc" ] |
| } |
| deps += [ "//base/test:test_support" ] |
| |
| if (is_android) { |
| configs -= [ "//build/config/android:hide_all_but_jni" ] |
| } |
| } |
| } |
| } |