diff --git a/.gn b/.gn new file mode 100644 index 00000000000..fc54abe46e9 --- /dev/null +++ b/.gn @@ -0,0 +1,14 @@ +# Copyright 2016 The Dart 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. + +# This file is used by the gn meta-buildsystem find the root of the source tree +# and to set startup options. + +# The location of the build configuration file. +buildconfig = "//build/config/BUILDCONFIG.gn" + +# The secondary source root is a parallel directory tree where +# GN build files are placed when they can not be placed directly +# in the source tree, e.g. for third party source trees. +secondary_source = "//build/secondary/" diff --git a/BUILD.gn b/BUILD.gn new file mode 100644 index 00000000000..d86d84a0d05 --- /dev/null +++ b/BUILD.gn @@ -0,0 +1,21 @@ +# Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file +# for details. All rights reserved. Use of this source code is governed by a +# BSD-style license that can be found in the LICENSE file. + +# This target will be built if no target is specified when invoking ninja. +group("default") { + deps = [ + ":runtime", + ] +} + +group("runtime") { + deps = [ + "//runtime/bin:dart", + "//runtime/bin:dart_bootstrap($host_toolchain)", + "//runtime/bin:run_vm_tests", + "//runtime/bin:process_test", + "//runtime/bin:test_extension", + "//runtime/bin:sample_extension", + ] +} diff --git a/DEPS b/DEPS index 81704db1680..1c952b5cc92 100644 --- a/DEPS +++ b/DEPS @@ -30,8 +30,7 @@ vars = { "gyp_rev": "@6ee91ad8659871916f9aa840d42e1513befdf638", "co19_rev": "@d4767b4caea3c5828ad8e053cd051d44a59061af", - # Revisions of GN/Mojo/Flutter related dependencies. - "base_revision": "@672b04e54b937ec899429a6bd5409c5a6300d151", + # Revisions of GN related dependencies. "buildtools_revision": "@565d04e8741429fb1b4f26d102f2c6c3b849edeb", "gperftools_revision": "@7822b5b0b9fa7e016e1f6b46ea86f26f4691a457", @@ -45,7 +44,7 @@ vars = { "barback_tag" : "@0.15.2+9", "bazel_worker_tag": "@0.1.1", "boolean_selector_tag" : "@1.0.2", - "boringssl_gen_rev": "@ef64e76254a12ee08a7142c825aa59ea32005958", + "boringssl_gen_rev": "@1e8e5da213d0d5b1d50fcc1356c4783091bcc20d", "boringssl_rev" : "@8d343b44bbab829d1a28fdef650ca95f7db4412e", "charcode_tag": "@1.1.0", "chrome_rev" : "@19997", @@ -131,11 +130,7 @@ deps = { Var("dart_root") + "/third_party/gyp": Var('chromium_git') + '/external/gyp.git' + Var("gyp_rev"), - # Stuff needed for GN/Mojo/Flutter. - Var("dart_root") + "/base": - Var('chromium_git') + '/external/github.com/domokit/base' - + Var('base_revision'), - + # Stuff needed for GN build. Var("dart_root") + "/buildtools": Var('chromium_git') + '/chromium/buildtools.git' + Var('buildtools_revision'), @@ -363,6 +358,83 @@ deps_os = { # TODO(iposva): Move the necessary tools so that hooks can be run # without the runtime being available. hooks = [ + # Pull GN binaries. This needs to be before running GYP below. + { + 'name': 'gn_linux64', + 'pattern': '.', + 'action': [ + 'download_from_google_storage', + '--no_auth', + '--no_resume', + '--quiet', + '--platform=linux*', + '--bucket', + 'chromium-gn', + '-s', + Var('dart_root') + '/buildtools/linux64/gn.sha1', + ], + }, + { + 'name': 'gn_mac', + 'pattern': '.', + 'action': [ + 'download_from_google_storage', + '--no_auth', + '--no_resume', + '--quiet', + '--platform=darwin', + '--bucket', + 'chromium-gn', + '-s', + Var('dart_root') + '/buildtools/mac/gn.sha1', + ], + }, + { + 'name': 'gn_win', + 'pattern': '.', + 'action': [ + 'download_from_google_storage', + '--no_auth', + '--no_resume', + '--quiet', + '--platform=win*', + '--bucket', + 'chromium-gn', + '-s', + Var('dart_root') + '/buildtools/win/gn.exe.sha1', + ], + }, + # Pull clang-format binaries using checked-in hashes. + { + 'name': 'clang_format_linux', + 'pattern': '.', + 'action': [ + 'download_from_google_storage', + '--no_auth', + '--no_resume', + '--quiet', + '--platform=linux*', + '--bucket', + 'chromium-clang-format', + '-s', + Var('dart_root') + '/buildtools/linux64/clang-format.sha1', + ], + }, + { + 'name': 'clang_format_mac', + 'pattern': '.', + 'action': [ + 'download_from_google_storage', + '--no_auth', + '--no_resume', + '--quiet', + '--platform=darwin', + '--bucket', + 'chromium-clang-format', + '-s', + Var('dart_root') + '/buildtools/mac/clang-format.sha1', + ], + }, { 'name': 'd8_testing_binaries', 'pattern': '.', @@ -497,6 +569,12 @@ hooks = [ Var('dart_root') + "/third_party/clang.tar.gz.sha1", ], }, + { + # Pull clang if needed or requested via GYP_DEFINES. + 'name': 'gn_clang', + 'pattern': '.', + 'action': ['python', 'sdk/tools/clang/scripts/update.py', '--if-needed'], + }, { "pattern": ".", "action": ["python", Var("dart_root") + "/tools/gyp_dart.py"], diff --git a/build/config/BUILD.gn b/build/config/BUILD.gn index 0af90cd06d4..93243a1fc70 100644 --- a/build/config/BUILD.gn +++ b/build/config/BUILD.gn @@ -2,433 +2,23 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. -import("//build/config/allocator.gni") -import("//build/config/chrome_build.gni") -import("//build/config/crypto.gni") -import("//build/config/features.gni") -import("//build/config/ui.gni") -import("//build/module_args/v8.gni") - -declare_args() { - # When set, turns off the (normally-on) iterator debugging and related stuff - # that is normally turned on for Debug builds. These are generally useful for - # catching bugs but in some cases may cause conflicts or excessive slowness. - disable_iterator_debugging = false - - # Set to true to not store any build metadata, e.g. ifdef out all __DATE__ - # and __TIME__. Set to 0 to reenable the use of these macros in the code - # base. See http://crbug.com/314403. - # - # Continue to embed build meta data in Official builds, basically the - # time it was built. - # TODO(maruel): This decision should be revisited because having an - # official deterministic build has high value too but MSVC toolset can't - # generate anything deterministic with WPO enabled AFAIK. - dont_embed_build_metadata = !is_official_build - - # Set to true to enable dcheck in Release builds. - dcheck_always_on = false - - # Set to true to compile with the OpenGL ES 2.0 conformance tests. - internal_gles2_conform_tests = false -} - -# TODO(brettw) Most of these should be removed. Instead of global feature -# flags, we should have more modular flags that apply only to a target and its -# dependents. For example, depending on the "x11" meta-target should define -# USE_X11 for all dependents so that everything that could use X11 gets the -# define, but anything that doesn't depend on X11 doesn't see it. -# -# For now we define these globally to match the current GYP build. -config("feature_flags") { - # TODO(brettw) this probably needs to be parameterized. - defines = [ "V8_DEPRECATION_WARNINGS" ] # Don't use deprecated V8 APIs anywhere. - - if (cld_version > 0) { - defines += [ "CLD_VERSION=$cld_version" ] - } - if (enable_mdns) { - defines += [ "ENABLE_MDNS=1" ] - } - if (enable_notifications) { - defines += [ "ENABLE_NOTIFICATIONS" ] - } - if (enable_pepper_cdms) { - # TODO(brettw) should probably be "=1" - defines += [ "ENABLE_PEPPER_CDMS" ] - } - if (enable_browser_cdms) { - # TODO(brettw) should probably be "=1" - defines += [ "ENABLE_BROWSER_CDMS" ] - } - if (enable_plugins) { - defines += [ "ENABLE_PLUGINS=1" ] - } - if (enable_basic_printing || enable_print_preview) { - # Convenience define for ENABLE_BASIC_PRINTING || ENABLE_PRINT_PREVIEW. - defines += [ "ENABLE_PRINTING=1" ] - if (enable_basic_printing) { - # Enable basic printing support and UI. - defines += [ "ENABLE_BASIC_PRINTING=1" ] - } - if (enable_print_preview) { - # Enable printing with print preview. - # Can be defined without ENABLE_BASIC_PRINTING. - defines += [ "ENABLE_PRINT_PREVIEW=1" ] - } - } - if (enable_spellcheck) { - defines += [ "ENABLE_SPELLCHECK=1" ] - } - if (use_platform_spellchecker) { - defines += [ "USE_PLATFORM_SPELLCHECKER=1" ] - } - if (dont_embed_build_metadata) { - defines += [ "DONT_EMBED_BUILD_METADATA" ] - } - if (dcheck_always_on) { - defines += [ "DCHECK_ALWAYS_ON=1" ] - } - if (use_udev) { - # TODO(brettw) should probably be "=1". - defines += [ "USE_UDEV" ] - } - if (ui_compositor_image_transport) { - # TODO(brettw) should probably be "=1". - defines += [ "UI_COMPOSITOR_IMAGE_TRANSPORT" ] - } - if (use_ash) { - defines += [ "USE_ASH=1" ] - } - if (use_aura) { - defines += [ "USE_AURA=1" ] - } - if (use_glfw) { - defines += [ "USE_GLFW=1" ] - } - if (use_pango) { - defines += [ "USE_PANGO=1" ] - } - if (use_cairo) { - defines += [ "USE_CAIRO=1" ] - } - if (use_clipboard_aurax11) { - defines += [ "USE_CLIPBOARD_AURAX11=1" ] - } - if (use_default_render_theme) { - defines += [ "USE_DEFAULT_RENDER_THEME=1" ] - } - if (use_openssl) { - defines += [ "USE_OPENSSL=1" ] - } - if (use_openssl_certs) { - defines += [ "USE_OPENSSL_CERTS=1" ] - } - if (use_nss_certs) { - defines += [ "USE_NSS_CERTS=1" ] - } - if (use_ozone) { - defines += [ "USE_OZONE=1" ] - } - if (use_x11) { - defines += [ "USE_X11=1" ] - } - if (use_allocator != "tcmalloc") { - defines += [ "NO_TCMALLOC" ] - } - if (is_asan || is_lsan || is_tsan || is_msan || is_ios) { - defines += [ - "MEMORY_TOOL_REPLACES_ALLOCATOR", - "MEMORY_SANITIZER_INITIAL_SIZE", - ] - } - if (is_asan) { - defines += [ "ADDRESS_SANITIZER" ] - } - if (is_lsan) { - defines += [ - "LEAK_SANITIZER", - "WTF_USE_LEAK_SANITIZER=1", - ] - } - if (is_tsan) { - defines += [ - "THREAD_SANITIZER", - "DYNAMIC_ANNOTATIONS_EXTERNAL_IMPL=1", - "WTF_USE_DYNAMIC_ANNOTATIONS_NOIMPL=1", - ] - } - if (is_msan) { - defines += [ "MEMORY_SANITIZER" ] - } - if (enable_webrtc) { - defines += [ "ENABLE_WEBRTC=1" ] - } - if (disable_ftp_support) { - defines += [ "DISABLE_FTP_SUPPORT=1" ] - } - if (!enable_nacl) { - defines += [ "DISABLE_NACL" ] - } - if (enable_extensions) { - defines += [ "ENABLE_EXTENSIONS=1" ] - } - if (enable_configuration_policy) { - defines += [ "ENABLE_CONFIGURATION_POLICY" ] - } - if (enable_task_manager) { - defines += [ "ENABLE_TASK_MANAGER=1" ] - } - if (enable_themes) { - defines += [ "ENABLE_THEMES=1" ] - } - if (enable_captive_portal_detection) { - defines += [ "ENABLE_CAPTIVE_PORTAL_DETECTION=1" ] - } - if (enable_session_service) { - defines += [ "ENABLE_SESSION_SERVICE=1" ] - } - if (enable_rlz) { - defines += [ "ENABLE_RLZ" ] - } - if (enable_plugin_installation) { - defines += [ "ENABLE_PLUGIN_INSTALLATION=1" ] - } - if (enable_app_list) { - defines += [ "ENABLE_APP_LIST=1" ] - } - if (enable_settings_app) { - defines += [ "ENABLE_SETTINGS_APP=1" ] - } - if (enable_supervised_users) { - defines += [ "ENABLE_SUPERVISED_USERS=1" ] - } - if (enable_service_discovery) { - defines += [ "ENABLE_SERVICE_DISCOVERY=1" ] - } - if (enable_autofill_dialog) { - defines += [ "ENABLE_AUTOFILL_DIALOG=1" ] - } - if (enable_wifi_bootstrapping) { - defines += [ "ENABLE_WIFI_BOOTSTRAPPING=1" ] - } - if (enable_image_loader_extension) { - defines += [ "IMAGE_LOADER_EXTENSION=1" ] - } - if (enable_remoting) { - defines += [ "ENABLE_REMOTING=1" ] - } - if (enable_google_now) { - defines += [ "ENABLE_GOOGLE_NOW=1" ] - } - if (enable_one_click_signin) { - defines += [ "ENABLE_ONE_CLICK_SIGNIN" ] - } - if (enable_hidpi) { - defines += [ "ENABLE_HIDPI=1" ] - } - if (enable_topchrome_md) { - defines += [ "ENABLE_TOPCHROME_MD=1" ] - } - if (proprietary_codecs) { - defines += [ "USE_PROPRIETARY_CODECS" ] - } - if (enable_hangout_services_extension) { - defines += [ "ENABLE_HANGOUT_SERVICES_EXTENSION=1" ] - } - if (v8_use_external_startup_data) { - defines += [ "V8_USE_EXTERNAL_STARTUP_DATA" ] - } - if (enable_background) { - defines += [ "ENABLE_BACKGROUND=1" ] - } - if (enable_pre_sync_backup) { - defines += [ "ENABLE_PRE_SYNC_BACKUP" ] - } - if (enable_video_hole) { - defines += [ "VIDEO_HOLE=1" ] - } - if (safe_browsing_mode == 1) { - defines += [ "FULL_SAFE_BROWSING" ] - defines += [ "SAFE_BROWSING_CSD" ] - defines += [ "SAFE_BROWSING_DB_LOCAL" ] - defines += [ "SAFE_BROWSING_SERVICE" ] - } else if (safe_browsing_mode == 2) { - defines += [ "MOBILE_SAFE_BROWSING" ] - defines += [ "SAFE_BROWSING_SERVICE" ] - } else if (safe_browsing_mode == 3) { - defines += [ "MOBILE_SAFE_BROWSING" ] - defines += [ "SAFE_BROWSING_DB_REMOTE" ] - defines += [ "SAFE_BROWSING_SERVICE" ] - } - if (is_official_build) { - defines += [ "OFFICIAL_BUILD" ] - } - if (is_chrome_branded) { - defines += [ "GOOGLE_CHROME_BUILD" ] - } else { - defines += [ "CHROMIUM_BUILD" ] - } - if (enable_media_router) { - defines += [ "ENABLE_MEDIA_ROUTER=1" ] - } - if (enable_webvr) { - defines += [ "ENABLE_WEBVR" ] - } - if (is_fnl) { - defines += [ "HAVE_SYS_QUEUE_H_=0" ] - } -} - # Debug/release ---------------------------------------------------------------- config("debug") { defines = [ - "_DEBUG", - "DYNAMIC_ANNOTATIONS_ENABLED=1", - "WTF_USE_DYNAMIC_ANNOTATIONS=1", + "DEBUG", ] - - if (is_nacl) { - defines += [ "DYNAMIC_ANNOTATIONS_PREFIX=NACL_" ] - } - - if (is_win) { - if (disable_iterator_debugging) { - # Iterator debugging is enabled by the compiler on debug builds, and we - # have to tell it to turn it off. - defines += [ "_HAS_ITERATOR_DEBUGGING=0" ] - } - } else if (is_linux && !is_android && current_cpu == "x64" && - !disable_iterator_debugging) { - # Enable libstdc++ debugging facilities to help catch problems early, see - # http://crbug.com/65151 . - # TODO(phajdan.jr): Should we enable this for all of POSIX? - defines += [ "_GLIBCXX_DEBUG=1" ] - } } config("release") { - defines = [ "NDEBUG" ] - - # Sanitizers. - # TODO(GYP) The GYP build has "release_valgrind_build == 0" for this - # condition. When Valgrind is set up, we need to do the same here. - if (is_tsan) { - defines += [ - "DYNAMIC_ANNOTATIONS_ENABLED=1", - "WTF_USE_DYNAMIC_ANNOTATIONS=1", - ] - } else { - defines += [ "NVALGRIND" ] - if (!is_nacl) { - # NaCl always enables dynamic annotations. Currently this value is set to - # 1 for all .nexes. - defines += [ "DYNAMIC_ANNOTATIONS_ENABLED=0" ] - } - } + defines = [ + "NDEBUG" + ] } -# Default libraries ------------------------------------------------------------ - -# This config defines the default libraries applied to all targets. -config("default_libs") { - if (is_win) { - # TODO(brettw) this list of defaults should probably be smaller, and - # instead the targets that use the less common ones (e.g. wininet or - # winspool) should include those explicitly. - libs = [ - "advapi32.lib", - "comdlg32.lib", - "dbghelp.lib", - "delayimp.lib", - "dnsapi.lib", - "gdi32.lib", - "kernel32.lib", - "msimg32.lib", - "odbc32.lib", - "odbccp32.lib", - "ole32.lib", - "oleaut32.lib", - "psapi.lib", - "shell32.lib", - "shlwapi.lib", - "user32.lib", - "usp10.lib", - "uuid.lib", - "version.lib", - "wininet.lib", - "winmm.lib", - "winspool.lib", - "ws2_32.lib", - - # Please don't add more stuff here. We should actually be making this - # list smaller, since all common things should be covered. If you need - # some extra libraries, please just add a libs = [ "foo.lib" ] to your - # target that needs it. - ] - } else if (is_android) { - # Android uses -nostdlib so we need to add even libc here. - libs = [ - # TODO(brettw) write a version of this, hopefully we can express this - # without forking out to GCC just to get the library name. The android - # toolchain directory should probably be extracted into a .gni file that - # this file and the android toolchain .gn file can share. - # # Manually link the libgcc.a that the cross compiler uses. - # '= 4.8 or clang. - # http://gcc.gnu.org/wiki/DebugFission - use_debug_fission = is_debug && !is_win && use_gold && - linux_use_bundled_binutils && !use_ccache - if (is_win) { # Whether the VS xtree header has been patched to disable warning 4702. If # it has, then we don't need to disable 4702 (unreachable code warning). @@ -143,7 +109,6 @@ config("compiler") { } else { # Common GCC compiler flags setup. # -------------------------------- - cflags += [ "-fno-strict-aliasing" ] # See http://crbug.com/32204 common_flags = [ # Not exporting C++ inline functions can generally be applied anywhere # so we do so here. Normal function visibility is controlled by @@ -153,18 +118,8 @@ config("compiler") { cflags_cc += common_flags cflags_objcc += common_flags - # Stack protection. - if (is_mac) { - cflags += [ "-fstack-protector-all" ] - } else if (is_linux) { - cflags += [ - "-fstack-protector", - "--param=ssp-buffer-size=4", - ] - } - # Linker warnings. - if (!(is_chromeos && current_cpu == "arm") && !is_mac && !is_ios) { + if ((current_cpu != "arm") && !is_mac) { # TODO(jochen): Enable this on chromeos on arm. http://crbug.com/356580 ldflags += [ "-Wl,--fatal-warnings" ] } @@ -217,11 +172,6 @@ config("compiler") { "//buildtools/third_party/libc++abi/trunk/include", ] } - - if (is_fnl) { - # TODO(kulakowski) remove when fnl no longer uses gcc - cflags += [ "-Wno-maybe-uninitialized" ] - } } if (is_clang && is_debug) { @@ -237,7 +187,7 @@ config("compiler") { cflags_objcc += extra_flags } - if (is_clang && !is_nacl) { + if (is_clang) { # This is here so that all files get recompiled after a clang roll and # when turning clang on or off. (defines are passed via the command line, # and build system rebuild things when their commandline changes). Nothing @@ -250,7 +200,7 @@ config("compiler") { # Mac-specific compiler flags setup. # ---------------------------------- - if (is_mac || is_ios) { + if (is_mac) { # These flags are shared between the C compiler and linker. common_mac_flags = [] @@ -310,6 +260,7 @@ config("compiler") { ] } } else if (current_cpu == "arm") { + cflags += [ "-march=$arm_arch", "-mfloat-abi=$arm_float_abi", @@ -388,45 +339,7 @@ config("compiler") { } } - defines += [ "_FILE_OFFSET_BITS=64" ] - - if (!is_android) { - defines += [ - "_LARGEFILE_SOURCE", - "_LARGEFILE64_SOURCE", - ] - } - - # Omit unwind support in official builds to save space. We can use breakpad - # for these builds. - if (is_chrome_branded && is_official_build) { - cflags += [ - "-fno-unwind-tables", - "-fno-asynchronous-unwind-tables", - ] - defines += [ "NO_UNWIND_TABLES" ] - } else { - cflags += [ "-funwind-tables" ] - } - } - - if (enable_profiling && !is_debug) { - # The GYP build spams this define into every compilation unit, as we do - # here, but it only appears to be used in base and a couple other places. - # TODO(abarth): Should we move this define closer to where it's used? - defines += [ "ENABLE_PROFILING" ] - - cflags += [ - "-fno-omit-frame-pointer", - "-g", - ] - - if (enable_full_stack_frames_for_profiling) { - cflags += [ - "-fno-inline", - "-fno-optimize-sibling-calls", - ] - } + cflags += [ "-funwind-tables" ] } # Linux/Android common flags setup. @@ -434,7 +347,6 @@ config("compiler") { if (is_linux || is_android) { cflags += [ "-fPIC", - "-pipe", # Use pipes for communicating between sub-processes. Faster. ] ldflags += [ @@ -443,9 +355,6 @@ config("compiler") { "-Wl,-z,now", "-Wl,-z,relro", ] - if (!using_sanitizer) { - ldflags += [ "-Wl,-z,defs" ] - } } # Linux-specific compiler flags setup. @@ -454,46 +363,6 @@ config("compiler") { cflags += [ "-pthread" ] ldflags += [ "-pthread" ] } - if (use_gold) { - gold_path = rebase_path("//third_party/binutils/Linux_x64/Release/bin", - root_build_dir) - ldflags += [ - "-B$gold_path", - - # Newer gccs and clangs support -fuse-ld, use the flag to force gold - # selection. - # gcc -- http://gcc.gnu.org/onlinedocs/gcc-4.8.0/gcc/Optimize-Options.html - "-fuse-ld=gold", - - # Experimentation found that using four linking threads - # saved ~20% of link time. - # https://groups.google.com/a/chromium.org/group/chromium-dev/browse_thread/thread/281527606915bb36 - # Only apply this to the target linker, since the host - # linker might not be gold, but isn't used much anyway. - # TODO(raymes): Disable threading because gold is frequently - # crashing on the bots: crbug.com/161942. - #"-Wl,--threads", - #"-Wl,--thread-count=4", - ] - - if (!is_asan && !is_msan && !is_lsan && !is_tsan) { - # TODO(brettw) common.gypi has this only for target toolset. - ldflags += [ "-Wl,--icf=all" ] - } - - # TODO(thestig): Make this flag work with GN. - #if (!is_official_build && !is_chromeos && !(is_asan || is_lsan || is_tsan || is_msan)) { - # ldflags += [ - # "-Wl,--detect-odr-violations", - # ] - #} - } - - if (linux_use_bundled_binutils) { - binutils_path = rebase_path("//third_party/binutils/Linux_x64/Release/bin", - root_build_dir) - cflags += [ "-B$binutils_path" ] - } # Clang-specific compiler flags setup. # ------------------------------------ @@ -501,20 +370,6 @@ config("compiler") { cflags += [ "-fcolor-diagnostics" ] } - # C++11 compiler flags setup. - # --------------------------- - if (is_linux || is_android || is_nacl) { - # gnu++11 instead of c++11 is needed because some code uses typeof() (a - # GNU extension). - # TODO(thakis): Eventually switch this to c++11 instead, - # http://crbug.com/427584 - cflags_cc += [ "-std=gnu++11" ] - } else if (!is_win) { - cc_std = [ "-std=c++11" ] - cflags_cc += cc_std - cflags_objcc += cc_std - } - # Android-specific flags setup. # ----------------------------- if (is_android) { @@ -552,17 +407,10 @@ config("compiler") { } ldflags += [ - "-Wl,--no-undefined", - # Don't allow visible symbols from libgcc or libc++ to be # re-exported. "-Wl,--exclude-libs=libgcc.a", "-Wl,--exclude-libs=libc++_static.a", - - # Don't allow visible symbols from libraries that contain - # assembly code with symbols that aren't hidden properly. - # http://crbug.com/448386 - "-Wl,--exclude-libs=libvpx_assembly_arm.a", ] if (current_cpu == "arm") { ldflags += [ @@ -584,7 +432,7 @@ config("compiler") { } config("compiler_arm_fpu") { - if (current_cpu == "arm" && !is_ios) { + if (current_cpu == "arm") { cflags = [ "-mfpu=$arm_fpu" ] } } @@ -833,19 +681,11 @@ if (is_win) { # TODO(abarth): Re-enable once https://github.com/domokit/mojo/issues/728 # is fixed. # default_warning_flags += [ "-Wnewline-eof" ] - if (!is_nacl) { - # When compiling Objective-C, warns if a method is used whose - # availability is newer than the deployment target. This is not - # required when compiling Chrome for iOS. - default_warning_flags += [ "-Wpartial-availability" ] - } - } - if (gcc_version >= 48) { - default_warning_flags_cc += [ - # See comment for -Wno-c++11-narrowing. - "-Wno-narrowing", - ] + # When compiling Objective-C, warns if a method is used whose + # availability is newer than the deployment target. This is not + # required when compiling Chrome for iOS. + default_warning_flags += [ "-Wpartial-availability" ] } # Suppress warnings about ABI changes on ARM (Clang doesn't give this @@ -883,43 +723,6 @@ if (is_win) { default_warning_flags += [ "-Wno-unused-local-typedefs" ] } } -if (is_clang) { - default_warning_flags += [ - # This warns on using ints as initializers for floats in - # initializer lists (e.g. |int a = f(); CGSize s = { a, a };|), - # which happens in several places in chrome code. Not sure if - # this is worth fixing. - "-Wno-c++11-narrowing", - - # Don't die on dtoa code that uses a char as an array index. - # This is required solely for base/third_party/dmg_fp/dtoa.cc. - # TODO(brettw) move this to that project then! - "-Wno-char-subscripts", - - # Warns on switches on enums that cover all enum values but - # also contain a default: branch. Chrome is full of that. - "-Wno-covered-switch-default", - - # Clang considers the `register` keyword as deprecated, but e.g. - # code generated by flex (used in angle) contains that keyword. - # http://crbug.com/255186 - "-Wno-deprecated-register", - ] - - # NaCl's Clang compiler and Chrome's hermetic Clang compiler will almost - # always have different versions. Certain flags may not be recognized by - # one version or the other. - if (!is_nacl) { - # Flags NaCl does not recognize. - default_warning_flags += [ - # TODO(hans): Get this cleaned up, http://crbug.com/428099 - "-Wno-inconsistent-missing-override", - - # TODO(thakis): Enable this, crbug.com/507717 - "-Wno-shift-negative-value", - ] - } -} # chromium_code --------------------------------------------------------------- # @@ -935,14 +738,8 @@ config("chromium_code") { "-Wextra", ] - # In Chromium code, we define __STDC_foo_MACROS in order to get the - # C99 macros on Mac and Linux. - defines = [ - "__STDC_CONSTANT_MACROS", - "__STDC_FORMAT_MACROS", - ] - - if (!using_sanitizer && (!is_linux || !is_clang || is_official_build)) { + defines = [] + if (!using_sanitizer && (!is_linux || !is_clang)) { # _FORTIFY_SOURCE isn't really supported by Clang now, see # http://llvm.org/bugs/show_bug.cgi?id=16821. # It seems to work fine with Ubuntu 12 headers though, so use it in @@ -975,37 +772,6 @@ config("no_chromium_code") { ] } - if (is_linux) { - # Don't warn about ignoring the return value from e.g. close(). This is - # off by default in some gccs but on by default in others. BSD systems do - # not support this option, since they are usually using gcc 4.2.1, which - # does not have this flag yet. - cflags += [ "-Wno-unused-result" ] - } - - if (is_clang) { - cflags += [ - # TODO(mgiuca): Move this suppression into individual third-party - # libraries as required. http://crbug.com/505301. - "-Wno-overloaded-virtual", - - # Lots of third-party libraries have unused variables. Instead of - # suppressing them individually, we just blanket suppress them here. - "-Wno-unused-variable", - ] - } - - if (is_linux || is_android) { - cflags += [ - # Don't warn about printf format problems. This is off by default in gcc - # but on in Ubuntu's gcc(!). - "-Wno-format", - ] - cflags_cc += [ - # Don't warn about hash_map in third-party code. - "-Wno-deprecated", - ] - } cflags += default_warning_flags cflags_cc += default_warning_flags_cc } @@ -1029,34 +795,6 @@ config("no_rtti") { } } -# Warnings --------------------------------------------------------------------- - -# This will generate warnings when using Clang if code generates exit-time -# destructors, which will slow down closing the program. -# TODO(thakis): Make this a blacklist instead, http://crbug.com/101600 -config("wexit_time_destructors") { - # TODO: Enable on Windows too, http://crbug.com/404525 - if (is_clang && !is_win) { - cflags = [ "-Wexit-time-destructors" ] - } -} - -# On Windows compiling on x64, VC will issue a warning when converting -# size_t to int because it will truncate the value. Our code should not have -# these warnings and one should use a static_cast or a checked_cast for the -# conversion depending on the case. However, a lot of code still needs to be -# fixed. Apply this config to such targets to disable the warning. -# -# Note that this can be applied regardless of platform and architecture to -# clean up the call sites. This will only apply the flag when necessary. -# -# TODO(jschuh): crbug.com/167187 fix this and delete this config. -config("no_size_t_to_int_warning") { - if (is_win && current_cpu == "x64") { - cflags = [ "/wd4267" ] - } -} - # Optimization ----------------------------------------------------------------- # # Note that BUILDCONFIG.gn sets up a variable "default_optimization_config" @@ -1066,9 +804,9 @@ config("no_size_t_to_int_warning") { # add back the one you want to override it with: # # configs -= default_optimization_config -# configs += [ "//build/config/compiler/optimize_max" ] +# configs += [ ":optimize_max" ] -# Shared settings for both "optimize" and "optimize_max" configs. +# Shared settings. # IMPORTANT: On Windows "/O1" and "/O2" must go before the common flags. if (is_win) { common_optimize_on_cflags = [ @@ -1100,25 +838,15 @@ if (is_win) { common_optimize_on_ldflags = [] if (is_android) { - if (!using_sanitizer) { - common_optimize_on_cflags += [ "-fomit-frame-pointer" ] - } - - # TODO(jdduke) Re-enable on mips after resolving linking - # issues with libc++ (crbug.com/456380). - if (current_cpu != "mipsel" && current_cpu != "mips64el") { - common_optimize_on_ldflags += [ - # Warn in case of text relocations. - "-Wl,--warn-shared-textrel", - ] - } + common_optimize_on_ldflags += [ + # Warn in case of text relocations. + "-Wl,--warn-shared-textrel", + ] } - if (is_mac || is_ios) { - if (symbol_level == 2) { - # Mac dead code stripping requires symbols. - common_optimize_on_ldflags += [ "-Wl,-dead_strip" ] - } + if (is_mac) { + # Mac dead code stripping requires symbols. + common_optimize_on_ldflags += [ "-Wl,-dead_strip" ] } else { # Non-Mac Posix linker flags. common_optimize_on_ldflags += [ @@ -1143,10 +871,10 @@ config("optimize") { # Favor size over speed, /O1 must be before the common flags. The GYP # build also specifies /Os and /GF but these are implied by /O1. cflags = [ "/O1" ] + common_optimize_on_cflags + [ "/Oi" ] - } else if (is_android || is_ios) { + } else if (is_android) { cflags = [ "-Os" ] + common_optimize_on_cflags # Favor size over speed. } else { - cflags = [ "-O2" ] + common_optimize_on_cflags + cflags = [ "-O3" ] + common_optimize_on_cflags } ldflags = common_optimize_on_ldflags } @@ -1159,7 +887,7 @@ config("no_optimize") { "/Ob0", # Disable all inlining (on by default). "/RTC1", # Runtime checks for stack frame and uninitialized variables. ] - } else if (is_android && !android_full_debug) { + } else if (is_android) { # On Android we kind of optimize some things that don't affect debugging # much even when optimization is disabled to get the binary size down. cflags = [ @@ -1167,41 +895,9 @@ config("no_optimize") { "-fdata-sections", "-ffunction-sections", ] - if (!using_sanitizer) { - cflags += [ "-fomit-frame-pointer" ] - } ldflags = common_optimize_on_ldflags } else { - cflags = [ "-O0" ] - } -} - -# Turns up the optimization level. On Windows, this implies whole program -# optimization and link-time code generation which is very expensive and should -# be used sparingly. -config("optimize_max") { - ldflags = common_optimize_on_ldflags - if (is_win) { - # Favor speed over size, /O2 must be before the common flags. The GYP - # build also specifies /Ot, /Oi, and /GF, but these are implied by /O2. - cflags = [ "/O2" ] + common_optimize_on_cflags - if (is_official_build) { - # TODO(GYP): TODO(dpranke): Should these only be on in an official - # build, or on all the time? For now we'll require official build so - # that the compile is clean. - cflags += [ - "/GL", # Whole program optimization. - - # Disable Warning 4702 ("Unreachable code") for the WPO/PGO builds. - # Probably anything that this would catch that wouldn't be caught in a - # normal build isn't going to actually be a bug, so the incremental - # value of C4702 for PGO builds is likely very small. - "/wd4702", - ] - ldflags += [ "/LTCG" ] - } - } else { - cflags = [ "-O2" ] + common_optimize_on_cflags + cflags = [ "-O1" ] } } @@ -1217,27 +913,9 @@ config("symbols") { } ldflags = [ "/DEBUG" ] } else { - cflags = [ "-g2" ] - if (use_debug_fission) { - cflags += [ "-gsplit-dwarf" ] - } - } -} - -config("minimal_symbols") { - if (is_win) { - # Linker symbols for backtraces only. - ldflags = [ "/DEBUG" ] - } else { - cflags = [ "-g1" ] - if (use_debug_fission) { - cflags += [ "-gsplit-dwarf" ] - } - } -} - -config("no_symbols") { - if (!is_win) { - cflags = [ "-g0" ] + cflags = [ + "-g3", + "-ggdb3", + ] } } diff --git a/build/config/crypto.gni b/build/config/crypto.gni deleted file mode 100644 index 2cd72d338ca..00000000000 --- a/build/config/crypto.gni +++ /dev/null @@ -1,29 +0,0 @@ -# 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 file declares build flags for the SSL library configuration. -# -# TODO(brettw) this should probably be moved to src/crypto or somewhere, and -# the global build dependency on it should be removed. -# -# PLEASE TRY TO AVOID ADDING FLAGS TO THIS FILE in cases where grit isn't -# required. See the declare_args block of BUILDCONFIG.gn for advice on how -# to set up feature flags. - -declare_args() { - # Use OpenSSL instead of NSS. This is used for all platforms but iOS. (See - # http://crbug.com/338886). - use_openssl = !is_ios -} - -# True when we're using OpenSSL for representing certificates. When targeting -# Android, the platform certificate library is used for certificate -# verification. On other targets, this flag also enables OpenSSL for certificate -# verification, but this configuration is unsupported. -use_openssl_certs = is_android - -# True if NSS is used for certificate verification. Note that this is -# independent from use_openssl. It is possible to use OpenSSL for the crypto -# library, but NSS for the platform certificate library. -use_nss_certs = false diff --git a/build/config/features.gni b/build/config/features.gni deleted file mode 100644 index 93b19dd1431..00000000000 --- a/build/config/features.gni +++ /dev/null @@ -1,204 +0,0 @@ -# Copyright 2014 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 file contains Chrome-feature-related build flags (see ui.gni for -# UI-related ones). These should theoretically be moved to the build files of -# the features themselves. -# -# However, today we have many "bad" dependencies on some of these flags from, -# e.g. base, so they need to be global to match the GYP configuration. Also, -# anything that needs a grit define must be in either this file or ui.gni. -# -# PLEASE TRY TO AVOID ADDING FLAGS TO THIS FILE in cases where grit isn't -# required. See the declare_args block of BUILDCONFIG.gn for advice on how -# to set up feature flags. - -import("//build/config/chrome_build.gni") -if (is_android) { - import("//build/config/android/config.gni") -} - -declare_args() { - # Multicast DNS. - enable_mdns = is_win || is_linux - - enable_plugins = !is_android && !is_ios - - # Enables Native Client support. - # TODO(GYP): Get NaCl linking on other platforms. - # Also, see if we can always get rid of enable_nacl_untrusted and - # enable_pnacl and always build them if enable_nacl is true. - # The "is_nacl" part of the condition is needed to ensure that - # the untrusted code is built properly; arguably it should be - # guarded by "is_nacl" directly rather than enable_nacl_untrusted, but - # this will go away when Mac and Win are working and we can just use - # the commented out logic. - # Eventually we want this to be: - # enable_nacl = !is_ios && !is_android - enable_nacl = (is_linux && !is_chromeos && current_cpu == "x64") || is_nacl - enable_nacl_untrusted = enable_nacl - enable_pnacl = enable_nacl_untrusted - - # If debug_devtools is set to true, JavaScript files for DevTools are stored - # as is and loaded from disk. Otherwise, a concatenated file is stored in - # resources.pak. It is still possible to load JS files from disk by passing - # --debug-devtools cmdline switch. - debug_devtools = false - - # Enables WebRTC. - # TODO(GYP) make mac and android work. - enable_webrtc = !is_ios && !is_mac && !is_android - - # Enables the Media Router. - enable_media_router = !is_ios && !is_android - - # Enables proprietary codecs and demuxers; e.g. H264, MOV, AAC, and MP3. - # Android OS includes support for proprietary codecs regardless of building - # Chromium or Google Chrome. We also ship Google Chrome and Chromecast with - # proprietary codecs. - # TODO(GYP) The GYP build has || chromecast==1 for this: - proprietary_codecs = is_android || is_chrome_branded - - enable_configuration_policy = true - - # Enables support for background apps. - enable_background = !is_ios && !is_android - - enable_captive_portal_detection = !is_android && !is_ios - - # Enables use of the session service, which is enabled by default. - # Android stores them separately on the Java side. - enable_session_service = !is_android && !is_ios - - enable_plugin_installation = is_win || is_mac - - enable_app_list = !is_ios && !is_android - - enable_supervised_users = !is_ios - - enable_autofill_dialog = !is_ios - - enable_google_now = !is_ios && !is_android - - enable_one_click_signin = is_win || is_mac || (is_linux && !is_chromeos) - - enable_remoting = !is_ios && !is_android - - # Enable hole punching for the protected video. - enable_video_hole = is_android - - # Enables browser side Content Decryption Modules. Required for embedders - # (e.g. Android and ChromeCast) that use a browser side CDM. - enable_browser_cdms = is_android - - # Variable safe_browsing is used to control the build time configuration - # for safe browsing feature. Safe browsing can be compiled in 4 different - # levels: 0 disables it, 1 enables it fully, and 2 enables only UI and - # reporting features for use with Data Saver on Mobile, and 3 enables - # extended mobile protection via an external API. When 3 is fully deployed, - # it will replace 2. - if (is_android) { - safe_browsing_mode = 2 - } else if (is_ios) { - safe_browsing_mode = 0 - } else { - safe_browsing_mode = 1 - } -} - -# Additional dependent variables ----------------------------------------------- - -# Set the version of CLD. -# 0: Don't specify the version. This option is for the Finch testing. -# 1: Use only CLD1. -# 2: Use only CLD2. -if (is_android) { - cld_version = 1 -} else { - cld_version = 2 -} - -# libudev usage. This currently only affects the content layer. -use_udev = is_linux - -# Enable the spell checker. -enable_spellcheck = !is_android - -# Use the operating system's spellchecker rather than hunspell. -use_platform_spellchecker = is_android || is_mac - -enable_pepper_cdms = enable_plugins && (is_linux || is_mac || is_win) - -# Enable basic printing support and UI. -enable_basic_printing = !is_chromeos - -# Enable printing with print preview. It does not imply -# enable_basic_printing. It's possible to build Chrome with preview only. -enable_print_preview = !is_android - -# The seccomp-bpf sandbox is only supported on three architectures -# currently. -# Do not disable seccomp_bpf anywhere without talking to -# security@chromium.org! -use_seccomp_bpf = (is_linux || is_android) && - (current_cpu == "x86" || current_cpu == "x64" || - current_cpu == "arm" || current_cpu == "mipsel") - -# Enable notifications everywhere except iOS. -enable_notifications = !is_ios - -# TODO(brettw) this should be moved to net and only dependents get this define. -disable_ftp_support = is_ios - -enable_web_speech = !is_android && !is_ios - -use_dbus = is_linux - -enable_extensions = !is_android && !is_ios - -enable_task_manager = !is_ios && !is_android - -use_cups = is_desktop_linux || is_mac - -enable_themes = !is_android && !is_ios - -# TODO(scottmg) remove this when we've fixed printing. -win_pdf_metafile_for_printing = true - -# Whether we are using the rlz library or not. Platforms like Android send -# rlz codes for searches but do not use the library. -enable_rlz_support = is_win || is_mac || is_ios || is_chromeos -enable_rlz = is_chrome_branded && enable_rlz_support - -enable_settings_app = enable_app_list && !is_chromeos - -enable_service_discovery = enable_mdns || is_mac - -enable_wifi_bootstrapping = is_win || is_mac - -# Image loader extension is enabled on ChromeOS only. -enable_image_loader_extension = is_chromeos - -# Chrome OS: whether to also build the upcoming version of -# ChromeVox, which can then be enabled via a command-line switch. -enable_chromevox_next = false - -# Use brlapi from brltty for braille display support. -use_brlapi = is_chromeos - -# Option controlling the use of GConf (the classic GNOME configuration -# system). -# TODO(GYP) also require !embedded to enable. -use_gconf = is_linux && !is_chromeos - -# Hangout services is an extension that adds extra features to Hangouts. -# For official GYP builds, this flag is set, it will likely need to be -# parameterized in the future for a similar use. -enable_hangout_services_extension = false - -# Whether to back up data before sync. -enable_pre_sync_backup = is_win || is_mac || (is_linux && !is_chromeos) - -# WebVR support disabled until platform implementations have been added -enable_webvr = false diff --git a/build/config/linux/BUILD.gn b/build/config/linux/BUILD.gn index 71a73b2d625..4b02a258deb 100644 --- a/build/config/linux/BUILD.gn +++ b/build/config/linux/BUILD.gn @@ -2,10 +2,7 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. -import("//build/config/linux/pkg_config.gni") -import("//build/config/features.gni") import("//build/config/sysroot.gni") -import("//build/config/ui.gni") config("sdk") { if (sysroot != "") { @@ -22,41 +19,3 @@ config("sdk") { "value") ] } } - -config("fontconfig") { - libs = [ "fontconfig" ] -} - -pkg_config("freetype2") { - packages = [ "freetype2" ] -} - -config("x11") { - libs = [ - "X11", - "Xcomposite", - "Xcursor", - "Xdamage", - "Xext", - "Xfixes", - "Xi", - "Xrender", - "Xtst", - ] -} - -config("xrandr") { - libs = [ "Xrandr" ] -} - -config("xinerama") { - libs = [ "Xinerama" ] -} - -config("xcomposite") { - libs = [ "Xcomposite" ] -} - -config("xext") { - libs = [ "Xext" ] -} diff --git a/build/config/sysroot.gni b/build/config/sysroot.gni index 5bce02e2985..37faae059c3 100644 --- a/build/config/sysroot.gni +++ b/build/config/sysroot.gni @@ -5,8 +5,6 @@ # This header file defines the "sysroot" variable which is the absolute path # of the sysroot. If no sysroot applies, the variable will be an empty string. -import("//build/config/chrome_build.gni") - declare_args() { # The absolute path of the sysroot that is applied when compiling using # the target toolchain. @@ -32,29 +30,9 @@ if (current_toolchain == default_toolchain && target_sysroot != "") { } else { sysroot = "" } -} else if (is_linux && is_chrome_branded && is_official_build && !is_chromeos) { - # For official builds, use the sysroot checked into the internal source repo - # so that the builds work on older versions of Linux. - if (current_cpu == "x64") { - sysroot = rebase_path("//build/linux/debian_wheezy_amd64-sysroot") - } else if (current_cpu == "x86") { - sysroot = rebase_path("//build/linux/debian_wheezy_i386-sysroot") - } else { - # Any other builds don't use a sysroot. - sysroot = "" - } -} else if (is_linux && !is_chromeos) { - if (current_cpu == "mipsel") { - sysroot = rebase_path("//mipsel-sysroot/sysroot") - } else { - sysroot = "" - } } else if (is_mac) { import("//build/config/mac/mac_sdk.gni") sysroot = mac_sdk_path -} else if (is_ios) { - import("//build/config/ios/ios_sdk.gni") - sysroot = ios_sdk_path } else { sysroot = "" } diff --git a/build/config/ui.gni b/build/config/ui.gni deleted file mode 100644 index c2dff4a87df..00000000000 --- a/build/config/ui.gni +++ /dev/null @@ -1,68 +0,0 @@ -# Copyright 2014 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 file contains UI-related build flags. It should theoretically be in the -# src/ui directory and only things that depend on the ui module should get the -# definitions. -# -# However, today we have many "bad" dependencies on some of these flags from, -# e.g. base, so they need to be global. -# -# See also build/config/features.gni - -declare_args() { - # Indicates if Ash is enabled. Ash is the Aura Shell which provides a - # desktop-like environment for Aura. Requires use_aura = true - use_ash = is_win || is_linux - - # Indicates if Ozone is enabled. Ozone is a low-level library layer for Linux - # that does not require X11. - use_ozone = false - - # Indicates if GLFW is enabled. GLFW is an abstraction layer for the - # windowing system and OpenGL rendering, providing cross-platform support - # for creating windows and OpenGL surfaces and contexts, and handling - # window system events and input. - use_glfw = false - - # Support ChromeOS touchpad gestures with ozone. - use_evdev_gestures = false - - # Indicates if Aura is enabled. Aura is a low-level windowing library, sort - # of a replacement for GDI or GTK. - use_aura = is_win || is_linux - - # True means the UI is built using the "views" framework. - toolkit_views = is_mac || is_win || is_chromeos || use_aura - - # Whether the entire browser uses toolkit-views on Mac instead of Cocoa. - mac_views_browser = false - - # Whether we should use glib, a low level C utility library. - use_glib = is_linux && !use_ozone -} - -# Additional dependent variables ----------------------------------------------- -# -# These variables depend on other variables and can't be set externally. - -use_cairo = false -use_pango = false - -# Use GPU accelerated cross process image transport by default on linux builds -# with the Aura window manager. -ui_compositor_image_transport = use_aura && is_linux - -use_default_render_theme = use_aura || is_linux - -# Indicates if the UI toolkit depends on X11. -use_x11 = is_linux && !use_ozone && !use_glfw - -use_ozone_evdev = use_ozone - -use_clipboard_aurax11 = is_linux && use_aura && use_x11 - -enable_hidpi = is_mac || is_chromeos || is_win || is_linux - -enable_topchrome_md = false diff --git a/build/config/win/BUILD.gn b/build/config/win/BUILD.gn index 261a1ac4def..c9391005a93 100644 --- a/build/config/win/BUILD.gn +++ b/build/config/win/BUILD.gn @@ -141,7 +141,7 @@ config("no_incremental_linking") { # config should be applied to large modules to turn off incremental linking # when it won't work. config("default_large_module_incremental_linking") { - if (symbol_level > 0 && (current_cpu == "x86" || !is_component_build)) { + if (current_cpu == "x86" || !is_component_build) { # When symbols are on, things get so large that the tools fail due to the # size of the .ilk files. ldflags = incremental_linking_off_switch diff --git a/build/gyp_chromium b/build/gyp_chromium deleted file mode 100755 index 9dac8710ff2..00000000000 --- a/build/gyp_chromium +++ /dev/null @@ -1,333 +0,0 @@ -#!/usr/bin/env python - -# Copyright (c) 2012 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 script is wrapper for Chromium that adds some support for how GYP -# is invoked by Chromium beyond what can be done in the gclient hooks. - -import argparse -import glob -import gyp_environment -import os -import re -import shlex -import subprocess -import string -import sys -import vs_toolchain - -script_dir = os.path.dirname(os.path.realpath(__file__)) -chrome_src = os.path.abspath(os.path.join(script_dir, os.pardir)) - -sys.path.insert(0, os.path.join(chrome_src, 'tools', 'gyp', 'pylib')) -import gyp - -# Assume this file is in a one-level-deep subdirectory of the source root. -SRC_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) - -# Add paths so that pymod_do_main(...) can import files. -sys.path.insert(1, os.path.join(chrome_src, 'android_webview', 'tools')) -sys.path.insert(1, os.path.join(chrome_src, 'build', 'android', 'gyp')) -sys.path.insert(1, os.path.join(chrome_src, 'chrome', 'tools', 'build')) -sys.path.insert(1, os.path.join(chrome_src, 'chromecast', 'tools', 'build')) -sys.path.insert(1, os.path.join(chrome_src, 'ios', 'chrome', 'tools', 'build')) -sys.path.insert(1, os.path.join(chrome_src, 'native_client', 'build')) -sys.path.insert(1, os.path.join(chrome_src, 'native_client_sdk', 'src', - 'build_tools')) -sys.path.insert(1, os.path.join(chrome_src, 'remoting', 'tools', 'build')) -sys.path.insert(1, os.path.join(chrome_src, 'third_party', 'liblouis')) -sys.path.insert(1, os.path.join(chrome_src, 'third_party', 'WebKit', - 'Source', 'build', 'scripts')) -sys.path.insert(1, os.path.join(chrome_src, 'tools')) -sys.path.insert(1, os.path.join(chrome_src, 'tools', 'generate_shim_headers')) -sys.path.insert(1, os.path.join(chrome_src, 'tools', 'grit')) - -# On Windows, Psyco shortens warm runs of build/gyp_chromium by about -# 20 seconds on a z600 machine with 12 GB of RAM, from 90 down to 70 -# seconds. Conversely, memory usage of build/gyp_chromium with Psyco -# maxes out at about 158 MB vs. 132 MB without it. -# -# Psyco uses native libraries, so we need to load a different -# installation depending on which OS we are running under. It has not -# been tested whether using Psyco on our Mac and Linux builds is worth -# it (the GYP running time is a lot shorter, so the JIT startup cost -# may not be worth it). -if sys.platform == 'win32': - try: - sys.path.insert(0, os.path.join(chrome_src, 'third_party', 'psyco_win32')) - import psyco - except: - psyco = None -else: - psyco = None - - -def GetSupplementalFiles(): - """Returns a list of the supplemental files that are included in all GYP - sources.""" - return glob.glob(os.path.join(chrome_src, '*', 'supplement.gypi')) - - -def ProcessGypDefinesItems(items): - """Converts a list of strings to a list of key-value pairs.""" - result = [] - for item in items: - tokens = item.split('=', 1) - # Some GYP variables have hyphens, which we don't support. - if len(tokens) == 2: - result += [(tokens[0], tokens[1])] - else: - # No value supplied, treat it as a boolean and set it. Note that we - # use the string '1' here so we have a consistent definition whether - # you do 'foo=1' or 'foo'. - result += [(tokens[0], '1')] - return result - - -def GetGypVars(supplemental_files): - """Returns a dictionary of all GYP vars.""" - # Find the .gyp directory in the user's home directory. - home_dot_gyp = os.environ.get('GYP_CONFIG_DIR', None) - if home_dot_gyp: - home_dot_gyp = os.path.expanduser(home_dot_gyp) - if not home_dot_gyp: - home_vars = ['HOME'] - if sys.platform in ('cygwin', 'win32'): - home_vars.append('USERPROFILE') - for home_var in home_vars: - home = os.getenv(home_var) - if home != None: - home_dot_gyp = os.path.join(home, '.gyp') - if not os.path.exists(home_dot_gyp): - home_dot_gyp = None - else: - break - - if home_dot_gyp: - include_gypi = os.path.join(home_dot_gyp, "include.gypi") - if os.path.exists(include_gypi): - supplemental_files += [include_gypi] - - # GYP defines from the supplemental.gypi files. - supp_items = [] - for supplement in supplemental_files: - with open(supplement, 'r') as f: - try: - file_data = eval(f.read(), {'__builtins__': None}, None) - except SyntaxError, e: - e.filename = os.path.abspath(supplement) - raise - variables = file_data.get('variables', []) - for v in variables: - supp_items += [(v, str(variables[v]))] - - # GYP defines from the environment. - env_items = ProcessGypDefinesItems( - shlex.split(os.environ.get('GYP_DEFINES', ''))) - - # GYP defines from the command line. - parser = argparse.ArgumentParser() - parser.add_argument('-D', dest='defines', action='append', default=[]) - cmdline_input_items = parser.parse_known_args()[0].defines - cmdline_items = ProcessGypDefinesItems(cmdline_input_items) - - vars_dict = dict(supp_items + env_items + cmdline_items) - return vars_dict - - -def GetOutputDirectory(): - """Returns the output directory that GYP will use.""" - - # Handle command line generator flags. - parser = argparse.ArgumentParser() - parser.add_argument('-G', dest='genflags', default=[], action='append') - genflags = parser.parse_known_args()[0].genflags - - # Handle generator flags from the environment. - genflags += shlex.split(os.environ.get('GYP_GENERATOR_FLAGS', '')) - - needle = 'output_dir=' - for item in genflags: - if item.startswith(needle): - return item[len(needle):] - - return 'out' - - -def additional_include_files(supplemental_files, args=[]): - """ - Returns a list of additional (.gypi) files to include, without duplicating - ones that are already specified on the command line. The list of supplemental - include files is passed in as an argument. - """ - # Determine the include files specified on the command line. - # This doesn't cover all the different option formats you can use, - # but it's mainly intended to avoid duplicating flags on the automatic - # makefile regeneration which only uses this format. - specified_includes = set() - for arg in args: - if arg.startswith('-I') and len(arg) > 2: - specified_includes.add(os.path.realpath(arg[2:])) - - result = [] - def AddInclude(path): - if os.path.realpath(path) not in specified_includes: - result.append(path) - - if os.environ.get('GYP_INCLUDE_FIRST') != None: - AddInclude(os.path.join(chrome_src, os.environ.get('GYP_INCLUDE_FIRST'))) - - # Always include common.gypi. - AddInclude(os.path.join(script_dir, 'common.gypi')) - - # Optionally add supplemental .gypi files if present. - for supplement in supplemental_files: - AddInclude(supplement) - - if os.environ.get('GYP_INCLUDE_LAST') != None: - AddInclude(os.path.join(chrome_src, os.environ.get('GYP_INCLUDE_LAST'))) - - return result - - -if __name__ == '__main__': - # Disabling garbage collection saves about 1 second out of 16 on a Linux - # z620 workstation. Since this is a short-lived process it's not a problem to - # leak a few cyclyc references in order to spare the CPU cycles for - # scanning the heap. - import gc - gc.disable() - - args = sys.argv[1:] - - use_analyzer = len(args) and args[0] == '--analyzer' - if use_analyzer: - args.pop(0) - os.environ['GYP_GENERATORS'] = 'analyzer' - args.append('-Gconfig_path=' + args.pop(0)) - args.append('-Ganalyzer_output_path=' + args.pop(0)) - - if int(os.environ.get('GYP_CHROMIUM_NO_ACTION', 0)): - print 'Skipping gyp_chromium due to GYP_CHROMIUM_NO_ACTION env var.' - sys.exit(0) - - # Use the Psyco JIT if available. - if psyco: - psyco.profile() - print "Enabled Psyco JIT." - - # Fall back on hermetic python if we happen to get run under cygwin. - # TODO(bradnelson): take this out once this issue is fixed: - # http://code.google.com/p/gyp/issues/detail?id=177 - if sys.platform == 'cygwin': - import find_depot_tools - depot_tools_path = find_depot_tools.add_depot_tools_to_path() - python_dir = sorted(glob.glob(os.path.join(depot_tools_path, - 'python2*_bin')))[-1] - env = os.environ.copy() - env['PATH'] = python_dir + os.pathsep + env.get('PATH', '') - cmd = [os.path.join(python_dir, 'python.exe')] + sys.argv - sys.exit(subprocess.call(cmd, env=env)) - - # This could give false positives since it doesn't actually do real option - # parsing. Oh well. - gyp_file_specified = any(arg.endswith('.gyp') for arg in args) - - gyp_environment.SetEnvironment() - - # If we didn't get a file, check an env var, and then fall back to - # assuming 'all.gyp' from the same directory as the script. - if not gyp_file_specified: - gyp_file = os.environ.get('CHROMIUM_GYP_FILE') - if gyp_file: - # Note that CHROMIUM_GYP_FILE values can't have backslashes as - # path separators even on Windows due to the use of shlex.split(). - args.extend(shlex.split(gyp_file)) - else: - args.append(os.path.join(script_dir, 'all.gyp')) - - supplemental_includes = GetSupplementalFiles() - gyp_vars_dict = GetGypVars(supplemental_includes) - # There shouldn't be a circular dependency relationship between .gyp files, - # but in Chromium's .gyp files, on non-Mac platforms, circular relationships - # currently exist. The check for circular dependencies is currently - # bypassed on other platforms, but is left enabled on iOS, where a violation - # of the rule causes Xcode to misbehave badly. - # TODO(mark): Find and kill remaining circular dependencies, and remove this - # option. http://crbug.com/35878. - # TODO(tc): Fix circular dependencies in ChromiumOS then add linux2 to the - # list. - if gyp_vars_dict.get('OS') != 'ios': - args.append('--no-circular-check') - - # libtool on Mac warns about duplicate basenames in static libraries, so - # they're disallowed in general by gyp. We are lax on this point, so disable - # this check other than on Mac. GN does not use static libraries as heavily, - # so over time this restriction will mostly go away anyway, even on Mac. - # https://code.google.com/p/gyp/issues/detail?id=384 - if sys.platform != 'darwin': - args.append('--no-duplicate-basename-check') - - # We explicitly don't support the make gyp generator (crbug.com/348686). Be - # nice and fail here, rather than choking in gyp. - if re.search(r'(^|,|\s)make($|,|\s)', os.environ.get('GYP_GENERATORS', '')): - print 'Error: make gyp generator not supported (check GYP_GENERATORS).' - sys.exit(1) - - # We explicitly don't support the native msvs gyp generator. Be nice and - # fail here, rather than generating broken projects. - if re.search(r'(^|,|\s)msvs($|,|\s)', os.environ.get('GYP_GENERATORS', '')): - print 'Error: msvs gyp generator not supported (check GYP_GENERATORS).' - print 'Did you mean to use the `msvs-ninja` generator?' - sys.exit(1) - - # If CHROMIUM_GYP_SYNTAX_CHECK is set to 1, it will invoke gyp with --check - # to enfore syntax checking. - syntax_check = os.environ.get('CHROMIUM_GYP_SYNTAX_CHECK') - if syntax_check and int(syntax_check): - args.append('--check') - - # TODO(dmikurube): Remove these checks and messages after a while. - if ('linux_use_tcmalloc' in gyp_vars_dict or - 'android_use_tcmalloc' in gyp_vars_dict): - print '*****************************************************************' - print '"linux_use_tcmalloc" and "android_use_tcmalloc" are deprecated!' - print '-----------------------------------------------------------------' - print 'You specify "linux_use_tcmalloc" or "android_use_tcmalloc" in' - print 'your GYP_DEFINES. Please switch them into "use_allocator" now.' - print 'See http://crbug.com/345554 for the details.' - print '*****************************************************************' - - # Automatically turn on crosscompile support for platforms that need it. - # (The Chrome OS build sets CC_host / CC_target which implicitly enables - # this mode.) - if all(('ninja' in os.environ.get('GYP_GENERATORS', ''), - gyp_vars_dict.get('OS') in ['android', 'ios'], - 'GYP_CROSSCOMPILE' not in os.environ)): - os.environ['GYP_CROSSCOMPILE'] = '1' - if gyp_vars_dict.get('OS') == 'android': - args.append('--check') - - args.extend( - ['-I' + i for i in additional_include_files(supplemental_includes, args)]) - - args.extend(['-D', 'gyp_output_dir=' + GetOutputDirectory()]) - - if not use_analyzer: - print 'Updating projects from gyp files...' - sys.stdout.flush() - - # Off we go... - gyp_rc = gyp.main(args) - - if not use_analyzer: - vs2013_runtime_dll_dirs = vs_toolchain.SetEnvironmentAndGetRuntimeDllDirs() - if vs2013_runtime_dll_dirs: - x64_runtime, x86_runtime = vs2013_runtime_dll_dirs - vs_toolchain.CopyVsRuntimeDlls( - os.path.join(chrome_src, GetOutputDirectory()), - (x86_runtime, x64_runtime)) - - sys.exit(gyp_rc) diff --git a/build/gyp_chromium.py b/build/gyp_chromium.py deleted file mode 100644 index f9e8ac8ed83..00000000000 --- a/build/gyp_chromium.py +++ /dev/null @@ -1,18 +0,0 @@ -# Copyright 2012 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 file is (possibly, depending on python version) imported by -# gyp_chromium when GYP_PARALLEL=1 and it creates sub-processes -# through the multiprocessing library. - -# Importing in Python 2.6 (fixed in 2.7) on Windows doesn't search for -# imports that don't end in .py (and aren't directories with an -# __init__.py). This wrapper makes "import gyp_chromium" work with -# those old versions and makes it possible to execute gyp_chromium.py -# directly on Windows where the extension is useful. - -import os - -path = os.path.abspath(os.path.split(__file__)[0]) -execfile(os.path.join(path, 'gyp_chromium')) diff --git a/build/gyp_chromium_test.py b/build/gyp_chromium_test.py deleted file mode 100755 index 0c0e479d1c3..00000000000 --- a/build/gyp_chromium_test.py +++ /dev/null @@ -1,66 +0,0 @@ -#!/usr/bin/env python -# 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 os -import sys -import unittest - -SCRIPT_DIR = os.path.abspath(os.path.dirname(__file__)) -SRC_DIR = os.path.dirname(SCRIPT_DIR) - -sys.path.append(os.path.join(SRC_DIR, 'third_party', 'pymock')) - -import mock - -# TODO(sbc): Make gyp_chromium more testable by putting the code in -# a .py file. -gyp_chromium = __import__('gyp_chromium') - - -class TestGetOutputDirectory(unittest.TestCase): - @mock.patch('os.environ', {}) - @mock.patch('sys.argv', [__file__]) - def testDefaultValue(self): - self.assertEqual(gyp_chromium.GetOutputDirectory(), 'out') - - @mock.patch('os.environ', {'GYP_GENERATOR_FLAGS': 'output_dir=envfoo'}) - @mock.patch('sys.argv', [__file__]) - def testEnvironment(self): - self.assertEqual(gyp_chromium.GetOutputDirectory(), 'envfoo') - - @mock.patch('os.environ', {'GYP_GENERATOR_FLAGS': 'output_dir=envfoo'}) - @mock.patch('sys.argv', [__file__, '-Goutput_dir=cmdfoo']) - def testGFlagOverridesEnv(self): - self.assertEqual(gyp_chromium.GetOutputDirectory(), 'cmdfoo') - - @mock.patch('os.environ', {}) - @mock.patch('sys.argv', [__file__, '-G', 'output_dir=foo']) - def testGFlagWithSpace(self): - self.assertEqual(gyp_chromium.GetOutputDirectory(), 'foo') - - -class TestGetGypVars(unittest.TestCase): - @mock.patch('os.environ', {}) - def testDefault(self): - self.assertEqual(gyp_chromium.GetGypVars([]), {}) - - @mock.patch('os.environ', {}) - @mock.patch('sys.argv', [__file__, '-D', 'foo=bar']) - def testDFlags(self): - self.assertEqual(gyp_chromium.GetGypVars([]), {'foo': 'bar'}) - - @mock.patch('os.environ', {}) - @mock.patch('sys.argv', [__file__, '-D', 'foo']) - def testDFlagsNoValue(self): - self.assertEqual(gyp_chromium.GetGypVars([]), {'foo': '1'}) - - @mock.patch('os.environ', {}) - @mock.patch('sys.argv', [__file__, '-D', 'foo=bar', '-Dbaz']) - def testDFlagMulti(self): - self.assertEqual(gyp_chromium.GetGypVars([]), {'foo': 'bar', 'baz': '1'}) - - -if __name__ == '__main__': - unittest.main() diff --git a/build/json_schema_api.gni b/build/json_schema_api.gni deleted file mode 100644 index e1c2d33409d..00000000000 --- a/build/json_schema_api.gni +++ /dev/null @@ -1,242 +0,0 @@ -# Copyright 2014 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. - -# Defines a static library corresponding to the output of schema compiler tools -# over a set of extensions API schemas (IDL or JSON format.) The library target -# has implicit hard dependencies on all schema files listed by the invoker and -# is itself a hard dependency. -# -# Invocations of this template may use the following variables: -# -# sources [required] A list of schema files to be compiled. -# -# root_namespace [required] -# A Python string substituion pattern used to generate the C++ -# namespace for each API. Use %(namespace)s to replace with the API -# namespace, like "toplevel::%(namespace)s_api". -# -# schema_include_rules [optional] -# A list of paths to include when searching for referenced objects, -# with the namespace separated by a :. -# Example: -# [ '/foo/bar:Foo::Bar::%(namespace)s' ] -# -# schemas [optional, default = false] -# Boolean indicating if the schema files should be generated. -# -# bundle [optional, default = false] -# Boolean indicating if the schema bundle files should be generated. -# -# bundle_registration [optional, default = false] -# Boolean indicating if the API registration bundle files should be generated. -# -# impl_dir [required if bundle_registration = true, otherwise unused] -# The path containing C++ implementations of API functions. This path is -# used as the root path when looking for {schema}/{schema}_api.h headers -# when generating API registration bundles. Such headers, if found, are -# automatically included by the generated code. -# -# uncompiled_sources [optional, only used when bundle = true or -# bundle_registration = true] -# A list of schema files which should not be compiled, but which should still -# be processed for API bundle generation. -# -# deps [optional] -# If any deps are specified they will be inherited by the static library -# target. -# -# generate_static_library [optional, defaults to false] -# Produces a static library instead of a source_set. -# -# The generated library target also inherits the visibility and output_name -# of its invoker. - -template("json_schema_api") { - assert(defined(invoker.sources), - "\"sources\" must be defined for the $target_name template.") - assert(defined(invoker.root_namespace), - "\"root_namespace\" must be defined for the $target_name template.") - - schemas = defined(invoker.schemas) && invoker.schemas - bundle = defined(invoker.bundle) && invoker.bundle - bundle_registration = - defined(invoker.bundle_registration) && invoker.bundle_registration - - schema_include_rules = "" - if (defined(invoker.schema_include_rules)) { - schema_include_rules = invoker.schema_include_rules - } - - # Keep a copy of the target_name here since it will be trampled - # in nested targets. - target_visibility = [ ":$target_name" ] - - generated_config_name = target_name + "_generated_config" - config(generated_config_name) { - include_dirs = [ root_gen_dir ] - visibility = target_visibility - } - - root_namespace = invoker.root_namespace - - compiler_root = "//tools/json_schema_compiler" - compiler_script = "$compiler_root/compiler.py" - compiler_sources = [ - "$compiler_root/cc_generator.py", - "$compiler_root/code.py", - "$compiler_root/compiler.py", - "$compiler_root/cpp_generator.py", - "$compiler_root/cpp_type_generator.py", - "$compiler_root/cpp_util.py", - "$compiler_root/h_generator.py", - "$compiler_root/idl_schema.py", - "$compiler_root/model.py", - "$compiler_root/util_cc_helper.py", - ] - - if (schemas) { - schema_generator_name = target_name + "_schema_generator" - action_foreach(schema_generator_name) { - script = compiler_script - sources = invoker.sources - inputs = compiler_sources - outputs = [ - "$target_gen_dir/{{source_name_part}}.cc", - "$target_gen_dir/{{source_name_part}}.h", - ] - args = [ - "{{source}}", - "--root=" + rebase_path("//", root_build_dir), - "--destdir=" + rebase_path(root_gen_dir, root_build_dir), - "--namespace=$root_namespace", - "--generator=cpp", - "--include-rules=$schema_include_rules", - ] - - if (defined(invoker.visibility)) { - # If visibility is restricted, add our own target to it. - visibility = invoker.visibility + target_visibility - } - } - } - - if (bundle) { - uncompiled_sources = [] - if (defined(invoker.uncompiled_sources)) { - uncompiled_sources = invoker.uncompiled_sources - } - - bundle_generator_schema_name = target_name + "_bundle_generator_schema" - action(bundle_generator_schema_name) { - script = compiler_script - inputs = compiler_sources + invoker.sources + uncompiled_sources - outputs = [ - "$target_gen_dir/generated_schemas.cc", - "$target_gen_dir/generated_schemas.h", - ] - args = [ - "--root=" + rebase_path("//", root_build_dir), - "--destdir=" + rebase_path(root_gen_dir, root_build_dir), - "--namespace=$root_namespace", - "--generator=cpp-bundle-schema", - "--include-rules=$schema_include_rules", - ] + rebase_path(invoker.sources, root_build_dir) + - rebase_path(uncompiled_sources, root_build_dir) - } - } - - if (bundle_registration) { - uncompiled_sources = [] - if (defined(invoker.uncompiled_sources)) { - uncompiled_sources = invoker.uncompiled_sources - } - - assert(defined(invoker.impl_dir), - "\"impl_dir\" must be defined for the $target_name template.") - - # Child directory inside the generated file tree. - gen_child_dir = rebase_path(invoker.impl_dir, "//") - - bundle_generator_registration_name = - target_name + "_bundle_generator_registration" - action(bundle_generator_registration_name) { - script = compiler_script - inputs = compiler_sources + invoker.sources + uncompiled_sources - outputs = [ - "$root_gen_dir/$gen_child_dir/generated_api_registration.cc", - "$root_gen_dir/$gen_child_dir/generated_api_registration.h", - ] - args = [ - "--root=" + rebase_path("//", root_build_dir), - "--destdir=" + rebase_path(root_gen_dir, root_build_dir), - "--namespace=$root_namespace", - "--generator=cpp-bundle-registration", - "--impl-dir=$gen_child_dir", - "--include-rules=$schema_include_rules", - ] + rebase_path(invoker.sources, root_build_dir) + - rebase_path(uncompiled_sources, root_build_dir) - } - } - - # Compute the contents of the library/source set. - lib_sources = invoker.sources - lib_deps = [] - lib_public_deps = [] - lib_extra_configs = [] - - if (schemas) { - lib_sources += get_target_outputs(":$schema_generator_name") - lib_public_deps += [ ":$schema_generator_name" ] - lib_deps += [ "//tools/json_schema_compiler:generated_api_util" ] - lib_extra_configs += [ "//build/config/compiler:no_size_t_to_int_warning" ] - } - - if (bundle) { - lib_sources += get_target_outputs(":$bundle_generator_schema_name") - lib_deps += [ ":$bundle_generator_schema_name" ] - } - - if (bundle_registration) { - lib_sources += get_target_outputs(":$bundle_generator_registration_name") - lib_deps += [ ":$bundle_generator_registration_name" ] - } - - if (defined(invoker.deps)) { - lib_deps += invoker.deps - } - - # Generate either a static library or a source set. - if (defined(invoker.generate_static_library) && - invoker.generate_static_library) { - static_library(target_name) { - sources = lib_sources - deps = lib_deps - public_deps = lib_public_deps - configs += lib_extra_configs - public_configs = [ ":$generated_config_name" ] - - if (defined(invoker.visibility)) { - visibility = invoker.visibility - } - if (defined(invoker.output_name)) { - output_name = invoker.output_name - } - } - } else { - source_set(target_name) { - sources = lib_sources - deps = lib_deps - public_deps = lib_public_deps - configs += lib_extra_configs - public_configs = [ ":$generated_config_name" ] - - if (defined(invoker.visibility)) { - visibility = invoker.visibility - } - if (defined(invoker.output_name)) { - output_name = invoker.output_name - } - } - } -} diff --git a/build/json_schema_bundle_compile.gypi b/build/json_schema_bundle_compile.gypi deleted file mode 100644 index a3020136d3f..00000000000 --- a/build/json_schema_bundle_compile.gypi +++ /dev/null @@ -1,83 +0,0 @@ -# Copyright (c) 2012 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. - -{ - 'variables': { - # When including this gypi, the following variables must be set: - # schema_files: - # An array of json or idl files that comprise the api model. - # schema_include_rules (optional): - # An array of paths to include when searching for referenced objects, - # with the namespace separated by a :. - # Example: - # [ '/foo/bar:Foo::Bar::%(namespace)s' ] - # cc_dir: - # The directory to put the generated code in. - # root_namespace: - # A Python string substituion pattern used to generate the C++ - # namespace for each API. Use %(namespace)s to replace with the API - # namespace, like "toplevel::%(namespace)s_api". - # - # Functions and namespaces can be excluded by setting "nocompile" to true. - # The default root path of API implementation sources is - # chrome/browser/extensions/api and can be overridden by setting "impl_dir". - 'api_gen_dir': '<(DEPTH)/tools/json_schema_compiler', - 'api_gen': '<(api_gen_dir)/compiler.py', - 'generator_files': [ - '<(api_gen_dir)/cc_generator.py', - '<(api_gen_dir)/code.py', - '<(api_gen_dir)/compiler.py', - '<(api_gen_dir)/cpp_bundle_generator.py', - '<(api_gen_dir)/cpp_type_generator.py', - '<(api_gen_dir)/cpp_util.py', - '<(api_gen_dir)/h_generator.py', - '<(api_gen_dir)/idl_schema.py', - '<(api_gen_dir)/json_schema.py', - '<(api_gen_dir)/model.py', - '<(api_gen_dir)/util_cc_helper.py', - ], - 'schema_include_rules': [], - }, - 'actions': [ - { - 'action_name': 'genapi_bundle_schema', - 'inputs': [ - '<@(generator_files)', - '<@(schema_files)', - '<@(non_compiled_schema_files)', - ], - 'outputs': [ - '<(SHARED_INTERMEDIATE_DIR)/<(cc_dir)/generated_schemas.h', - '<(SHARED_INTERMEDIATE_DIR)/<(cc_dir)/generated_schemas.cc', - ], - 'action': [ - 'python', - '<(api_gen)', - '--root=<(DEPTH)', - '--destdir=<(SHARED_INTERMEDIATE_DIR)', - '--namespace=<(root_namespace)', - '--generator=cpp-bundle-schema', - '--include-rules=<(schema_include_rules)', - '<@(schema_files)', - '<@(non_compiled_schema_files)', - ], - 'message': 'Generating C++ API bundle code for schemas', - 'process_outputs_as_sources': 1, - # Avoid running MIDL compiler on IDL input files. - 'explicit_idl_action': 1, - }, - ], - 'include_dirs': [ - '<(SHARED_INTERMEDIATE_DIR)', - '<(DEPTH)', - ], - 'direct_dependent_settings': { - 'include_dirs': [ - '<(SHARED_INTERMEDIATE_DIR)', - ] - }, - # This target exports a hard dependency because it generates header - # files. - 'hard_dependency': 1, -} diff --git a/build/json_schema_bundle_registration_compile.gypi b/build/json_schema_bundle_registration_compile.gypi deleted file mode 100644 index 8c5af4e8a02..00000000000 --- a/build/json_schema_bundle_registration_compile.gypi +++ /dev/null @@ -1,78 +0,0 @@ -# Copyright 2014 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. - -{ - 'variables': { - # When including this gypi, the following variables must be set: - # schema_files: - # An array of json or idl files that comprise the api model. - # impl_dir_: - # The root path of API implementations; also used for the - # output location. (N.B. Named as such to prevent gyp from - # expanding it as a relative path.) - # root_namespace: - # A Python string substituion pattern used to generate the C++ - # namespace for each API. Use %(namespace)s to replace with the API - # namespace, like "toplevel::%(namespace)s_api". - # - # Functions and namespaces can be excluded by setting "nocompile" to true. - 'api_gen_dir': '<(DEPTH)/tools/json_schema_compiler', - 'api_gen': '<(api_gen_dir)/compiler.py', - 'generator_files': [ - '<(api_gen_dir)/cc_generator.py', - '<(api_gen_dir)/code.py', - '<(api_gen_dir)/compiler.py', - '<(api_gen_dir)/cpp_bundle_generator.py', - '<(api_gen_dir)/cpp_type_generator.py', - '<(api_gen_dir)/cpp_util.py', - '<(api_gen_dir)/h_generator.py', - '<(api_gen_dir)/idl_schema.py', - '<(api_gen_dir)/json_schema.py', - '<(api_gen_dir)/model.py', - '<(api_gen_dir)/util_cc_helper.py', - ], - }, - 'actions': [ - { - # GN version: json_schema_api.gni - 'action_name': 'genapi_bundle_registration', - 'inputs': [ - '<@(generator_files)', - '<@(schema_files)', - '<@(non_compiled_schema_files)', - ], - 'outputs': [ - '<(SHARED_INTERMEDIATE_DIR)/<(impl_dir_)/generated_api_registration.h', - '<(SHARED_INTERMEDIATE_DIR)/<(impl_dir_)/generated_api_registration.cc', - ], - 'action': [ - 'python', - '<(api_gen)', - '--root=<(DEPTH)', - '--destdir=<(SHARED_INTERMEDIATE_DIR)', - '--namespace=<(root_namespace)', - '--generator=cpp-bundle-registration', - '--impl-dir=<(impl_dir_)', - '<@(schema_files)', - '<@(non_compiled_schema_files)', - ], - 'message': 'Generating C++ API bundle code for function registration', - 'process_outputs_as_sources': 1, - # Avoid running MIDL compiler on IDL input files. - 'explicit_idl_action': 1, - }, - ], - 'include_dirs': [ - '<(SHARED_INTERMEDIATE_DIR)', - '<(DEPTH)', - ], - 'direct_dependent_settings': { - 'include_dirs': [ - '<(SHARED_INTERMEDIATE_DIR)', - ] - }, - # This target exports a hard dependency because it generates header - # files. - 'hard_dependency': 1, -} diff --git a/build/json_schema_compile.gypi b/build/json_schema_compile.gypi deleted file mode 100644 index 6e5727a6ba4..00000000000 --- a/build/json_schema_compile.gypi +++ /dev/null @@ -1,123 +0,0 @@ -# Copyright (c) 2012 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. - -{ - 'variables': { - # When including this gypi, the following variables must be set: - # schema_files: - # An array of json or idl files that comprise the api model. - # schema_include_rules (optional): - # An array of paths to include when searching for referenced objects, - # with the namespace separated by a :. - # Example: - # [ '/foo/bar:Foo::Bar::%(namespace)s' ] - # cc_dir: - # The directory to put the generated code in. - # root_namespace: - # A Python string substituion pattern used to generate the C++ - # namespace for each API. Use %(namespace)s to replace with the API - # namespace, like "toplevel::%(namespace)s_api". - # - # Functions and namespaces can be excluded by setting "nocompile" to true. - 'api_gen_dir': '<(DEPTH)/tools/json_schema_compiler', - 'api_gen': '<(api_gen_dir)/compiler.py', - 'schema_include_rules': [], - }, - 'rules': [ - { - # GN version: json_schema_api.gni - 'rule_name': 'genapi', - 'msvs_external_rule': 1, - 'extension': 'json', - 'inputs': [ - '<(api_gen_dir)/cc_generator.py', - '<(api_gen_dir)/code.py', - '<(api_gen_dir)/compiler.py', - '<(api_gen_dir)/cpp_generator.py', - '<(api_gen_dir)/cpp_type_generator.py', - '<(api_gen_dir)/cpp_util.py', - '<(api_gen_dir)/h_generator.py', - '<(api_gen_dir)/json_schema.py', - '<(api_gen_dir)/model.py', - '<(api_gen_dir)/util.cc', - '<(api_gen_dir)/util.h', - '<(api_gen_dir)/util_cc_helper.py', - # TODO(calamity): uncomment this when gyp on windows behaves like other - # platforms. List expansions of filepaths in inputs expand to different - # things. - # '<@(schema_files)', - ], - 'outputs': [ - '<(SHARED_INTERMEDIATE_DIR)/<(cc_dir)/<(RULE_INPUT_DIRNAME)/<(RULE_INPUT_ROOT).cc', - '<(SHARED_INTERMEDIATE_DIR)/<(cc_dir)/<(RULE_INPUT_DIRNAME)/<(RULE_INPUT_ROOT).h', - ], - 'action': [ - 'python', - '<(api_gen)', - '<(RULE_INPUT_PATH)', - '--root=<(DEPTH)', - '--destdir=<(SHARED_INTERMEDIATE_DIR)', - '--namespace=<(root_namespace)', - '--generator=cpp', - '--include-rules=<(schema_include_rules)' - ], - 'message': 'Generating C++ code from <(RULE_INPUT_PATH) json files', - 'process_outputs_as_sources': 1, - }, - { - 'rule_name': 'genapi_idl', - 'msvs_external_rule': 1, - 'extension': 'idl', - 'inputs': [ - '<(api_gen_dir)/cc_generator.py', - '<(api_gen_dir)/code.py', - '<(api_gen_dir)/compiler.py', - '<(api_gen_dir)/cpp_generator.py', - '<(api_gen_dir)/cpp_type_generator.py', - '<(api_gen_dir)/cpp_util.py', - '<(api_gen_dir)/h_generator.py', - '<(api_gen_dir)/idl_schema.py', - '<(api_gen_dir)/model.py', - '<(api_gen_dir)/util.cc', - '<(api_gen_dir)/util.h', - '<(api_gen_dir)/util_cc_helper.py', - # TODO(calamity): uncomment this when gyp on windows behaves like other - # platforms. List expansions of filepaths in inputs expand to different - # things. - # '<@(schema_files)', - ], - 'outputs': [ - '<(SHARED_INTERMEDIATE_DIR)/<(cc_dir)/<(RULE_INPUT_DIRNAME)/<(RULE_INPUT_ROOT).cc', - '<(SHARED_INTERMEDIATE_DIR)/<(cc_dir)/<(RULE_INPUT_DIRNAME)/<(RULE_INPUT_ROOT).h', - ], - 'action': [ - 'python', - '<(api_gen)', - '<(RULE_INPUT_PATH)', - '--root=<(DEPTH)', - '--destdir=<(SHARED_INTERMEDIATE_DIR)', - '--namespace=<(root_namespace)', - '--generator=cpp', - '--include-rules=<(schema_include_rules)' - ], - 'message': 'Generating C++ code from <(RULE_INPUT_PATH) IDL files', - 'process_outputs_as_sources': 1, - }, - ], - 'include_dirs': [ - '<(SHARED_INTERMEDIATE_DIR)', - '<(DEPTH)', - ], - 'dependencies':[ - '<(DEPTH)/tools/json_schema_compiler/api_gen_util.gyp:api_gen_util', - ], - 'direct_dependent_settings': { - 'include_dirs': [ - '<(SHARED_INTERMEDIATE_DIR)', - ] - }, - # This target exports a hard dependency because it generates header - # files. - 'hard_dependency': 1, -} diff --git a/build/json_to_struct.gypi b/build/json_to_struct.gypi deleted file mode 100644 index 09c8e3e4574..00000000000 --- a/build/json_to_struct.gypi +++ /dev/null @@ -1,53 +0,0 @@ -# Copyright 2012 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. - -{ - 'variables': { - # When including this gypi, the following variables must be set: - # schema_file: a json file that comprise the structure model. - # namespace: the C++ namespace that all generated files go under - # cc_dir: path to generated files - # Functions and namespaces can be excluded by setting "nocompile" to true. - 'struct_gen_dir': '<(DEPTH)/tools/json_to_struct', - 'struct_gen%': '<(struct_gen_dir)/json_to_struct.py', - 'output_filename%': '<(RULE_INPUT_ROOT)', - }, - 'rules': [ - { - # GN version: //tools/json_to_struct/json_to_struct.gni - 'rule_name': 'genstaticinit', - 'extension': 'json', - 'inputs': [ - '<(struct_gen)', - '<(struct_gen_dir)/element_generator.py', - '<(struct_gen_dir)/json_to_struct.py', - '<(struct_gen_dir)/struct_generator.py', - '<(schema_file)', - ], - 'outputs': [ - '<(SHARED_INTERMEDIATE_DIR)/<(cc_dir)/<(output_filename).cc', - '<(SHARED_INTERMEDIATE_DIR)/<(cc_dir)/<(output_filename).h', - ], - 'action': [ - 'python', - '<(struct_gen)', - '<(RULE_INPUT_PATH)', - '--destbase=<(SHARED_INTERMEDIATE_DIR)', - '--destdir=<(cc_dir)', - '--namespace=<(namespace)', - '--schema=<(schema_file)', - '--output=<(output_filename)', - ], - 'message': 'Generating C++ static initializers from <(RULE_INPUT_PATH)', - 'process_outputs_as_sources': 1, - }, - ], - 'include_dirs': [ - '<(SHARED_INTERMEDIATE_DIR)', - '<(DEPTH)', - ], - # This target exports a hard dependency because it generates header - # files. - 'hard_dependency': 1, -} diff --git a/build/module_args/dart.gni b/build/module_args/dart.gni deleted file mode 100644 index ee6b0387670..00000000000 --- a/build/module_args/dart.gni +++ /dev/null @@ -1,6 +0,0 @@ -# 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. - -# This variable should point to the Dart SDK. -dart_sdk_root = "//third_party/dart-sdk/dart-sdk" diff --git a/build/module_args/mojo.gni b/build/module_args/mojo.gni deleted file mode 100644 index fee9114a791..00000000000 --- a/build/module_args/mojo.gni +++ /dev/null @@ -1,16 +0,0 @@ -# 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. - -# This variable should point to the parent directory of the Mojo SDK. -mojo_sdk_root = "//" - -# To build the Mojo shell from source, set this variable to true. To use the -# prebuilt shell, omit this variable or set it to false. Note that the prebuilt -# shell will be used only on platforms for which it is published (currently -# Linux and Android). -mojo_build_mojo_shell_from_source = true - -# To build the network service from source, set this variable to true. To use -# the prebuilt network service, omit this variable or set it to false. -mojo_build_network_service_from_source = true diff --git a/build/module_args/nacl.gni b/build/module_args/nacl.gni deleted file mode 100644 index 61e0768e13a..00000000000 --- a/build/module_args/nacl.gni +++ /dev/null @@ -1,6 +0,0 @@ -# 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. - -# Override nacl's build directory. -nacl_shared_build_dir = "//build" diff --git a/build/module_args/v8.gni b/build/module_args/v8.gni deleted file mode 100644 index 8b5204c68ec..00000000000 --- a/build/module_args/v8.gni +++ /dev/null @@ -1,13 +0,0 @@ -# Copyright 2014 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. - -if (is_android) { - import("//build/config/android/config.gni") -} - -# TODO(sky): nuke this. Temporary while sorting out http://crbug.com/465456. -enable_correct_v8_arch = false - -v8_use_external_startup_data = !(is_chromeos || is_win) -v8_extra_library_files = [] diff --git a/build/secondary/testing/gmock/BUILD.gn b/build/secondary/testing/gmock/BUILD.gn deleted file mode 100644 index 4ec62245e6b..00000000000 --- a/build/secondary/testing/gmock/BUILD.gn +++ /dev/null @@ -1,54 +0,0 @@ -# Copyright 2014 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. - -config("gmock_config") { - # Gmock headers need to be able to find themselves. - include_dirs = [ "include" ] -} - -static_library("gmock") { - # TODO http://crbug.com/412064 enable this flag all the time. - testonly = !is_component_build - sources = [ - # Sources based on files in r173 of gmock. - "include/gmock/gmock-actions.h", - "include/gmock/gmock-cardinalities.h", - "include/gmock/gmock-generated-actions.h", - "include/gmock/gmock-generated-function-mockers.h", - "include/gmock/gmock-generated-matchers.h", - "include/gmock/gmock-generated-nice-strict.h", - "include/gmock/gmock-matchers.h", - "include/gmock/gmock-spec-builders.h", - "include/gmock/gmock.h", - "include/gmock/internal/gmock-generated-internal-utils.h", - "include/gmock/internal/gmock-internal-utils.h", - "include/gmock/internal/gmock-port.h", - - #"src/gmock-all.cc", # Not needed by our build. - "src/gmock-cardinalities.cc", - "src/gmock-internal-utils.cc", - "src/gmock-matchers.cc", - "src/gmock-spec-builders.cc", - "src/gmock.cc", - ] - - # This project includes some stuff form gtest's guts. - include_dirs = [ "../gtest/include" ] - - public_configs = [ - ":gmock_config", - "//testing/gtest:gtest_config", - ] -} - -static_library("gmock_main") { - # TODO http://crbug.com/412064 enable this flag all the time. - testonly = !is_component_build - sources = [ - "src/gmock_main.cc", - ] - deps = [ - ":gmock", - ] -} diff --git a/build/secondary/testing/gtest/BUILD.gn b/build/secondary/testing/gtest/BUILD.gn deleted file mode 100644 index 073faec5629..00000000000 --- a/build/secondary/testing/gtest/BUILD.gn +++ /dev/null @@ -1,135 +0,0 @@ -# Copyright 2014 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. - -config("gtest_config") { - visibility = [ - ":*", - "//testing/gmock:*", # gmock also shares this config. - ] - - defines = [ - # In order to allow regex matches in gtest to be shared between Windows - # and other systems, we tell gtest to always use it's internal engine. - "GTEST_HAS_POSIX_RE=0", - - # Chrome doesn't support / require C++11, yet. - "GTEST_LANG_CXX11=0", - ] - - # Gtest headers need to be able to find themselves. - include_dirs = [ "include" ] - - if (is_win) { - cflags = [ "/wd4800" ] # Unused variable warning. - } - - if (is_posix) { - defines += [ - # gtest isn't able to figure out when RTTI is disabled for gcc - # versions older than 4.3.2, and assumes it's enabled. Our Mac - # and Linux builds disable RTTI, and cannot guarantee that the - # compiler will be 4.3.2. or newer. The Mac, for example, uses - # 4.2.1 as that is the latest available on that platform. gtest - # must be instructed that RTTI is disabled here, and for any - # direct dependents that might include gtest headers. - "GTEST_HAS_RTTI=0", - ] - } - - if (is_android) { - defines += [ - # We want gtest features that use tr1::tuple, but we currently - # don't support the variadic templates used by libstdc++'s - # implementation. gtest supports this scenario by providing its - # own implementation but we must opt in to it. - "GTEST_USE_OWN_TR1_TUPLE=1", - - # GTEST_USE_OWN_TR1_TUPLE only works if GTEST_HAS_TR1_TUPLE is set. - # gtest r625 made it so that GTEST_HAS_TR1_TUPLE is set to 0 - # automatically on android, so it has to be set explicitly here. - "GTEST_HAS_TR1_TUPLE=1", - ] - } -} - -config("gtest_direct_config") { - visibility = [ ":*" ] - defines = [ "UNIT_TEST" ] -} - -static_library("gtest") { - # TODO http://crbug.com/412064 enable this flag all the time. - testonly = !is_component_build - sources = [ - "include/gtest/gtest-death-test.h", - "include/gtest/gtest-message.h", - "include/gtest/gtest-param-test.h", - "include/gtest/gtest-printers.h", - "include/gtest/gtest-spi.h", - "include/gtest/gtest-test-part.h", - "include/gtest/gtest-typed-test.h", - "include/gtest/gtest.h", - "include/gtest/gtest_pred_impl.h", - "include/gtest/internal/gtest-death-test-internal.h", - "include/gtest/internal/gtest-filepath.h", - "include/gtest/internal/gtest-internal.h", - "include/gtest/internal/gtest-linked_ptr.h", - "include/gtest/internal/gtest-param-util-generated.h", - "include/gtest/internal/gtest-param-util.h", - "include/gtest/internal/gtest-port.h", - "include/gtest/internal/gtest-string.h", - "include/gtest/internal/gtest-tuple.h", - "include/gtest/internal/gtest-type-util.h", - - #"gtest/src/gtest-all.cc", # Not needed by our build. - "../multiprocess_func_list.cc", - "../multiprocess_func_list.h", - "../platform_test.h", - "src/gtest-death-test.cc", - "src/gtest-filepath.cc", - "src/gtest-internal-inl.h", - "src/gtest-port.cc", - "src/gtest-printers.cc", - "src/gtest-test-part.cc", - "src/gtest-typed-test.cc", - "src/gtest.cc", - ] - - if (is_mac) { - sources += [ - "../gtest_mac.h", - "../gtest_mac.mm", - "../platform_test_mac.mm", - ] - } - - include_dirs = [ "." ] - - all_dependent_configs = [ ":gtest_config" ] - public_configs = [ ":gtest_direct_config" ] - - configs -= [ "//build/config/compiler:chromium_code" ] - configs += [ "//build/config/compiler:no_chromium_code" ] - - config("gtest_warnings") { - if (is_win && is_clang) { - # The Mutex constructor initializer list in gtest-port.cc is incorrectly - # ordered. See - # https://groups.google.com/d/msg/googletestframework/S5uSV8L2TX8/U1FaTDa6J6sJ. - cflags = [ "-Wno-reorder" ] - } - } - configs += [ ":gtest_warnings" ] -} - -source_set("gtest_main") { - # TODO http://crbug.com/412064 enable this flag all the time. - testonly = !is_component_build - sources = [ - "src/gtest_main.cc", - ] - deps = [ - ":gtest", - ] -} diff --git a/build/secondary/third_party/libjpeg_turbo/BUILD.gn b/build/secondary/third_party/libjpeg_turbo/BUILD.gn deleted file mode 100644 index 62e60aed0db..00000000000 --- a/build/secondary/third_party/libjpeg_turbo/BUILD.gn +++ /dev/null @@ -1,221 +0,0 @@ -# Copyright 2014 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. - -# Do not use the targets in this file unless you need a certain libjpeg -# implementation. Use the meta target //third_party:jpeg instead. - -import("//build/config/sanitizers/sanitizers.gni") - -if (current_cpu == "arm") { - import("//build/config/arm.gni") -} - -if (current_cpu == "x86" || current_cpu == "x64") { - import("//third_party/yasm/yasm_assemble.gni") - - yasm_assemble("simd_asm") { - defines = [] - - if (current_cpu == "x86") { - sources = [ - "simd/jccolor-mmx.asm", - "simd/jccolor-sse2.asm", - "simd/jcgray-mmx.asm", - "simd/jcgray-sse2.asm", - "simd/jchuff-sse2.asm", - "simd/jcsample-mmx.asm", - "simd/jcsample-sse2.asm", - "simd/jdcolor-mmx.asm", - "simd/jdcolor-sse2.asm", - "simd/jdmerge-mmx.asm", - "simd/jdmerge-sse2.asm", - "simd/jdsample-mmx.asm", - "simd/jdsample-sse2.asm", - "simd/jfdctflt-3dn.asm", - "simd/jfdctflt-sse.asm", - "simd/jfdctfst-mmx.asm", - "simd/jfdctfst-sse2.asm", - "simd/jfdctint-mmx.asm", - "simd/jfdctint-sse2.asm", - "simd/jidctflt-3dn.asm", - "simd/jidctflt-sse.asm", - "simd/jidctflt-sse2.asm", - "simd/jidctfst-mmx.asm", - "simd/jidctfst-sse2.asm", - "simd/jidctint-mmx.asm", - "simd/jidctint-sse2.asm", - "simd/jidctred-mmx.asm", - "simd/jidctred-sse2.asm", - "simd/jquant-3dn.asm", - "simd/jquant-mmx.asm", - "simd/jquant-sse.asm", - "simd/jquantf-sse2.asm", - "simd/jquanti-sse2.asm", - "simd/jsimdcpu.asm", - ] - defines += [ - "__x86__", - "PIC", - ] - } else if (current_cpu == "x64") { - sources = [ - "simd/jccolor-sse2-64.asm", - "simd/jcgray-sse2-64.asm", - "simd/jchuff-sse2-64.asm", - "simd/jcsample-sse2-64.asm", - "simd/jdcolor-sse2-64.asm", - "simd/jdmerge-sse2-64.asm", - "simd/jdsample-sse2-64.asm", - "simd/jfdctflt-sse-64.asm", - "simd/jfdctfst-sse2-64.asm", - "simd/jfdctint-sse2-64.asm", - "simd/jidctflt-sse2-64.asm", - "simd/jidctfst-sse2-64.asm", - "simd/jidctint-sse2-64.asm", - "simd/jidctred-sse2-64.asm", - "simd/jquantf-sse2-64.asm", - "simd/jquanti-sse2-64.asm", - ] - defines += [ - "__x86_64__", - "PIC", - ] - } - - if (is_win) { - defines += [ "MSVC" ] - include_dirs = [ "win" ] - if (current_cpu == "x86") { - defines += [ "WIN32" ] - } else { - defines += [ "WIN64" ] - } - } else if (is_mac) { - defines += [ "MACHO" ] - include_dirs = [ "mac" ] - } else if (is_linux || is_android) { - defines += [ "ELF" ] - include_dirs = [ "linux" ] - } - } -} - -source_set("simd") { - if (current_cpu == "x86") { - deps = [ - ":simd_asm", - ] - sources = [ - "simd/jsimd_i386.c", - ] - if (is_win) { - cflags = [ "/wd4245" ] - } - } else if (current_cpu == "x64") { - deps = [ - ":simd_asm", - ] - sources = [ - "simd/jsimd_x86_64.c", - ] - } else if (current_cpu == "arm" && arm_version >= 7 && - (arm_use_neon || arm_optionally_use_neon)) { - sources = [ - "simd/jsimd_arm.c", - "simd/jsimd_arm_neon.S", - ] - } else { - sources = [ - "jsimd_none.c", - ] - } - if (is_win) { - cflags = [ "/wd4245" ] - } -} - -config("libjpeg_config") { - include_dirs = [ "." ] -} - -source_set("libjpeg") { - sources = [ - "jcapimin.c", - "jcapistd.c", - "jccoefct.c", - "jccolor.c", - "jcdctmgr.c", - "jchuff.c", - "jchuff.h", - "jcinit.c", - "jcmainct.c", - "jcmarker.c", - "jcmaster.c", - "jcomapi.c", - "jconfig.h", - "jcparam.c", - "jcphuff.c", - "jcprepct.c", - "jcsample.c", - "jdapimin.c", - "jdapistd.c", - "jdatadst.c", - "jdatasrc.c", - "jdcoefct.c", - "jdcolor.c", - "jdct.h", - "jddctmgr.c", - "jdhuff.c", - "jdhuff.h", - "jdinput.c", - "jdmainct.c", - "jdmarker.c", - "jdmaster.c", - "jdmerge.c", - "jdphuff.c", - "jdpostct.c", - "jdsample.c", - "jerror.c", - "jerror.h", - "jfdctflt.c", - "jfdctfst.c", - "jfdctint.c", - "jidctflt.c", - "jidctfst.c", - "jidctint.c", - "jidctred.c", - "jinclude.h", - "jmemmgr.c", - "jmemnobs.c", - "jmemsys.h", - "jmorecfg.h", - "jpegint.h", - "jpeglib.h", - "jpeglibmangler.h", - "jquant1.c", - "jquant2.c", - "jutils.c", - "jversion.h", - ] - - defines = [ - "WITH_SIMD", - "NO_GETENV", - ] - - configs -= [ "//build/config/compiler:chromium_code" ] - configs += [ "//build/config/compiler:no_chromium_code" ] - - public_configs = [ ":libjpeg_config" ] - - # MemorySanitizer doesn't support assembly code, so keep it disabled in - # MSan builds for now. - if (is_msan) { - sources += [ "jsimd_none.c" ] - } else { - deps = [ - ":simd", - ] - } -} diff --git a/build/secondary/third_party/libsrtp/BUILD.gn b/build/secondary/third_party/libsrtp/BUILD.gn deleted file mode 100644 index 7601bea0d64..00000000000 --- a/build/secondary/third_party/libsrtp/BUILD.gn +++ /dev/null @@ -1,391 +0,0 @@ -# Copyright 2014 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. - -declare_args() { - use_system_libsrtp = false - use_srtp_boringssl = true -} - -config("libsrtp_config") { - defines = [ - "HAVE_CONFIG_H", - "HAVE_STDLIB_H", - "HAVE_STRING_H", - "TESTAPP_SOURCE", - ] - - include_dirs = [ - "config", - "srtp/include", - "srtp/crypto/include", - ] - - if (use_srtp_boringssl) { - defines += [ "OPENSSL" ] - } - - if (is_posix) { - defines += [ - "HAVE_INT16_T", - "HAVE_INT32_T", - "HAVE_INT8_T", - "HAVE_UINT16_T", - "HAVE_UINT32_T", - "HAVE_UINT64_T", - "HAVE_UINT8_T", - "HAVE_STDINT_H", - "HAVE_INTTYPES_H", - "HAVE_NETINET_IN_H", - "HAVE_ARPA_INET_H", - "HAVE_UNISTD_H", - ] - cflags = [ "-Wno-unused-variable" ] - } - - if (is_win) { - defines += [ - "HAVE_BYTESWAP_METHODS_H", - - # All Windows architectures are this way. - "SIZEOF_UNSIGNED_LONG=4", - "SIZEOF_UNSIGNED_LONG_LONG=8", - ] - } - - if (current_cpu == "x64" || current_cpu == "x86" || current_cpu == "arm") { - defines += [ - # TODO(leozwang): CPU_RISC doesn"t work properly on android/arm - # platform for unknown reasons, need to investigate the root cause - # of it. CPU_RISC is used for optimization only, and CPU_CISC should - # just work just fine, it has been tested on android/arm with srtp - # test applications and libjingle. - "CPU_CISC", - ] - } - - if (current_cpu == "mipsel") { - defines += [ "CPU_RISC" ] - } -} - -config("system_libsrtp_config") { - defines = [ "USE_SYSTEM_LIBSRTP" ] - include_dirs = [ "/usr/include/srtp" ] -} - -if (use_system_libsrtp) { - group("libsrtp") { - public_configs = [ - ":libsrtp_config", - ":system_libsrtp_config", - ] - libs = [ "-lsrtp" ] - } -} else { - static_library("libsrtp") { - configs -= [ "//build/config/compiler:chromium_code" ] - configs += [ "//build/config/compiler:no_chromium_code" ] - public_configs = [ ":libsrtp_config" ] - - sources = [ - # includes - "srtp/include/ekt.h", - "srtp/include/getopt_s.h", - "srtp/include/rtp.h", - "srtp/include/rtp_priv.h", - "srtp/include/srtp.h", - "srtp/include/srtp_priv.h", - "srtp/include/ut_sim.h", - - # headers - "srtp/crypto/include/aes.h", - "srtp/crypto/include/aes_cbc.h", - "srtp/crypto/include/aes_icm.h", - "srtp/crypto/include/alloc.h", - "srtp/crypto/include/auth.h", - "srtp/crypto/include/cipher.h", - "srtp/crypto/include/crypto.h", - "srtp/crypto/include/crypto_kernel.h", - "srtp/crypto/include/crypto_math.h", - "srtp/crypto/include/crypto_types.h", - "srtp/crypto/include/cryptoalg.h", - "srtp/crypto/include/datatypes.h", - "srtp/crypto/include/err.h", - "srtp/crypto/include/gf2_8.h", - "srtp/crypto/include/hmac.h", - "srtp/crypto/include/integers.h", - "srtp/crypto/include/kernel_compat.h", - "srtp/crypto/include/key.h", - "srtp/crypto/include/null_auth.h", - "srtp/crypto/include/null_cipher.h", - "srtp/crypto/include/prng.h", - "srtp/crypto/include/rand_source.h", - "srtp/crypto/include/rdb.h", - "srtp/crypto/include/rdbx.h", - "srtp/crypto/include/sha1.h", - "srtp/crypto/include/stat.h", - "srtp/crypto/include/xfm.h", - - # sources - "srtp/crypto/cipher/aes.c", - "srtp/crypto/cipher/aes_cbc.c", - "srtp/crypto/cipher/aes_icm.c", - "srtp/crypto/cipher/cipher.c", - "srtp/crypto/cipher/null_cipher.c", - "srtp/crypto/hash/auth.c", - "srtp/crypto/hash/hmac.c", - "srtp/crypto/hash/null_auth.c", - "srtp/crypto/hash/sha1.c", - "srtp/crypto/kernel/alloc.c", - "srtp/crypto/kernel/crypto_kernel.c", - "srtp/crypto/kernel/err.c", - "srtp/crypto/kernel/key.c", - "srtp/crypto/math/datatypes.c", - "srtp/crypto/math/gf2_8.c", - "srtp/crypto/math/stat.c", - "srtp/crypto/replay/rdb.c", - "srtp/crypto/replay/rdbx.c", - "srtp/crypto/replay/ut_sim.c", - "srtp/crypto/rng/ctr_prng.c", - "srtp/crypto/rng/prng.c", - "srtp/crypto/rng/rand_source.c", - "srtp/srtp/ekt.c", - "srtp/srtp/srtp.c", - ] - - if (is_clang) { - cflags = [ "-Wno-implicit-function-declaration" ] - } - - if (use_srtp_boringssl) { - deps = [ - "//third_party/boringssl:boringssl", - ] - public_deps = [ - "//third_party/boringssl:boringssl", - ] - sources -= [ - "srtp/crypto/cipher/aes_cbc.c", - "srtp/crypto/cipher/aes_icm.c", - "srtp/crypto/hash/hmac.c", - "srtp/crypto/hash/sha1.c", - "srtp/crypto/rng/ctr_prng.c", - "srtp/crypto/rng/prng.c", - ] - sources += [ - "srtp/crypto/cipher/aes_gcm_ossl.c", - "srtp/crypto/cipher/aes_icm_ossl.c", - "srtp/crypto/hash/hmac_ossl.c", - "srtp/crypto/include/aes_gcm_ossl.h", - "srtp/crypto/include/aes_icm_ossl.h", - ] - } - } - - # TODO(GYP): A bunch of these tests don't compile (in gyp either). They're - # not very broken, so could probably be made to work if it's useful. - if (!is_win) { - executable("rdbx_driver") { - configs -= [ "//build/config/compiler:chromium_code" ] - configs += [ "//build/config/compiler:no_chromium_code" ] - deps = [ - ":libsrtp", - ] - sources = [ - "srtp/include/getopt_s.h", - "srtp/test/getopt_s.c", - "srtp/test/rdbx_driver.c", - ] - } - - executable("srtp_driver") { - configs -= [ "//build/config/compiler:chromium_code" ] - configs += [ "//build/config/compiler:no_chromium_code" ] - deps = [ - ":libsrtp", - ] - sources = [ - "srtp/include/getopt_s.h", - "srtp/include/srtp_priv.h", - "srtp/test/getopt_s.c", - "srtp/test/srtp_driver.c", - ] - } - - executable("roc_driver") { - configs -= [ "//build/config/compiler:chromium_code" ] - configs += [ "//build/config/compiler:no_chromium_code" ] - deps = [ - ":libsrtp", - ] - sources = [ - "srtp/crypto/include/rdbx.h", - "srtp/include/ut_sim.h", - "srtp/test/roc_driver.c", - ] - } - - executable("replay_driver") { - configs -= [ "//build/config/compiler:chromium_code" ] - configs += [ "//build/config/compiler:no_chromium_code" ] - deps = [ - ":libsrtp", - ] - sources = [ - "srtp/crypto/include/rdbx.h", - "srtp/include/ut_sim.h", - "srtp/test/replay_driver.c", - ] - } - - executable("rtpw") { - configs -= [ "//build/config/compiler:chromium_code" ] - configs += [ "//build/config/compiler:no_chromium_code" ] - deps = [ - ":libsrtp", - ] - sources = [ - "srtp/crypto/include/datatypes.h", - "srtp/include/getopt_s.h", - "srtp/include/rtp.h", - "srtp/include/srtp.h", - "srtp/test/getopt_s.c", - "srtp/test/rtp.c", - "srtp/test/rtpw.c", - ] - if (is_android) { - defines = [ "HAVE_SYS_SOCKET_H" ] - } - if (is_clang) { - cflags = [ "-Wno-implicit-function-declaration" ] - } - } - - executable("srtp_test_cipher_driver") { - configs -= [ "//build/config/compiler:chromium_code" ] - configs += [ "//build/config/compiler:no_chromium_code" ] - deps = [ - ":libsrtp", - ] - sources = [ - "srtp/crypto/test/cipher_driver.c", - "srtp/include/getopt_s.h", - "srtp/test/getopt_s.c", - ] - } - - executable("srtp_test_datatypes_driver") { - configs -= [ "//build/config/compiler:chromium_code" ] - configs += [ "//build/config/compiler:no_chromium_code" ] - deps = [ - ":libsrtp", - ] - sources = [ - "srtp/crypto/test/datatypes_driver.c", - ] - } - - executable("srtp_test_stat_driver") { - configs -= [ "//build/config/compiler:chromium_code" ] - configs += [ "//build/config/compiler:no_chromium_code" ] - deps = [ - ":libsrtp", - ] - sources = [ - "srtp/crypto/test/stat_driver.c", - ] - } - - executable("srtp_test_sha1_driver") { - configs -= [ "//build/config/compiler:chromium_code" ] - configs += [ "//build/config/compiler:no_chromium_code" ] - deps = [ - ":libsrtp", - ] - sources = [ - "srtp/crypto/test/sha1_driver.c", - ] - } - - executable("srtp_test_kernel_driver") { - configs -= [ "//build/config/compiler:chromium_code" ] - configs += [ "//build/config/compiler:no_chromium_code" ] - deps = [ - ":libsrtp", - ] - sources = [ - "srtp/crypto/test/kernel_driver.c", - "srtp/include/getopt_s.h", - "srtp/test/getopt_s.c", - ] - } - - executable("srtp_test_aes_calc") { - configs -= [ "//build/config/compiler:chromium_code" ] - configs += [ "//build/config/compiler:no_chromium_code" ] - deps = [ - ":libsrtp", - ] - sources = [ - "srtp/crypto/test/aes_calc.c", - ] - } - - executable("srtp_test_rand_gen") { - configs -= [ "//build/config/compiler:chromium_code" ] - configs += [ "//build/config/compiler:no_chromium_code" ] - deps = [ - ":libsrtp", - ] - sources = [ - "srtp/crypto/test/rand_gen.c", - "srtp/include/getopt_s.h", - "srtp/test/getopt_s.c", - ] - } - - executable("srtp_test_rand_gen_soak") { - configs -= [ "//build/config/compiler:chromium_code" ] - configs += [ "//build/config/compiler:no_chromium_code" ] - deps = [ - ":libsrtp", - ] - sources = [ - "srtp/crypto/test/rand_gen_soak.c", - "srtp/include/getopt_s.h", - "srtp/test/getopt_s.c", - ] - } - - executable("srtp_test_env") { - configs -= [ "//build/config/compiler:chromium_code" ] - configs += [ "//build/config/compiler:no_chromium_code" ] - deps = [ - ":libsrtp", - ] - sources = [ - "srtp/crypto/test/env.c", - ] - } - - group("srtp_runtest") { - deps = [ - ":rdbx_driver", - ":srtp_driver", - ":roc_driver", - ":replay_driver", - ":rtpw", - ":srtp_test_cipher_driver", - ":srtp_test_datatypes_driver", - ":srtp_test_stat_driver", - ":srtp_test_sha1_driver", - ":srtp_test_kernel_driver", - ":srtp_test_aes_calc", - ":srtp_test_rand_gen", - ":srtp_test_rand_gen_soak", - ":srtp_test_env", - ] - } - } -} diff --git a/build/secondary/third_party/nss/BUILD.gn b/build/secondary/third_party/nss/BUILD.gn deleted file mode 100644 index 25d449e14dc..00000000000 --- a/build/secondary/third_party/nss/BUILD.gn +++ /dev/null @@ -1,1211 +0,0 @@ -# Copyright 2014 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/linux/pkg_config.gni") - -if (is_linux) { - # This is a dependency on NSS with no libssl. On Linux we use a built-in SSL - # library but the system NSS libraries. Non-Linux platforms using NSS use the - # hermetic one in //third_party/nss. - # - # Generally you should depend on //crypto:platform instead of using this - # config since that will properly pick up NSS or OpenSSL depending on - # platform and build config. - pkg_config("system_nss_no_ssl_config") { - packages = [ "nss" ] - extra_args = [ - "-v", - "-lssl3", - ] - } -} else { - include_nss_root_certs = is_ios - include_nss_libpkix = is_ios - - config("nspr_config") { - defines = [ "NO_NSPR_10_SUPPORT" ] - include_dirs = [ - "nspr/pr/include", - "nspr/lib/ds", - "nspr/lib/libc/include", - ] - - if (component_mode != "shared_library") { - defines += [ "NSPR_STATIC" ] - } - } - - component("nspr") { - output_name = "crnspr" - sources = [ - "nspr/lib/ds/plarena.c", - "nspr/lib/ds/plarena.h", - "nspr/lib/ds/plarenas.h", - "nspr/lib/ds/plhash.c", - "nspr/lib/ds/plhash.h", - "nspr/lib/libc/include/plbase64.h", - "nspr/lib/libc/include/plerror.h", - "nspr/lib/libc/include/plgetopt.h", - "nspr/lib/libc/include/plstr.h", - "nspr/lib/libc/src/base64.c", - "nspr/lib/libc/src/plerror.c", - "nspr/lib/libc/src/plgetopt.c", - "nspr/lib/libc/src/strcase.c", - "nspr/lib/libc/src/strcat.c", - "nspr/lib/libc/src/strchr.c", - "nspr/lib/libc/src/strcmp.c", - "nspr/lib/libc/src/strcpy.c", - "nspr/lib/libc/src/strdup.c", - "nspr/lib/libc/src/strlen.c", - "nspr/lib/libc/src/strpbrk.c", - "nspr/lib/libc/src/strstr.c", - "nspr/lib/libc/src/strtok.c", - "nspr/pr/include/md/_darwin.cfg", - "nspr/pr/include/md/_darwin.h", - "nspr/pr/include/md/_pcos.h", - "nspr/pr/include/md/_pth.h", - "nspr/pr/include/md/_unix_errors.h", - "nspr/pr/include/md/_unixos.h", - "nspr/pr/include/md/_win32_errors.h", - "nspr/pr/include/md/_win95.cfg", - "nspr/pr/include/md/_win95.h", - "nspr/pr/include/md/prosdep.h", - "nspr/pr/include/nspr.h", - "nspr/pr/include/obsolete/pralarm.h", - "nspr/pr/include/obsolete/probslet.h", - "nspr/pr/include/obsolete/protypes.h", - "nspr/pr/include/obsolete/prsem.h", - "nspr/pr/include/pratom.h", - "nspr/pr/include/prbit.h", - "nspr/pr/include/prclist.h", - "nspr/pr/include/prcmon.h", - "nspr/pr/include/prcountr.h", - "nspr/pr/include/prcpucfg.h", - "nspr/pr/include/prcvar.h", - "nspr/pr/include/prdtoa.h", - "nspr/pr/include/prenv.h", - "nspr/pr/include/prerr.h", - "nspr/pr/include/prerror.h", - "nspr/pr/include/prinet.h", - "nspr/pr/include/prinit.h", - "nspr/pr/include/prinrval.h", - "nspr/pr/include/prio.h", - "nspr/pr/include/pripcsem.h", - "nspr/pr/include/private/pprio.h", - "nspr/pr/include/private/pprmwait.h", - "nspr/pr/include/private/pprthred.h", - "nspr/pr/include/private/primpl.h", - "nspr/pr/include/private/prpriv.h", - "nspr/pr/include/prlink.h", - "nspr/pr/include/prlock.h", - "nspr/pr/include/prlog.h", - "nspr/pr/include/prlong.h", - "nspr/pr/include/prmem.h", - "nspr/pr/include/prmon.h", - "nspr/pr/include/prmwait.h", - "nspr/pr/include/prnetdb.h", - "nspr/pr/include/prolock.h", - "nspr/pr/include/prpdce.h", - "nspr/pr/include/prprf.h", - "nspr/pr/include/prproces.h", - "nspr/pr/include/prrng.h", - "nspr/pr/include/prrwlock.h", - "nspr/pr/include/prshm.h", - "nspr/pr/include/prshma.h", - "nspr/pr/include/prsystem.h", - "nspr/pr/include/prthread.h", - "nspr/pr/include/prtime.h", - "nspr/pr/include/prtpool.h", - "nspr/pr/include/prtrace.h", - "nspr/pr/include/prtypes.h", - "nspr/pr/include/prvrsion.h", - "nspr/pr/include/prwin16.h", - "nspr/pr/src/io/prdir.c", - "nspr/pr/src/io/prfdcach.c", - "nspr/pr/src/io/prfile.c", - "nspr/pr/src/io/prio.c", - "nspr/pr/src/io/priometh.c", - "nspr/pr/src/io/pripv6.c", - "nspr/pr/src/io/prlayer.c", - "nspr/pr/src/io/prlog.c", - "nspr/pr/src/io/prmapopt.c", - "nspr/pr/src/io/prmmap.c", - "nspr/pr/src/io/prmwait.c", - "nspr/pr/src/io/prpolevt.c", - "nspr/pr/src/io/prprf.c", - "nspr/pr/src/io/prscanf.c", - "nspr/pr/src/io/prsocket.c", - "nspr/pr/src/io/prstdio.c", - "nspr/pr/src/linking/prlink.c", - "nspr/pr/src/malloc/prmalloc.c", - "nspr/pr/src/malloc/prmem.c", - "nspr/pr/src/md/prosdep.c", - "nspr/pr/src/md/unix/darwin.c", - "nspr/pr/src/md/unix/os_Darwin.s", - "nspr/pr/src/md/unix/unix.c", - "nspr/pr/src/md/unix/unix_errors.c", - "nspr/pr/src/md/unix/uxproces.c", - "nspr/pr/src/md/unix/uxrng.c", - "nspr/pr/src/md/unix/uxshm.c", - "nspr/pr/src/md/unix/uxwrap.c", - "nspr/pr/src/md/windows/ntgc.c", - "nspr/pr/src/md/windows/ntinrval.c", - "nspr/pr/src/md/windows/ntmisc.c", - "nspr/pr/src/md/windows/ntsec.c", - "nspr/pr/src/md/windows/ntsem.c", - "nspr/pr/src/md/windows/w32ipcsem.c", - "nspr/pr/src/md/windows/w32poll.c", - "nspr/pr/src/md/windows/w32rng.c", - "nspr/pr/src/md/windows/w32shm.c", - "nspr/pr/src/md/windows/w95cv.c", - "nspr/pr/src/md/windows/w95dllmain.c", - "nspr/pr/src/md/windows/w95io.c", - "nspr/pr/src/md/windows/w95sock.c", - "nspr/pr/src/md/windows/w95thred.c", - "nspr/pr/src/md/windows/win32_errors.c", - "nspr/pr/src/memory/prseg.c", - "nspr/pr/src/memory/prshm.c", - "nspr/pr/src/memory/prshma.c", - "nspr/pr/src/misc/pralarm.c", - "nspr/pr/src/misc/pratom.c", - "nspr/pr/src/misc/praton.c", - "nspr/pr/src/misc/prcountr.c", - "nspr/pr/src/misc/prdtoa.c", - "nspr/pr/src/misc/prenv.c", - "nspr/pr/src/misc/prerr.c", - "nspr/pr/src/misc/prerror.c", - "nspr/pr/src/misc/prerrortable.c", - "nspr/pr/src/misc/prinit.c", - "nspr/pr/src/misc/prinrval.c", - "nspr/pr/src/misc/pripc.c", - "nspr/pr/src/misc/pripcsem.c", - "nspr/pr/src/misc/prlog2.c", - "nspr/pr/src/misc/prlong.c", - "nspr/pr/src/misc/prnetdb.c", - "nspr/pr/src/misc/prolock.c", - "nspr/pr/src/misc/prrng.c", - "nspr/pr/src/misc/prsystem.c", - "nspr/pr/src/misc/prthinfo.c", - "nspr/pr/src/misc/prtime.c", - "nspr/pr/src/misc/prtpool.c", - "nspr/pr/src/misc/prtrace.c", - "nspr/pr/src/pthreads/ptio.c", - "nspr/pr/src/pthreads/ptmisc.c", - "nspr/pr/src/pthreads/ptsynch.c", - "nspr/pr/src/pthreads/ptthread.c", - "nspr/pr/src/threads/combined/prucpu.c", - "nspr/pr/src/threads/combined/prucv.c", - "nspr/pr/src/threads/combined/prulock.c", - "nspr/pr/src/threads/combined/prustack.c", - "nspr/pr/src/threads/combined/pruthr.c", - "nspr/pr/src/threads/prcmon.c", - "nspr/pr/src/threads/prcthr.c", - "nspr/pr/src/threads/prdump.c", - "nspr/pr/src/threads/prmon.c", - "nspr/pr/src/threads/prrwlock.c", - "nspr/pr/src/threads/prsem.c", - "nspr/pr/src/threads/prtpd.c", - ] - - public_configs = [ ":nspr_config" ] - - configs -= [ "//build/config/compiler:chromium_code" ] - if (is_win) { - configs -= [ - "//build/config/win:unicode", # Requires 8-bit mode. - "//build/config/win:lean_and_mean", # Won"t compile with lean and mean. - ] - } - configs += [ - "//build/config/compiler:no_chromium_code", - "//build/config/compiler:no_size_t_to_int_warning", - ] - - cflags = [] - defines = [ - "_NSPR_BUILD_", - "FORCE_PR_LOG", - ] - - include_dirs = [ "nspr/pr/include/private" ] - - if (is_win) { - cflags = [ "/wd4554" ] # Check precidence. - defines += [ - "XP_PC", - "WIN32", - "WIN95", - "_PR_GLOBAL_THREADS_ONLY", - "_CRT_SECURE_NO_WARNINGS", - ] - } else { - sources -= [ - "nspr/pr/src/md/windows/ntgc.c", - "nspr/pr/src/md/windows/ntinrval.c", - "nspr/pr/src/md/windows/ntmisc.c", - "nspr/pr/src/md/windows/ntsec.c", - "nspr/pr/src/md/windows/ntsem.c", - "nspr/pr/src/md/windows/w32ipcsem.c", - "nspr/pr/src/md/windows/w32poll.c", - "nspr/pr/src/md/windows/w32rng.c", - "nspr/pr/src/md/windows/w32shm.c", - "nspr/pr/src/md/windows/w95cv.c", - "nspr/pr/src/md/windows/w95dllmain.c", - "nspr/pr/src/md/windows/w95io.c", - "nspr/pr/src/md/windows/w95sock.c", - "nspr/pr/src/md/windows/w95thred.c", - "nspr/pr/src/md/windows/win32_errors.c", - "nspr/pr/src/threads/combined/prucpu.c", - "nspr/pr/src/threads/combined/prucv.c", - "nspr/pr/src/threads/combined/prulock.c", - "nspr/pr/src/threads/combined/prustack.c", - "nspr/pr/src/threads/combined/pruthr.c", - ] - } - - if (!is_posix) { - sources -= [ - "nspr/pr/src/md/unix/darwin.c", - "nspr/pr/src/md/unix/os_Darwin.s", - "nspr/pr/src/md/unix/unix.c", - "nspr/pr/src/md/unix/unix_errors.c", - "nspr/pr/src/md/unix/uxproces.c", - "nspr/pr/src/md/unix/uxrng.c", - "nspr/pr/src/md/unix/uxshm.c", - "nspr/pr/src/md/unix/uxwrap.c", - "nspr/pr/src/pthreads/ptio.c", - "nspr/pr/src/pthreads/ptmisc.c", - "nspr/pr/src/pthreads/ptsynch.c", - "nspr/pr/src/pthreads/ptthread.c", - ] - } - - if (current_cpu == "x86") { - defines += [ "_X86_" ] - } else if (current_cpu == "x64") { - defines += [ "_AMD64_" ] - } - - if (is_mac || is_ios) { - sources -= [ - "nspr/pr/src/io/prdir.c", - "nspr/pr/src/io/prfile.c", - "nspr/pr/src/io/prio.c", - "nspr/pr/src/io/prsocket.c", - "nspr/pr/src/misc/pripcsem.c", - "nspr/pr/src/threads/prcthr.c", - "nspr/pr/src/threads/prdump.c", - "nspr/pr/src/threads/prmon.c", - "nspr/pr/src/threads/prsem.c", - ] - defines += [ - "XP_UNIX", - "DARWIN", - "XP_MACOSX", - "_PR_PTHREADS", - "HAVE_BSD_FLOCK", - "HAVE_DLADDR", - "HAVE_LCHOWN", - "HAVE_SOCKLEN_T", - "HAVE_STRERROR", - ] - } - - if (is_mac) { - defines += [ "HAVE_CRT_EXTERNS_H" ] - libs = [ - "CoreFoundation.framework", - "CoreServices.framework", - ] - } - - if (is_clang) { - cflags += [ - # nspr uses a bunch of deprecated functions (NSLinkModule etc) in - # prlink.c on mac. - "-Wno-deprecated-declarations", - - # nspr passes "const char*" through "void*". - "-Wno-incompatible-pointer-types", - - # nspr passes "int*" through "unsigned int*". - "-Wno-pointer-sign", - ] - - # nspr uses assert(!"foo") instead of assert(false && "foo"). - configs -= [ "//build/config/clang:extra_warnings" ] - } - } - - component("nss") { - output_name = "crnss" - sources = [ - # Ensure at least one object file is produced, so that MSVC does not - # warn when creating the static/shared library. See the note for - # the "nssckbi" target for why the "nss" target was split as such. - "nss/lib/nss/nssver.c", - ] - - public_deps = [ - ":nss_static", - ] - - if (include_nss_root_certs) { - public_deps += [ ":nssckbi" ] - } - - if (component_mode == "shared_library") { - if (is_mac) { - ldflags = [ "-all_load" ] - } else if (is_win) { - # Pass the def file to the linker. - ldflags = - [ "/DEF:" + rebase_path("nss/exports_win.def", root_build_dir) ] - } - } - } - - config("nssckbi_config") { - include_dirs = [ "nss/lib/ckfw/builtins" ] - } - - # This is really more of a pseudo-target to work around the fact that - # a single static_library target cannot contain two object files of the - # same name (hash.o / hash.obj). Logically, this is part of the - # "nss_static" target. By separating it out, it creates a possible - # circular dependency between "nss_static" and "nssckbi" when - # "exclude_nss_root_certs" is not specified, as "nss_static" depends on - # the "builtinsC_GetFunctionList" exported by this target. This is an - # artifact of how NSS is being statically built, which is not an - # officially supported configuration - normally, "nssckbi.dll/so" would - # depend on libnss3.dll/so, and the higher layer caller would instruct - # libnss3.dll to dynamically load nssckbi.dll, breaking the circle. - # - # TODO(rsleevi): http://crbug.com/128134 - Break the circular dependency - # without requiring nssckbi to be built as a shared library. - source_set("nssckbi") { - visibility = [ ":nss" ] # This target is internal implementation detail. - - sources = [ - "nss/lib/ckfw/builtins/anchor.c", - "nss/lib/ckfw/builtins/bfind.c", - "nss/lib/ckfw/builtins/binst.c", - "nss/lib/ckfw/builtins/bobject.c", - "nss/lib/ckfw/builtins/bsession.c", - "nss/lib/ckfw/builtins/bslot.c", - "nss/lib/ckfw/builtins/btoken.c", - "nss/lib/ckfw/builtins/builtins.h", - "nss/lib/ckfw/builtins/certdata.c", - "nss/lib/ckfw/builtins/ckbiver.c", - "nss/lib/ckfw/builtins/constants.c", - "nss/lib/ckfw/builtins/nssckbi.h", - "nss/lib/ckfw/ck.h", - "nss/lib/ckfw/ckfw.h", - "nss/lib/ckfw/ckfwm.h", - "nss/lib/ckfw/ckfwtm.h", - "nss/lib/ckfw/ckmd.h", - "nss/lib/ckfw/ckt.h", - "nss/lib/ckfw/crypto.c", - "nss/lib/ckfw/find.c", - "nss/lib/ckfw/hash.c", - "nss/lib/ckfw/instance.c", - "nss/lib/ckfw/mechanism.c", - "nss/lib/ckfw/mutex.c", - "nss/lib/ckfw/nssck.api", - "nss/lib/ckfw/nssckepv.h", - "nss/lib/ckfw/nssckft.h", - "nss/lib/ckfw/nssckfw.h", - "nss/lib/ckfw/nssckfwc.h", - "nss/lib/ckfw/nssckfwt.h", - "nss/lib/ckfw/nssckg.h", - "nss/lib/ckfw/nssckmdt.h", - "nss/lib/ckfw/nssckt.h", - "nss/lib/ckfw/object.c", - "nss/lib/ckfw/session.c", - "nss/lib/ckfw/sessobj.c", - "nss/lib/ckfw/slot.c", - "nss/lib/ckfw/token.c", - "nss/lib/ckfw/wrap.c", - ] - - configs -= [ "//build/config/compiler:chromium_code" ] - - if (is_win) { - configs -= [ "//build/config/win:unicode" ] # Requires 8-bit mode. - } - configs += [ "//build/config/compiler:no_chromium_code" ] - - include_dirs = [ "nss/lib/ckfw" ] - public_configs = [ ":nssckbi_config" ] - - public_deps = [ - ":nss_static", - ] - } - - config("nss_static_config") { - defines = [ - "NSS_STATIC", - "NSS_USE_STATIC_LIBS", - "USE_UTIL_DIRECTLY", - ] - if (is_win) { - defines += [ "_WINDOWS" ] - } - include_dirs = [ - "nspr/pr/include", - "nspr/lib/ds", - "nspr/lib/libc/include", - "nss/lib/base", - "nss/lib/certdb", - "nss/lib/certhigh", - "nss/lib/cryptohi", - "nss/lib/dev", - "nss/lib/freebl", - "nss/lib/freebl/ecl", - "nss/lib/nss", - "nss/lib/pk11wrap", - "nss/lib/pkcs7", - "nss/lib/pki", - "nss/lib/smime", - "nss/lib/softoken", - "nss/lib/util", - ] - } - - if (is_win && current_cpu == "x86") { - source_set("nss_static_avx") { - sources = [ - "nss/lib/freebl/intel-gcm-wrap.c", - "nss/lib/freebl/intel-gcm-x86-masm.asm", - "nss/lib/freebl/intel-gcm.h", - ] - defines = [ - "_WINDOWS", - "_X86_", - "INTEL_GCM", - "MP_API_COMPATIBLE", - "MP_ASSEMBLY_DIV_2DX1D", - "MP_ASSEMBLY_MULTIPLY", - "MP_ASSEMBLY_SQUARE", - "MP_NO_MP_WORD", - "MP_USE_UINT_DIGIT", - "NSS_DISABLE_DBM", - "NSS_STATIC", - "NSS_USE_STATIC_LIBS", - "NSS_X86", - "NSS_X86_OR_X64", - "RIJNDAEL_INCLUDE_TABLES", - "SHLIB_PREFIX=\"\"", - "SHLIB_SUFFIX=\"dll\"", - "SHLIB_VERSION=\"3\"", - "SOFTOKEN_LIB_NAME=\"softokn3.dll\"", - "SOFTOKEN_SHLIB_VERSION=\"3\"", - "USE_HW_AES", - "USE_UTIL_DIRECTLY", - "WIN32", - "WIN95", - "XP_PC", - ] - include_dirs = [ - "nspr/pr/include", - "nspr/lib/ds", - "nspr/lib/libc/include", - "nss/lib/freebl/ecl", - "nss/lib/util", - ] - } - } - - source_set("nss_static") { - visibility = [ ":*" ] # Internal implementation detail. - - sources = [ - "nss/lib/base/arena.c", - "nss/lib/base/base.h", - "nss/lib/base/baset.h", - "nss/lib/base/error.c", - "nss/lib/base/errorval.c", - "nss/lib/base/hash.c", - "nss/lib/base/hashops.c", - "nss/lib/base/item.c", - "nss/lib/base/libc.c", - "nss/lib/base/list.c", - "nss/lib/base/nssbase.h", - "nss/lib/base/nssbaset.h", - "nss/lib/base/nssutf8.c", - "nss/lib/base/tracker.c", - "nss/lib/certdb/alg1485.c", - "nss/lib/certdb/cert.h", - "nss/lib/certdb/certdb.c", - "nss/lib/certdb/certdb.h", - "nss/lib/certdb/certi.h", - "nss/lib/certdb/certt.h", - "nss/lib/certdb/certv3.c", - "nss/lib/certdb/certxutl.c", - "nss/lib/certdb/certxutl.h", - "nss/lib/certdb/crl.c", - "nss/lib/certdb/genname.c", - "nss/lib/certdb/genname.h", - "nss/lib/certdb/polcyxtn.c", - "nss/lib/certdb/secname.c", - "nss/lib/certdb/stanpcertdb.c", - "nss/lib/certdb/xauthkid.c", - "nss/lib/certdb/xbsconst.c", - "nss/lib/certdb/xconst.c", - "nss/lib/certdb/xconst.h", - "nss/lib/certhigh/certhigh.c", - "nss/lib/certhigh/certhtml.c", - "nss/lib/certhigh/certreq.c", - "nss/lib/certhigh/certvfy.c", - "nss/lib/certhigh/crlv2.c", - "nss/lib/certhigh/ocsp.c", - "nss/lib/certhigh/ocsp.h", - "nss/lib/certhigh/ocspi.h", - "nss/lib/certhigh/ocspsig.c", - "nss/lib/certhigh/ocspt.h", - "nss/lib/certhigh/ocspti.h", - "nss/lib/certhigh/xcrldist.c", - "nss/lib/cryptohi/cryptohi.h", - "nss/lib/cryptohi/cryptoht.h", - "nss/lib/cryptohi/dsautil.c", - "nss/lib/cryptohi/key.h", - "nss/lib/cryptohi/keyhi.h", - "nss/lib/cryptohi/keyi.h", - "nss/lib/cryptohi/keyt.h", - "nss/lib/cryptohi/keythi.h", - "nss/lib/cryptohi/sechash.c", - "nss/lib/cryptohi/sechash.h", - "nss/lib/cryptohi/seckey.c", - "nss/lib/cryptohi/secsign.c", - "nss/lib/cryptohi/secvfy.c", - "nss/lib/dev/ckhelper.c", - "nss/lib/dev/ckhelper.h", - "nss/lib/dev/dev.h", - "nss/lib/dev/devm.h", - "nss/lib/dev/devslot.c", - "nss/lib/dev/devt.h", - "nss/lib/dev/devtm.h", - "nss/lib/dev/devtoken.c", - "nss/lib/dev/devutil.c", - "nss/lib/dev/nssdev.h", - "nss/lib/dev/nssdevt.h", - "nss/lib/freebl/aeskeywrap.c", - "nss/lib/freebl/alg2268.c", - "nss/lib/freebl/alghmac.c", - "nss/lib/freebl/alghmac.h", - "nss/lib/freebl/arcfive.c", - "nss/lib/freebl/arcfour.c", - "nss/lib/freebl/blapi.h", - "nss/lib/freebl/blapii.h", - "nss/lib/freebl/blapit.h", - "nss/lib/freebl/camellia.c", - "nss/lib/freebl/camellia.h", - "nss/lib/freebl/chacha20/chacha20.c", - "nss/lib/freebl/chacha20/chacha20.h", - "nss/lib/freebl/chacha20/chacha20_vec.c", - "nss/lib/freebl/chacha20poly1305.c", - "nss/lib/freebl/chacha20poly1305.h", - "nss/lib/freebl/ctr.c", - "nss/lib/freebl/ctr.h", - "nss/lib/freebl/cts.c", - "nss/lib/freebl/cts.h", - "nss/lib/freebl/des.c", - "nss/lib/freebl/des.h", - "nss/lib/freebl/desblapi.c", - "nss/lib/freebl/dh.c", - "nss/lib/freebl/drbg.c", - "nss/lib/freebl/dsa.c", - "nss/lib/freebl/ec.c", - "nss/lib/freebl/ec.h", - "nss/lib/freebl/ecdecode.c", - "nss/lib/freebl/ecl/ec2.h", - "nss/lib/freebl/ecl/ec_naf.c", - "nss/lib/freebl/ecl/ecl-curve.h", - "nss/lib/freebl/ecl/ecl-exp.h", - "nss/lib/freebl/ecl/ecl-priv.h", - "nss/lib/freebl/ecl/ecl.c", - "nss/lib/freebl/ecl/ecl.h", - "nss/lib/freebl/ecl/ecl_curve.c", - "nss/lib/freebl/ecl/ecl_gf.c", - "nss/lib/freebl/ecl/ecl_mult.c", - "nss/lib/freebl/ecl/ecp.h", - "nss/lib/freebl/ecl/ecp_256.c", - "nss/lib/freebl/ecl/ecp_256_32.c", - "nss/lib/freebl/ecl/ecp_384.c", - "nss/lib/freebl/ecl/ecp_521.c", - "nss/lib/freebl/ecl/ecp_aff.c", - "nss/lib/freebl/ecl/ecp_jac.c", - "nss/lib/freebl/ecl/ecp_jm.c", - "nss/lib/freebl/ecl/ecp_mont.c", - "nss/lib/freebl/gcm.c", - "nss/lib/freebl/gcm.h", - "nss/lib/freebl/hmacct.c", - "nss/lib/freebl/hmacct.h", - "nss/lib/freebl/intel-aes-x86-masm.asm", - "nss/lib/freebl/intel-aes.h", - "nss/lib/freebl/jpake.c", - "nss/lib/freebl/md2.c", - "nss/lib/freebl/md5.c", - "nss/lib/freebl/mpi/logtab.h", - "nss/lib/freebl/mpi/mp_gf2m-priv.h", - "nss/lib/freebl/mpi/mp_gf2m.c", - "nss/lib/freebl/mpi/mp_gf2m.h", - "nss/lib/freebl/mpi/mpcpucache.c", - "nss/lib/freebl/mpi/mpi-config.h", - "nss/lib/freebl/mpi/mpi-priv.h", - "nss/lib/freebl/mpi/mpi.c", - "nss/lib/freebl/mpi/mpi.h", - "nss/lib/freebl/mpi/mpi_amd64.c", - "nss/lib/freebl/mpi/mpi_arm.c", - "nss/lib/freebl/mpi/mpi_arm_mac.c", - "nss/lib/freebl/mpi/mpi_x86_asm.c", - "nss/lib/freebl/mpi/mplogic.c", - "nss/lib/freebl/mpi/mplogic.h", - "nss/lib/freebl/mpi/mpmontg.c", - "nss/lib/freebl/mpi/mpprime.c", - "nss/lib/freebl/mpi/mpprime.h", - "nss/lib/freebl/mpi/primes.c", - "nss/lib/freebl/nss_build_config_mac.h", - "nss/lib/freebl/poly1305/poly1305-donna-x64-sse2-incremental-source.c", - "nss/lib/freebl/poly1305/poly1305.c", - "nss/lib/freebl/poly1305/poly1305.h", - "nss/lib/freebl/pqg.c", - "nss/lib/freebl/pqg.h", - "nss/lib/freebl/rawhash.c", - "nss/lib/freebl/rijndael.c", - "nss/lib/freebl/rijndael.h", - "nss/lib/freebl/rijndael32.tab", - "nss/lib/freebl/rsa.c", - "nss/lib/freebl/rsapkcs.c", - "nss/lib/freebl/secmpi.h", - "nss/lib/freebl/secrng.h", - "nss/lib/freebl/seed.c", - "nss/lib/freebl/seed.h", - "nss/lib/freebl/sha256.h", - "nss/lib/freebl/sha512.c", - "nss/lib/freebl/sha_fast.c", - "nss/lib/freebl/sha_fast.h", - "nss/lib/freebl/shsign.h", - "nss/lib/freebl/shvfy.c", - "nss/lib/freebl/sysrand.c", - "nss/lib/freebl/tlsprfalg.c", - "nss/lib/freebl/unix_rand.c", - "nss/lib/freebl/win_rand.c", - "nss/lib/nss/nss.h", - "nss/lib/nss/nssinit.c", - "nss/lib/nss/nssrenam.h", - "nss/lib/nss/utilwrap.c", - "nss/lib/pk11wrap/debug_module.c", - "nss/lib/pk11wrap/dev3hack.c", - "nss/lib/pk11wrap/dev3hack.h", - "nss/lib/pk11wrap/pk11akey.c", - "nss/lib/pk11wrap/pk11auth.c", - "nss/lib/pk11wrap/pk11cert.c", - "nss/lib/pk11wrap/pk11cxt.c", - "nss/lib/pk11wrap/pk11err.c", - "nss/lib/pk11wrap/pk11func.h", - "nss/lib/pk11wrap/pk11kea.c", - "nss/lib/pk11wrap/pk11list.c", - "nss/lib/pk11wrap/pk11load.c", - "nss/lib/pk11wrap/pk11mech.c", - "nss/lib/pk11wrap/pk11merge.c", - "nss/lib/pk11wrap/pk11nobj.c", - "nss/lib/pk11wrap/pk11obj.c", - "nss/lib/pk11wrap/pk11pars.c", - "nss/lib/pk11wrap/pk11pbe.c", - "nss/lib/pk11wrap/pk11pk12.c", - "nss/lib/pk11wrap/pk11pqg.c", - "nss/lib/pk11wrap/pk11pqg.h", - "nss/lib/pk11wrap/pk11priv.h", - "nss/lib/pk11wrap/pk11pub.h", - "nss/lib/pk11wrap/pk11sdr.c", - "nss/lib/pk11wrap/pk11sdr.h", - "nss/lib/pk11wrap/pk11skey.c", - "nss/lib/pk11wrap/pk11slot.c", - "nss/lib/pk11wrap/pk11util.c", - "nss/lib/pk11wrap/secmod.h", - "nss/lib/pk11wrap/secmodi.h", - "nss/lib/pk11wrap/secmodt.h", - "nss/lib/pk11wrap/secmodti.h", - "nss/lib/pk11wrap/secpkcs5.h", - "nss/lib/pkcs7/certread.c", - "nss/lib/pkcs7/p7common.c", - "nss/lib/pkcs7/p7create.c", - "nss/lib/pkcs7/p7decode.c", - "nss/lib/pkcs7/p7encode.c", - "nss/lib/pkcs7/p7local.c", - "nss/lib/pkcs7/p7local.h", - "nss/lib/pkcs7/pkcs7t.h", - "nss/lib/pkcs7/secmime.c", - "nss/lib/pkcs7/secmime.h", - "nss/lib/pkcs7/secpkcs7.h", - "nss/lib/pki/asymmkey.c", - "nss/lib/pki/certdecode.c", - "nss/lib/pki/certificate.c", - "nss/lib/pki/cryptocontext.c", - "nss/lib/pki/nsspki.h", - "nss/lib/pki/nsspkit.h", - "nss/lib/pki/pki.h", - "nss/lib/pki/pki3hack.c", - "nss/lib/pki/pki3hack.h", - "nss/lib/pki/pkibase.c", - "nss/lib/pki/pkim.h", - "nss/lib/pki/pkistore.c", - "nss/lib/pki/pkistore.h", - "nss/lib/pki/pkit.h", - "nss/lib/pki/pkitm.h", - "nss/lib/pki/symmkey.c", - "nss/lib/pki/tdcache.c", - "nss/lib/pki/trustdomain.c", - "nss/lib/smime/cms.h", - "nss/lib/smime/cmslocal.h", - "nss/lib/smime/cmsreclist.h", - "nss/lib/smime/cmst.h", - "nss/lib/smime/smime.h", - "nss/lib/softoken/fipsaudt.c", - "nss/lib/softoken/fipstest.c", - "nss/lib/softoken/fipstokn.c", - "nss/lib/softoken/jpakesftk.c", - "nss/lib/softoken/lgglue.c", - "nss/lib/softoken/lgglue.h", - "nss/lib/softoken/lowkey.c", - "nss/lib/softoken/lowkeyi.h", - "nss/lib/softoken/lowkeyti.h", - "nss/lib/softoken/lowpbe.c", - "nss/lib/softoken/lowpbe.h", - "nss/lib/softoken/padbuf.c", - "nss/lib/softoken/pkcs11.c", - "nss/lib/softoken/pkcs11c.c", - "nss/lib/softoken/pkcs11i.h", - "nss/lib/softoken/pkcs11ni.h", - "nss/lib/softoken/pkcs11u.c", - "nss/lib/softoken/sdb.c", - "nss/lib/softoken/sdb.h", - "nss/lib/softoken/sftkdb.c", - "nss/lib/softoken/sftkdb.h", - "nss/lib/softoken/sftkdbt.h", - "nss/lib/softoken/sftkdbti.h", - "nss/lib/softoken/sftkhmac.c", - "nss/lib/softoken/sftkpars.c", - "nss/lib/softoken/sftkpars.h", - "nss/lib/softoken/sftkpwd.c", - "nss/lib/softoken/softkver.c", - "nss/lib/softoken/softkver.h", - "nss/lib/softoken/softoken.h", - "nss/lib/softoken/softoknt.h", - "nss/lib/softoken/tlsprf.c", - "nss/lib/ssl/sslerr.h", - "nss/lib/util/SECerrs.h", - "nss/lib/util/base64.h", - "nss/lib/util/ciferfam.h", - "nss/lib/util/derdec.c", - "nss/lib/util/derenc.c", - "nss/lib/util/dersubr.c", - "nss/lib/util/dertime.c", - "nss/lib/util/errstrs.c", - "nss/lib/util/hasht.h", - "nss/lib/util/nssb64.h", - "nss/lib/util/nssb64d.c", - "nss/lib/util/nssb64e.c", - "nss/lib/util/nssb64t.h", - "nss/lib/util/nssilckt.h", - "nss/lib/util/nssilock.c", - "nss/lib/util/nssilock.h", - "nss/lib/util/nsslocks.h", - "nss/lib/util/nssrwlk.c", - "nss/lib/util/nssrwlk.h", - "nss/lib/util/nssrwlkt.h", - "nss/lib/util/nssutil.h", - "nss/lib/util/oidstring.c", - "nss/lib/util/pkcs11.h", - "nss/lib/util/pkcs11f.h", - "nss/lib/util/pkcs11n.h", - "nss/lib/util/pkcs11p.h", - "nss/lib/util/pkcs11t.h", - "nss/lib/util/pkcs11u.h", - "nss/lib/util/pkcs1sig.c", - "nss/lib/util/pkcs1sig.h", - "nss/lib/util/portreg.c", - "nss/lib/util/portreg.h", - "nss/lib/util/quickder.c", - "nss/lib/util/secalgid.c", - "nss/lib/util/secasn1.h", - "nss/lib/util/secasn1d.c", - "nss/lib/util/secasn1e.c", - "nss/lib/util/secasn1t.h", - "nss/lib/util/secasn1u.c", - "nss/lib/util/seccomon.h", - "nss/lib/util/secder.h", - "nss/lib/util/secdert.h", - "nss/lib/util/secdig.c", - "nss/lib/util/secdig.h", - "nss/lib/util/secdigt.h", - "nss/lib/util/secerr.h", - "nss/lib/util/secitem.c", - "nss/lib/util/secitem.h", - "nss/lib/util/secoid.c", - "nss/lib/util/secoid.h", - "nss/lib/util/secoidt.h", - "nss/lib/util/secport.c", - "nss/lib/util/secport.h", - "nss/lib/util/sectime.c", - "nss/lib/util/templates.c", - "nss/lib/util/utf8.c", - "nss/lib/util/utilmod.c", - "nss/lib/util/utilmodt.h", - "nss/lib/util/utilpars.c", - "nss/lib/util/utilpars.h", - "nss/lib/util/utilparst.h", - "nss/lib/util/utilrename.h", - ] - - sources -= [ - # mpi_arm.c is included by mpi_arm_mac.c. - # NOTE: mpi_arm.c can be used directly on Linux. mpi_arm.c will need - # to be excluded conditionally if we start to build NSS on Linux. - "nss/lib/freebl/mpi/mpi_arm.c", - - # primes.c is included by mpprime.c. - "nss/lib/freebl/mpi/primes.c", - - # unix_rand.c and win_rand.c are included by sysrand.c. - "nss/lib/freebl/unix_rand.c", - "nss/lib/freebl/win_rand.c", - - # debug_module.c is included by pk11load.c. - "nss/lib/pk11wrap/debug_module.c", - ] - - configs -= [ "//build/config/compiler:chromium_code" ] - if (is_win) { - configs -= [ "//build/config/win:unicode" ] # Requires 8-bit mode. - } - configs += [ - "//build/config/compiler:no_chromium_code", - "//build/config/compiler:no_size_t_to_int_warning", - ] - public_configs = [ ":nss_static_config" ] - - cflags = [] - - # Only need the defines and includes not in nss_static_config. - defines = [ - "MP_API_COMPATIBLE", - "NSS_DISABLE_DBM", - "RIJNDAEL_INCLUDE_TABLES", - "SHLIB_VERSION=\"3\"", - "SOFTOKEN_SHLIB_VERSION=\"3\"", - ] - include_dirs = [ - "nss/lib/freebl/mpi", - "nss/lib/ssl", - ] - - if (is_win) { - cflags += [ "/wd4101" ] # Unreferenced local variable. - } - - if (include_nss_libpkix) { - sources += [ - "nss/lib/certhigh/certvfypkix.c", - "nss/lib/certhigh/certvfypkixprint.c", - "nss/lib/libpkix/include/pkix.h", - "nss/lib/libpkix/include/pkix_certsel.h", - "nss/lib/libpkix/include/pkix_certstore.h", - "nss/lib/libpkix/include/pkix_checker.h", - "nss/lib/libpkix/include/pkix_crlsel.h", - "nss/lib/libpkix/include/pkix_errorstrings.h", - "nss/lib/libpkix/include/pkix_params.h", - "nss/lib/libpkix/include/pkix_pl_pki.h", - "nss/lib/libpkix/include/pkix_pl_system.h", - "nss/lib/libpkix/include/pkix_results.h", - "nss/lib/libpkix/include/pkix_revchecker.h", - "nss/lib/libpkix/include/pkix_sample_modules.h", - "nss/lib/libpkix/include/pkix_util.h", - "nss/lib/libpkix/include/pkixt.h", - "nss/lib/libpkix/pkix/certsel/pkix_certselector.c", - "nss/lib/libpkix/pkix/certsel/pkix_certselector.h", - "nss/lib/libpkix/pkix/certsel/pkix_comcertselparams.c", - "nss/lib/libpkix/pkix/certsel/pkix_comcertselparams.h", - "nss/lib/libpkix/pkix/checker/pkix_basicconstraintschecker.c", - "nss/lib/libpkix/pkix/checker/pkix_basicconstraintschecker.h", - "nss/lib/libpkix/pkix/checker/pkix_certchainchecker.c", - "nss/lib/libpkix/pkix/checker/pkix_certchainchecker.h", - "nss/lib/libpkix/pkix/checker/pkix_crlchecker.c", - "nss/lib/libpkix/pkix/checker/pkix_crlchecker.h", - "nss/lib/libpkix/pkix/checker/pkix_ekuchecker.c", - "nss/lib/libpkix/pkix/checker/pkix_ekuchecker.h", - "nss/lib/libpkix/pkix/checker/pkix_expirationchecker.c", - "nss/lib/libpkix/pkix/checker/pkix_expirationchecker.h", - "nss/lib/libpkix/pkix/checker/pkix_namechainingchecker.c", - "nss/lib/libpkix/pkix/checker/pkix_namechainingchecker.h", - "nss/lib/libpkix/pkix/checker/pkix_nameconstraintschecker.c", - "nss/lib/libpkix/pkix/checker/pkix_nameconstraintschecker.h", - "nss/lib/libpkix/pkix/checker/pkix_ocspchecker.c", - "nss/lib/libpkix/pkix/checker/pkix_ocspchecker.h", - "nss/lib/libpkix/pkix/checker/pkix_policychecker.c", - "nss/lib/libpkix/pkix/checker/pkix_policychecker.h", - "nss/lib/libpkix/pkix/checker/pkix_revocationchecker.c", - "nss/lib/libpkix/pkix/checker/pkix_revocationchecker.h", - "nss/lib/libpkix/pkix/checker/pkix_revocationmethod.c", - "nss/lib/libpkix/pkix/checker/pkix_revocationmethod.h", - "nss/lib/libpkix/pkix/checker/pkix_signaturechecker.c", - "nss/lib/libpkix/pkix/checker/pkix_signaturechecker.h", - "nss/lib/libpkix/pkix/checker/pkix_targetcertchecker.c", - "nss/lib/libpkix/pkix/checker/pkix_targetcertchecker.h", - "nss/lib/libpkix/pkix/crlsel/pkix_comcrlselparams.c", - "nss/lib/libpkix/pkix/crlsel/pkix_comcrlselparams.h", - "nss/lib/libpkix/pkix/crlsel/pkix_crlselector.c", - "nss/lib/libpkix/pkix/crlsel/pkix_crlselector.h", - "nss/lib/libpkix/pkix/params/pkix_procparams.c", - "nss/lib/libpkix/pkix/params/pkix_procparams.h", - "nss/lib/libpkix/pkix/params/pkix_resourcelimits.c", - "nss/lib/libpkix/pkix/params/pkix_resourcelimits.h", - "nss/lib/libpkix/pkix/params/pkix_trustanchor.c", - "nss/lib/libpkix/pkix/params/pkix_trustanchor.h", - "nss/lib/libpkix/pkix/params/pkix_valparams.c", - "nss/lib/libpkix/pkix/params/pkix_valparams.h", - "nss/lib/libpkix/pkix/results/pkix_buildresult.c", - "nss/lib/libpkix/pkix/results/pkix_buildresult.h", - "nss/lib/libpkix/pkix/results/pkix_policynode.c", - "nss/lib/libpkix/pkix/results/pkix_policynode.h", - "nss/lib/libpkix/pkix/results/pkix_valresult.c", - "nss/lib/libpkix/pkix/results/pkix_valresult.h", - "nss/lib/libpkix/pkix/results/pkix_verifynode.c", - "nss/lib/libpkix/pkix/results/pkix_verifynode.h", - "nss/lib/libpkix/pkix/store/pkix_store.c", - "nss/lib/libpkix/pkix/store/pkix_store.h", - "nss/lib/libpkix/pkix/top/pkix_build.c", - "nss/lib/libpkix/pkix/top/pkix_build.h", - "nss/lib/libpkix/pkix/top/pkix_lifecycle.c", - "nss/lib/libpkix/pkix/top/pkix_lifecycle.h", - "nss/lib/libpkix/pkix/top/pkix_validate.c", - "nss/lib/libpkix/pkix/top/pkix_validate.h", - "nss/lib/libpkix/pkix/util/pkix_error.c", - "nss/lib/libpkix/pkix/util/pkix_error.h", - "nss/lib/libpkix/pkix/util/pkix_errpaths.c", - "nss/lib/libpkix/pkix/util/pkix_list.c", - "nss/lib/libpkix/pkix/util/pkix_list.h", - "nss/lib/libpkix/pkix/util/pkix_logger.c", - "nss/lib/libpkix/pkix/util/pkix_logger.h", - "nss/lib/libpkix/pkix/util/pkix_tools.c", - "nss/lib/libpkix/pkix/util/pkix_tools.h", - "nss/lib/libpkix/pkix_pl_nss/module/pkix_pl_aiamgr.c", - "nss/lib/libpkix/pkix_pl_nss/module/pkix_pl_aiamgr.h", - "nss/lib/libpkix/pkix_pl_nss/module/pkix_pl_colcertstore.c", - "nss/lib/libpkix/pkix_pl_nss/module/pkix_pl_colcertstore.h", - "nss/lib/libpkix/pkix_pl_nss/module/pkix_pl_httpcertstore.c", - "nss/lib/libpkix/pkix_pl_nss/module/pkix_pl_httpcertstore.h", - "nss/lib/libpkix/pkix_pl_nss/module/pkix_pl_httpdefaultclient.c", - "nss/lib/libpkix/pkix_pl_nss/module/pkix_pl_httpdefaultclient.h", - "nss/lib/libpkix/pkix_pl_nss/module/pkix_pl_nsscontext.c", - "nss/lib/libpkix/pkix_pl_nss/module/pkix_pl_nsscontext.h", - "nss/lib/libpkix/pkix_pl_nss/module/pkix_pl_pk11certstore.c", - "nss/lib/libpkix/pkix_pl_nss/module/pkix_pl_pk11certstore.h", - "nss/lib/libpkix/pkix_pl_nss/module/pkix_pl_socket.c", - "nss/lib/libpkix/pkix_pl_nss/module/pkix_pl_socket.h", - "nss/lib/libpkix/pkix_pl_nss/pki/pkix_pl_basicconstraints.c", - "nss/lib/libpkix/pkix_pl_nss/pki/pkix_pl_basicconstraints.h", - "nss/lib/libpkix/pkix_pl_nss/pki/pkix_pl_cert.c", - "nss/lib/libpkix/pkix_pl_nss/pki/pkix_pl_cert.h", - "nss/lib/libpkix/pkix_pl_nss/pki/pkix_pl_certpolicyinfo.c", - "nss/lib/libpkix/pkix_pl_nss/pki/pkix_pl_certpolicyinfo.h", - "nss/lib/libpkix/pkix_pl_nss/pki/pkix_pl_certpolicymap.c", - "nss/lib/libpkix/pkix_pl_nss/pki/pkix_pl_certpolicymap.h", - "nss/lib/libpkix/pkix_pl_nss/pki/pkix_pl_certpolicyqualifier.c", - "nss/lib/libpkix/pkix_pl_nss/pki/pkix_pl_certpolicyqualifier.h", - "nss/lib/libpkix/pkix_pl_nss/pki/pkix_pl_crl.c", - "nss/lib/libpkix/pkix_pl_nss/pki/pkix_pl_crl.h", - "nss/lib/libpkix/pkix_pl_nss/pki/pkix_pl_crldp.c", - "nss/lib/libpkix/pkix_pl_nss/pki/pkix_pl_crldp.h", - "nss/lib/libpkix/pkix_pl_nss/pki/pkix_pl_crlentry.c", - "nss/lib/libpkix/pkix_pl_nss/pki/pkix_pl_crlentry.h", - "nss/lib/libpkix/pkix_pl_nss/pki/pkix_pl_date.c", - "nss/lib/libpkix/pkix_pl_nss/pki/pkix_pl_date.h", - "nss/lib/libpkix/pkix_pl_nss/pki/pkix_pl_generalname.c", - "nss/lib/libpkix/pkix_pl_nss/pki/pkix_pl_generalname.h", - "nss/lib/libpkix/pkix_pl_nss/pki/pkix_pl_infoaccess.c", - "nss/lib/libpkix/pkix_pl_nss/pki/pkix_pl_infoaccess.h", - "nss/lib/libpkix/pkix_pl_nss/pki/pkix_pl_nameconstraints.c", - "nss/lib/libpkix/pkix_pl_nss/pki/pkix_pl_nameconstraints.h", - "nss/lib/libpkix/pkix_pl_nss/pki/pkix_pl_ocspcertid.c", - "nss/lib/libpkix/pkix_pl_nss/pki/pkix_pl_ocspcertid.h", - "nss/lib/libpkix/pkix_pl_nss/pki/pkix_pl_ocsprequest.c", - "nss/lib/libpkix/pkix_pl_nss/pki/pkix_pl_ocsprequest.h", - "nss/lib/libpkix/pkix_pl_nss/pki/pkix_pl_ocspresponse.c", - "nss/lib/libpkix/pkix_pl_nss/pki/pkix_pl_ocspresponse.h", - "nss/lib/libpkix/pkix_pl_nss/pki/pkix_pl_publickey.c", - "nss/lib/libpkix/pkix_pl_nss/pki/pkix_pl_publickey.h", - "nss/lib/libpkix/pkix_pl_nss/pki/pkix_pl_x500name.c", - "nss/lib/libpkix/pkix_pl_nss/pki/pkix_pl_x500name.h", - "nss/lib/libpkix/pkix_pl_nss/system/pkix_pl_bigint.c", - "nss/lib/libpkix/pkix_pl_nss/system/pkix_pl_bigint.h", - "nss/lib/libpkix/pkix_pl_nss/system/pkix_pl_bytearray.c", - "nss/lib/libpkix/pkix_pl_nss/system/pkix_pl_bytearray.h", - "nss/lib/libpkix/pkix_pl_nss/system/pkix_pl_common.c", - "nss/lib/libpkix/pkix_pl_nss/system/pkix_pl_common.h", - "nss/lib/libpkix/pkix_pl_nss/system/pkix_pl_error.c", - "nss/lib/libpkix/pkix_pl_nss/system/pkix_pl_hashtable.c", - "nss/lib/libpkix/pkix_pl_nss/system/pkix_pl_hashtable.h", - "nss/lib/libpkix/pkix_pl_nss/system/pkix_pl_lifecycle.c", - "nss/lib/libpkix/pkix_pl_nss/system/pkix_pl_lifecycle.h", - "nss/lib/libpkix/pkix_pl_nss/system/pkix_pl_mem.c", - "nss/lib/libpkix/pkix_pl_nss/system/pkix_pl_mem.h", - "nss/lib/libpkix/pkix_pl_nss/system/pkix_pl_monitorlock.c", - "nss/lib/libpkix/pkix_pl_nss/system/pkix_pl_monitorlock.h", - "nss/lib/libpkix/pkix_pl_nss/system/pkix_pl_mutex.c", - "nss/lib/libpkix/pkix_pl_nss/system/pkix_pl_mutex.h", - "nss/lib/libpkix/pkix_pl_nss/system/pkix_pl_object.c", - "nss/lib/libpkix/pkix_pl_nss/system/pkix_pl_object.h", - "nss/lib/libpkix/pkix_pl_nss/system/pkix_pl_oid.c", - "nss/lib/libpkix/pkix_pl_nss/system/pkix_pl_oid.h", - "nss/lib/libpkix/pkix_pl_nss/system/pkix_pl_primhash.c", - "nss/lib/libpkix/pkix_pl_nss/system/pkix_pl_primhash.h", - "nss/lib/libpkix/pkix_pl_nss/system/pkix_pl_rwlock.c", - "nss/lib/libpkix/pkix_pl_nss/system/pkix_pl_rwlock.h", - "nss/lib/libpkix/pkix_pl_nss/system/pkix_pl_string.c", - "nss/lib/libpkix/pkix_pl_nss/system/pkix_pl_string.h", - ] - - # Disable the LDAP code in libpkix. - defines += [ "NSS_PKIX_NO_LDAP" ] - - include_dirs += [ - "nss/lib/libpkix/include", - "nss/lib/libpkix/pkix/certsel", - "nss/lib/libpkix/pkix/checker", - "nss/lib/libpkix/pkix/crlsel", - "nss/lib/libpkix/pkix/params", - "nss/lib/libpkix/pkix/results", - "nss/lib/libpkix/pkix/store", - "nss/lib/libpkix/pkix/top", - "nss/lib/libpkix/pkix/util", - "nss/lib/libpkix/pkix_pl_nss/module", - "nss/lib/libpkix/pkix_pl_nss/pki", - "nss/lib/libpkix/pkix_pl_nss/system", - ] - } else { - defines += [ "NSS_DISABLE_LIBPKIX" ] - } - - if (!include_nss_root_certs) { - defines += [ "NSS_DISABLE_ROOT_CERTS" ] - } - - if (current_cpu == "x64" && !is_win) { - sources -= [ - "nss/lib/freebl/chacha20/chacha20.c", - "nss/lib/freebl/poly1305/poly1305.c", - ] - } else { - sources -= [ - "nss/lib/freebl/chacha20/chacha20_vec.c", - "nss/lib/freebl/poly1305/poly1305-donna-x64-sse2-incremental-source.c", - ] - } - - if (is_mac || is_ios) { - sources -= [ "nss/lib/freebl/mpi/mpi_amd64.c" ] - cflags += [ - "-include", - rebase_path("//third_party/nss/nss/lib/freebl/nss_build_config_mac.h", - root_build_dir), - ] - defines += [ - "XP_UNIX", - "DARWIN", - "HAVE_STRERROR", - "HAVE_BSD_FLOCK", - "SHLIB_SUFFIX=\"dylib\"", - "SHLIB_PREFIX=\"lib\"", - "SOFTOKEN_LIB_NAME=\"libsoftokn3.dylib\"", - ] - - configs -= [ "//build/config/gcc:symbol_visibility_hidden" ] - } else { - # Not Mac/iOS. - sources -= [ "nss/lib/freebl/mpi/mpi_arm_mac.c" ] - } - - if (is_win) { - defines += [ - "SHLIB_SUFFIX=\"dll\"", - "SHLIB_PREFIX=\"\"", - "SOFTOKEN_LIB_NAME=\"softokn3.dll\"", - "XP_PC", - "WIN32", - "WIN95", - ] - - if (current_cpu == "x86") { - defines += [ - "NSS_X86_OR_X64", - "NSS_X86", - "_X86_", - "MP_ASSEMBLY_MULTIPLY", - "MP_ASSEMBLY_SQUARE", - "MP_ASSEMBLY_DIV_2DX1D", - "MP_USE_UINT_DIGIT", - "MP_NO_MP_WORD", - "USE_HW_AES", - "INTEL_GCM", - ] - sources -= [ "nss/lib/freebl/mpi/mpi_amd64.c" ] - } else if (current_cpu == "x64") { - sources -= [ - "nss/lib/freebl/intel-aes-x86-masm.asm", - "nss/lib/freebl/mpi/mpi_amd64.c", - "nss/lib/freebl/mpi/mpi_x86_asm.c", - ] - defines += [ - "NSS_USE_64", - "NSS_X86_OR_X64", - "NSS_X64", - "_AMD64_", - "MP_CHAR_STORE_SLOW", - "MP_IS_LITTLE_ENDIAN", - "WIN64", - ] - } - } else { - # Not Windows. - sources -= [ - # mpi_x86_asm.c contains MSVC inline assembly code. - "nss/lib/freebl/mpi/mpi_x86_asm.c", - ] - } - - if (is_clang) { - cflags += [ - # nss doesn"t explicitly cast between different enum types. - "-Wno-conversion", - - # nss passes "const char*" through "void*". - "-Wno-incompatible-pointer-types", - - # nss prefers `a && b || c` over `(a && b) || c`. - "-Wno-logical-op-parentheses", - - # nss doesn"t use exhaustive switches on enums - "-Wno-switch", - - # nss has some `unsigned < 0` checks. - "-Wno-tautological-compare", - ] - } - - public_deps = [ - ":nspr", - ] - deps = [ - ":nspr", - "//third_party/sqlite", - ] - - if (is_win && current_cpu == "x86") { - deps += [ ":nss_static_avx" ] - } - } -} # Windows/Mac/iOS. diff --git a/build/secondary/tools/grit/BUILD.gn b/build/secondary/tools/grit/BUILD.gn deleted file mode 100644 index 660bf1b1ebc..00000000000 --- a/build/secondary/tools/grit/BUILD.gn +++ /dev/null @@ -1,27 +0,0 @@ -# Copyright 2014 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 target creates a stamp file that depends on all the sources in the grit -# directory. By depending on this, a target can force itself to be rebuilt if -# grit itself changes. -action("grit_sources") { - depfile = "$target_out_dir/grit_sources.d" - script = "//build/secondary/tools/grit/stamp_grit_sources.py" - - inputs = [ - "grit.py", - ] - - # Note that we can't call this "grit_sources.stamp" because that file is - # implicitly created by GN for script actions. - outputs = [ - "$target_out_dir/grit_sources.script.stamp", - ] - - args = [ - rebase_path("//tools/grit", root_build_dir), - rebase_path(outputs[0], root_build_dir), - rebase_path(depfile, root_build_dir), - ] -} diff --git a/build/secondary/tools/grit/grit_rule.gni b/build/secondary/tools/grit/grit_rule.gni deleted file mode 100644 index bdf812f219d..00000000000 --- a/build/secondary/tools/grit/grit_rule.gni +++ /dev/null @@ -1,483 +0,0 @@ -# Copyright 2014 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. - -# Instantiate grit. This will produce a script target to run grit, and a -# static library that compiles the .cc files. -# -# Parameters -# -# source (required) -# Path to .grd file. -# -# outputs (required) -# List of outputs from grit, relative to the target_gen_dir. Grit will -# verify at build time that this list is correct and will fail if there -# is a mismatch between the outputs specified by the .grd file and the -# outputs list here. -# -# To get this list, you can look in the .grd file for -# nodes of the processed files. -# -# output_dir (optional) -# Directory for generated files. If you specify this, you will often -# want to specify output_name if the target name is not particularly -# unique, since this can cause files from multiple grit targets to -# overwrite each other. -# -# output_name (optiona) -# Provide an alternate base name for the generated files, like the .d -# files. Normally these are based on the target name and go in the -# output_dir, but if multiple targets with the same name end up in -# the same output_dir, they can collide. -# -# depfile_dir (optional) -# If set, used to store the depfile and corresponding stamp file. -# Defaults to output_dir -# -# use_qualified_include (optional) -# If set, output_dir is not added to include_dirs. -# -# configs (optional) -# List of additional configs to be applied to the generated target. -# deps (optional) -# inputs (optional) -# List of additional files, required for grit to process source file. -# visibility (optional) -# Normal meaning. -# -# Example -# -# grit("my_resources") { -# # Source and outputs are required. -# source = "myfile.grd" -# outputs = [ -# "foo_strings.h", -# "foo_strings.pak", -# ] -# -# grit_flags = [ "-E", "foo=bar" ] # Optional extra flags. -# # You can also put deps here if the grit source depends on generated -# # files. -# } -import("//build/config/chrome_build.gni") -import("//build/config/crypto.gni") -import("//build/config/features.gni") -import("//build/config/ui.gni") - -grit_defines = [] - -# Mac and iOS want Title Case strings. -use_titlecase_in_grd_files = is_mac || is_ios -if (use_titlecase_in_grd_files) { - grit_defines += [ - "-D", - "use_titlecase", - ] -} - -if (is_chrome_branded) { - grit_defines += [ - "-D", - "_google_chrome", - "-E", - "CHROMIUM_BUILD=google_chrome", - ] -} else { - grit_defines += [ - "-D", - "_chromium", - "-E", - "CHROMIUM_BUILD=chromium", - ] -} - -if (is_chromeos) { - grit_defines += [ - "-D", - "chromeos", - "-D", - "scale_factors=2x", - ] -} - -if (is_desktop_linux) { - grit_defines += [ - "-D", - "desktop_linux", - ] -} - -if (toolkit_views) { - grit_defines += [ - "-D", - "toolkit_views", - ] -} - -if (use_aura) { - grit_defines += [ - "-D", - "use_aura", - ] -} - -if (use_ash) { - grit_defines += [ - "-D", - "use_ash", - ] -} - -if (use_nss_certs) { - grit_defines += [ - "-D", - "use_nss_certs", - ] -} - -if (use_ozone) { - grit_defines += [ - "-D", - "use_ozone", - ] -} - -if (enable_image_loader_extension) { - grit_defines += [ - "-D", - "image_loader_extension", - ] -} - -if (enable_remoting) { - grit_defines += [ - "-D", - "remoting", - ] -} - -if (is_android) { - grit_defines += [ - "-t", - "android", - "-E", - "ANDROID_JAVA_TAGGED_ONLY=true", - ] -} - -if (is_mac || is_ios) { - grit_defines += [ - "-D", - "scale_factors=2x", - ] -} - -if (is_ios) { - grit_defines += [ - "-t", - "ios", - - # iOS uses a whitelist to filter resources. - "-w", - rebase_path("//build/ios/grit_whitelist.txt", root_build_dir), - ] -} - -if (enable_extensions) { - grit_defines += [ - "-D", - "enable_extensions", - ] -} -if (enable_media_router) { - grit_defines += [ - "-D", - "enable_media_router", - ] -} -if (enable_plugins) { - grit_defines += [ - "-D", - "enable_plugins", - ] -} -if (enable_basic_printing || enable_print_preview) { - grit_defines += [ - "-D", - "enable_printing", - ] - if (enable_print_preview) { - grit_defines += [ - "-D", - "enable_print_preview", - ] - } -} -if (enable_themes) { - grit_defines += [ - "-D", - "enable_themes", - ] -} -if (enable_app_list) { - grit_defines += [ - "-D", - "enable_app_list", - ] -} -if (enable_settings_app) { - grit_defines += [ - "-D", - "enable_settings_app", - ] -} -if (enable_google_now) { - grit_defines += [ - "-D", - "enable_google_now", - ] -} - -# Note: use_concatenated_impulse_responses is omitted. It is never used and -# should probably be removed from GYP build. -if (enable_webrtc) { - grit_defines += [ - "-D", - "enable_webrtc", - ] -} -if (enable_hangout_services_extension) { - grit_defines += [ - "-D", - "enable_hangout_services_extension", - ] -} -if (enable_task_manager) { - grit_defines += [ - "-D", - "enable_task_manager", - ] -} -if (enable_notifications) { - grit_defines += [ - "-D", - "enable_notifications", - ] -} -if (enable_wifi_bootstrapping) { - grit_defines += [ - "-D", - "enable_wifi_bootstrapping", - ] -} -if (enable_service_discovery) { - grit_defines += [ - "-D", - "enable_service_discovery", - ] -} -if (mac_views_browser) { - grit_defines += [ - "-D", - "mac_views_browser", - ] -} - -grit_resource_id_file = "//tools/gritsettings/resource_ids" -grit_info_script = "//tools/grit/grit_info.py" - -template("grit") { - assert(defined(invoker.source), - "\"source\" must be defined for the grit template $target_name") - - grit_inputs = [ invoker.source ] - - if (defined(invoker.resource_ids)) { - resource_ids = invoker.resource_ids - } else { - resource_ids = grit_resource_id_file - } - if (resource_ids != "") { - # The script depends on the ID file. Only add this dependency if the ID - # file is specified. - grit_inputs += [ resource_ids ] - } - - if (defined(invoker.output_dir)) { - output_dir = invoker.output_dir - } else { - output_dir = target_gen_dir - } - - if (defined(invoker.output_name)) { - grit_output_name = invoker.output_name - } else { - grit_output_name = target_name - } - - if (defined(invoker.depfile_dir)) { - depfile_dir = invoker.depfile_dir - } else { - depfile_dir = output_dir - } - - # These are all passed as arguments to the script so have to be relative to - # the build directory. - if (resource_ids != "") { - resource_ids = rebase_path(resource_ids, root_build_dir) - } - rebased_output_dir = rebase_path(output_dir, root_build_dir) - source_path = rebase_path(invoker.source, root_build_dir) - - if (defined(invoker.grit_flags)) { - grit_flags = invoker.grit_flags - } else { - grit_flags = [] # These are optional so default to empty list. - } - - assert_files_flags = [] - - # We want to make sure the declared outputs actually match what Grit is - # writing. We write the list to a file (some of the output lists are long - # enough to not fit on a Windows command line) and ask Grit to verify those - # are the actual outputs at runtime. - asserted_list_file = - "$target_out_dir/${grit_output_name}_expected_outputs.txt" - write_file(asserted_list_file, - rebase_path(invoker.outputs, root_build_dir, output_dir)) - assert_files_flags += [ "--assert-file-list=" + - rebase_path(asserted_list_file, root_build_dir) ] - grit_outputs = - get_path_info(rebase_path(invoker.outputs, ".", output_dir), "abspath") - - # The config and the action below get this visibility son only the generated - # source set can depend on them. The variable "target_name" will get - # overwritten inside the inner classes so we need to compute it here. - target_visibility = [ ":$target_name" ] - - # The current grit setup makes an file in $output_dir/grit/foo.h that - # the source code expects to include via "grit/foo.h". It would be nice to - # change this to including absolute paths relative to the root gen directory - # (like "mycomponent/foo.h"). This config sets up the include path. - grit_config = target_name + "_grit_config" - config(grit_config) { - if (!defined(invoker.use_qualified_include) || - !invoker.use_qualified_include) { - include_dirs = [ output_dir ] - } - visibility = target_visibility - } - - grit_custom_target = target_name + "_grit" - action(grit_custom_target) { - script = "//tools/grit/grit.py" - inputs = grit_inputs - - depfile = "$depfile_dir/${grit_output_name}_stamp.d" - outputs = [ "${depfile}.stamp" ] + grit_outputs - - args = [ - "-i", - source_path, - "build", - ] - if (resource_ids != "") { - args += [ - "-f", - resource_ids, - ] - } - args += [ - "-o", - rebased_output_dir, - "--depdir", - ".", - "--depfile", - rebase_path(depfile, root_build_dir), - "--write-only-new=1", - "--depend-on-stamp", - ] + grit_defines - - # Add extra defines with -D flags. - if (defined(invoker.defines)) { - foreach(i, invoker.defines) { - args += [ - "-D", - i, - ] - } - } - - args += grit_flags + assert_files_flags - - if (defined(invoker.visibility)) { - # This needs to include both what the invoker specified (since they - # probably include generated headers from this target), as well as the - # generated source set (since there's no guarantee that the visibility - # specified by the invoker includes our target). - # - # Only define visibility at all if the invoker specified it. Otherwise, - # we want to keep the public "no visibility specified" default. - visibility = target_visibility + invoker.visibility - } - - deps = [ - "//tools/grit:grit_sources", - ] - if (defined(invoker.deps)) { - deps += invoker.deps - } - if (defined(invoker.inputs)) { - inputs += invoker.inputs - } - } - - # This is the thing that people actually link with, it must be named the - # same as the argument the template was invoked with. - source_set(target_name) { - # Since we generate a file, we need to be run before the targets that - # depend on us. - sources = grit_outputs - - # Deps set on the template invocation will go on the action that runs - # grit above rather than this library. This target needs to depend on the - # action publicly so other scripts can take the outputs from the grit - # script as inputs. - public_deps = [ - ":$grit_custom_target", - ] - public_configs = [ ":$grit_config" ] - - if (defined(invoker.public_configs)) { - public_configs += invoker.public_configs - } - - if (defined(invoker.configs)) { - configs += invoker.configs - } - - if (defined(invoker.visibility)) { - visibility = invoker.visibility - } - output_name = grit_output_name - } -} diff --git a/build/secondary/tools/grit/repack.gni b/build/secondary/tools/grit/repack.gni deleted file mode 100644 index 1030674c62e..00000000000 --- a/build/secondary/tools/grit/repack.gni +++ /dev/null @@ -1,47 +0,0 @@ -# Copyright 2014 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 file defines a template to invoke grit repack in a consistent manner. -# -# Parameters: -# sources [required] -# List of pak files that need to be combined. -# -# output [required] -# File name (single string) of the output file. -# -# repack_options [optional] -# List of extra arguments to pass. -# -# deps [optional] -# visibility [optional] -# Normal meaning. -template("repack") { - action(target_name) { - assert(defined(invoker.sources), "Need sources for $target_name") - assert(defined(invoker.output), "Need output for $target_name") - - if (defined(invoker.visibility)) { - visibility = invoker.visibility - } - - script = "//tools/grit/grit/format/repack.py" - - inputs = invoker.sources - outputs = [ - invoker.output, - ] - - args = [] - if (defined(invoker.repack_options)) { - args += invoker.repack_options - } - args += [ rebase_path(invoker.output, root_build_dir) ] - args += rebase_path(invoker.sources, root_build_dir) - - if (defined(invoker.deps)) { - deps = invoker.deps - } - } -} diff --git a/build/secondary/tools/grit/stamp_grit_sources.py b/build/secondary/tools/grit/stamp_grit_sources.py deleted file mode 100644 index d43d4b8c7fd..00000000000 --- a/build/secondary/tools/grit/stamp_grit_sources.py +++ /dev/null @@ -1,55 +0,0 @@ -# Copyright 2014 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 script enumerates the files in the given directory, writing an empty -# stamp file and a .d file listing the inputs required to make the stamp. This -# allows us to dynamically depend on the grit sources without enumerating the -# grit directory for every invocation of grit (which is what adding the source -# files to every .grd file's .d file would entail) or shelling out to grit -# synchronously during GN execution to get the list (which would be slow). -# -# Usage: -# stamp_grit_sources.py <.d-file> - -import os -import sys - -def GritSourceFiles(grit_root_dir): - files = [] - for root, _, filenames in os.walk(grit_root_dir): - grit_src = [os.path.join(root, f) for f in filenames - if f.endswith('.py') and not f.endswith('_unittest.py')] - files.extend(grit_src) - files = [f.replace('\\', '/') for f in files] - return sorted(files) - - -def WriteDepFile(dep_file, stamp_file, source_files): - with open(dep_file, "w") as f: - f.write(stamp_file) - f.write(": ") - f.write(' '.join(source_files)) - - -def WriteStampFile(stamp_file): - with open(stamp_file, "w"): - pass - - -def main(argv): - if len(argv) != 4: - print "Error: expecting 3 args." - return 1 - - grit_root_dir = sys.argv[1] - stamp_file = sys.argv[2] - dep_file = sys.argv[3] - - WriteStampFile(stamp_file) - WriteDepFile(dep_file, stamp_file, GritSourceFiles(grit_root_dir)) - return 0 - - -if __name__ == '__main__': - sys.exit(main(sys.argv)) diff --git a/build/toolchain/fnl/BUILD.gn b/build/toolchain/fnl/BUILD.gn deleted file mode 100644 index 1e4a075231e..00000000000 --- a/build/toolchain/fnl/BUILD.gn +++ /dev/null @@ -1,24 +0,0 @@ -# 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/toolchain/gcc_toolchain.gni") - -declare_args() { - toolchain_prefix = "" -} - -gcc_toolchain("target") { - assert(toolchain_prefix != "", "Must provide toolchain_prefix") - - cc = "${toolchain_prefix}gcc" - cxx = "${toolchain_prefix}g++" - ar = "${toolchain_prefix}ar" - ld = cxx - readelf = "${toolchain_prefix}readelf" - nm = "${toolchain_prefix}nm" - - toolchain_cpu = "${target_cpu}" - toolchain_os = "linux" - is_clang = is_clang -} diff --git a/build/toolchain/linux/BUILD.gn b/build/toolchain/linux/BUILD.gn index c16e31c46b1..ae090b0fb0e 100644 --- a/build/toolchain/linux/BUILD.gn +++ b/build/toolchain/linux/BUILD.gn @@ -8,6 +8,10 @@ import("//build/toolchain/clang.gni") import("//build/toolchain/gcc_toolchain.gni") import("//build/toolchain/goma.gni") +declare_args() { + toolchain_prefix = "" +} + if (use_goma) { assert(!use_ccache, "Goma and ccache can't be used together.") compiler_prefix = "$goma_dir/gomacc " @@ -31,14 +35,23 @@ gcc_toolchain("arm") { is_clang = false } +gcc_toolchain("arm64") { + cc = "${compiler_prefix}aarch64-linux-gnu-gcc" + cxx = "${compiler_prefix}aarch64-linux-gnu-g++" + + ar = "aarch64-linux-gnu-ar" + ld = cxx + readelf = "aarch64-linux-gnu-readelf" + nm = "aarch64-linux-gnu-nm" + + toolchain_cpu = "arm64" + toolchain_os = "linux" + is_clang = false +} + gcc_toolchain("clang_x86") { - if (use_clang_type_profiler) { - prefix = rebase_path("//third_party/llvm-allocated-type/Linux_ia32/bin", - root_build_dir) - } else { - prefix = rebase_path("//third_party/llvm-build/Release+Asserts/bin", - root_build_dir) - } + prefix = rebase_path("//third_party/llvm-build/Release+Asserts/bin", + root_build_dir) cc = "${compiler_prefix}$prefix/clang" cxx = "${compiler_prefix}$prefix/clang++" readelf = "readelf" @@ -53,7 +66,7 @@ gcc_toolchain("clang_x86") { gcc_toolchain("x86") { cc = "${compiler_prefix}gcc" - cxx = "$compiler_prefix}g++" + cxx = "${compiler_prefix}g++" readelf = "readelf" nm = "nm" @@ -66,13 +79,8 @@ gcc_toolchain("x86") { } gcc_toolchain("clang_x64") { - if (use_clang_type_profiler) { - prefix = rebase_path("//third_party/llvm-allocated-type/Linux_x64/bin", - root_build_dir) - } else { - prefix = rebase_path("//third_party/llvm-build/Release+Asserts/bin", - root_build_dir) - } + prefix = rebase_path("//third_party/llvm-build/Release+Asserts/bin", + root_build_dir) cc = "${compiler_prefix}$prefix/clang" cxx = "${compiler_prefix}$prefix/clang++" @@ -102,14 +110,14 @@ gcc_toolchain("x64") { } gcc_toolchain("mipsel") { - cc = "mipsel-linux-gnu-gcc" - cxx = "mipsel-linux-gnu-g++" - ar = "mipsel-linux-gnu-ar" + cc = "${toolchain_prefix}gcc" + cxx = "${toolchain_prefix}g++" + ar = "${toolchain_prefix}ar" ld = cxx - readelf = "mipsel-linux-gnu-readelf" - nm = "mipsel-linux-gnu-nm" + readelf = "${toolchain_prefix}readelf" + nm = "${toolchain_prefix}nm" - toolchain_cpu = "mipsel" + toolchain_cpu = "${target_cpu}" toolchain_os = "linux" - is_clang = false + is_clang = is_clang } diff --git a/runtime/BUILD.gn b/runtime/BUILD.gn index df10d3a7228..afc963ab00a 100644 --- a/runtime/BUILD.gn +++ b/runtime/BUILD.gn @@ -2,10 +2,6 @@ # for details. All rights reserved. Use of this source code is governed by a # BSD-style license that can be found in the LICENSE file. -# TODO(zra): These build arguments should likely be moved to a gni file that is -# included in BUILD.gn files that care about the values of the flags. For now, -# since the GN build only happens as part of a Mojo build there is no need for -# the indirection. declare_args() { # Instead of using is_debug, we introduce a different flag for specifying a # Debug build of Dart so that clients can still use a Release build of Dart @@ -20,6 +16,10 @@ declare_args() { # CPU profiling features enabled. # 'release' - The VM is built to run with AOT compiled code with no developer # features enabled. + # + # These settings are only used for Flutter, at the moment. A standalone build + # of the Dart VM should leave this set to "develop", and should set + # 'is_debug', 'is_release', or 'is_product'. dart_runtime_mode = "develop" # Explicitly set the target architecture in case of precompilation. Leaving @@ -36,8 +36,8 @@ config("dart_public_config") { ] } -# Controls PRODUCT #define. -config("dart_product_config") { +# Adds PRODUCT define if Flutter has specified "release" for dart_runtime_mode +config("dart_maybe_product_config") { defines = [] if ((dart_runtime_mode != "develop") && @@ -56,8 +56,9 @@ config("dart_product_config") { } } -# Controls DART_PRECOMPILED_RUNTIME #define. -config("dart_precompiled_runtime_config") { +# Adds the DART_PRECOMPILED_RUNTIME define if Flutter has specified "profile" or +# "release" for dart_runtime_mode. +config("dart_maybe_precompiled_runtime_config") { defines = [] if ((dart_runtime_mode != "develop") && @@ -83,12 +84,22 @@ config("dart_precompiled_runtime_config") { } } +config("dart_precompiled_runtime_config") { + defines = [] + defines += ["DART_PRECOMPILED_RUNTIME"] +} + # Controls DART_PRECOMPILER #define. config("dart_precompiler_config") { defines = [] defines += ["DART_PRECOMPILER"] } +config("dart_no_snapshot_config") { + defines = [] + defines += ["DART_NO_SNAPSHOT"] +} + config("dart_config") { defines = [] @@ -97,23 +108,39 @@ config("dart_config") { } if (dart_target_arch != "") { - if (dart_target_arch == "arm") { + if ((dart_target_arch == "arm") || + (dart_target_arch == "simarm")) { defines += [ "TARGET_ARCH_ARM" ] if (target_os == "mac" || target_os == "ios") { defines += [ "TARGET_ABI_IOS" ] } else { defines += [ "TARGET_ABI_EABI" ] } - } else if (dart_target_arch == "arm64") { + } else if ((dart_target_arch == "armv6") || + (dart_target_arch == "simarmv6")) { + defines += [ "TARGET_ARCH_ARM" ] + defines += [ "TARGET_ARCH_ARM_6" ] + defines += [ "TARGET_ABI_EABI" ] + } else if ((dart_target_arch == "armv5te") || + (dart_target_arch == "simarmv5te")) { + defines += [ "TARGET_ARCH_ARM" ] + defines += [ "TARGET_ARCH_ARM_5TE" ] + defines += [ "TARGET_ABI_EABI" ] + } else if ((dart_target_arch == "arm64") || + (dart_target_arch == "simarm64")) { defines += [ "TARGET_ARCH_ARM64" ] - } else if (dart_target_arch == "mips") { + } else if ((dart_target_arch == "mips") || + (dart_target_arch == "simmips")) { defines += [ "TARGET_ARCH_MIPS" ] } else if (dart_target_arch == "x64") { defines += [ "TARGET_ARCH_X64" ] } else if (dart_target_arch == "ia32") { defines += [ "TARGET_ARCH_IA32" ] - } else if (dart_target_arch == "dbc") { + } else if ((dart_target_arch == "dbc") || + (dart_target_arch == "simdbc") || + (dart_target_arch == "simdbc64")) { defines += [ "TARGET_ARCH_DBC" ] + defines += [ "USING_SIMULATOR" ] } else { print("Invalid |dart_target_arch|") assert(false) @@ -159,31 +186,97 @@ config("dart_config") { } } -static_library("libdart") { - configs += [":dart_config", - ":dart_product_config", - ":dart_precompiled_runtime_config"] - deps = [ +template("libdart_library") { + extra_configs = [] + if (defined(invoker.extra_configs)) { + extra_configs += invoker.extra_configs + } + extra_deps = [] + if (defined(invoker.extra_deps)) { + extra_deps += invoker.extra_deps + } + static_library(target_name) { + configs += [ + ":dart_config", + ":dart_maybe_product_config" + ] + extra_configs + deps = [ + "vm:libdart_platform", + "third_party/double-conversion/src:libdouble_conversion", + ":generate_version_cc_file", + ] + extra_deps + include_dirs = [ + ".", + ] + public_configs = [":dart_public_config"] + sources = [ + "include/dart_api.h", + "include/dart_mirrors_api.h", + "include/dart_native_api.h", + "include/dart_tools_api.h", + "vm/dart_api_impl.cc", + "vm/debugger_api_impl.cc", + "vm/mirrors_api_impl.cc", + "vm/native_api_impl.cc", + "vm/version.h", + "$target_gen_dir/version.cc", + ] + defines = [ + "DART_SHARED_LIB", + ] + } +} + +libdart_library("libdart") { + extra_configs = [ + ":dart_maybe_precompiled_runtime_config" + ] + extra_deps = [ "vm:libdart_lib", "vm:libdart_vm", - "third_party/double-conversion/src:libdouble_conversion", - ":generate_version_cc_file", ] - include_dirs = [ - ".", +} + +libdart_library("libdart_precompiled_runtime") { + extra_configs = [ + ":dart_precompiled_runtime_config" ] - public_configs = [":dart_public_config"] - sources = [ - "include/dart_api.h", - "include/dart_mirrors_api.h", - "include/dart_native_api.h", - "include/dart_tools_api.h", - "vm/dart_api_impl.cc", - "vm/debugger_api_impl.cc", - "vm/mirrors_api_impl.cc", - "vm/native_api_impl.cc", - "vm/version.h", - "$target_gen_dir/version.cc", + extra_deps = [ + "vm:libdart_lib_precompiled_runtime", + "vm:libdart_vm_precompiled_runtime", + ] +} + +libdart_library("libdart_nosnapshot") { + extra_configs = [ + ":dart_no_snapshot_config", + ":dart_maybe_precompiled_runtime_config" + ] + extra_deps = [ + "vm:libdart_lib_nosnapshot", + "vm:libdart_vm_nosnapshot", + ] +} + +libdart_library("libdart_nosnapshot_precompiled_runtime") { + extra_configs = [ + ":dart_no_snapshot_config", + ":dart_precompiled_runtime_config" + ] + extra_deps = [ + "vm:libdart_lib_nosnapshot_precompiled_runtime", + "vm:libdart_vm_nosnapshot_precompiled_runtime", + ] +} + +libdart_library("libdart_nosnapshot_with_precompiler") { + extra_configs = [ + ":dart_no_snapshot_config", + ":dart_precompiler_config", + ] + extra_deps = [ + "vm:libdart_lib_nosnapshot_with_precompiler", + "vm:libdart_vm_nosnapshot_with_precompiler", ] } @@ -211,8 +304,7 @@ action("generate_version_cc_file") { executable("libdart_dependency_helper") { configs += [":dart_config", - ":dart_product_config", - ":dart_precompiled_runtime_config"] + ":dart_maybe_product_config"] deps = [ "vm:libdart_lib_nosnapshot", "vm:libdart_lib", diff --git a/runtime/bin/BUILD.gn b/runtime/bin/BUILD.gn index 4c359bd5dd0..f09dd415b9a 100644 --- a/runtime/bin/BUILD.gn +++ b/runtime/bin/BUILD.gn @@ -6,6 +6,12 @@ declare_args() { # Whether to fall back to built-in root certificates when they cannot be # verified at the operating system level. dart_use_fallback_root_certificates = false + + # The BUILD.gn file that we pull from chromium as part of zlib has a + # dependence on //base, which we don't pull in. In a standalone build of the + # VM, we set this to //runtime/bin/zlib where we have a BUILD.gn file without + # a dependence on //base. + dart_zlib_path = "//third_party/zlib" } resources_sources_gypi = @@ -37,7 +43,6 @@ action("gen_resources_cc") { ] + rebase_path(sources, root_build_dir) } - template("gen_library_src_path") { assert(defined(invoker.sources), "Need sources in $target_name") assert(defined(invoker.output), "Need output in $target_name") @@ -51,17 +56,20 @@ template("gen_library_src_path") { outputs = [ invoker.output, ] name = invoker.name kind = invoker.kind + library_name = "dart:${name}" + if (defined(invoker.library_name)) { + library_name = invoker.library_name + } args = [ "--output", rebase_path(invoker.output, root_build_dir), "--input_cc", rebase_path("builtin_in.cc", root_build_dir), "--include", "bin/builtin.h", "--var_name", "dart::bin::Builtin::${name}_${kind}_paths_", - "--library_name", "dart:${name}",] + + "--library_name", library_name,] + rebase_path(invoker.sources, root_build_dir) } } - builtin_sources_gypi = exec_script("../../tools/gypi_to_gn.py", [rebase_path("builtin_sources.gypi")], @@ -75,7 +83,6 @@ gen_library_src_path("generate_builtin_cc_file") { output = "$target_gen_dir/builtin_gen.cc" } - sdk_io_sources_gypi = exec_script("../../tools/gypi_to_gn.py", [rebase_path("../../sdk/lib/io/io_sources.gypi")], @@ -104,14 +111,105 @@ gen_library_src_path("generate_io_patch_cc_file") { output = "$target_gen_dir/io_patch_gen.cc" } +gen_library_src_path("generate_html_cc_file") { + name = "html" + kind = "source" + sources = ["../../sdk/lib/html/dartium/html_dartium.dart"] + output = "$target_gen_dir/html_gen.cc" +} + +gen_library_src_path("generate_html_common_cc_file") { + name = "html_common" + kind = "source" + sources = [ + "../../sdk/lib/html/html_common/html_common.dart", + "../../sdk/lib/html/html_common/css_class_set.dart", + "../../sdk/lib/html/html_common/device.dart", + "../../sdk/lib/html/html_common/filtered_element_list.dart", + "../../sdk/lib/html/html_common/lists.dart", + "../../sdk/lib/html/html_common/conversions.dart", + "../../sdk/lib/html/html_common/conversions_dartium.dart", + ] + output = "$target_gen_dir/html_common_gen.cc" +} + +gen_library_src_path("generate_js_cc_file") { + name = "js" + kind = "source" + sources = ["../../sdk/lib/js/dartium/js_dartium.dart"] + output = "$target_gen_dir/js_gen.cc" +} + +gen_library_src_path("generate_blink_cc_file") { + name = "_blink" + kind = "source" + sources = ["../../sdk/lib/_blink/dartium/_blink_dartium.dart"] + output = "$target_gen_dir/blink_gen.cc" +} + +gen_library_src_path("generate_indexed_db_cc_file") { + name = "indexed_db" + kind = "source" + sources = ["../../sdk/lib/indexed_db/dartium/indexed_db_dartium.dart"] + output = "$target_gen_dir/indexed_db_gen.cc" +} + +gen_library_src_path("generate_cached_patches_cc_file") { + name = "cached_patches" + library_name = "cached_patches.dart" + kind = "sources" + sources = ["../../sdk/lib/js/dartium/cached_patches.dart"] + output = "$target_gen_dir/cached_patches_gen.cc" +} + +gen_library_src_path("generate_web_gl_cc_file") { + name = "web_gl" + kind = "source" + sources = ["../../sdk/lib/web_gl/dartium/web_gl_dartium.dart"] + output = "$target_gen_dir/web_gl_gen.cc" +} + +gen_library_src_path("generate_metadata_cc_file") { + name = "metadata" + library_name = "metadata.dart" + kind = "source" + sources = ["../../sdk/lib/html/html_common/metadata.dart"] + output = "$target_gen_dir/metadata_gen.cc" +} + +gen_library_src_path("generate_web_sql_cc_file") { + name = "web_sql" + kind = "source" + sources = ["../../sdk/lib/web_sql/dartium/web_sql_dartium.dart"] + output = "$target_gen_dir/web_sql_gen.cc" +} + +gen_library_src_path("generate_svg_cc_file") { + name = "svg" + kind = "source" + sources = ["../../sdk/lib/svg/dartium/svg_dartium.dart"] + output = "$target_gen_dir/svg_gen.cc" +} + +gen_library_src_path("generate_web_audio_cc_file") { + name = "web_audio" + kind = "source" + sources = ["../../sdk/lib/web_audio/dartium/web_audio_dartium.dart"] + output = "$target_gen_dir/web_audio_gen.cc" +} config("libdart_builtin_config") { libs = [ "dl", ] + if (is_android) { + libs += [ + "android", + "log", + ] + } } - builtin_impl_sources_gypi = exec_script("../../tools/gypi_to_gn.py", [rebase_path("builtin_impl_sources.gypi")], @@ -119,12 +217,24 @@ builtin_impl_sources_gypi = ["builtin_impl_sources.gypi"]) static_library("libdart_builtin") { - configs += ["..:dart_config", "..:dart_product_config"] + configs += ["..:dart_config", + "..:dart_maybe_product_config"] public_configs = [":libdart_builtin_config"] deps = [ ":generate_builtin_cc_file", ":generate_io_cc_file", ":generate_io_patch_cc_file", + ":generate_html_cc_file", + ":generate_html_common_cc_file", + ":generate_js_cc_file", + ":generate_blink_cc_file", + ":generate_indexed_db_cc_file", + ":generate_cached_patches_cc_file", + ":generate_web_gl_cc_file", + ":generate_metadata_cc_file", + ":generate_web_sql_cc_file", + ":generate_svg_cc_file", + ":generate_web_audio_cc_file", ] include_dirs = [ "..", @@ -139,74 +249,6 @@ static_library("libdart_builtin") { ] + builtin_impl_sources_gypi.sources } - -static_library("libdart_nosnapshot") { - configs += ["..:dart_config", - "..:dart_product_config", - "..:dart_precompiled_runtime_config"] - deps = [ - "../vm:libdart_lib_nosnapshot", - "../vm:libdart_vm_nosnapshot", - "../vm:libdart_platform", - "../third_party/double-conversion/src:libdouble_conversion", - "..:generate_version_cc_file", - ] - - sources = [ - "../include/dart_api.h", - "../include/dart_mirrors_api.h", - "../include/dart_native_api.h", - "../include/dart_tools_api.h", - "../vm/dart_api_impl.cc", - "../vm/debugger_api_impl.cc", - "../vm/mirrors_api_impl.cc", - "../vm/native_api_impl.cc", - "$target_gen_dir/../version.cc", - ] - - include_dirs = [ - "..", - ] - - defines = [ - "DART_SHARED_LIB", - ] -} - - -static_library("libdart_nosnapshot_with_precompiler") { - configs += ["..:dart_config", - "..:dart_product_config", - "..:dart_precompiler_config"] - deps = [ - "../vm:libdart_lib_nosnapshot_with_precompiler", - "../vm:libdart_vm_nosnapshot_with_precompiler", - "../vm:libdart_platform", - "../third_party/double-conversion/src:libdouble_conversion", - "..:generate_version_cc_file", - ] - - sources = [ - "../include/dart_api.h", - "../include/dart_mirrors_api.h", - "../include/dart_native_api.h", - "../include/dart_tools_api.h", - "../vm/dart_api_impl.cc", - "../vm/debugger_api_impl.cc", - "../vm/mirrors_api_impl.cc", - "../vm/native_api_impl.cc", - "$target_gen_dir/../version.cc", - ] - - include_dirs = [ - "..", - ] - - defines = [ - "DART_SHARED_LIB", - ] -} - io_impl_sources_gypi = exec_script("../../tools/gypi_to_gn.py", [ rebase_path("io_impl_sources.gypi") ], @@ -215,7 +257,7 @@ io_impl_sources_gypi = executable("gen_snapshot") { configs += ["..:dart_config", - "..:dart_product_config", + "..:dart_maybe_product_config", "..:dart_precompiler_config"] deps = [ ":gen_resources_cc", @@ -224,7 +266,7 @@ executable("gen_snapshot") { ":generate_io_cc_file", ":generate_io_patch_cc_file", ":libdart_builtin", - ":libdart_nosnapshot_with_precompiler", + "..:libdart_nosnapshot_with_precompiler", ] sources = [ @@ -260,11 +302,11 @@ executable("gen_snapshot") { # (without secure sockets) suitable for linking with gen_snapshot. source_set("gen_snapshot_dart_io") { configs += ["..:dart_config", - "..:dart_product_config", + "..:dart_maybe_product_config", "..:dart_precompiler_config"] deps = [ - "//third_party/zlib", + "$dart_zlib_path", ] custom_sources_filter = [ @@ -299,22 +341,16 @@ source_set("gen_snapshot_dart_io") { source_set("libdart_embedder_noio") { configs += ["..:dart_config", - "..:dart_product_config", - "..:dart_precompiled_runtime_config"] + "..:dart_maybe_product_config"] deps = [ "..:libdart", - "../vm:libdart_platform", ] } - -# A source set for the implementation of 'dart:io' library -# (without secure sockets). +# A source set for the implementation of 'dart:io' library. source_set("embedded_dart_io") { configs += ["..:dart_config", - "..:dart_product_config", - "..:dart_precompiled_runtime_config"] - + "..:dart_maybe_product_config"] custom_sources_filter = [ "*_test.cc", "*_test.h", @@ -330,6 +366,7 @@ source_set("embedded_dart_io") { } set_sources_assignment_filter(custom_sources_filter) + defines = [] if (is_mac || is_ios) { libs = [ "CoreFoundation.framework", @@ -337,18 +374,13 @@ source_set("embedded_dart_io") { "Security.framework", ] } else if (defined(is_fuchsia) && is_fuchsia) { - defines = [ + defines += [ "DART_IO_SECURE_SOCKET_DISABLED" ] } else { deps = [ "//third_party/boringssl", ] - if (is_linux && !dart_use_fallback_root_certificates) { - defines = [ - "DART_IO_ROOT_CERTS_DISABLED" - ] - } } sources = io_impl_sources_gypi.sources + builtin_impl_sources_gypi.sources @@ -366,8 +398,14 @@ source_set("embedded_dart_io") { "log.h", ] - if (is_linux && dart_use_fallback_root_certificates) { - sources += [ "//third_party/root_certificates/root_certificates.cc"] + if (is_linux || is_win) { + if (dart_use_fallback_root_certificates) { + sources += [ "//third_party/root_certificates/root_certificates.cc"] + } else { + defines += [ + "DART_IO_ROOT_CERTS_DISABLED", + ] + } } include_dirs = [ @@ -376,7 +414,6 @@ source_set("embedded_dart_io") { ] } - action("generate_snapshot_bin") { deps = [ "../bin:gen_snapshot($host_toolchain)", @@ -409,7 +446,6 @@ action("generate_snapshot_bin") { ] } - action("generate_snapshot_file") { deps = [ ":generate_snapshot_bin", @@ -440,7 +476,6 @@ action("generate_snapshot_file") { ] } - source_set("dart_snapshot_cc") { sources = [ "$root_gen_dir/dart_snapshot.cc", @@ -451,123 +486,99 @@ source_set("dart_snapshot_cc") { ] } +template("dart_executable") { + extra_configs = [] + if (defined(invoker.extra_configs)) { + extra_configs += invoker.extra_configs + } + extra_deps = [] + if (defined(invoker.extra_deps)) { + extra_deps += invoker.extra_deps + } + extra_defines = [] + if (defined(invoker.extra_defines)) { + extra_defines = invoker.extra_defines + } + extra_sources = [] + if (defined(invoker.extra_sources)) { + extra_sources += invoker.extra_sources + } + executable(target_name) { + configs += [ + "..:dart_config", + "..:dart_maybe_product_config" + ] + extra_configs + + deps = [ + ":gen_resources_cc", + ":embedded_dart_io", + ":libdart_builtin", + "$dart_zlib_path", + ] + extra_deps + + defines = extra_defines + + sources = [ + "main.cc", + "vmservice_impl.cc", + "vmservice_impl.h", + "$target_gen_dir/resources_gen.cc", + ] + extra_sources + + include_dirs = [ + "..", + "//third_party", + ] + + ldflags = [ + "-rdynamic", + ] + } +} + +if (!defined(is_fuchsia) || !is_fuchsia) { + dart_executable("dart") { + extra_deps = [ + "..:libdart", + ":dart_snapshot_cc", + "../observatory:standalone_observatory_archive", + ] + } + + dart_executable("dart_precompiled_runtime") { + extra_configs = [ + "..:dart_precompiled_runtime_config" + ] + extra_deps = [ + "..:libdart_precompiled_runtime", + ":dart_snapshot_cc", + "../observatory:standalone_observatory_archive", + ] + } +} + +dart_executable("dart_bootstrap") { + extra_configs = [ + "..:dart_precompiler_config", + "..:dart_no_snapshot_config", + ] + extra_deps = [ + "..:libdart", + ] + extra_defines = [ + "NO_OBSERVATORY", + ] + extra_sources = [ + "observatory_assets_empty.cc", + "snapshot_empty.cc", + ] +} + if (defined(is_fuchsia) && is_fuchsia) { copy("hello_fuchsia") { sources = [ "../tests/vm/dart/hello_fuchsia_test.dart" ] outputs = [ "$root_out_dir/hello_fuchsia.dart" ] } -} - -executable("dart_no_observatory") { - configs += ["..:dart_config", - "..:dart_product_config", - "..:dart_precompiled_runtime_config",] - deps = [ - ":gen_resources_cc", - ":embedded_dart_io", - ":libdart_builtin", - "../vm:libdart_platform", - "..:libdart", - ":dart_snapshot_cc", - "//third_party/zlib", - ] - - if (defined(is_fuchsia) && is_fuchsia) { - deps += [ - ":hello_fuchsia", - ] - } - - defines = [ - "NO_OBSERVATORY", - ] - - sources = [ - "main.cc", - "observatory_assets_empty.cc", - "vmservice_impl.cc", - "vmservice_impl.h", - "$target_gen_dir/resources_gen.cc", - ] - - include_dirs = [ - "..", - "//third_party", - ] -} - - -if (defined(is_fuchsia) && is_fuchsia) { - action("generate_snapshot_test_dat_file") { - snapshot_test_dat_file = "$root_gen_dir/snapshot_test.dat" - snapshot_test_in_dat_file = "../vm/snapshot_test_in.dat" - snapshot_test_dart_file = "../vm/snapshot_test.dart" - inputs = [ - "../tools/create_string_literal.py", - snapshot_test_in_dat_file, - snapshot_test_dart_file, - ] - - outputs = [ - snapshot_test_dat_file, - ] - - script = "../tools/create_string_literal.py" - args = [ - "--output", - rebase_path(snapshot_test_dat_file), - "--input_cc", - rebase_path(snapshot_test_in_dat_file), - "--include", - "INTENTIONALLY_LEFT_BLANK", - "--var_name", - "INTENTIONALLY_LEFT_BLANK_TOO", - rebase_path(snapshot_test_dart_file), - ] - } - - executable("run_vm_tests") { - testonly = true - configs += ["..:dart_config", - "..:dart_product_config", - "..:dart_precompiled_runtime_config",] - deps = [ - "..:libdart", - ":libdart_builtin", - ":embedded_dart_io", - ":dart_snapshot_cc", - ":generate_snapshot_test_dat_file", - "../vm:libdart_platform", - "//third_party/zlib", - ] - include_dirs = [ - "..", - "$target_gen_dir", - ] - defines = [ - "TESTING", - ] - - vm_tests_list = exec_script("../../tools/gypi_to_gn.py", - [rebase_path("../vm/vm_sources.gypi"), - "--keep_only=_test.cc", - "--keep_only=_test.h",], - "scope", - ["../vm/vm_sources.gypi"]) - vm_tests = rebase_path(vm_tests_list.sources, ".", "../vm") - - builtin_impl_tests_list = - exec_script("../../tools/gypi_to_gn.py", - [rebase_path("builtin_impl_sources.gypi"), - "--keep_only=_test.cc", - "--keep_only=_test.h",], - "scope", - ["builtin_impl_sources.gypi"]) - - sources = [ - "run_vm_tests.cc", - ] + builtin_impl_tests_list.sources + vm_tests - } executable("run_vm_tests_fuchsia") { testonly = true @@ -581,4 +592,138 @@ if (defined(is_fuchsia) && is_fuchsia) { "runtime", ] } -} # defined(is_fuchsia) && is_fuchsia +} + +# This is only needed for the Fuchsia target build until the Observatory is +# supported. +dart_executable("dart_no_observatory") { + extra_deps = [ + "..:libdart", + ":dart_snapshot_cc", + ] + if (defined(is_fuchsia) && is_fuchsia) { + extra_deps += [ ":hello_fuchsia" ] + } + extra_defines = [ + "NO_OBSERVATORY", + ] + extra_sources = [ + "observatory_assets_empty.cc", + ] +} + +executable("process_test") { + sources = [ + "process_test.cc", + ] +} + +action("generate_snapshot_test_dat_file") { + snapshot_test_dat_file = "$root_gen_dir/snapshot_test.dat" + snapshot_test_in_dat_file = "../vm/snapshot_test_in.dat" + snapshot_test_dart_file = "../vm/snapshot_test.dart" + inputs = [ + "../tools/create_string_literal.py", + snapshot_test_in_dat_file, + snapshot_test_dart_file, + ] + + outputs = [ + snapshot_test_dat_file, + ] + + script = "../tools/create_string_literal.py" + args = [ + "--output", + rebase_path(snapshot_test_dat_file), + "--input_cc", + rebase_path(snapshot_test_in_dat_file), + "--include", + "INTENTIONALLY_LEFT_BLANK", + "--var_name", + "INTENTIONALLY_LEFT_BLANK_TOO", + rebase_path(snapshot_test_dart_file), + ] +} + +executable("run_vm_tests") { + configs += ["..:dart_config", + "..:dart_maybe_product_config"] + deps = [ + "..:libdart", + ":libdart_builtin", + ":embedded_dart_io", + ":dart_snapshot_cc", + ":generate_snapshot_test_dat_file", + "$dart_zlib_path", + ] + include_dirs = [ + "..", + "$target_gen_dir", + ] + defines = [ + "TESTING", + ] + + # The VM sources are already included in libdart, so we just want to add in + # the tests here. + vm_tests_list = exec_script("../../tools/gypi_to_gn.py", + [rebase_path("../vm/vm_sources.gypi"), + "--keep_only=_test.cc", + "--keep_only=_test.h",], + "scope", + ["../vm/vm_sources.gypi"]) + vm_tests = rebase_path(vm_tests_list.sources, ".", "../vm") + + builtin_impl_tests_list = + exec_script("../../tools/gypi_to_gn.py", + [rebase_path("builtin_impl_sources.gypi"), + "--keep_only=_test.cc", + "--keep_only=_test.h",], + "scope", + ["builtin_impl_sources.gypi"]) + + sources = [ + "run_vm_tests.cc", + ] + builtin_impl_tests_list.sources + vm_tests + + ldflags = [ + "-rdynamic", + ] +} + +if (!defined(is_fuchsia) || !is_fuchsia) { + shared_library("test_extension") { + deps = [ + ":dart", + ] + sources = [ + "test_extension.c", + "test_extension_dllmain_win.cc", + ] + include_dirs = [ + "..", + ] + defines = [ + # The only effect of DART_SHARED_LIB is to export the Dart API. + "DART_SHARED_LIB", + ] + } + + shared_library("sample_extension") { + deps = [ + ":dart", + ] + sources = [ + "../../samples/sample_extension/sample_extension.cc", + "../../samples/sample_extension/sample_extension_dllmain_win.cc", + ] + include_dirs = [ + "..", + ] + defines = [ + # The only effect of DART_SHARED_LIB is to export the Dart API. + "DART_SHARED_LIB", + ] + } +} diff --git a/runtime/bin/bin.gypi b/runtime/bin/bin.gypi index a31cb93bd45..650f587393e 100644 --- a/runtime/bin/bin.gypi +++ b/runtime/bin/bin.gypi @@ -290,7 +290,7 @@ '--output', '<(blink_cc_file)', '--input_cc', '<(builtin_in_cc_file)', '--include', 'bin/builtin.h', - '--var_name', 'dart::bin::Builtin::blink_source_paths_', + '--var_name', 'dart::bin::Builtin::_blink_source_paths_', '--library_name', 'dart:_blink', '<@(_sources)', ], @@ -322,7 +322,7 @@ '--output', '<(indexeddb_cc_file)', '--input_cc', '<(builtin_in_cc_file)', '--include', 'bin/builtin.h', - '--var_name', 'dart::bin::Builtin::indexeddb_source_paths_', + '--var_name', 'dart::bin::Builtin::indexed_db_source_paths_', '--library_name', 'dart:indexed_db', '<@(_sources)', ], @@ -450,7 +450,7 @@ '--output', '<(websql_cc_file)', '--input_cc', '<(builtin_in_cc_file)', '--include', 'bin/builtin.h', - '--var_name', 'dart::bin::Builtin::websql_source_paths_', + '--var_name', 'dart::bin::Builtin::web_sql_source_paths_', '--library_name', 'dart:web_sql', '<@(_sources)', ], @@ -514,7 +514,7 @@ '--output', '<(webaudio_cc_file)', '--input_cc', '<(builtin_in_cc_file)', '--include', 'bin/builtin.h', - '--var_name', 'dart::bin::Builtin::webaudio_source_paths_', + '--var_name', 'dart::bin::Builtin::web_audio_source_paths_', '--library_name', 'dart:web_audio', '<@(_sources)', ], diff --git a/runtime/bin/builtin.cc b/runtime/bin/builtin.cc index 2c303a17d23..b3215bbfb8f 100644 --- a/runtime/bin/builtin.cc +++ b/runtime/bin/builtin.cc @@ -25,14 +25,14 @@ Builtin::builtin_lib_props Builtin::builtin_libraries_[] = { { "dart:html_common", html_common_source_paths_, NULL, NULL, true}, { "dart:js", js_source_paths_, NULL, NULL, true}, { "dart:js_util", js_util_source_paths_, NULL, NULL, true}, - { "dart:_blink", blink_source_paths_, NULL, NULL, true }, - { "dart:indexed_db", indexeddb_source_paths_, NULL, NULL, true }, + { "dart:_blink", _blink_source_paths_, NULL, NULL, true }, + { "dart:indexed_db", indexed_db_source_paths_, NULL, NULL, true }, { "cached_patches.dart", cached_patches_source_paths_, NULL, NULL, true }, { "dart:web_gl", web_gl_source_paths_, NULL, NULL, true }, { "metadata.dart", metadata_source_paths_, NULL, NULL, true }, - { "dart:web_sql", websql_source_paths_, NULL, NULL, true }, + { "dart:web_sql", web_sql_source_paths_, NULL, NULL, true }, { "dart:svg", svg_source_paths_, NULL, NULL, true }, - { "dart:web_audio", webaudio_source_paths_, NULL, NULL, true }, + { "dart:web_audio", web_audio_source_paths_, NULL, NULL, true }, #endif // defined(DART_NO_SNAPSHOT) // End marker. diff --git a/runtime/bin/builtin.h b/runtime/bin/builtin.h index d90223af734..d7e1e4c2268 100644 --- a/runtime/bin/builtin.h +++ b/runtime/bin/builtin.h @@ -75,14 +75,14 @@ class Builtin { static const char* html_common_source_paths_[]; static const char* js_source_paths_[]; static const char* js_util_source_paths_[]; - static const char* blink_source_paths_[]; - static const char* indexeddb_source_paths_[]; + static const char* _blink_source_paths_[]; + static const char* indexed_db_source_paths_[]; static const char* cached_patches_source_paths_[]; static const char* web_gl_source_paths_[]; static const char* metadata_source_paths_[]; - static const char* websql_source_paths_[]; + static const char* web_sql_source_paths_[]; static const char* svg_source_paths_[]; - static const char* webaudio_source_paths_[]; + static const char* web_audio_source_paths_[]; static Dart_Port load_port_; static const int num_libs_; diff --git a/runtime/bin/zlib/BUILD.gn b/runtime/bin/zlib/BUILD.gn new file mode 100644 index 00000000000..ad78238347c --- /dev/null +++ b/runtime/bin/zlib/BUILD.gn @@ -0,0 +1,56 @@ +# 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. + +config("zlib_config") { + include_dirs = [ "//third_party/zlib" ] +} + +static_library("zlib") { + if (!is_win) { + # Don't stomp on "libzlib" on other platforms. + output_name = "chrome_zlib" + } + + zlib_path = "//third_party/zlib" + sources = [ + "$zlib_path/adler32.c", + "$zlib_path/compress.c", + "$zlib_path/crc32.c", + "$zlib_path/crc32.h", + "$zlib_path/deflate.c", + "$zlib_path/deflate.h", + "$zlib_path/gzclose.c", + "$zlib_path/gzguts.h", + "$zlib_path/gzlib.c", + "$zlib_path/gzread.c", + "$zlib_path/gzwrite.c", + "$zlib_path/infback.c", + "$zlib_path/inffast.c", + "$zlib_path/inffast.h", + "$zlib_path/inffixed.h", + "$zlib_path/inflate.c", + "$zlib_path/inflate.h", + "$zlib_path/inftrees.c", + "$zlib_path/inftrees.h", + "$zlib_path/mozzconf.h", + "$zlib_path/trees.c", + "$zlib_path/trees.h", + "$zlib_path/uncompr.c", + "$zlib_path/zconf.h", + "$zlib_path/zlib.h", + "$zlib_path/zutil.c", + "$zlib_path/zutil.h", + ] + + configs -= [ "//build/config/compiler:chromium_code" ] + configs += [ "//build/config/compiler:no_chromium_code" ] + + all_dependent_configs = [ ":zlib_config" ] + + if (is_clang) { + cflags = [ + "-Wno-shift-negative-value", + ] + } +} diff --git a/runtime/observatory/.packages b/runtime/observatory/.packages index 2a318029ebd..4730e6290d2 100644 --- a/runtime/observatory/.packages +++ b/runtime/observatory/.packages @@ -1,4 +1,4 @@ -# Generated by pub on 2016-09-22 14:19:01.104115. +# Generated by pub on 2016-09-23 00:19:32.016148. analyzer:../../third_party/observatory_pub_packages/packages/analyzer/lib/ args:../../third_party/observatory_pub_packages/packages/args/lib/ async:../../third_party/observatory_pub_packages/packages/async/lib/ diff --git a/runtime/observatory/BUILD.gn b/runtime/observatory/BUILD.gn index 3943253ca45..a476414b477 100644 --- a/runtime/observatory/BUILD.gn +++ b/runtime/observatory/BUILD.gn @@ -41,23 +41,24 @@ action("write_observatory_pubspec_yaml") { rebase_path("pubspec.yaml"), ] + current_dir = rebase_path(".", "//") args = [ "--silent=True", "--pub-executable", dart_host_pub_exe, "--directory", - rebase_path("$root_gen_dir/observatory_copy/dart/runtime/observatory/"), + rebase_path("$root_gen_dir/observatory_copy/$current_dir/"), "--command", "rewrite", rebase_path("../observatory/pubspec.yaml"), rebase_path( - "$root_gen_dir/observatory_copy/dart/runtime/observatory/pubspec.yaml"), + "$root_gen_dir/observatory_copy/$current_dir/pubspec.yaml"), "../../third_party/", rebase_path("../../third_party/"), ] outputs = [ - "$root_gen_dir/observatory_copy/dart/runtime/observatory/pubspec.yaml", + "$root_gen_dir/observatory_copy/$current_dir/pubspec.yaml", ] } @@ -68,9 +69,10 @@ action("copy_observatory_deps") { script = "../../tools/observatory_tool.py" + current_dir = rebase_path(".", "//") inputs = [ script, - "$root_gen_dir/observatory_copy/dart/runtime/observatory/pubspec.yaml", + "$root_gen_dir/observatory_copy/$current_dir/pubspec.yaml", ] args = [ @@ -78,23 +80,24 @@ action("copy_observatory_deps") { "--pub-executable", dart_host_pub_exe, "--stamp", - rebase_path("$root_gen_dir/observatory_copy/dart/runtime/observatory/packages.stamp"), + rebase_path("$root_gen_dir/observatory_copy/$current_dir/packages.stamp"), "--directory", - rebase_path("$root_gen_dir/observatory_copy/dart/runtime/observatory/"), + rebase_path("$root_gen_dir/observatory_copy/$current_dir/"), "--command", "get", ] outputs = [ - "$root_gen_dir/observatory_copy/dart/runtime/observatory/packages.stamp", + "$root_gen_dir/observatory_copy/$current_dir/packages.stamp", ] } action("pub_build_observatory") { + current_dir = rebase_path(".", "//") sources = rebase_path(observatory_sources_gypi.sources, "", - "$root_gen_dir/observatory_copy/dart/runtime/observatory") + "$root_gen_dir/observatory_copy/$current_dir") deps = [ ":copy_observatory", @@ -105,7 +108,7 @@ action("pub_build_observatory") { inputs = [ script, - "$root_gen_dir/observatory_copy/dart/runtime/observatory/packages.stamp", + "$root_gen_dir/observatory_copy/$current_dir/packages.stamp", ] inputs += sources @@ -114,7 +117,7 @@ action("pub_build_observatory") { "--pub-executable", dart_host_pub_exe, "--directory", - rebase_path("$root_gen_dir/observatory_copy/dart/runtime/observatory/"), + rebase_path("$root_gen_dir/observatory_copy/$current_dir/"), "--command", "build", rebase_path("$root_out_dir/observatory/build"), @@ -152,41 +155,70 @@ action("deploy_observatory") { ] } -action("archive_observatory") { - deps = [ - ":deploy_observatory", - ] +template("observatory_archive") { + assert(defined(invoker.inner_namespace), + "Need inner_namespace in $target_name") + assert(defined(invoker.outer_namespace), + "Need outer_namespace in $target_name") + action(target_name) { + deps = [ + ":deploy_observatory", + ] - script = "../tools/create_archive.py" + script = "../tools/create_archive.py" inputs = [ script, "$root_out_dir/observatory/deployed/web/main.dart.js", ] - args = [ - "--output", - rebase_path("$root_gen_dir/observatory/observatory_archive.cc"), - "--tar_output", - rebase_path("$root_gen_dir/observatory/observatory_archive.tar"), - "--outer_namespace", "dart", - "--inner_namespace", "observatory", - "--name", "observatory_assets_archive", - "--client_root", rebase_path("$root_out_dir/observatory/deployed/web/"), - ] + inner_namespace = invoker.inner_namespace + outer_namespace = invoker.outer_namespace + output_name = target_name + args = [ + "--output", + rebase_path("$root_gen_dir/observatory/${output_name}.cc"), + "--tar_output", + rebase_path("$root_gen_dir/observatory/${output_name}.tar"), + "--outer_namespace", outer_namespace, + "--inner_namespace", inner_namespace, + "--name", "observatory_assets_archive", + "--client_root", rebase_path("$root_out_dir/observatory/deployed/web/"), + ] - outputs = [ - "$root_gen_dir/observatory/observatory_archive.cc", - "$root_gen_dir/observatory/observatory_archive.tar", - ] + outputs = [ + "$root_gen_dir/observatory/${output_name}.cc", + "$root_gen_dir/observatory/${output_name}.tar", + ] + } +} + +observatory_archive("embedded_archive_observatory") { + outer_namespace = "dart" + inner_namespace = "observatory" } source_set("embedded_observatory_archive") { deps = [ - ":archive_observatory", + ":embedded_archive_observatory", ] sources = [ - rebase_path("$root_gen_dir/observatory/observatory_archive.cc"), + rebase_path("$root_gen_dir/observatory/embedded_archive_observatory.cc"), + ] +} + +observatory_archive("standalone_archive_observatory") { + outer_namespace = "dart" + inner_namespace = "bin" +} + +source_set("standalone_observatory_archive") { + deps = [ + ":standalone_archive_observatory", + ] + + sources = [ + rebase_path("$root_gen_dir/observatory/standalone_archive_observatory.cc"), ] } diff --git a/runtime/vm/BUILD.gn b/runtime/vm/BUILD.gn index 5f0a1ba8480..225afdf8892 100644 --- a/runtime/vm/BUILD.gn +++ b/runtime/vm/BUILD.gn @@ -25,7 +25,8 @@ config("libdart_vm_config") { static_library("libdart_platform") { - configs += ["..:dart_config", "..:dart_product_config"] + configs += ["..:dart_config", + "..:dart_maybe_product_config"] public_configs = [":libdart_vm_config"] platform_headers_gypi = @@ -59,7 +60,20 @@ vm_sources_list = exec_script("../../tools/gypi_to_gn.py", static_library("libdart_vm") { configs += ["..:dart_config", - "..:dart_product_config", + "..:dart_maybe_product_config", + "..:dart_maybe_precompiled_runtime_config"] + public_configs = [":libdart_vm_config"] + set_sources_assignment_filter(["*_test.cc", "*_test.h"]) + sources = vm_sources_list.sources + include_dirs = [ + "..", + ] +} + + +static_library("libdart_vm_precompiled_runtime") { + configs += ["..:dart_config", + "..:dart_maybe_product_config", "..:dart_precompiled_runtime_config"] public_configs = [":libdart_vm_config"] set_sources_assignment_filter(["*_test.cc", "*_test.h"]) @@ -72,10 +86,24 @@ static_library("libdart_vm") { static_library("libdart_vm_nosnapshot") { configs += ["..:dart_config", - "..:dart_product_config", - "..:dart_precompiled_runtime_config"] + "..:dart_maybe_product_config", + "..:dart_maybe_precompiled_runtime_config", + "..:dart_no_snapshot_config",] + public_configs = [":libdart_vm_config"] + set_sources_assignment_filter(["*_test.cc", "*_test.h"]) + sources = vm_sources_list.sources + include_dirs = [ + "..", + ] +} + + +static_library("libdart_vm_nosnapshot_precompiled_runtime") { + configs += ["..:dart_config", + "..:dart_maybe_product_config", + "..:dart_precompiled_runtime_config", + "..:dart_no_snapshot_config",] public_configs = [":libdart_vm_config"] - defines = [ "DART_NO_SNAPSHOT" ] set_sources_assignment_filter(["*_test.cc", "*_test.h"]) sources = vm_sources_list.sources include_dirs = [ @@ -86,10 +114,10 @@ static_library("libdart_vm_nosnapshot") { static_library("libdart_vm_nosnapshot_with_precompiler") { configs += ["..:dart_config", - "..:dart_product_config", - "..:dart_precompiler_config"] + "..:dart_maybe_product_config", + "..:dart_precompiler_config", + "..:dart_no_snapshot_config",] public_configs = [":libdart_vm_config"] - defines = [ "DART_NO_SNAPSHOT" ] set_sources_assignment_filter(["*_test.cc", "*_test.h"]) sources = vm_sources_list.sources include_dirs = [ @@ -190,7 +218,17 @@ template("generate_core_libraries") { static_library("libdart_lib_nosnapshot") { configs += ["..:dart_config", - "..:dart_product_config", + "..:dart_maybe_product_config", + "..:dart_maybe_precompiled_runtime_config"] + deps = libdeps + sources = libsources + ["bootstrap.cc"] + liboutputs + include_dirs = [ + "..", + ] + } + static_library("libdart_lib_nosnapshot_precompiled_runtime") { + configs += ["..:dart_config", + "..:dart_maybe_product_config", "..:dart_precompiled_runtime_config"] deps = libdeps sources = libsources + ["bootstrap.cc"] + liboutputs @@ -200,7 +238,7 @@ template("generate_core_libraries") { } static_library("libdart_lib_nosnapshot_with_precompiler") { configs += ["..:dart_config", - "..:dart_product_config", + "..:dart_maybe_product_config", "..:dart_precompiler_config" ] deps = libdeps sources = libsources + [ "bootstrap.cc"] + liboutputs @@ -210,7 +248,16 @@ template("generate_core_libraries") { } static_library("libdart_lib") { configs += ["..:dart_config", - "..:dart_product_config", + "..:dart_maybe_product_config", + "..:dart_maybe_precompiled_runtime_config"] + sources = libsources + [ "bootstrap_nocore.cc"] + include_dirs = [ + "..", + ] + } + static_library("libdart_lib_precompiled_runtime") { + configs += ["..:dart_config", + "..:dart_maybe_product_config", "..:dart_precompiled_runtime_config"] sources = libsources + [ "bootstrap_nocore.cc"] include_dirs = [ diff --git a/tools/clang/scripts/update.py b/tools/clang/scripts/update.py new file mode 100755 index 00000000000..55b64eeffa9 --- /dev/null +++ b/tools/clang/scripts/update.py @@ -0,0 +1,771 @@ +#!/usr/bin/env python +# Copyright (c) 2012 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. + +"""Windows can't run .sh files, so this is a Python implementation of +update.sh. This script should replace update.sh on all platforms eventually.""" + +import argparse +import contextlib +import cStringIO +import glob +import os +import pipes +import re +import shutil +import subprocess +import stat +import sys +import tarfile +import time +import urllib2 +import zipfile + +# Do NOT CHANGE this if you don't know what you're doing -- see +# https://code.google.com/p/chromium/wiki/UpdatingClang +# Reverting problematic clang rolls is safe, though. +# Note: this revision is only used for Windows. Other platforms use update.sh. +# TODO(thakis): Use the same revision on Windows and non-Windows. +# TODO(thakis): Remove update.sh, use update.py everywhere. +LLVM_WIN_REVISION = '242415' + +use_head_revision = 'LLVM_FORCE_HEAD_REVISION' in os.environ +if use_head_revision: + LLVM_WIN_REVISION = 'HEAD' + +# This is incremented when pushing a new build of Clang at the same revision. +CLANG_SUB_REVISION=1 + +PACKAGE_VERSION = "%s-%s" % (LLVM_WIN_REVISION, CLANG_SUB_REVISION) + +# Path constants. (All of these should be absolute paths.) +THIS_DIR = os.path.abspath(os.path.dirname(__file__)) +CHROMIUM_DIR = os.path.abspath(os.path.join(THIS_DIR, '..', '..', '..')) +THIRD_PARTY_DIR = os.path.join(CHROMIUM_DIR, 'third_party') +LLVM_DIR = os.path.join(THIRD_PARTY_DIR, 'llvm') +LLVM_BOOTSTRAP_DIR = os.path.join(THIRD_PARTY_DIR, 'llvm-bootstrap') +LLVM_BOOTSTRAP_INSTALL_DIR = os.path.join(THIRD_PARTY_DIR, + 'llvm-bootstrap-install') +CHROME_TOOLS_SHIM_DIR = os.path.join(LLVM_DIR, 'tools', 'chrometools') +LLVM_BUILD_DIR = os.path.join(CHROMIUM_DIR, 'third_party', 'llvm-build', + 'Release+Asserts') +COMPILER_RT_BUILD_DIR = os.path.join(LLVM_BUILD_DIR, '32bit-compiler-rt') +CLANG_DIR = os.path.join(LLVM_DIR, 'tools', 'clang') +LLD_DIR = os.path.join(LLVM_DIR, 'tools', 'lld') +COMPILER_RT_DIR = os.path.join(LLVM_DIR, 'projects', 'compiler-rt') +LIBCXX_DIR = os.path.join(LLVM_DIR, 'projects', 'libcxx') +LIBCXXABI_DIR = os.path.join(LLVM_DIR, 'projects', 'libcxxabi') +LLVM_BUILD_TOOLS_DIR = os.path.abspath( + os.path.join(LLVM_DIR, '..', 'llvm-build-tools')) +STAMP_FILE = os.path.join(LLVM_DIR, '..', 'llvm-build', 'cr_build_revision') +BINUTILS_DIR = os.path.join(THIRD_PARTY_DIR, 'binutils') +VERSION = '3.8.0' + +# URL for pre-built binaries. +CDS_URL = 'https://commondatastorage.googleapis.com/chromium-browser-clang' + +LLVM_REPO_URL='https://llvm.org/svn/llvm-project' +if 'LLVM_REPO_URL' in os.environ: + LLVM_REPO_URL = os.environ['LLVM_REPO_URL'] + + +def DownloadUrl(url, output_file): + """Download url into output_file.""" + CHUNK_SIZE = 4096 + TOTAL_DOTS = 10 + sys.stdout.write('Downloading %s ' % url) + sys.stdout.flush() + response = urllib2.urlopen(url) + total_size = int(response.info().getheader('Content-Length').strip()) + bytes_done = 0 + dots_printed = 0 + while True: + chunk = response.read(CHUNK_SIZE) + if not chunk: + break + output_file.write(chunk) + bytes_done += len(chunk) + num_dots = TOTAL_DOTS * bytes_done / total_size + sys.stdout.write('.' * (num_dots - dots_printed)) + sys.stdout.flush() + dots_printed = num_dots + print ' Done.' + + +def ReadStampFile(): + """Return the contents of the stamp file, or '' if it doesn't exist.""" + try: + with open(STAMP_FILE, 'r') as f: + return f.read() + except IOError: + return '' + + +def WriteStampFile(s): + """Write s to the stamp file.""" + if not os.path.exists(os.path.dirname(STAMP_FILE)): + os.makedirs(os.path.dirname(STAMP_FILE)) + with open(STAMP_FILE, 'w') as f: + f.write(s) + + +def GetSvnRevision(svn_repo): + """Returns current revision of the svn repo at svn_repo.""" + svn_info = subprocess.check_output('svn info ' + svn_repo, shell=True) + m = re.search(r'Revision: (\d+)', svn_info) + return m.group(1) + + +def RmTree(dir): + """Delete dir.""" + def ChmodAndRetry(func, path, _): + # Subversion can leave read-only files around. + if not os.access(path, os.W_OK): + os.chmod(path, stat.S_IWUSR) + return func(path) + raise + + shutil.rmtree(dir, onerror=ChmodAndRetry) + + +def RunCommand(command, msvc_arch=None, env=None, fail_hard=True): + """Run command and return success (True) or failure; or if fail_hard is + True, exit on failure. If msvc_arch is set, runs the command in a + shell with the msvc tools for that architecture.""" + + if msvc_arch and sys.platform == 'win32': + command = GetVSVersion().SetupScript(msvc_arch) + ['&&'] + command + + # https://docs.python.org/2/library/subprocess.html: + # "On Unix with shell=True [...] if args is a sequence, the first item + # specifies the command string, and any additional items will be treated as + # additional arguments to the shell itself. That is to say, Popen does the + # equivalent of: + # Popen(['/bin/sh', '-c', args[0], args[1], ...])" + # + # We want to pass additional arguments to command[0], not to the shell, + # so manually join everything into a single string. + # Annoyingly, for "svn co url c:\path", pipes.quote() thinks that it should + # quote c:\path but svn can't handle quoted paths on Windows. Since on + # Windows follow-on args are passed to args[0] instead of the shell, don't + # do the single-string transformation there. + if sys.platform != 'win32': + command = ' '.join([pipes.quote(c) for c in command]) + print 'Running', command + if subprocess.call(command, env=env, shell=True) == 0: + return True + print 'Failed.' + if fail_hard: + sys.exit(1) + return False + + +def CopyFile(src, dst): + """Copy a file from src to dst.""" + shutil.copy(src, dst) + print "Copying %s to %s" % (src, dst) + + +def CopyDirectoryContents(src, dst, filename_filter=None): + """Copy the files from directory src to dst + with an optional filename filter.""" + if not os.path.exists(dst): + os.makedirs(dst) + for root, _, files in os.walk(src): + for f in files: + if filename_filter and not re.match(filename_filter, f): + continue + CopyFile(os.path.join(root, f), dst) + + +def Checkout(name, url, dir): + """Checkout the SVN module at url into dir. Use name for the log message.""" + print "Checking out %s r%s into '%s'" % (name, LLVM_WIN_REVISION, dir) + + command = ['svn', 'checkout', '--force', url + '@' + LLVM_WIN_REVISION, dir] + if RunCommand(command, fail_hard=False): + return + + if os.path.isdir(dir): + print "Removing %s." % (dir) + RmTree(dir) + + print "Retrying." + RunCommand(command) + + +def RevertPreviouslyPatchedFiles(): + print 'Reverting previously patched files' + files = [ + '%(clang)s/test/Index/crash-recovery-modules.m', + '%(clang)s/unittests/libclang/LibclangTest.cpp', + '%(compiler_rt)s/lib/asan/asan_rtl.cc', + '%(compiler_rt)s/test/asan/TestCases/Linux/new_array_cookie_test.cc', + '%(llvm)s/test/DebugInfo/gmlt.ll', + '%(llvm)s/lib/CodeGen/SpillPlacement.cpp', + '%(llvm)s/lib/CodeGen/SpillPlacement.h', + '%(llvm)s/lib/Transforms/Instrumentation/MemorySanitizer.cpp', + '%(clang)s/test/Driver/env.c', + '%(clang)s/lib/Frontend/InitPreprocessor.cpp', + '%(clang)s/test/Frontend/exceptions.c', + '%(clang)s/test/Preprocessor/predefined-exceptions.m', + '%(llvm)s/test/Bindings/Go/go.test', + '%(clang)s/lib/Parse/ParseExpr.cpp', + '%(clang)s/lib/Parse/ParseTemplate.cpp', + '%(clang)s/lib/Sema/SemaDeclCXX.cpp', + '%(clang)s/lib/Sema/SemaExprCXX.cpp', + '%(clang)s/test/SemaCXX/default2.cpp', + '%(clang)s/test/SemaCXX/typo-correction-delayed.cpp', + '%(compiler_rt)s/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc', + '%(compiler_rt)s/test/tsan/signal_segv_handler.cc', + '%(compiler_rt)s/lib/sanitizer_common/sanitizer_coverage_libcdep.cc', + '%(compiler_rt)s/cmake/config-ix.cmake', + '%(compiler_rt)s/CMakeLists.txt', + '%(compiler_rt)s/lib/ubsan/ubsan_platform.h', + ] + for f in files: + f = f % { + 'clang': CLANG_DIR, + 'compiler_rt': COMPILER_RT_DIR, + 'llvm': LLVM_DIR, + } + if os.path.exists(f): + os.remove(f) # For unversioned files. + RunCommand(['svn', 'revert', f]) + + +def ApplyLocalPatches(): + # There's no patch program on Windows by default. We don't need patches on + # Windows yet, and maybe this not working on Windows will motivate us to + # remove patches over time. + assert sys.platform != 'win32' + + # Apply patch for tests failing with --disable-pthreads (llvm.org/PR11974) + clang_patches = [ r"""\ +--- test/Index/crash-recovery-modules.m (revision 202554) ++++ test/Index/crash-recovery-modules.m (working copy) +@@ -12,6 +12,8 @@ + + // REQUIRES: crash-recovery + // REQUIRES: shell ++// XFAIL: * ++// (PR11974) + + @import Crash; +""", r"""\ +--- unittests/libclang/LibclangTest.cpp (revision 215949) ++++ unittests/libclang/LibclangTest.cpp (working copy) +@@ -431,7 +431,7 @@ + EXPECT_EQ(0U, clang_getNumDiagnostics(ClangTU)); + } + +-TEST_F(LibclangReparseTest, ReparseWithModule) { ++TEST_F(LibclangReparseTest, DISABLED_ReparseWithModule) { + const char *HeaderTop = "#ifndef H\n#define H\nstruct Foo { int bar;"; + const char *HeaderBottom = "\n};\n#endif\n"; + const char *MFile = "#include \"HeaderFile.h\"\nint main() {" +""" + ] + + # This Go bindings test doesn't work after bootstrap on Linux, PR21552. + llvm_patches = [ r"""\ +--- test/Bindings/Go/go.test (revision 223109) ++++ test/Bindings/Go/go.test (working copy) +@@ -1,3 +1,3 @@ +-; RUN: llvm-go test llvm.org/llvm/bindings/go/llvm ++; RUN: true + + ; REQUIRES: shell +""" + ] + + # The UBSan run-time, which is now bundled with the ASan run-time, doesn't + # work on Mac OS X 10.8 (PR23539). + compiler_rt_patches = [ r"""\ +--- CMakeLists.txt (revision 241602) ++++ CMakeLists.txt (working copy) +@@ -305,6 +305,7 @@ + list(APPEND SANITIZER_COMMON_SUPPORTED_OS iossim) + endif() + endif() ++ set(SANITIZER_MIN_OSX_VERSION "10.7") + if(SANITIZER_MIN_OSX_VERSION VERSION_LESS "10.7") + message(FATAL_ERROR "Too old OS X version: ${SANITIZER_MIN_OSX_VERSION}") + endif() +""" + ] + + for path, patches in [(LLVM_DIR, llvm_patches), + (CLANG_DIR, clang_patches), + (COMPILER_RT_DIR, compiler_rt_patches)]: + print 'Applying patches in', path + for patch in patches: + print patch + p = subprocess.Popen( ['patch', '-p0', '-d', path], stdin=subprocess.PIPE) + (stdout, stderr) = p.communicate(input=patch) + if p.returncode != 0: + raise RuntimeError('stdout %s, stderr %s' % (stdout, stderr)) + + +def DeleteChromeToolsShim(): + shutil.rmtree(CHROME_TOOLS_SHIM_DIR, ignore_errors=True) + + +def CreateChromeToolsShim(): + """Hooks the Chrome tools into the LLVM build. + + Several Chrome tools have dependencies on LLVM/Clang libraries. The LLVM build + detects implicit tools in the tools subdirectory, so this helper install a + shim CMakeLists.txt that forwards to the real directory for the Chrome tools. + + Note that the shim directory name intentionally has no - or _. The implicit + tool detection logic munges them in a weird way.""" + assert not any(i in os.path.basename(CHROME_TOOLS_SHIM_DIR) for i in '-_') + os.mkdir(CHROME_TOOLS_SHIM_DIR) + with file(os.path.join(CHROME_TOOLS_SHIM_DIR, 'CMakeLists.txt'), 'w') as f: + f.write('# Automatically generated by tools/clang/scripts/update.py. ' + + 'Do not edit.\n') + f.write('# Since tools/clang is located in another directory, use the \n') + f.write('# two arg version to specify where build artifacts go. CMake\n') + f.write('# disallows reuse of the same binary dir for multiple source\n') + f.write('# dirs, so the build artifacts need to go into a subdirectory.\n') + f.write('# dirs, so the build artifacts need to go into a subdirectory.\n') + f.write('if (CHROMIUM_TOOLS_SRC)\n') + f.write(' add_subdirectory(${CHROMIUM_TOOLS_SRC} ' + + '${CMAKE_CURRENT_BINARY_DIR}/a)\n') + f.write('endif (CHROMIUM_TOOLS_SRC)\n') + + +def AddCMakeToPath(): + """Download CMake and add it to PATH.""" + if sys.platform == 'win32': + zip_name = 'cmake-3.2.2-win32-x86.zip' + cmake_dir = os.path.join(LLVM_BUILD_TOOLS_DIR, + 'cmake-3.2.2-win32-x86', 'bin') + else: + suffix = 'Darwin' if sys.platform == 'darwin' else 'Linux' + zip_name = 'cmake310_%s.tgz' % suffix + cmake_dir = os.path.join(LLVM_BUILD_TOOLS_DIR, 'cmake310', 'bin') + if not os.path.exists(cmake_dir): + if not os.path.exists(LLVM_BUILD_TOOLS_DIR): + os.makedirs(LLVM_BUILD_TOOLS_DIR) + # The cmake archive is smaller than 20 MB, small enough to keep in memory: + with contextlib.closing(cStringIO.StringIO()) as f: + DownloadUrl(CDS_URL + '/tools/' + zip_name, f) + f.seek(0) + if zip_name.endswith('.zip'): + zipfile.ZipFile(f).extractall(path=LLVM_BUILD_TOOLS_DIR) + else: + tarfile.open(mode='r:gz', fileobj=f).extractall(path= + LLVM_BUILD_TOOLS_DIR) + os.environ['PATH'] = cmake_dir + os.pathsep + os.environ.get('PATH', '') + +vs_version = None +def GetVSVersion(): + global vs_version + if vs_version: + return vs_version + + # Try using the toolchain in depot_tools. + # This sets environment variables used by SelectVisualStudioVersion below. + sys.path.append(os.path.join(CHROMIUM_DIR, 'build')) + import vs_toolchain + vs_toolchain.SetEnvironmentAndGetRuntimeDllDirs() + + # Use gyp to find the MSVS installation, either in depot_tools as per above, + # or a system-wide installation otherwise. + sys.path.append(os.path.join(CHROMIUM_DIR, 'tools', 'gyp', 'pylib')) + import gyp.MSVSVersion + vs_version = gyp.MSVSVersion.SelectVisualStudioVersion('2013') + return vs_version + + +def UpdateClang(args): + print 'Updating Clang to %s...' % PACKAGE_VERSION + if ReadStampFile() == PACKAGE_VERSION: + print 'Already up to date.' + return 0 + + # Reset the stamp file in case the build is unsuccessful. + WriteStampFile('') + + if not args.force_local_build: + cds_file = "clang-%s.tgz" % PACKAGE_VERSION + cds_full_url = CDS_URL + '/Win/' + cds_file + + # Check if there's a prebuilt binary and if so just fetch that. That's + # faster, and goma relies on having matching binary hashes on client and + # server too. + print 'Trying to download prebuilt clang' + + # clang packages are smaller than 50 MB, small enough to keep in memory. + with contextlib.closing(cStringIO.StringIO()) as f: + try: + DownloadUrl(cds_full_url, f) + f.seek(0) + tarfile.open(mode='r:gz', fileobj=f).extractall(path=LLVM_BUILD_DIR) + print 'clang %s unpacked' % PACKAGE_VERSION + # Download the gold plugin if requested to by an environment variable. + # This is used by the CFI ClusterFuzz bot. + if 'LLVM_DOWNLOAD_GOLD_PLUGIN' in os.environ: + RunCommand(['python', CHROMIUM_DIR+'/build/download_gold_plugin.py']) + WriteStampFile(PACKAGE_VERSION) + return 0 + except urllib2.HTTPError: + print 'Did not find prebuilt clang %s, building locally' % cds_file + + AddCMakeToPath() + + RevertPreviouslyPatchedFiles() + DeleteChromeToolsShim() + + Checkout('LLVM', LLVM_REPO_URL + '/llvm/trunk', LLVM_DIR) + Checkout('Clang', LLVM_REPO_URL + '/cfe/trunk', CLANG_DIR) + if sys.platform == 'win32': + Checkout('LLD', LLVM_REPO_URL + '/lld/trunk', LLD_DIR) + Checkout('compiler-rt', LLVM_REPO_URL + '/compiler-rt/trunk', COMPILER_RT_DIR) + if sys.platform == 'darwin': + # clang needs a libc++ checkout, else -stdlib=libc++ won't find includes + # (i.e. this is needed for bootstrap builds). + Checkout('libcxx', LLVM_REPO_URL + '/libcxx/trunk', LIBCXX_DIR) + # While we're bundling our own libc++ on OS X, we need to compile libc++abi + # into it too (since OS X 10.6 doesn't have libc++abi.dylib either). + Checkout('libcxxabi', LLVM_REPO_URL + '/libcxxabi/trunk', LIBCXXABI_DIR) + + if args.with_patches and sys.platform != 'win32': + ApplyLocalPatches() + + cc, cxx = None, None + cflags = cxxflags = ldflags = [] + + # LLVM uses C++11 starting in llvm 3.5. On Linux, this means libstdc++4.7+ is + # needed, on OS X it requires libc++. clang only automatically links to libc++ + # when targeting OS X 10.9+, so add stdlib=libc++ explicitly so clang can run + # on OS X versions as old as 10.7. + # TODO(thakis): Some bots are still on 10.6 (nacl...), so for now bundle + # libc++.dylib. Remove this once all bots are on 10.7+, then use + # -DLLVM_ENABLE_LIBCXX=ON and change deployment_target to 10.7. + deployment_target = '' + + if sys.platform == 'darwin': + # When building on 10.9, /usr/include usually doesn't exist, and while + # Xcode's clang automatically sets a sysroot, self-built clangs don't. + cflags = ['-isysroot', subprocess.check_output( + ['xcrun', '--show-sdk-path']).rstrip()] + cxxflags = ['-stdlib=libc++', '-nostdinc++', + '-I' + os.path.join(LIBCXX_DIR, 'include')] + cflags + if args.bootstrap: + deployment_target = '10.6' + + base_cmake_args = ['-GNinja', + '-DCMAKE_BUILD_TYPE=Release', + '-DLLVM_ENABLE_ASSERTIONS=ON', + '-DLLVM_ENABLE_THREADS=OFF', + ] + + if args.bootstrap: + print 'Building bootstrap compiler' + if not os.path.exists(LLVM_BOOTSTRAP_DIR): + os.makedirs(LLVM_BOOTSTRAP_DIR) + os.chdir(LLVM_BOOTSTRAP_DIR) + bootstrap_args = base_cmake_args + [ + '-DLLVM_TARGETS_TO_BUILD=host', + '-DCMAKE_INSTALL_PREFIX=' + LLVM_BOOTSTRAP_INSTALL_DIR, + '-DCMAKE_C_FLAGS=' + ' '.join(cflags), + '-DCMAKE_CXX_FLAGS=' + ' '.join(cxxflags), + ] + if cc is not None: bootstrap_args.append('-DCMAKE_C_COMPILER=' + cc) + if cxx is not None: bootstrap_args.append('-DCMAKE_CXX_COMPILER=' + cxx) + RunCommand(['cmake'] + bootstrap_args + [LLVM_DIR], msvc_arch='x64') + RunCommand(['ninja'], msvc_arch='x64') + if args.run_tests: + RunCommand(['ninja', 'check-all'], msvc_arch='x64') + RunCommand(['ninja', 'install'], msvc_arch='x64') + + if sys.platform == 'win32': + cc = os.path.join(LLVM_BOOTSTRAP_INSTALL_DIR, 'bin', 'clang-cl.exe') + cxx = os.path.join(LLVM_BOOTSTRAP_INSTALL_DIR, 'bin', 'clang-cl.exe') + # CMake has a hard time with backslashes in compiler paths: + # https://stackoverflow.com/questions/13050827 + cc = cc.replace('\\', '/') + cxx = cxx.replace('\\', '/') + else: + cc = os.path.join(LLVM_BOOTSTRAP_INSTALL_DIR, 'bin', 'clang') + cxx = os.path.join(LLVM_BOOTSTRAP_INSTALL_DIR, 'bin', 'clang++') + print 'Building final compiler' + + if sys.platform == 'darwin': + # Build libc++.dylib while some bots are still on OS X 10.6. + libcxxbuild = os.path.join(LLVM_BUILD_DIR, 'libcxxbuild') + if os.path.isdir(libcxxbuild): + RmTree(libcxxbuild) + libcxxflags = ['-O3', '-std=c++11', '-fstrict-aliasing'] + + # libcxx and libcxxabi both have a file stdexcept.cpp, so put their .o files + # into different subdirectories. + os.makedirs(os.path.join(libcxxbuild, 'libcxx')) + os.chdir(os.path.join(libcxxbuild, 'libcxx')) + RunCommand(['c++', '-c'] + cxxflags + libcxxflags + + glob.glob(os.path.join(LIBCXX_DIR, 'src', '*.cpp'))) + + os.makedirs(os.path.join(libcxxbuild, 'libcxxabi')) + os.chdir(os.path.join(libcxxbuild, 'libcxxabi')) + RunCommand(['c++', '-c'] + cxxflags + libcxxflags + + glob.glob(os.path.join(LIBCXXABI_DIR, 'src', '*.cpp')) + + ['-I' + os.path.join(LIBCXXABI_DIR, 'include')]) + + os.chdir(libcxxbuild) + libdir = os.path.join(LIBCXX_DIR, 'lib') + RunCommand(['cc'] + glob.glob('libcxx/*.o') + glob.glob('libcxxabi/*.o') + + ['-o', 'libc++.1.dylib', '-dynamiclib', '-nodefaultlibs', + '-current_version', '1', '-compatibility_version', '1', '-lSystem', + '-install_name', '@executable_path/libc++.dylib', + '-Wl,-unexported_symbols_list,' + libdir + '/libc++unexp.exp', + '-Wl,-force_symbols_not_weak_list,' + libdir + '/notweak.exp', + '-Wl,-force_symbols_weak_list,' + libdir + '/weak.exp']) + if os.path.exists('libc++.dylib'): + os.remove('libc++.dylib') + os.symlink('libc++.1.dylib', 'libc++.dylib') + ldflags += ['-stdlib=libc++', '-L' + libcxxbuild] + + if args.bootstrap: + # Now that the libc++ headers have been installed and libc++.dylib is + # built, delete the libc++ checkout again so that it's not part of the + # main build below -- the libc++(abi) tests don't pass on OS X in + # bootstrap builds (http://llvm.org/PR24068) + RmTree(LIBCXX_DIR) + RmTree(LIBCXXABI_DIR) + cxxflags = ['-stdlib=libc++', '-nostdinc++', + '-I' + os.path.join(LLVM_BOOTSTRAP_INSTALL_DIR, + 'include/c++/v1') + ] + cflags + + # Build clang. + binutils_incdir = '' + if sys.platform.startswith('linux'): + binutils_incdir = os.path.join(BINUTILS_DIR, 'Linux_x64/Release/include') + + # If building at head, define a macro that plugins can use for #ifdefing + # out code that builds at head, but not at LLVM_WIN_REVISION or vice versa. + if use_head_revision: + cflags += ['-DLLVM_FORCE_HEAD_REVISION'] + cxxflags += ['-DLLVM_FORCE_HEAD_REVISION'] + + CreateChromeToolsShim() + + deployment_env = None + if deployment_target: + deployment_env = os.environ.copy() + deployment_env['MACOSX_DEPLOYMENT_TARGET'] = deployment_target + + cmake_args = base_cmake_args + [ + '-DLLVM_BINUTILS_INCDIR=' + binutils_incdir, + '-DCMAKE_C_FLAGS=' + ' '.join(cflags), + '-DCMAKE_CXX_FLAGS=' + ' '.join(cxxflags), + '-DCMAKE_EXE_LINKER_FLAGS=' + ' '.join(ldflags), + '-DCMAKE_SHARED_LINKER_FLAGS=' + ' '.join(ldflags), + '-DCMAKE_MODULE_LINKER_FLAGS=' + ' '.join(ldflags), + '-DCMAKE_INSTALL_PREFIX=' + LLVM_BUILD_DIR, + '-DCHROMIUM_TOOLS_SRC=%s' % os.path.join(CHROMIUM_DIR, 'tools', 'clang'), + '-DCHROMIUM_TOOLS=%s' % ';'.join(args.tools)] + # TODO(thakis): Unconditionally append this to base_cmake_args instead once + # compiler-rt can build with clang-cl on Windows (http://llvm.org/PR23698) + cc_args = base_cmake_args if sys.platform != 'win32' else cmake_args + if cc is not None: cc_args.append('-DCMAKE_C_COMPILER=' + cc) + if cxx is not None: cc_args.append('-DCMAKE_CXX_COMPILER=' + cxx) + + if not os.path.exists(LLVM_BUILD_DIR): + os.makedirs(LLVM_BUILD_DIR) + os.chdir(LLVM_BUILD_DIR) + RunCommand(['cmake'] + cmake_args + [LLVM_DIR], + msvc_arch='x64', env=deployment_env) + RunCommand(['ninja'], msvc_arch='x64') + + if args.tools: + # If any Chromium tools were built, install those now. + RunCommand(['ninja', 'cr-install'], msvc_arch='x64') + + if sys.platform == 'darwin': + CopyFile(os.path.join(LLVM_BUILD_DIR, 'libc++.1.dylib'), + os.path.join(LLVM_BUILD_DIR, 'bin')) + # See http://crbug.com/256342 + RunCommand(['strip', '-x', os.path.join(LLVM_BUILD_DIR, 'bin', 'clang')]) + elif sys.platform.startswith('linux'): + RunCommand(['strip', os.path.join(LLVM_BUILD_DIR, 'bin', 'clang')]) + + # Do an x86 build of compiler-rt to get the 32-bit ASan run-time. + # TODO(hans): Remove once the regular build above produces this. + if not os.path.exists(COMPILER_RT_BUILD_DIR): + os.makedirs(COMPILER_RT_BUILD_DIR) + os.chdir(COMPILER_RT_BUILD_DIR) + # TODO(thakis): Add this once compiler-rt can build with clang-cl (see + # above). + #if args.bootstrap and sys.platform == 'win32': + # The bootstrap compiler produces 64-bit binaries by default. + #cflags += ['-m32'] + #cxxflags += ['-m32'] + compiler_rt_args = base_cmake_args + [ + '-DCMAKE_C_FLAGS=' + ' '.join(cflags), + '-DCMAKE_CXX_FLAGS=' + ' '.join(cxxflags)] + if sys.platform != 'win32': + compiler_rt_args += ['-DLLVM_CONFIG_PATH=' + + os.path.join(LLVM_BUILD_DIR, 'bin', 'llvm-config')] + RunCommand(['cmake'] + compiler_rt_args + [LLVM_DIR], + msvc_arch='x86', env=deployment_env) + RunCommand(['ninja', 'compiler-rt'], msvc_arch='x86') + + # TODO(hans): Make this (and the .gypi and .isolate files) version number + # independent. + if sys.platform == 'win32': + platform = 'windows' + elif sys.platform == 'darwin': + platform = 'darwin' + else: + assert sys.platform.startswith('linux') + platform = 'linux' + asan_rt_lib_src_dir = os.path.join(COMPILER_RT_BUILD_DIR, 'lib', 'clang', + VERSION, 'lib', platform) + asan_rt_lib_dst_dir = os.path.join(LLVM_BUILD_DIR, 'lib', 'clang', + VERSION, 'lib', platform) + CopyDirectoryContents(asan_rt_lib_src_dir, asan_rt_lib_dst_dir, + r'^.*-i386\.lib$') + CopyDirectoryContents(asan_rt_lib_src_dir, asan_rt_lib_dst_dir, + r'^.*-i386\.dll$') + + CopyFile(os.path.join(asan_rt_lib_src_dir, '..', '..', 'asan_blacklist.txt'), + os.path.join(asan_rt_lib_dst_dir, '..', '..')) + + if sys.platform == 'win32': + # Make an extra copy of the sanitizer headers, to be put on the include path + # of the fallback compiler. + sanitizer_include_dir = os.path.join(LLVM_BUILD_DIR, 'lib', 'clang', + VERSION, 'include', 'sanitizer') + aux_sanitizer_include_dir = os.path.join(LLVM_BUILD_DIR, 'lib', 'clang', + VERSION, 'include_sanitizer', + 'sanitizer') + if not os.path.exists(aux_sanitizer_include_dir): + os.makedirs(aux_sanitizer_include_dir) + for _, _, files in os.walk(sanitizer_include_dir): + for f in files: + CopyFile(os.path.join(sanitizer_include_dir, f), + aux_sanitizer_include_dir) + + # Run tests. + if args.run_tests or use_head_revision: + os.chdir(LLVM_BUILD_DIR) + RunCommand(GetVSVersion().SetupScript('x64') + + ['&&', 'ninja', 'cr-check-all']) + if args.run_tests: + os.chdir(LLVM_BUILD_DIR) + RunCommand(GetVSVersion().SetupScript('x64') + + ['&&', 'ninja', 'check-all']) + + WriteStampFile(PACKAGE_VERSION) + print 'Clang update was successful.' + return 0 + + +def main(): + if not sys.platform in ['win32', 'cygwin']: + # For non-Windows, fall back to update.sh. + # TODO(hans): Make update.py replace update.sh completely. + + # This script is called by gclient. gclient opens its hooks subprocesses + # with (stdout=subprocess.PIPE, stderr=subprocess.STDOUT) and then does + # custom output processing that breaks printing '\r' characters for + # single-line updating status messages as printed by curl and wget. + # Work around this by setting stderr of the update.sh process to stdin (!): + # gclient doesn't redirect stdin, and while stdin itself is read-only, a + # dup()ed sys.stdin is writable, try + # fd2 = os.dup(sys.stdin.fileno()); os.write(fd2, 'hi') + # TODO: Fix gclient instead, http://crbug.com/95350 + if '--no-stdin-hack' in sys.argv: + sys.argv.remove('--no-stdin-hack') + stderr = None + else: + try: + stderr = os.fdopen(os.dup(sys.stdin.fileno())) + except: + stderr = sys.stderr + return subprocess.call( + [os.path.join(os.path.dirname(__file__), 'update.sh')] + sys.argv[1:], + stderr=stderr) + + parser = argparse.ArgumentParser(description='Build Clang.') + parser.add_argument('--bootstrap', action='store_true', + help='first build clang with CC, then with itself.') + parser.add_argument('--if-needed', action='store_true', + help="run only if the script thinks clang is needed") + parser.add_argument('--force-local-build', action='store_true', + help="don't try to download prebuild binaries") + parser.add_argument('--print-revision', action='store_true', + help='print current clang revision and exit.') + parser.add_argument('--print-clang-version', action='store_true', + help='print current clang version (e.g. x.y.z) and exit.') + parser.add_argument('--run-tests', action='store_true', + help='run tests after building; only for local builds') + parser.add_argument('--tools', nargs='*', + help='select which chrome tools to build', + default=['plugins', 'blink_gc_plugin']) + parser.add_argument('--without-patches', action='store_false', + help="don't apply patches (default)", dest='with_patches', + default=True) + + # For now, these flags are only used for the non-Windows flow, but argparser + # gets mad if it sees a flag it doesn't recognize. + parser.add_argument('--no-stdin-hack', action='store_true') + + args = parser.parse_args() + + if args.if_needed: + is_clang_required = False + # clang is always used on Mac and Linux. + if sys.platform == 'darwin' or sys.platform.startswith('linux'): + is_clang_required = True + # clang requested via $GYP_DEFINES. + if re.search(r'\b(clang|asan|lsan|msan|tsan)=1', + os.environ.get('GYP_DEFINES', '')): + is_clang_required = True + # clang previously downloaded, keep it up-to-date. + # If you don't want this, delete third_party/llvm-build on your machine. + if os.path.isdir(LLVM_BUILD_DIR): + is_clang_required = True + if not is_clang_required: + return 0 + if re.search(r'\b(make_clang_dir)=', os.environ.get('GYP_DEFINES', '')): + print 'Skipping Clang update (make_clang_dir= was set in GYP_DEFINES).' + return 0 + + global LLVM_WIN_REVISION, PACKAGE_VERSION + if args.print_revision: + if use_head_revision: + print GetSvnRevision(LLVM_DIR) + else: + print PACKAGE_VERSION + return 0 + + if args.print_clang_version: + sys.stdout.write(VERSION) + return 0 + + # Don't buffer stdout, so that print statements are immediately flushed. + # Do this only after --print-revision has been handled, else we'll get + # an error message when this script is run from gn for some reason. + sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0) + + if use_head_revision: + # Use a real revision number rather than HEAD to make sure that the stamp + # file logic works. + LLVM_WIN_REVISION = GetSvnRevision(LLVM_REPO_URL) + PACKAGE_VERSION = LLVM_WIN_REVISION + '-0' + + args.force_local_build = True + # Skip local patches when using HEAD: they probably don't apply anymore. + args.with_patches = False + + return UpdateClang(args) + + +if __name__ == '__main__': + sys.exit(main()) diff --git a/tools/clang/scripts/update.sh b/tools/clang/scripts/update.sh new file mode 100755 index 00000000000..d85deae23c3 --- /dev/null +++ b/tools/clang/scripts/update.sh @@ -0,0 +1,724 @@ +#!/usr/bin/env bash +# Copyright (c) 2012 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 script will check out llvm and clang into third_party/llvm and build it. + +# Do NOT CHANGE this if you don't know what you're doing -- see +# https://code.google.com/p/chromium/wiki/UpdatingClang +# Reverting problematic clang rolls is safe, though. +CLANG_REVISION=241602 + +# This is incremented when pushing a new build of Clang at the same revision. +CLANG_SUB_REVISION=3 + +PACKAGE_VERSION="${CLANG_REVISION}-${CLANG_SUB_REVISION}" + +THIS_DIR="$(dirname "${0}")" +LLVM_DIR="${THIS_DIR}/../../../third_party/llvm" +LLVM_BUILD_DIR="${LLVM_DIR}/../llvm-build/Release+Asserts" +COMPILER_RT_BUILD_DIR="${LLVM_DIR}/../llvm-build/compiler-rt" +LLVM_BOOTSTRAP_DIR="${LLVM_DIR}/../llvm-bootstrap" +LLVM_BOOTSTRAP_INSTALL_DIR="${LLVM_DIR}/../llvm-bootstrap-install" +CLANG_DIR="${LLVM_DIR}/tools/clang" +COMPILER_RT_DIR="${LLVM_DIR}/compiler-rt" +LIBCXX_DIR="${LLVM_DIR}/projects/libcxx" +LIBCXXABI_DIR="${LLVM_DIR}/projects/libcxxabi" +ANDROID_NDK_DIR="${THIS_DIR}/../../../third_party/android_tools/ndk" +STAMP_FILE="${LLVM_DIR}/../llvm-build/cr_build_revision" +CHROMIUM_TOOLS_DIR="${THIS_DIR}/.." +BINUTILS_DIR="${THIS_DIR}/../../../third_party/binutils" + +ABS_CHROMIUM_TOOLS_DIR="${PWD}/${CHROMIUM_TOOLS_DIR}" +ABS_LIBCXX_DIR="${PWD}/${LIBCXX_DIR}" +ABS_LIBCXXABI_DIR="${PWD}/${LIBCXXABI_DIR}" +ABS_LLVM_DIR="${PWD}/${LLVM_DIR}" +ABS_LLVM_BUILD_DIR="${PWD}/${LLVM_BUILD_DIR}" +ABS_COMPILER_RT_DIR="${PWD}/${COMPILER_RT_DIR}" +ABS_BINUTILS_DIR="${PWD}/${BINUTILS_DIR}" + +# ${A:-a} returns $A if it's set, a else. +LLVM_REPO_URL=${LLVM_URL:-https://llvm.org/svn/llvm-project} + +CDS_URL=https://commondatastorage.googleapis.com/chromium-browser-clang + +if [[ -z "$GYP_DEFINES" ]]; then + GYP_DEFINES= +fi +if [[ -z "$GYP_GENERATORS" ]]; then + GYP_GENERATORS= +fi +if [[ -z "$LLVM_DOWNLOAD_GOLD_PLUGIN" ]]; then + LLVM_DOWNLOAD_GOLD_PLUGIN= +fi + + +# Die if any command dies, error on undefined variable expansions. +set -eu + + +if [[ -n ${LLVM_FORCE_HEAD_REVISION:-''} ]]; then + # Use a real revision number rather than HEAD to make sure that the stamp file + # logic works. + CLANG_REVISION=$(svn info "$LLVM_REPO_URL" \ + | grep 'Revision:' | awk '{ printf $2; }') + PACKAGE_VERSION="${CLANG_REVISION}-0" +fi + +OS="$(uname -s)" + +# Parse command line options. +if_needed= +force_local_build= +run_tests= +bootstrap= +with_android=yes +chrome_tools="plugins;blink_gc_plugin" +gcc_toolchain= +with_patches=yes + +if [[ "${OS}" = "Darwin" ]]; then + with_android= +fi + +while [[ $# > 0 ]]; do + case $1 in + --bootstrap) + bootstrap=yes + ;; + --if-needed) + if_needed=yes + ;; + --force-local-build) + force_local_build=yes + ;; + --print-revision) + if [[ -n ${LLVM_FORCE_HEAD_REVISION:-''} ]]; then + svn info "$LLVM_DIR" | grep 'Revision:' | awk '{ printf $2; }' + else + echo $PACKAGE_VERSION + fi + exit 0 + ;; + --run-tests) + run_tests=yes + ;; + --without-android) + with_android= + ;; + --without-patches) + with_patches= + ;; + --with-chrome-tools) + shift + if [[ $# == 0 ]]; then + echo "--with-chrome-tools requires an argument." + exit 1 + fi + chrome_tools=$1 + ;; + --gcc-toolchain) + shift + if [[ $# == 0 ]]; then + echo "--gcc-toolchain requires an argument." + exit 1 + fi + if [[ -x "$1/bin/gcc" ]]; then + gcc_toolchain=$1 + else + echo "Invalid --gcc-toolchain: '$1'." + echo "'$1/bin/gcc' does not appear to be valid." + exit 1 + fi + ;; + + --help) + echo "usage: $0 [--force-local-build] [--if-needed] [--run-tests] " + echo "--bootstrap: First build clang with CC, then with itself." + echo "--force-local-build: Don't try to download prebuilt binaries." + echo "--if-needed: Download clang only if the script thinks it is needed." + echo "--run-tests: Run tests after building. Only for local builds." + echo "--print-revision: Print current clang revision and exit." + echo "--without-android: Don't build ASan Android runtime library." + echo "--with-chrome-tools: Select which chrome tools to build." \ + "Defaults to plugins;blink_gc_plugin." + echo " Example: --with-chrome-tools plugins;empty-string" + echo "--gcc-toolchain: Set the prefix for which GCC version should" + echo " be used for building. For example, to use gcc in" + echo " /opt/foo/bin/gcc, use '--gcc-toolchain '/opt/foo" + echo "--without-patches: Don't apply local patches." + echo + exit 1 + ;; + *) + echo "Unknown argument: '$1'." + echo "Use --help for help." + exit 1 + ;; + esac + shift +done + +if [[ -n ${LLVM_FORCE_HEAD_REVISION:-''} ]]; then + force_local_build=yes + + # Skip local patches when using HEAD: they probably don't apply anymore. + with_patches= + + if ! [[ "$GYP_DEFINES" =~ .*OS=android.* ]]; then + # Only build the Android ASan rt when targetting Android. + with_android= + fi + + LLVM_BUILD_TOOLS_DIR="${ABS_LLVM_DIR}/../llvm-build-tools" + + if [[ "${OS}" == "Linux" ]] && [[ -z "${gcc_toolchain}" ]]; then + if [[ $(gcc -dumpversion) < "4.7.0" ]]; then + # We need a newer GCC version. + if [[ ! -e "${LLVM_BUILD_TOOLS_DIR}/gcc482" ]]; then + echo "Downloading pre-built GCC 4.8.2..." + mkdir -p "${LLVM_BUILD_TOOLS_DIR}" + curl --fail -L "${CDS_URL}/tools/gcc482.tgz" | \ + tar zxf - -C "${LLVM_BUILD_TOOLS_DIR}" + echo Done + fi + gcc_toolchain="${LLVM_BUILD_TOOLS_DIR}/gcc482" + else + # Always set gcc_toolchain; llvm-symbolizer needs the bundled libstdc++. + gcc_toolchain="$(dirname $(dirname $(which gcc)))" + fi + fi + + if [[ "${OS}" == "Linux" || "${OS}" == "Darwin" ]]; then + if [[ $(cmake --version | grep -Eo '[0-9.]+') < "3.0" ]]; then + # We need a newer CMake version. + if [[ ! -e "${LLVM_BUILD_TOOLS_DIR}/cmake310" ]]; then + echo "Downloading pre-built CMake 3.10..." + mkdir -p "${LLVM_BUILD_TOOLS_DIR}" + curl --fail -L "${CDS_URL}/tools/cmake310_${OS}.tgz" | \ + tar zxf - -C "${LLVM_BUILD_TOOLS_DIR}" + echo Done + fi + export PATH="${LLVM_BUILD_TOOLS_DIR}/cmake310/bin:${PATH}" + fi + fi + + echo "LLVM_FORCE_HEAD_REVISION was set; using r${CLANG_REVISION}" +fi + +if [[ -n "$if_needed" ]]; then + if [[ "${OS}" == "Darwin" ]]; then + # clang is always used on Mac. + true + elif [[ "${OS}" == "Linux" ]]; then + # clang is also aways used on Linux. + true + elif [[ "$GYP_DEFINES" =~ .*(clang|tsan|asan|lsan|msan)=1.* ]]; then + # clang requested via $GYP_DEFINES. + true + elif [[ -d "${LLVM_BUILD_DIR}" ]]; then + # clang previously downloaded, keep it up-to-date. + # If you don't want this, delete third_party/llvm-build on your machine. + true + else + # clang wasn't needed, not doing anything. + exit 0 + fi +fi + + +# Check if there's anything to be done, exit early if not. +if [[ -f "${STAMP_FILE}" ]]; then + PREVIOUSLY_BUILT_REVISON=$(cat "${STAMP_FILE}") + if [[ -z "$force_local_build" ]] && \ + [[ "${PREVIOUSLY_BUILT_REVISON}" = \ + "${PACKAGE_VERSION}" ]]; then + echo "Clang already at ${PACKAGE_VERSION}" + exit 0 + fi +fi +# To always force a new build if someone interrupts their build half way. +rm -f "${STAMP_FILE}" + + +if [[ -z "$force_local_build" ]]; then + # Check if there's a prebuilt binary and if so just fetch that. That's faster, + # and goma relies on having matching binary hashes on client and server too. + CDS_FILE="clang-${PACKAGE_VERSION}.tgz" + CDS_OUT_DIR=$(mktemp -d -t clang_download.XXXXXX) + CDS_OUTPUT="${CDS_OUT_DIR}/${CDS_FILE}" + if [ "${OS}" = "Linux" ]; then + CDS_FULL_URL="${CDS_URL}/Linux_x64/${CDS_FILE}" + elif [ "${OS}" = "Darwin" ]; then + CDS_FULL_URL="${CDS_URL}/Mac/${CDS_FILE}" + fi + echo Trying to download prebuilt clang + if which curl > /dev/null; then + curl -L --fail "${CDS_FULL_URL}" -o "${CDS_OUTPUT}" || \ + rm -rf "${CDS_OUT_DIR}" + elif which wget > /dev/null; then + wget "${CDS_FULL_URL}" -O "${CDS_OUTPUT}" || rm -rf "${CDS_OUT_DIR}" + else + echo "Neither curl nor wget found. Please install one of these." + exit 1 + fi + if [ -f "${CDS_OUTPUT}" ]; then + rm -rf "${LLVM_BUILD_DIR}" + mkdir -p "${LLVM_BUILD_DIR}" + tar -xzf "${CDS_OUTPUT}" -C "${LLVM_BUILD_DIR}" + echo clang "${PACKAGE_VERSION}" unpacked + echo "${PACKAGE_VERSION}" > "${STAMP_FILE}" + rm -rf "${CDS_OUT_DIR}" + # Download the gold plugin if requested to by an environment variable. + # This is used by the CFI ClusterFuzz bot. + if [[ -n "${LLVM_DOWNLOAD_GOLD_PLUGIN}" ]]; then + ${THIS_DIR}/../../../build/download_gold_plugin.py + fi + exit 0 + else + echo Did not find prebuilt clang "${PACKAGE_VERSION}", building + fi +fi + +if [[ -n "${with_android}" ]] && ! [[ -d "${ANDROID_NDK_DIR}" ]]; then + echo "Android NDK not found at ${ANDROID_NDK_DIR}" + echo "The Android NDK is needed to build a Clang whose -fsanitize=address" + echo "works on Android. See " + echo "http://code.google.com/p/chromium/wiki/AndroidBuildInstructions for how" + echo "to install the NDK, or pass --without-android." + exit 1 +fi + +# Check that cmake and ninja are available. +if ! which cmake > /dev/null; then + echo "CMake needed to build clang; please install" + exit 1 +fi +if ! which ninja > /dev/null; then + echo "ninja needed to build clang, please install" + exit 1 +fi + +echo Reverting previously patched files +for i in \ + "${CLANG_DIR}/test/Index/crash-recovery-modules.m" \ + "${CLANG_DIR}/unittests/libclang/LibclangTest.cpp" \ + "${COMPILER_RT_DIR}/lib/asan/asan_rtl.cc" \ + "${COMPILER_RT_DIR}/test/asan/TestCases/Linux/new_array_cookie_test.cc" \ + "${LLVM_DIR}/test/DebugInfo/gmlt.ll" \ + "${LLVM_DIR}/lib/CodeGen/SpillPlacement.cpp" \ + "${LLVM_DIR}/lib/CodeGen/SpillPlacement.h" \ + "${LLVM_DIR}/lib/Transforms/Instrumentation/MemorySanitizer.cpp" \ + "${CLANG_DIR}/test/Driver/env.c" \ + "${CLANG_DIR}/lib/Frontend/InitPreprocessor.cpp" \ + "${CLANG_DIR}/test/Frontend/exceptions.c" \ + "${CLANG_DIR}/test/Preprocessor/predefined-exceptions.m" \ + "${LLVM_DIR}/test/Bindings/Go/go.test" \ + "${CLANG_DIR}/lib/Parse/ParseExpr.cpp" \ + "${CLANG_DIR}/lib/Parse/ParseTemplate.cpp" \ + "${CLANG_DIR}/lib/Sema/SemaDeclCXX.cpp" \ + "${CLANG_DIR}/lib/Sema/SemaExprCXX.cpp" \ + "${CLANG_DIR}/test/SemaCXX/default2.cpp" \ + "${CLANG_DIR}/test/SemaCXX/typo-correction-delayed.cpp" \ + "${COMPILER_RT_DIR}/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc" \ + "${COMPILER_RT_DIR}/test/tsan/signal_segv_handler.cc" \ + "${COMPILER_RT_DIR}/lib/sanitizer_common/sanitizer_coverage_libcdep.cc" \ + "${COMPILER_RT_DIR}/cmake/config-ix.cmake" \ + "${COMPILER_RT_DIR}/CMakeLists.txt" \ + "${COMPILER_RT_DIR}/lib/ubsan/ubsan_platform.h" \ + ; do + if [[ -e "${i}" ]]; then + rm -f "${i}" # For unversioned files. + svn revert "${i}" + fi; +done + +echo Remove the Clang tools shim dir +CHROME_TOOLS_SHIM_DIR=${ABS_LLVM_DIR}/tools/chrometools +rm -rfv ${CHROME_TOOLS_SHIM_DIR} + +echo Getting LLVM r"${CLANG_REVISION}" in "${LLVM_DIR}" +if ! svn co --force "${LLVM_REPO_URL}/llvm/trunk@${CLANG_REVISION}" \ + "${LLVM_DIR}"; then + echo Checkout failed, retrying + rm -rf "${LLVM_DIR}" + svn co --force "${LLVM_REPO_URL}/llvm/trunk@${CLANG_REVISION}" "${LLVM_DIR}" +fi + +echo Getting clang r"${CLANG_REVISION}" in "${CLANG_DIR}" +svn co --force "${LLVM_REPO_URL}/cfe/trunk@${CLANG_REVISION}" "${CLANG_DIR}" + +# We have moved from building compiler-rt in the LLVM tree, to a separate +# directory. Nuke any previous checkout to avoid building it. +rm -rf "${LLVM_DIR}/projects/compiler-rt" + +echo Getting compiler-rt r"${CLANG_REVISION}" in "${COMPILER_RT_DIR}" +svn co --force "${LLVM_REPO_URL}/compiler-rt/trunk@${CLANG_REVISION}" \ + "${COMPILER_RT_DIR}" + +# clang needs a libc++ checkout, else -stdlib=libc++ won't find includes +# (i.e. this is needed for bootstrap builds). +if [ "${OS}" = "Darwin" ]; then + echo Getting libc++ r"${CLANG_REVISION}" in "${LIBCXX_DIR}" + svn co --force "${LLVM_REPO_URL}/libcxx/trunk@${CLANG_REVISION}" \ + "${LIBCXX_DIR}" +fi + +# While we're bundling our own libc++ on OS X, we need to compile libc++abi +# into it too (since OS X 10.6 doesn't have libc++abi.dylib either). +if [ "${OS}" = "Darwin" ]; then + echo Getting libc++abi r"${CLANG_REVISION}" in "${LIBCXXABI_DIR}" + svn co --force "${LLVM_REPO_URL}/libcxxabi/trunk@${CLANG_REVISION}" \ + "${LIBCXXABI_DIR}" +fi + +if [[ -n "$with_patches" ]]; then + + # Apply patch for tests failing with --disable-pthreads (llvm.org/PR11974) + pushd "${CLANG_DIR}" + cat << 'EOF' | +--- test/Index/crash-recovery-modules.m (revision 202554) ++++ test/Index/crash-recovery-modules.m (working copy) +@@ -12,6 +12,8 @@ + + // REQUIRES: crash-recovery + // REQUIRES: shell ++// XFAIL: * ++// (PR11974) + + @import Crash; +EOF +patch -p0 +popd + +pushd "${CLANG_DIR}" +cat << 'EOF' | +--- unittests/libclang/LibclangTest.cpp (revision 215949) ++++ unittests/libclang/LibclangTest.cpp (working copy) +@@ -431,7 +431,7 @@ + EXPECT_EQ(0U, clang_getNumDiagnostics(ClangTU)); + } + +-TEST_F(LibclangReparseTest, ReparseWithModule) { ++TEST_F(LibclangReparseTest, DISABLED_ReparseWithModule) { + const char *HeaderTop = "#ifndef H\n#define H\nstruct Foo { int bar;"; + const char *HeaderBottom = "\n};\n#endif\n"; + const char *MFile = "#include \"HeaderFile.h\"\nint main() {" +EOF + patch -p0 + popd + + # This Go bindings test doesn't work after the bootstrap build on Linux. (PR21552) + pushd "${LLVM_DIR}" + cat << 'EOF' | +--- test/Bindings/Go/go.test (revision 223109) ++++ test/Bindings/Go/go.test (working copy) +@@ -1,3 +1,3 @@ +-; RUN: llvm-go test llvm.org/llvm/bindings/go/llvm ++; RUN: true + + ; REQUIRES: shell +EOF + patch -p0 + popd + + # The UBSan run-time, which is now bundled with the ASan run-time, doesn't work + # on Mac OS X 10.8 (PR23539). + pushd "${COMPILER_RT_DIR}" + cat << 'EOF' | +Index: CMakeLists.txt +=================================================================== +--- CMakeLists.txt (revision 241602) ++++ CMakeLists.txt (working copy) +@@ -305,6 +305,7 @@ + list(APPEND SANITIZER_COMMON_SUPPORTED_OS iossim) + endif() + endif() ++ set(SANITIZER_MIN_OSX_VERSION "10.7") + if(SANITIZER_MIN_OSX_VERSION VERSION_LESS "10.7") + message(FATAL_ERROR "Too old OS X version: ${SANITIZER_MIN_OSX_VERSION}") + endif() +EOF + patch -p0 + popd + +fi + +# Echo all commands. +set -x + +# Set default values for CC and CXX if they're not set in the environment. +CC=${CC:-cc} +CXX=${CXX:-c++} + +if [[ -n "${gcc_toolchain}" ]]; then + # Use the specified gcc installation for building. + CC="$gcc_toolchain/bin/gcc" + CXX="$gcc_toolchain/bin/g++" + # Set LD_LIBRARY_PATH to make auxiliary targets (tablegen, bootstrap compiler, + # etc.) find the .so. + export LD_LIBRARY_PATH="$(dirname $(${CXX} -print-file-name=libstdc++.so.6))" +fi + +CFLAGS="" +CXXFLAGS="" +LDFLAGS="" + +# LLVM uses C++11 starting in llvm 3.5. On Linux, this means libstdc++4.7+ is +# needed, on OS X it requires libc++. clang only automatically links to libc++ +# when targeting OS X 10.9+, so add stdlib=libc++ explicitly so clang can run on +# OS X versions as old as 10.7. +# TODO(thakis): Some bots are still on 10.6 (nacl...), so for now bundle +# libc++.dylib. Remove this once all bots are on 10.7+, then use +# -DLLVM_ENABLE_LIBCXX=ON and change deployment_target to 10.7. +deployment_target="" + +if [ "${OS}" = "Darwin" ]; then + # When building on 10.9, /usr/include usually doesn't exist, and while + # Xcode's clang automatically sets a sysroot, self-built clangs don't. + CFLAGS="-isysroot $(xcrun --show-sdk-path)" + CXXFLAGS="-stdlib=libc++ -nostdinc++ -I${ABS_LIBCXX_DIR}/include ${CFLAGS}" + + if [[ -n "${bootstrap}" ]]; then + deployment_target=10.6 + fi +fi + +# Build bootstrap clang if requested. +if [[ -n "${bootstrap}" ]]; then + ABS_INSTALL_DIR="${PWD}/${LLVM_BOOTSTRAP_INSTALL_DIR}" + echo "Building bootstrap compiler" + mkdir -p "${LLVM_BOOTSTRAP_DIR}" + pushd "${LLVM_BOOTSTRAP_DIR}" + + cmake -GNinja \ + -DCMAKE_BUILD_TYPE=Release \ + -DLLVM_ENABLE_ASSERTIONS=ON \ + -DLLVM_TARGETS_TO_BUILD=host \ + -DLLVM_ENABLE_THREADS=OFF \ + -DCMAKE_INSTALL_PREFIX="${ABS_INSTALL_DIR}" \ + -DCMAKE_C_COMPILER="${CC}" \ + -DCMAKE_CXX_COMPILER="${CXX}" \ + -DCMAKE_C_FLAGS="${CFLAGS}" \ + -DCMAKE_CXX_FLAGS="${CXXFLAGS}" \ + ../llvm + + ninja + if [[ -n "${run_tests}" ]]; then + ninja check-all + fi + + ninja install + if [[ -n "${gcc_toolchain}" ]]; then + # Copy that gcc's stdlibc++.so.6 to the build dir, so the bootstrap + # compiler can start. + cp -v "$(${CXX} -print-file-name=libstdc++.so.6)" \ + "${ABS_INSTALL_DIR}/lib/" + fi + + popd + CC="${ABS_INSTALL_DIR}/bin/clang" + CXX="${ABS_INSTALL_DIR}/bin/clang++" + + if [[ -n "${gcc_toolchain}" ]]; then + # Tell the bootstrap compiler to use a specific gcc prefix to search + # for standard library headers and shared object file. + CFLAGS="--gcc-toolchain=${gcc_toolchain}" + CXXFLAGS="--gcc-toolchain=${gcc_toolchain}" + fi + + echo "Building final compiler" +fi + +# Build clang (in a separate directory). +# The clang bots have this path hardcoded in built/scripts/slave/compile.py, +# so if you change it you also need to change these links. +mkdir -p "${LLVM_BUILD_DIR}" +pushd "${LLVM_BUILD_DIR}" + +# Build libc++.dylib while some bots are still on OS X 10.6. +if [ "${OS}" = "Darwin" ]; then + rm -rf libcxxbuild + LIBCXXFLAGS="-O3 -std=c++11 -fstrict-aliasing" + + # libcxx and libcxxabi both have a file stdexcept.cpp, so put their .o files + # into different subdirectories. + mkdir -p libcxxbuild/libcxx + pushd libcxxbuild/libcxx + ${CXX:-c++} -c ${CXXFLAGS} ${LIBCXXFLAGS} "${ABS_LIBCXX_DIR}"/src/*.cpp + popd + + mkdir -p libcxxbuild/libcxxabi + pushd libcxxbuild/libcxxabi + ${CXX:-c++} -c ${CXXFLAGS} ${LIBCXXFLAGS} "${ABS_LIBCXXABI_DIR}"/src/*.cpp -I"${ABS_LIBCXXABI_DIR}/include" + popd + + pushd libcxxbuild + ${CC:-cc} libcxx/*.o libcxxabi/*.o -o libc++.1.dylib -dynamiclib \ + -nodefaultlibs -current_version 1 -compatibility_version 1 \ + -lSystem -install_name @executable_path/libc++.dylib \ + -Wl,-unexported_symbols_list,${ABS_LIBCXX_DIR}/lib/libc++unexp.exp \ + -Wl,-force_symbols_not_weak_list,${ABS_LIBCXX_DIR}/lib/notweak.exp \ + -Wl,-force_symbols_weak_list,${ABS_LIBCXX_DIR}/lib/weak.exp + ln -sf libc++.1.dylib libc++.dylib + popd + LDFLAGS+="-stdlib=libc++ -L${PWD}/libcxxbuild" + + if [[ -n "${bootstrap}" ]]; then + # Now that the libc++ headers have been installed and libc++.dylib is built, + # delete the libc++ checkout again so that it's not part of the main + # build below -- the libc++(abi) tests don't pass on OS X in bootstrap + # builds (http://llvm.org/PR24068) + rm -rf "${ABS_LIBCXX_DIR}" + rm -rf "${ABS_LIBCXXABI_DIR}" + CXXFLAGS="-stdlib=libc++ -nostdinc++ -I${ABS_INSTALL_DIR}/include/c++/v1 ${CFLAGS}" + fi +fi + +# Find the binutils include dir for the gold plugin. +BINUTILS_INCDIR="" +if [ "${OS}" = "Linux" ]; then + BINUTILS_INCDIR="${ABS_BINUTILS_DIR}/Linux_x64/Release/include" +fi + + +# If building at head, define a macro that plugins can use for #ifdefing +# out code that builds at head, but not at CLANG_REVISION or vice versa. +if [[ -n ${LLVM_FORCE_HEAD_REVISION:-''} ]]; then + CFLAGS="${CFLAGS} -DLLVM_FORCE_HEAD_REVISION" + CXXFLAGS="${CXXFLAGS} -DLLVM_FORCE_HEAD_REVISION" +fi + +# Hook the Chromium tools into the LLVM build. Several Chromium tools have +# dependencies on LLVM/Clang libraries. The LLVM build detects implicit tools +# in the tools subdirectory, so install a shim CMakeLists.txt that forwards to +# the real directory for the Chromium tools. +# Note that the shim directory name intentionally has no _ or _. The implicit +# tool detection logic munges them in a weird way. +mkdir -v ${CHROME_TOOLS_SHIM_DIR} +cat > ${CHROME_TOOLS_SHIM_DIR}/CMakeLists.txt << EOF +# Since tools/clang isn't actually a subdirectory, use the two argument version +# to specify where build artifacts go. CMake doesn't allow reusing the same +# binary dir for multiple source dirs, so the build artifacts have to go into a +# subdirectory... +add_subdirectory(\${CHROMIUM_TOOLS_SRC} \${CMAKE_CURRENT_BINARY_DIR}/a) +EOF +rm -fv CMakeCache.txt +MACOSX_DEPLOYMENT_TARGET=${deployment_target} cmake -GNinja \ + -DCMAKE_BUILD_TYPE=Release \ + -DLLVM_ENABLE_ASSERTIONS=ON \ + -DLLVM_ENABLE_THREADS=OFF \ + -DLLVM_BINUTILS_INCDIR="${BINUTILS_INCDIR}" \ + -DCMAKE_C_COMPILER="${CC}" \ + -DCMAKE_CXX_COMPILER="${CXX}" \ + -DCMAKE_C_FLAGS="${CFLAGS}" \ + -DCMAKE_CXX_FLAGS="${CXXFLAGS}" \ + -DCMAKE_EXE_LINKER_FLAGS="${LDFLAGS}" \ + -DCMAKE_SHARED_LINKER_FLAGS="${LDFLAGS}" \ + -DCMAKE_MODULE_LINKER_FLAGS="${LDFLAGS}" \ + -DCMAKE_INSTALL_PREFIX="${ABS_LLVM_BUILD_DIR}" \ + -DCHROMIUM_TOOLS_SRC="${ABS_CHROMIUM_TOOLS_DIR}" \ + -DCHROMIUM_TOOLS="${chrome_tools}" \ + "${ABS_LLVM_DIR}" +env + +if [[ -n "${gcc_toolchain}" ]]; then + # Copy in the right stdlibc++.so.6 so clang can start. + mkdir -p lib + cp -v "$(${CXX} ${CXXFLAGS} -print-file-name=libstdc++.so.6)" lib/ +fi + +ninja +# If any Chromium tools were built, install those now. +if [[ -n "${chrome_tools}" ]]; then + ninja cr-install +fi + +STRIP_FLAGS= +if [ "${OS}" = "Darwin" ]; then + # See http://crbug.com/256342 + STRIP_FLAGS=-x + + cp libcxxbuild/libc++.1.dylib bin/ +fi +strip ${STRIP_FLAGS} bin/clang +popd + +# Build compiler-rt out-of-tree. +mkdir -p "${COMPILER_RT_BUILD_DIR}" +pushd "${COMPILER_RT_BUILD_DIR}" + +rm -fv CMakeCache.txt +MACOSX_DEPLOYMENT_TARGET=${deployment_target} cmake -GNinja \ + -DCMAKE_BUILD_TYPE=Release \ + -DLLVM_ENABLE_ASSERTIONS=ON \ + -DLLVM_ENABLE_THREADS=OFF \ + -DCMAKE_C_COMPILER="${CC}" \ + -DCMAKE_CXX_COMPILER="${CXX}" \ + -DLLVM_CONFIG_PATH="${ABS_LLVM_BUILD_DIR}/bin/llvm-config" \ + "${ABS_COMPILER_RT_DIR}" + +ninja + +# Copy selected output to the main tree. +# Darwin doesn't support cp --parents, so pipe through tar instead. +CLANG_VERSION=$("${ABS_LLVM_BUILD_DIR}/bin/clang" --version | \ + sed -ne 's/clang version \([0-9]\.[0-9]\.[0-9]\).*/\1/p') +ABS_LLVM_CLANG_LIB_DIR="${ABS_LLVM_BUILD_DIR}/lib/clang/${CLANG_VERSION}" +tar -c *blacklist.txt | tar -C ${ABS_LLVM_CLANG_LIB_DIR} -xv +tar -c include/sanitizer | tar -C ${ABS_LLVM_CLANG_LIB_DIR} -xv +if [[ "${OS}" = "Darwin" ]]; then + tar -c lib/darwin | tar -C ${ABS_LLVM_CLANG_LIB_DIR} -xv +else + tar -c lib/linux | tar -C ${ABS_LLVM_CLANG_LIB_DIR} -xv +fi + +popd + +if [[ -n "${with_android}" ]]; then + # Make a standalone Android toolchain. + ${ANDROID_NDK_DIR}/build/tools/make-standalone-toolchain.sh \ + --platform=android-19 \ + --install-dir="${LLVM_BUILD_DIR}/android-toolchain" \ + --system=linux-x86_64 \ + --stl=stlport \ + --toolchain=arm-linux-androideabi-4.9 + + # Android NDK r9d copies a broken unwind.h into the toolchain, see + # http://crbug.com/357890 + rm -v "${LLVM_BUILD_DIR}"/android-toolchain/include/c++/*/unwind.h + + # Build ASan runtime for Android in a separate build tree. + mkdir -p ${LLVM_BUILD_DIR}/android + pushd ${LLVM_BUILD_DIR}/android + rm -fv CMakeCache.txt + MACOSX_DEPLOYMENT_TARGET=${deployment_target} cmake -GNinja \ + -DCMAKE_BUILD_TYPE=Release \ + -DLLVM_ENABLE_ASSERTIONS=ON \ + -DLLVM_ENABLE_THREADS=OFF \ + -DCMAKE_C_COMPILER=${PWD}/../bin/clang \ + -DCMAKE_CXX_COMPILER=${PWD}/../bin/clang++ \ + -DLLVM_CONFIG_PATH=${PWD}/../bin/llvm-config \ + -DCMAKE_C_FLAGS="--target=arm-linux-androideabi --sysroot=${PWD}/../android-toolchain/sysroot -B${PWD}/../android-toolchain" \ + -DCMAKE_CXX_FLAGS="--target=arm-linux-androideabi --sysroot=${PWD}/../android-toolchain/sysroot -B${PWD}/../android-toolchain" \ + -DANDROID=1 \ + "${ABS_COMPILER_RT_DIR}" + ninja libclang_rt.asan-arm-android.so + + # And copy it into the main build tree. + cp "$(find -name libclang_rt.asan-arm-android.so)" "${ABS_LLVM_CLANG_LIB_DIR}/lib/linux/" + popd +fi + +if [[ -n "$run_tests" || -n "${LLVM_FORCE_HEAD_REVISION:-''}" ]]; then + # Run Chrome tool tests. + ninja -C "${LLVM_BUILD_DIR}" cr-check-all +fi +if [[ -n "$run_tests" ]]; then + # Run the LLVM and Clang tests. + ninja -C "${LLVM_BUILD_DIR}" check-all +fi + +# After everything is done, log success for this revision. +echo "${PACKAGE_VERSION}" > "${STAMP_FILE}" diff --git a/tools/gn.py b/tools/gn.py new file mode 100755 index 00000000000..32335f09b99 --- /dev/null +++ b/tools/gn.py @@ -0,0 +1,159 @@ +#!/usr/bin/env python +# Copyright 2016 The Dart 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 argparse +import subprocess +import sys +import os +import utils + +HOST_OS = utils.GuessOS() +HOST_ARCH = utils.GuessArchitecture() +HOST_CPUS = utils.GuessCpus() +SCRIPT_DIR = os.path.dirname(sys.argv[0]) +DART_ROOT = os.path.realpath(os.path.join(SCRIPT_DIR, '..')) + +def get_out_dir(args): + return utils.GetBuildRoot(HOST_OS, args.mode, args.arch, args.os) + +def to_command_line(gn_args): + def merge(key, value): + if type(value) is bool: + return '%s=%s' % (key, 'true' if value else 'false') + return '%s="%s"' % (key, value) + return [merge(x, y) for x, y in gn_args.iteritems()] + +def host_cpu_for_arch(arch): + if arch in ['ia32', 'arm', 'armv6', 'armv5te', 'mips', + 'simarm', 'simarmv6', 'simarmv5te', 'simmips', 'simdbc']: + return 'x86' + if arch in ['x64', 'arm64', 'simarm64', 'simdbc64']: + return 'x64' + +def target_cpu_for_arch(arch, os): + if arch in ['ia32', 'simarm', 'simarmv6', 'simarmv5te', 'simmips']: + return 'x86' + if arch in ['simarm64']: + return 'x64' + if arch == 'mips': + return 'mipsel' + if arch == 'simdbc': + return 'arm' if os == 'android' else 'x86' + if arch == 'simdbc64': + return 'arm64' if os == 'android' else 'x64' + return arch + +def to_gn_args(args): + gn_args = {} + + if args.os == 'host': + gn_args['target_os'] = HOST_OS + else: + gn_args['target_os'] = args.os + + gn_args['dart_target_arch'] = args.arch + gn_args['target_cpu'] = target_cpu_for_arch(args.arch, args.os) + gn_args['host_cpu'] = host_cpu_for_arch(args.arch) + + # TODO(zra): This is for the observatory, which currently builds using the + # checked-in sdk. If/when the observatory no longer builds with the + # checked-in sdk, this can be removed. + gn_args['dart_host_pub_exe'] = os.path.join( + DART_ROOT, 'tools', 'sdks', HOST_OS, 'dart-sdk', 'bin', 'pub') + + # For Fuchsia support, the default is to not compile in the root + # certificates. + gn_args['dart_use_fallback_root_certificates'] = True + + gn_args['dart_zlib_path'] = "//runtime/bin/zlib" + + gn_args['is_debug'] = args.mode == 'debug' + gn_args['is_release'] = args.mode == 'release' + gn_args['is_product'] = args.mode == 'product' + gn_args['dart_debug'] = args.mode == 'debug' + + # This setting is only meaningful for Flutter. Standalone builds of the VM + # should leave this set to 'develop', which causes the build to defer to + # 'is_debug', 'is_release' and 'is_product'. + gn_args['dart_runtime_mode'] = 'develop' + + gn_args['is_clang'] = args.clang and args.os not in ['android'] + + if args.target_sysroot: + gn_args['target_sysroot'] = args.target_sysroot + + if args.toolchain_prefix: + gn_args['toolchain_prefix'] = args.toolchain_prefix + + goma_dir = os.environ.get('GOMA_DIR') + goma_home_dir = os.path.join(os.getenv('HOME', ''), 'goma') + if args.goma and goma_dir: + gn_args['use_goma'] = True + gn_args['goma_dir'] = goma_dir + elif args.goma and os.path.exists(goma_home_dir): + gn_args['use_goma'] = True + gn_args['goma_dir'] = goma_home_dir + else: + gn_args['use_goma'] = False + gn_args['goma_dir'] = None + + return gn_args + +def parse_args(args): + args = args[1:] + parser = argparse.ArgumentParser(description='A script run` gn gen`.') + + parser.add_argument('--mode', '-m', + type=str, + choices=['debug', 'release', 'product'], + default='debug') + parser.add_argument('--os', + type=str, + choices=['host', 'android'], + default='host') + parser.add_argument('--arch', '-a', + type=str, + choices=['ia32', 'x64', 'simarm', 'arm', 'simarmv6', 'armv6', + 'simarmv5te', 'armv5te', 'simmips', 'mips', 'simarm64', 'arm64', + 'simdbc', 'simdbc64'], + default='x64') + + parser.add_argument('--goma', default=True, action='store_true') + parser.add_argument('--no-goma', dest='goma', action='store_false') + + parser.add_argument('--clang', default=True, action='store_true') + parser.add_argument('--no-clang', dest='clang', action='store_false') + + parser.add_argument('--target-sysroot', '-s', type=str) + parser.add_argument('--toolchain-prefix', '-t', type=str) + + return parser.parse_args(args) + +def main(argv): + args = parse_args(argv) + + if sys.platform.startswith(('cygwin', 'win')): + subdir = 'win' + elif sys.platform == 'darwin': + subdir = 'mac' + elif sys.platform.startswith('linux'): + subdir = 'linux64' + else: + raise Error('Unknown platform: ' + sys.platform) + + command = [ + '%s/buildtools/%s/gn' % (DART_ROOT, subdir), + 'gen', + '--check' + ] + gn_args = to_command_line(to_gn_args(args)) + out_dir = get_out_dir(args) + print "gn gen --check in %s" % out_dir + command.append(out_dir) + command.append('--args=%s' % ' '.join(gn_args)) + return subprocess.call(command, cwd=DART_ROOT) + +if __name__ == '__main__': + sys.exit(main(sys.argv))