(Reland) Switch builds to clang by default for Linux and OS X.
authorOliver Chang <ochang@chromium.org>
Wed, 21 Oct 2015 20:19:28 +0000 (13:19 -0700)
committerOliver Chang <ochang@chromium.org>
Wed, 21 Oct 2015 20:19:28 +0000 (13:19 -0700)
Also adds support for ASan and sanitizer coverage.

BUG=pdfium:1,pdfium:171
R=thakis@chromium.org, thestig@chromium.org

Committed: https://pdfium.googlesource.com/pdfium/+/5478df43a8970257e9644ae6f57a6fe7513029c6

Review URL: https://codereview.chromium.org/1406843002 .

.gitignore
DEPS
build/standalone.gypi

index 3014ed6..cbd1e7d 100644 (file)
@@ -6,6 +6,9 @@
 /testing/corpus
 /testing/gmock
 /testing/gtest
+/third_party/llvm
+/third_party/llvm-build
+/tools/clang
 /v8
 /xcodebuild
 Makefile
diff --git a/DEPS b/DEPS
index 455150d..220f0c6 100644 (file)
--- a/DEPS
+++ b/DEPS
@@ -16,6 +16,9 @@ deps = {
   "testing/gtest":
      "https://chromium.googlesource.com/external/googletest.git@8245545b6dc9c4703e6496d1efd19e975ad2b038",
 
+  "tools/clang":
+    "https://chromium.googlesource.com/chromium/src/tools/clang",
+
   "v8":
     "https://chromium.googlesource.com/v8/v8.git@2607e2b06b0be40a4c3f762c1a666a389dc28a99",
 
@@ -76,4 +79,10 @@ hooks = [
                 '-s', 'pdfium/buildtools/linux64/clang-format.sha1',
     ],
   },
+  {
+    # Pull clang if needed or requested via GYP_DEFINES.
+    'name': 'clang',
+    'pattern': '.',
+    'action': ['python', 'pdfium/tools/clang/scripts/update.py', '--if-needed'],
+  },
 ]
index 507368d..a70b442 100644 (file)
@@ -8,6 +8,8 @@
   'variables': {
     'component%': 'static_library',
     'clang%': 0,
+    'asan%': 0,
+    'sanitizer_coverage%': 0,
     'msvs_multi_core_compile%': '1',
     'variables': {
       'variables': {
@@ -37,6 +39,7 @@
       'host_arch%': '<(host_arch)',
       'target_arch%': '<(target_arch)',
     },
+    'clang_dir%': 'third_party/llvm-build/Release+Asserts',
     # These two are needed by V8.
     'host_arch%': '<(host_arch)',
     'target_arch%': '<(target_arch)',
       }, {
         'os_posix%': 1,
       }],
+      ['OS=="linux" or OS=="mac"', {
+        'clang%': 1,
+      }, {
+        'clang%': 0,
+      }],
     ],
   },
   'target_defaults': {
           '-fPIC',
         ],
       }],
+      ['asan==1', {
+        'cflags': [
+          '-fsanitize=address',
+          '-gline-tables-only',
+        ],
+        'ldflags': [
+          '-fsanitize=address',
+        ],
+      }],
+      ['sanitizer_coverage!=0', {
+        'cflags': [
+          '-fsanitize-coverage=<(sanitizer_coverage)',
+        ],
+      }],
       ['OS=="win"', {
         'defines': [
           'NOMINMAX',
   'xcode_settings': {
     # See comment in Chromium's common.gypi for why this is needed.
     'SYMROOT': '<(DEPTH)/xcodebuild',
-  }
+  },
+  'conditions': [
+    ['OS=="linux" or OS=="mac"', {
+      'conditions': [
+        ['clang==1', {
+          'make_global_settings': [
+            ['CC', '<(clang_dir)/bin/clang'],
+            ['CXX', '<(clang_dir)/bin/clang++'],
+          ],
+        }],
+      ],
+    }],  # OS=="linux" or OS=="mac"
+  ],
 }