f2526331b4
The 8K table in SkFDot6Constants.cpp is only used by SkAnalyticEdge and its unit test, so to help LTO trim this when SkAnalyticEdge isn't used, move it to SkAnalyticEdge.cpp and delete the unit test. (I suspect the table is never going to change.) I've also moved setLine() out-of-line into SkAnalyticEdge.cpp to make this work, and done a little bit of refactoring and renaming. Change-Id: If1d234f387d100dd58d8860dccac000e5493a2c1 Reviewed-on: https://skia-review.googlesource.com/c/164182 Reviewed-by: Mike Reed <reed@google.com> Commit-Queue: Mike Klein <mtklein@google.com>
180 lines
4.8 KiB
Python
Executable File
180 lines
4.8 KiB
Python
Executable File
#!/usr/bin/env python
|
|
|
|
# Copyright 2017 Google Inc.
|
|
#
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
import fnmatch
|
|
import multiprocessing
|
|
import os
|
|
import subprocess
|
|
import sys
|
|
|
|
'''
|
|
If called with arguments, this script will verify that those headers are
|
|
self-sufficient and idempotent.
|
|
|
|
Otherwise, test all checked-in headers except for those in the ignore list.
|
|
'''
|
|
|
|
public_header_args = [
|
|
'-Iinclude/core',
|
|
'-Iinclude/config',
|
|
'-Iinclude/android',
|
|
'-Iinclude/codec',
|
|
'-Iinclude/effects',
|
|
'-Iinclude/gpu',
|
|
'-Iinclude/gpu/gl',
|
|
'-Iinclude/pathops',
|
|
'-Iinclude/ports',
|
|
'-Iinclude/private',
|
|
'-Iinclude/svg',
|
|
'-Iinclude/utils',
|
|
'-Iinclude/utils/mac',
|
|
'-Iinclude/views',
|
|
'-Ithird_party/vulkan',
|
|
]
|
|
|
|
all_header_args = [
|
|
'-Iinclude/core',
|
|
'-Iinclude/config',
|
|
'-Iinclude/android',
|
|
'-Iinclude/c',
|
|
'-Iinclude/codec',
|
|
'-Iinclude/effects',
|
|
'-Iinclude/gpu',
|
|
'-Iinclude/gpu/gl',
|
|
'-Iinclude/pathops',
|
|
'-Iinclude/ports',
|
|
'-Iinclude/private',
|
|
'-Iinclude/svg',
|
|
'-Iinclude/utils',
|
|
'-Iinclude/utils/mac',
|
|
'-Iinclude/views',
|
|
'-Isrc/codec',
|
|
'-Isrc/core',
|
|
'-Isrc/effects',
|
|
'-Isrc/effects/gradients',
|
|
'-Isrc/fonts',
|
|
'-Isrc/gpu',
|
|
'-Isrc/image',
|
|
'-Isrc/images',
|
|
'-Isrc/lazy',
|
|
'-Isrc/opts',
|
|
'-Isrc/pathops',
|
|
'-Isrc/ports',
|
|
'-Isrc/sfnt',
|
|
'-Isrc/shaders',
|
|
'-Isrc/sksl',
|
|
'-Isrc/utils',
|
|
'-Isrc/utils/win',
|
|
'-Isrc/xml',
|
|
'-Igm',
|
|
'-Itests',
|
|
'-Itools',
|
|
'-Itools/debugger',
|
|
'-Itools/flags',
|
|
'-Itools/gpu',
|
|
'-Itools/timer',
|
|
'-Ithird_party/externals/jsoncpp/include',
|
|
'-Ithird_party/externals/libjpeg-turbo',
|
|
'-Ithird_party/externals/sfntly/cpp/src',
|
|
'-Ithird_party/externals/zlib',
|
|
'-Ithird_party/gif',
|
|
'-Ithird_party/vulkan',
|
|
]
|
|
|
|
ignore = [
|
|
'*/lex.*.h',
|
|
'*/osmesa_wrapper.h',
|
|
'debugger/QT/*',
|
|
'example/*',
|
|
'experimental/*',
|
|
'include/config/*',
|
|
'include/core/SkPostConfig.h',
|
|
'include/gpu/vk/*',
|
|
'include/ports/SkFontMgr_android.h',
|
|
'include/ports/SkFontMgr_fontconfig.h',
|
|
'include/ports/SkTypeface_win.h',
|
|
'include/private/*_impl.h',
|
|
'include/utils/mac/SkCGUtils.h',
|
|
'include/views/SkOSWindow_*.h',
|
|
'src/c/sk_c_from_to.h',
|
|
'src/core/*Template.h',
|
|
'src/core/SkBitmapProcState_*.h',
|
|
'src/core/SkLinearBitmapPipeline.h',
|
|
'src/core/SkLinearBitmapPipeline_*.h',
|
|
'src/core/SkUnPreMultiplyPriv.h',
|
|
'src/gpu/vk/*',
|
|
'src/opts/*_SSE2.h',
|
|
'src/opts/*_SSSE3.h',
|
|
'src/opts/*_neon.h',
|
|
'src/opts/*_sse.h',
|
|
'src/opts/Sk4px_*.h',
|
|
'src/ports/*',
|
|
'src/utils/*_win.h',
|
|
'src/utils/win/*',
|
|
'src/views/*',
|
|
'third_party/*',
|
|
'tools/fiddle/*',
|
|
'tools/viewer/*',
|
|
]
|
|
|
|
# test header for self-sufficiency and idempotency.
|
|
# Returns a string containing errors, or None iff there are no errors.
|
|
def compile_header(header):
|
|
args = ([] if fnmatch.fnmatch(header, 'include/c/*') else
|
|
public_header_args if fnmatch.fnmatch(header, 'include/*') else
|
|
all_header_args)
|
|
cmd = ['c++', '--std=c++14'] + args + [ '-o', '/dev/null', '-c', '-x', 'c++', '-']
|
|
proc = subprocess.Popen(cmd, stdin=subprocess.PIPE,
|
|
stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
|
|
proc.stdin.write('#include "%s"\n#include "%s"\n' % (header, header))
|
|
proc.stdin.close()
|
|
errors = proc.stdout.read().strip()
|
|
if proc.wait() != 0 or len(errors) > 0:
|
|
return '\n\033[7m ERROR: %s \033[0m\n%s\n\n' % (header, errors)
|
|
return None
|
|
|
|
# for h in headers:
|
|
# compile_header(h)
|
|
# ...Except use a multiprocessing pool.
|
|
# Exit at first error.
|
|
def compile_headers(headers):
|
|
class N: good = True
|
|
# N.good is a global scoped to this function to make a print_and_exit_if() a closure
|
|
pool = multiprocessing.Pool()
|
|
def print_and_exit_if(r):
|
|
if r is not None:
|
|
sys.stdout.write(r)
|
|
N.good = False
|
|
pool.terminate()
|
|
for path in headers:
|
|
assert os.path.exists(path)
|
|
pool.apply_async(compile_header, args=(path, ), callback=print_and_exit_if)
|
|
pool.close()
|
|
pool.join()
|
|
if N.good:
|
|
sys.stdout.write('all good :)\n')
|
|
else:
|
|
exit(1)
|
|
|
|
|
|
def main(argv):
|
|
skia_dir = os.path.join(os.path.dirname(__file__), os.pardir)
|
|
if len(argv) > 1:
|
|
paths = [os.path.relpath(os.path.abspath(arg), skia_dir) for arg in argv[1:]]
|
|
os.chdir(skia_dir)
|
|
else:
|
|
os.chdir(skia_dir)
|
|
paths = [path for path in subprocess.check_output(['git', 'ls-files']).splitlines()
|
|
if path.endswith('.h')
|
|
and not any(fnmatch.fnmatch(path, pattern) for pattern in ignore)]
|
|
compile_headers(paths)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main(sys.argv)
|
|
|