Index: build/toolchain/toolchain.gni |
diff --git a/build/toolchain/toolchain.gni b/build/toolchain/toolchain.gni |
new file mode 100644 |
index 0000000000000000000000000000000000000000..9f564794816655edd06d110aeb2ce14390f037bb |
--- /dev/null |
+++ b/build/toolchain/toolchain.gni |
@@ -0,0 +1,80 @@ |
+# 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. |
+ |
+# Toolchain-related configuration that may be needed outside the context of the |
+# toolchain() rules themselves. |
+ |
+import("//build/config/chrome_build.gni") |
+ |
+declare_args() { |
+ # Enable Link Time Optimization in optimized builds (output programs run |
+ # faster, but linking is up to 5-20x slower). |
+ # Note: use target_os == "linux" rather than is_linux so that it does not |
+ # apply to host_toolchain when target_os="android". |
+ allow_posix_link_time_opt = |
+ target_os == "linux" && !is_chromeos && target_cpu == "x64" && |
+ is_chrome_branded && is_official_build |
+ |
+ # Set to true to use lld, the LLVM linker. This flag may be used on Windows |
+ # with the shipped LLVM toolchain, or on Linux with a self-built top-of-tree |
+ # LLVM toolchain (see llvm_force_head_revision in |
+ # build/config/compiler/BUILD.gn). |
+ use_lld = false |
+ |
+ if (is_clang) { |
+ # Clang compiler version. Clang files are placed at version-dependent paths. |
+ clang_version = "3.9.0" |
+ } |
+} |
+ |
+# Subdirectory within root_out_dir for shared library files. |
+# TODO(agrieve): GYP sets this to "lib" for Linux & Android, but this won't work |
+# in GN until support for loadable_module() is added. |
+# See: https://codereview.chromium.org/1236503002/ |
+shlib_subdir = "." |
+ |
+# Root out dir for shared library files. |
+root_shlib_dir = root_out_dir |
+if (shlib_subdir != ".") { |
+ root_shlib_dir += "/$shlib_subdir" |
+} |
+ |
+# Extension for shared library files (including leading dot). |
+if (is_mac || is_ios) { |
+ shlib_extension = ".dylib" |
+} else if (is_android && is_component_build) { |
+ # By appending .cr, we prevent name collisions with libraries already |
+ # loaded by the Android zygote. |
+ shlib_extension = ".cr.so" |
+} else if (is_posix) { |
+ shlib_extension = ".so" |
+} else if (is_win) { |
+ shlib_extension = ".dll" |
+} else { |
+ assert(false, "Platform not supported") |
+} |
+ |
+# Prefix for shared library files. |
+if (is_posix) { |
+ shlib_prefix = "lib" |
+} else { |
+ shlib_prefix = "" |
+} |
+ |
+# While other "tool"s in a toolchain are specific to the target of that |
+# toolchain, the "stamp" and "copy" tools are really generic to the host; |
+# but each toolchain must define them separately. GN doesn't allow a |
+# template instantiation inside a toolchain definition, so some boilerplate |
+# has to be repeated in each toolchain to define these two tools. These |
+# four variables reduce the duplication in that boilerplate. |
+stamp_description = "STAMP {{output}}" |
+copy_description = "COPY {{source}} {{output}}" |
+if (host_os == "win") { |
+ stamp_command = "$python_path gyp-win-tool stamp {{output}}" |
+ copy_command = |
+ "$python_path gyp-win-tool recursive-mirror {{source}} {{output}}" |
+} else { |
+ stamp_command = "touch {{output}}" |
+ copy_command = "ln -f {{source}} {{output}} 2>/dev/null || (rm -rf {{output}} && cp -af {{source}} {{output}})" |
+} |