# Copyright (c) 2013 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. # This is the root build file for GN. GN will start processing by loading this # file, and recursively load all dependencies until all dependencies are either # resolved or known not to exist (which will cause the build to fail). So if # you add a new build file, there must be some path of dependencies from this # file to your new one or GN won't know about it. import("//build/config/features.gni") import("//build/config/sanitizers/sanitizers.gni") import("//build/config/ui.gni") import("//build_overrides/v8.gni") import("//media/media_options.gni") if (is_android) { import("//build/config/android/config.gni") } declare_args() { # A list of extra dependencies to add to the root target. This allows a # checkout to add additional targets without explicitly changing any checked- # in files. root_extra_deps = [] } # This file defines the following four main targets: # # "both_gn_and_gyp" should list every root target (target that nothing else # depends on) built by GN that is also built in the GYP build. # # "gn_all" should (transitively) cause everything to be built; if you run # 'ninja gn_all' and then 'ninja all', the second build should do no work. # # "gn_only" should list every root target that is *not* intended to be built # in a GYP build. Because GN has different rules for deciding what an 'all' # build is, this may end up including targets that are actually defined in a # GYP build but not dependencies of GYP's "all" (and so not actually built). # # "gn_visibility": targets that are normally not visible to top-level targets, # but are built anyway by "all". Since we don't want any such targets, we # have this placeholder to make sure hidden targets that aren't otherwise # depended on yet are accounted for. # # TODO(GYP): crbug.com/481694. Make sure that the above is true and there are # scripts run on the bots that enforce this. Once the GYP migration is over, # we can collapse all of these targets as desired. group("gn_all") { testonly = true deps = [ ":both_gn_and_gyp", ":gn_only", ":gn_visibility", ] } # The "both_gn_and_gyp" target should reflect every target that is built # in both the GN and GYP builds, and ideally it should match the # "both_gn_and_gyp" target in build/gn_migration.gypi line-for-line. # # TODO(GYP): Add build steps that check and enforce this on the bots. group("both_gn_and_gyp") { testonly = true deps = [ "//base:base_unittests", "//chrome/installer", "//components:components_unittests", "//net:net_unittests", "//skia:skia_unittests", "//sql:sql_unittests", "//sync:sync_unit_tests", "//ui/base:ui_base_unittests", "//ui/gfx:gfx_unittests", "//url:url_unittests", ] if (!is_ios && !is_android && !is_chromecast) { deps += [ "//chrome", "//chrome/test:browser_tests", "//chrome/test:interactive_ui_tests", "//chrome/test:sync_integration_tests", "//chrome/test/chromedriver:chromedriver_unittests", "//crypto:crypto_unittests", "//extensions:extensions_browsertests", "//extensions:extensions_unittests", "//google_apis/gcm:gcm_unit_tests", "//gpu/gles2_conform_support:gles2_conform_test", "//jingle:jingle_unittests", "//net:hpack_example_generator", "//net:hpack_fuzz_mutator", "//net:hpack_fuzz_wrapper", "//ppapi:ppapi_unittests", "//ppapi/examples/2d", "//ppapi/examples/audio", "//ppapi/examples/audio_input", "//ppapi/examples/compositor", "//ppapi/examples/crxfs", "//ppapi/examples/enumerate_devices", "//ppapi/examples/file_chooser", "//ppapi/examples/flash_topmost", "//ppapi/examples/font", "//ppapi/examples/gamepad", "//ppapi/examples/gles2", "//ppapi/examples/gles2_spinning_cube", "//ppapi/examples/ime", "//ppapi/examples/input", "//ppapi/examples/media_stream_audio", "//ppapi/examples/media_stream_video", "//ppapi/examples/mouse_cursor", "//ppapi/examples/mouse_lock", "//ppapi/examples/printing", "//ppapi/examples/scaling", "//ppapi/examples/scripting", "//ppapi/examples/stub", "//ppapi/examples/threading", "//ppapi/examples/url_loader", "//ppapi/examples/video_capture", "//ppapi/examples/video_decode", "//ppapi/examples/video_effects", "//ppapi/examples/video_encode", "//printing:printing_unittests", "//third_party/cacheinvalidation:cacheinvalidation_unittests", "//third_party/codesighs", "//third_party/pdfium/samples:pdfium_test", "//tools/gn", "//tools/gn:gn_unittests", "//tools/gn:generate_test_gn_data", "//tools/perf/clear_system_cache", "//ui/accessibility:accessibility_unittests", "//ui/app_list:app_list_unittests", ] } if (!is_ios) { # TODO(GYP): Figure out which of these should actually build on iOS, # and whether there should be other targets that are iOS-only and missing. deps += [ "//cc:cc_unittests", "//chrome/test:unit_tests", "//components:components_browsertests", "//content/shell:content_shell", "//content/test:content_browsertests", "//content/test:content_perftests", "//content/test:content_unittests", "//device:device_unittests", "//gpu:gpu_unittests", "//ipc:ipc_tests", "//ipc/mojo:ipc_mojo_unittests", "//media:media_unittests", "//media/midi:midi_unittests", "//mojo", "//mojo/application/public/cpp", "//mojo/common:mojo_common_unittests", "//net:net_perftests", # TODO(use-new-edk): #"//mojo/edk/system:mojo_system_unittests", #"//mojo/edk/test:mojo_public_bindings_unittests", #"//mojo/edk/test:mojo_public_environment_unittests", #"//mojo/edk/test:mojo_public_system_unittests", #"//mojo/edk/test:mojo_public_utility_unittests", "//third_party/mojo/src/mojo/edk/system:mojo_system_unittests", "//third_party/mojo/src/mojo/edk/test:mojo_public_bindings_unittests", "//third_party/mojo/src/mojo/edk/test:mojo_public_environment_unittests", "//third_party/mojo/src/mojo/edk/test:mojo_public_system_unittests", "//third_party/mojo/src/mojo/edk/test:mojo_public_utility_unittests", "//third_party/WebKit/Source/platform:heap_unittests", "//third_party/WebKit/Source/platform:platform_unittests", "//third_party/WebKit/Source/web:webkit_unit_tests", "//third_party/WebKit/Source/wtf:wtf_unittests", "//third_party/smhasher:pmurhash", "//tools/battor_agent", "//tools/imagediff($host_toolchain)", "//tools/telemetry:bitmaptools($host_toolchain)", "//ui/display:display_unittests", "//ui/events:events_unittests", "//ui/gl:gl_unittests", "//ui/touch_selection:ui_touch_selection_unittests", ] } else { deps += [ "//ios/net:ios_net_unittests", "//ios/testing:ocmock_support_unittest", "//ios/web:ios_web_unittests", ] } deps += root_extra_deps if (enable_extensions) { deps += [ "//extensions/shell:app_shell_unittests" ] } if (enable_media_router) { deps += [ "//chrome/browser/media/router" ] } if (enable_remoting) { deps += [ "//remoting:remoting_all" ] } if (toolkit_views) { deps += [ "//ui/views:views_unittests" ] } if (use_aura) { deps += [ "//ui/wm:wm_unittests" ] } if (use_ozone) { deps += [ "//ui/ozone" ] } if (use_x11) { deps += [ "//tools/xdisplaycheck" ] } if (enable_configuration_policy) { deps += [ "//components/policy:policy_templates" ] } if (v8_use_external_startup_data) { deps += [ "//gin:gin_v8_snapshot_fingerprint" ] } if (is_win) { deps += [ "//chrome/installer/gcapi", "//chrome/tools/build/win/syzygy:chrome_dll_syzygy", ] } if (is_android) { deps += [ "//base/android/linker:chromium_android_linker", "//base:base_junit_tests", "//build/android/gyp/test:hello_world", "//build/android/rezip", "//components/invalidation/impl:components_invalidation_impl_junit_tests", "//components/policy/android:components_policy_junit_tests", "//content/public/android:content_junit_tests", "//net/android:net_junit_tests", "//testing/android/junit:junit_unittests", "//third_party/errorprone:chromium_errorprone", "//tools/android:android_tools", "//tools/android/heap_profiler:heap_profiler_unittests", "//tools/android/kerberos/SpnegoAuthenticator:spnego_authenticator_apk", "//tools/imagediff($host_toolchain)", # TODO(GYP): Remove these when the components_unittests work. "//components/history/core/test:test", "//components/policy:policy_component_test_support", "//components/policy:test_support", "//components/rappor:test_support", "//components/signin/core/browser:test_support", "//components/sync_driver:test_support", "//components/user_manager", "//components/wallpaper", "//content/shell/android:content_shell_apk", # TODO(GYP): Are these needed, or will they be pulled in automatically? "//third_party/android_tools:android_gcm_java", "//third_party/android_tools:uiautomator_java", "//third_party/android_tools:android_support_v13_java", "//third_party/android_tools:android_support_v7_appcompat_java", "//third_party/android_tools:android_support_v7_mediarouter_java", "//third_party/mesa", "//third_party/mockito:mockito_java", "//third_party/openmax_dl/dl", "//ui/android:ui_java", # TODO(GYP): Are these needed? "//chrome/test:test_support_unit", "//third_party/smhasher:murmurhash3", "//ui/message_center:test_support", ] deps -= [ "//net:net_perftests", "//url:url_unittests", ] if (!is_chromecast) { deps += [ "//android_webview", "//chrome/android:chrome_junit_tests", "//chrome/android:chrome_public_apk", "//chrome/android:chrome_public_test_apk", "//chrome/test/chromedriver/test/webview_shell:chromedriver_webview_shell_apk", "//third_party/custom_tabs_client:custom_tabs_client_example_apk", ] } if (target_cpu != "x64") { deps += [ "//third_party/android_platform:android_relocation_packer_unittests($host_toolchain)" ] } if (has_chrome_android_internal) { deps += [ "//clank" ] # TODO(GYP) ?? } } if (is_linux || is_android) { # TODO(GYP): || is_bsd? deps += [ "//breakpad:breakpad_unittests", "//breakpad:core-2-minidump", "//breakpad:generate_test_dump", "//breakpad:minidump-2-core", ] } if (is_chromeos) { deps += [ "//chromeos:chromeos_unittests", "//ui/chromeos:ui_chromeos_unittests", ] } if (is_chromeos || is_mac || is_win) { deps += [ "//rlz:rlz_id", "//rlz:rlz_lib", "//rlz:rlz_unittests", ] } if (is_linux) { # The following are definitely linux-only. deps += [ "//dbus:dbus_test_server", "//dbus:dbus_unittests", "//net:disk_cache_memory_test", "//net:flip_in_mem_edsm_server", "//net:flip_in_mem_edsm_server_unittests", "//net:quic_client", "//net:quic_server", "//sandbox/linux:chrome_sandbox", "//sandbox/linux:sandbox_linux_unittests", ] if (is_chromeos || use_ash) { deps += [ "//components/session_manager/core" ] } } if (is_ios || is_win || (is_linux && !is_chromeos)) { deps += [ "//base:base_i18n_perftests", "//base:base_perftests", "//google_apis:google_apis_unittests", ] } if (is_win || (is_linux && !is_chromeos)) { # TODO(GYP): Figure out which of these should (and can) build # for android/chromeos/mac/ios. deps += [ "//base:check_example", "//base:build_utf8_validator_tables", "//cc:cc_perftests", "//cc/blink:cc_blink_unittests", "//chrome/test:load_library_perf_tests", "//chrome/test:performance_browser_tests", "//chrome/test:sync_performance_tests", "//chrome/test/chromedriver:chromedriver", "//chrome/test/chromedriver:chromedriver_tests", "//chrome/tools/profile_reset:jtl_compiler", "//components:components_perftests", "//content/test:content_gl_tests", "//content/test:content_gl_benchmark", "//courgette:courgette", "//courgette:courgette_fuzz", "//courgette:courgette_minimal_tool", "//courgette:courgette_unittests", "//device:device_unittests", "//gin:gin_shell", "//gin:gin_unittests", "//google_apis/gcm:mcs_probe", "//gpu:gpu_perftests", "//gpu:gl_tests", "//ipc:ipc_perftests", "//media:media_perftests", "//media/cast:generate_barcode_video", "//media/cast:generate_timecode_audio", "//net:crash_cache", "//net:crl_set_dump", "//net:dns_fuzz_stub", "//net:dump_cache", "//net:gdig", "//net:get_server_time", "//net:net_watcher", # TODO(GYP): This should be conditional on use_v8_in_net "//net:run_testserver", "//net:stress_cache", "//net:tld_cleanup", "//ppapi:pepper_hash_for_uma", "//ppapi:ppapi_perftests", "//sync:run_sync_testserver", "//third_party/angle/src/tests:angle_unittests", "//third_party/codesighs:maptsvdifftool", "//third_party/leveldatabase:env_chromium_unittests", "//third_party/libaddressinput:libaddressinput_unittests", "//third_party/libphonenumber:libphonenumber_unittests", "//ui/compositor:compositor_unittests", ] if (!is_linux) { # TODO(dpranke): Re-enable this once # https://chromium-review.googlesource.com/#/c/312298/1 is rolled # into chromium. deps += [ "//third_party/angle/src/tests:angle_end2end_tests" ] } if (enable_extensions) { deps += [ "//extensions/shell:app_shell" ] } if (enable_nacl) { deps += [ "//components/nacl:nacl_loader_unittests" ] } if (media_use_ffmpeg) { deps += [ "//media:ffmpeg_regression_tests" ] } if (use_ash) { deps += [ "//ash:ash_shell_with_content", "//ash:ash_unittests", ] } if (use_aura) { deps += [ "//ui/aura:aura_unittests", "//ui/aura:bench", "//ui/aura:demo", ] } } if (is_linux && !is_chromeos) { deps += [ # TODO(GYP): Figure out which of these should (and can) build # under which other conditions. "//build/sanitizers:copy_llvm_symbolizer", "//chrome/test:chrome_app_unittests", "//cloud_print:cloud_print_unittests", "//components/network_hints/browser", "//content/public/app:browser", "//content/public/app:child", # TODO(GYP): Remove this when the gles2 tests work "//gpu/command_buffer/client:gles2_implementation_no_check", "//gpu/khronos_glcts_support:khronos_glcts_test", # TODO(GYP) crbug.com/471903 to make this complete. "//media/cast:cast_benchmarks", "//media/cast:tap_proxy", "//mojo/application/public/cpp", "//skia:filter_fuzz_stub", "//skia:image_operations_bench", "//sync/tools:sync_client", "//sync/tools:sync_listen_notifications", "//testing/gmock:gmock_main", # TODO(use-new-edk): #"//mojo/edk/test:mojo_public_system_perftests", "//third_party/mojo/src/mojo/edk/test:mojo_public_system_perftests", "//ui/keyboard:keyboard_unittests", "//ui/message_center:message_center_unittests", "//ui/snapshot:snapshot_unittests", "//ui/views/examples:views_examples_with_content_exe", "//third_party/codesighs:nm2tsv", "//third_party/sqlite:sqlite_shell", ] deps += [ "//breakpad:dump_syms($host_toolchain)", "//breakpad:microdump_stackwalk($host_toolchain)", "//breakpad:minidump_dump($host_toolchain)", "//breakpad:minidump_stackwalk($host_toolchain)", ] if (!is_debug && !is_component_build) { deps += [ "//chrome/tools/service_discovery_sniffer" ] } if (toolkit_views) { deps += [ "//ui/app_list:app_list_demo" ] } if (use_x11) { if (target_cpu != "arm") { deps += [ "//gpu/tools/compositor_model_bench" ] } } } if (is_mac) { deps += [ "//breakpad:crash_inspector", "//breakpad:dump_syms", "//third_party/apple_sample_code", "//third_party/molokocacao", ] deps -= [ # Mojo in GN contains some things which are never compiled in GYP on Mac, # so compilation fails on Mac. They need porting. "//mojo", ] } if (is_win) { deps += [ "//base:pe_image_test", "//chrome/installer/setup:setup_unittests", "//chrome_elf:chrome_elf_unittests", "//chrome_elf:dll_hash_main", "//cloud_print/service/win:cloud_print_service", "//cloud_print:cloud_print_unittests", "//components/crash/content/tools:crash_service", "//components/wifi:wifi_test", "//net:quic_client", "//net:quic_server", "//sandbox/win:pocdll", "//sandbox/win:sandbox_poc", "//sandbox/win:sbox_integration_tests", "//sandbox/win:sbox_unittests", "//sandbox/win:sbox_validation_tests", "//testing/gtest:gtest_main", "//third_party/codesighs:msmap2tsv", "//third_party/pdfium/samples:pdfium_diff", "//ui/metro_viewer", ] deps -= [ "//crypto:crypto_unittests", # TODO(GYP) "//net:net_unittests", # TODO(GYP) ] } else if (!is_android && !is_ios) { deps += [ "//breakpad:symupload($host_toolchain)", "//media/cast:cast_unittests", ] } if (is_chromecast) { deps += [ "//chromecast:cast_shell" ] } } group("gn_only") { testonly = true deps = [] if (!is_ios && !is_chromecast) { deps += [ "//mandoline:all" ] } if (!is_android && !is_ios) { deps += [ "//components/proximity_auth:proximity_auth_unittests" ] } if (!is_component_build && (is_win || is_linux)) { deps += [ "//components/mus/example:all" ] } if (is_linux && !is_chromeos && !is_chromecast) { # TODO(GYP): Figure out if any of these should be in gn_all # and figure out how cross-platform they are deps += [ ":gn_mojo_targets", "//blimp:blimp_tests", "//chrome/browser/resources:extension_resource_demo", "//chrome/installer/util:strings", "//chrome/test:load_library_perf_tests", "//chrome/tools/convert_dict", "//components/constrained_window:unit_tests", "//components/enhanced_bookmarks:test_support", "//components/metrics:serialization", "//components/password_manager/content/renderer:browser_tests", "//components/rappor:unit_tests", "//components/sessions:unit_tests", "//media/blink:media_blink_unittests", "//media/cast:udp_proxy", "//native_client/src/trusted/debug_stub:gdb_rsp_unittest", "//storage/browser:dump_file_system", "//third_party/angle:libANGLE", "//third_party/angle:libEGL", "//third_party/angle:libGLESv2", "//third_party/cld_2:cld_2_dynamic_data_tool", "//third_party/leveldatabase:leveldb_arena_test", "//third_party/leveldatabase:leveldb_bloom_test", "//third_party/leveldatabase:leveldb_db_test", "//third_party/leveldatabase:leveldb_crc32c_test", "//third_party/leveldatabase:leveldb_cache_test", "//third_party/leveldatabase:leveldb_env_test", "//third_party/leveldatabase:leveldb_write_batch_test", "//third_party/leveldatabase:leveldb_filter_block_test", "//third_party/leveldatabase:leveldb_version_edit_test", "//third_party/leveldatabase:leveldb_db_bench", "//third_party/leveldatabase:leveldb_log_test", "//third_party/leveldatabase:leveldb_corruption_test", "//third_party/leveldatabase:leveldb_table_test", "//third_party/leveldatabase:leveldb_skiplist_test", "//third_party/leveldatabase:leveldb_filename_test", "//third_party/leveldatabase:leveldb_dbformat_test", "//third_party/pdfium/third_party:fx_freetype", "//third_party/libjpeg_turbo:simd", "//third_party/libsrtp:replay_driver", "//third_party/libsrtp:roc_driver", "//third_party/libsrtp:rtpw", "//third_party/libsrtp:rdbx_driver", "//third_party/libsrtp:srtp_driver", "//third_party/libsrtp:srtp_driver", "//third_party/libsrtp:srtp_test_kernel_driver", "//third_party/libsrtp:srtp_test_cipher_driver", "//third_party/libsrtp:srtp_test_datatypes_driver", "//third_party/libsrtp:srtp_test_aes_calc", "//third_party/libsrtp:srtp_test_env", "//third_party/libsrtp:srtp_test_rand_gen", "//third_party/libsrtp:srtp_test_sha1_driver", "//third_party/libsrtp:srtp_test_stat_driver", "//third_party/opus:opus_compare", "//third_party/opus:opus_demo", "//third_party/opus:test_opus_decode", "//third_party/opus:test_opus_encode", "//third_party/opus:test_opus_api", "//third_party/opus:test_opus_padding", "//third_party/webrtc/system_wrappers:field_trial_default", "//third_party/webrtc/system_wrappers:metrics_default", "//ui/display/types", "//ui/shell_dialogs:shell_dialogs_unittests", "//ui/views/examples:views_examples_exe", ] if (target_cpu == "x86" || target_cpu == "x64") { deps += [ "//third_party/libjpeg_turbo:simd_asm", "//native_client/src/trusted/platform_qualify:vcpuid", ] } if (enable_nacl) { deps += [ "//native_client/src/trusted/service_runtime:sel_ldr" ] } if (use_ozone) { deps += [ "//ui/ozone/demo" ] } if (is_android) { deps += [ "//build/android/gyp/test:hello_world" ] } if (is_linux && current_toolchain == host_toolchain) { deps += [ "//v8:d8" ] } } if (is_android || is_linux || is_chromeos) { deps += [ "//blimp" ] } if (is_mac) { deps -= [ "//mandoline:all" ] # TODO(GYP) } if (use_libfuzzer) { deps += [ "//testing/libfuzzer:libfuzzer_main" ] } } group("gn_mojo_targets") { testonly = true if (is_linux && !is_chromeos) { # TODO(GYP): Figure out if any of these should be in gn_all # and figure out how cross-platform they are deps = [ "//ipc/mojo:ipc_mojo_perftests", "//media/mojo/services:cdm_service", "//media/mojo:tests", "//mojo:tests", # TODO(use-new-edk): #"//mojo/edk/js/test:js_integration_tests", #"//mojo/edk/js/tests:js_to_cpp_bindings_python", "//third_party/mojo/src/mojo/edk/js/test:js_integration_tests", ] } } group("gn_visibility") { deps = [ "//build/config/sanitizers:options_sources", # "//third_party/pdfium:pdfium_embeddertests", # TODO(GYP): visibility? # "//third_party/pdfium:pdfium_unittests", # TODO(GYP): visibility? "//ui/resources:repack_ui_test_mac_locale_pack", ] if (!is_ios) { deps += [ "//v8:v8_snapshot", "//v8:postmortem-metadata", ] } } if (!is_ios) { # This group includes all of the targets needed to build and test Blink, # including running the layout tests (see below). group("blink_tests") { testonly = true deps = [ "//third_party/WebKit/public:all_blink", ] # NOTE: The following deps are needed to run the layout tests # (run-webkit-tests) but there is no GN target for the layout tests, # so we need to specify the dependencies here instead. if (is_android) { deps += [ "//breakpad:breakpad_unittests_deps", "//breakpad:dump_syms($host_toolchain)", "//breakpad:microdump_stackwalk($host_toolchain)", "//breakpad:minidump_dump($host_toolchain)", "//breakpad:minidump_stackwalk($host_toolchain)", "//breakpad:symupload($host_toolchain)", "//content/shell/android:content_shell_apk", "//tools/imagediff($host_toolchain)", ] } else { deps += [ "//content/shell:content_shell", "//tools/imagediff", ] } if (is_win) { deps += [ "//components/test_runner:layout_test_helper", "//content/shell:crash_service", ] } if (!is_win && !is_android) { deps += [ "//breakpad:minidump_stackwalk($host_toolchain)" ] } if (is_mac) { deps += [ "//breakpad:dump_syms($host_toolchain)", "//components/test_runner:layout_test_helper", ] } if (is_linux) { deps += [ "//breakpad:dump_syms($host_toolchain)" ] } } } # Add a dummy target for compatibility w/ GYP group("chromium_swarm_tests") { } group("chromium_builder_perf") { testonly = true # TODO(GYP): Make this target work on the mac. if (!is_ios && !is_android && !is_chromecast && !is_mac) { deps = [ "//cc:cc_perftests", "//chrome", "//chrome/test:load_library_perf_tests", "//chrome/test:sync_performance_tests", "//gpu:gpu_perftests", "//media:media_perftests", "//media/midi:midi_unittests", "//tools/telemetry:bitmaptools", ] if (!is_chromeos) { deps += [ "//chrome/test:performance_browser_tests" ] } if (is_linux && !is_chromeos) { deps += [ "//chrome:linux_symbols" ] if (!is_chromeos) { deps += [ "//tools/perf/clear_system_cache" ] } } if (is_win) { deps += [ "//content/shell:crash_service", # "//gpu:angle_perftests", TODO(GYP): crbug.com/537008 ] if (target_cpu == "x86") { deps += [ # "//content/shell:crash_service_win64", TODO(GYP): crbug.com/537009 ] } } else { deps += [ "//breakpad:minidump_stackwalk($host_toolchain)" ] } } }