Merge to XFA: (Reland) Switch builds to clang by default for Linux and OS X.
Also adds support for ASan and sanitizer coverage.
BUG=pdfium:1,pdfium:171
R=thestig@chromium.org
Committed: https://pdfium.googlesource.com/pdfium/+/5478df43a8970257e9644ae6f57a6fe7513029c6
Review URL: https://codereview.chromium.org/1406843002 .
(cherry picked from commit 3b2ab45f0a883046a7c457e8435b5a9b2c1c4156)
Review URL: https://codereview.chromium.org/1412193010 .
diff --git a/.gitignore b/.gitignore
index 3014ed6..cbd1e7d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -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 59335ab..f02ac68 100644
--- a/DEPS
+++ b/DEPS
@@ -14,6 +14,9 @@
"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@4d03c3aabad6517ff058124bb799ca6a4156e570",
@@ -74,4 +77,10 @@
'-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'],
+ },
]
diff --git a/build/standalone.gypi b/build/standalone.gypi
index 507368d..a70b442 100644
--- a/build/standalone.gypi
+++ b/build/standalone.gypi
@@ -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)',
@@ -50,6 +53,11 @@
}, {
'os_posix%': 1,
}],
+ ['OS=="linux" or OS=="mac"', {
+ 'clang%': 1,
+ }, {
+ 'clang%': 0,
+ }],
],
},
'target_defaults': {
@@ -249,6 +257,20 @@
'-fPIC',
],
}],
+ ['asan==1', {
+ 'cflags': [
+ '-fsanitize=address',
+ '-gline-tables-only',
+ ],
+ 'ldflags': [
+ '-fsanitize=address',
+ ],
+ }],
+ ['sanitizer_coverage!=0', {
+ 'cflags': [
+ '-fsanitize-coverage=<(sanitizer_coverage)',
+ ],
+ }],
['OS=="win"', {
'defines': [
'NOMINMAX',
@@ -280,5 +302,17 @@
'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"
+ ],
}