[gcmole] Simplify gcmole directives and add tests
This prepares work for speeding up gcmole infrastructure by adding more checks and testing. - Add a presubmit check that verifies gcmole directives in gn files. - Simplify gcmole directives in gn files. Drop all but the architecture property as the others were unused. Simplify regular expressions. - Fix some gcmole directives (fly by - only on untested architectures). - Add a python test for the changed function in gcmole.py. There's no other testing yet and this starts somewhere. The test simulates real BUILD.gn files via checked-in test data. Bug: v8:12660 Change-Id: I9ca3152b2c3b806de5d4509c152283b36294950d Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/4020268 Commit-Queue: Michael Achenbach <machenbach@chromium.org> Reviewed-by: Alexander Schulze <alexschulze@chromium.org> Reviewed-by: Leszek Swirski <leszeks@chromium.org> Cr-Commit-Position: refs/heads/main@{#84239}
This commit is contained in:
parent
6ae0cd3717
commit
2b133ebc9e
91
BUILD.gn
91
BUILD.gn
@ -2454,57 +2454,57 @@ v8_source_set("v8_initializers") {
|
||||
|
||||
if (v8_current_cpu == "x86") {
|
||||
sources += [
|
||||
### gcmole(arch:ia32) ###
|
||||
### gcmole(ia32) ###
|
||||
"src/builtins/ia32/builtins-ia32.cc",
|
||||
]
|
||||
} else if (v8_current_cpu == "x64") {
|
||||
sources += [
|
||||
### gcmole(arch:x64) ###
|
||||
### gcmole(x64) ###
|
||||
"src/builtins/x64/builtins-x64.cc",
|
||||
]
|
||||
} else if (v8_current_cpu == "arm") {
|
||||
sources += [
|
||||
### gcmole(arch:arm) ###
|
||||
### gcmole(arm) ###
|
||||
"src/builtins/arm/builtins-arm.cc",
|
||||
]
|
||||
} else if (v8_current_cpu == "arm64") {
|
||||
sources += [
|
||||
### gcmole(arch:arm64) ###
|
||||
### gcmole(arm64) ###
|
||||
"src/builtins/arm64/builtins-arm64.cc",
|
||||
]
|
||||
} else if (v8_current_cpu == "mips64" || v8_current_cpu == "mips64el") {
|
||||
sources += [
|
||||
### gcmole(arch:mips64el) ###
|
||||
### gcmole(mips64el) ###
|
||||
"src/builtins/mips64/builtins-mips64.cc",
|
||||
]
|
||||
} else if (v8_current_cpu == "loong64") {
|
||||
sources += [
|
||||
### gcmole(arch:loong64) ###
|
||||
### gcmole(loong64) ###
|
||||
"src/builtins/loong64/builtins-loong64.cc",
|
||||
]
|
||||
} else if (v8_current_cpu == "ppc") {
|
||||
sources += [
|
||||
### gcmole(arch:ppc) ###
|
||||
### gcmole(ppc) ###
|
||||
"src/builtins/ppc/builtins-ppc.cc",
|
||||
]
|
||||
} else if (v8_current_cpu == "ppc64") {
|
||||
sources += [
|
||||
### gcmole(arch:ppc64) ###
|
||||
### gcmole(ppc64) ###
|
||||
"src/builtins/ppc/builtins-ppc.cc",
|
||||
]
|
||||
} else if (v8_current_cpu == "s390" || v8_current_cpu == "s390x") {
|
||||
sources += [
|
||||
### gcmole(arch:s390) ###
|
||||
### gcmole(s390) ###
|
||||
"src/builtins/s390/builtins-s390.cc",
|
||||
]
|
||||
} else if (v8_current_cpu == "riscv64") {
|
||||
sources += [
|
||||
### gcmole(arch:riscv64) ###
|
||||
### gcmole(riscv64) ###
|
||||
"src/builtins/riscv/builtins-riscv.cc",
|
||||
]
|
||||
} else if (v8_current_cpu == "riscv32") {
|
||||
sources += [
|
||||
### gcmole(arch:riscv32) ###
|
||||
### gcmole(riscv32) ###
|
||||
"src/builtins/riscv/builtins-riscv.cc",
|
||||
]
|
||||
}
|
||||
@ -3758,7 +3758,8 @@ v8_header_set("v8_internal_headers") {
|
||||
}
|
||||
|
||||
if (v8_current_cpu == "x86") {
|
||||
sources += [ ### gcmole(arch:ia32) ###
|
||||
sources += [
|
||||
### gcmole(ia32) ###
|
||||
"src/baseline/ia32/baseline-assembler-ia32-inl.h",
|
||||
"src/baseline/ia32/baseline-compiler-ia32-inl.h",
|
||||
"src/codegen/ia32/assembler-ia32-inl.h",
|
||||
@ -3776,7 +3777,8 @@ v8_header_set("v8_internal_headers") {
|
||||
"src/wasm/baseline/ia32/liftoff-assembler-ia32.h",
|
||||
]
|
||||
} else if (v8_current_cpu == "x64") {
|
||||
sources += [ ### gcmole(arch:x64) ###
|
||||
sources += [
|
||||
### gcmole(x64) ###
|
||||
"src/baseline/x64/baseline-assembler-x64-inl.h",
|
||||
"src/baseline/x64/baseline-compiler-x64-inl.h",
|
||||
"src/codegen/shared-ia32-x64/macro-assembler-shared-ia32-x64.h",
|
||||
@ -3812,7 +3814,8 @@ v8_header_set("v8_internal_headers") {
|
||||
}
|
||||
}
|
||||
} else if (v8_current_cpu == "arm") {
|
||||
sources += [ ### gcmole(arch:arm) ###
|
||||
sources += [
|
||||
### gcmole(arm) ###
|
||||
"src/baseline/arm/baseline-assembler-arm-inl.h",
|
||||
"src/baseline/arm/baseline-compiler-arm-inl.h",
|
||||
"src/codegen/arm/assembler-arm-inl.h",
|
||||
@ -3830,7 +3833,8 @@ v8_header_set("v8_internal_headers") {
|
||||
"src/wasm/baseline/arm/liftoff-assembler-arm.h",
|
||||
]
|
||||
} else if (v8_current_cpu == "arm64") {
|
||||
sources += [ ### gcmole(arch:arm64) ###
|
||||
sources += [
|
||||
### gcmole(arm64) ###
|
||||
"src/baseline/arm64/baseline-assembler-arm64-inl.h",
|
||||
"src/baseline/arm64/baseline-compiler-arm64-inl.h",
|
||||
"src/codegen/arm64/assembler-arm64-inl.h",
|
||||
@ -3872,7 +3876,8 @@ v8_header_set("v8_internal_headers") {
|
||||
sources += [ "src/diagnostics/unwinding-info-win64.h" ]
|
||||
}
|
||||
} else if (v8_current_cpu == "mips64" || v8_current_cpu == "mips64el") {
|
||||
sources += [ ### gcmole(arch:mips64el) ###
|
||||
sources += [
|
||||
### gcmole(mips64el) ###
|
||||
"src/baseline/mips64/baseline-assembler-mips64-inl.h",
|
||||
"src/baseline/mips64/baseline-compiler-mips64-inl.h",
|
||||
"src/codegen/mips64/assembler-mips64-inl.h",
|
||||
@ -3888,7 +3893,8 @@ v8_header_set("v8_internal_headers") {
|
||||
"src/wasm/baseline/mips64/liftoff-assembler-mips64.h",
|
||||
]
|
||||
} else if (v8_current_cpu == "loong64") {
|
||||
sources += [ ### gcmole(arch:loong64) ###
|
||||
sources += [
|
||||
### gcmole(loong64) ###
|
||||
"src/baseline/loong64/baseline-assembler-loong64-inl.h",
|
||||
"src/baseline/loong64/baseline-compiler-loong64-inl.h",
|
||||
"src/codegen/loong64/assembler-loong64-inl.h",
|
||||
@ -3904,7 +3910,8 @@ v8_header_set("v8_internal_headers") {
|
||||
"src/wasm/baseline/loong64/liftoff-assembler-loong64.h",
|
||||
]
|
||||
} else if (v8_current_cpu == "ppc") {
|
||||
sources += [ ### gcmole(arch:ppc) ###
|
||||
sources += [
|
||||
### gcmole(ppc) ###
|
||||
"src/codegen/ppc/assembler-ppc-inl.h",
|
||||
"src/codegen/ppc/assembler-ppc.h",
|
||||
"src/codegen/ppc/constants-ppc.h",
|
||||
@ -3920,7 +3927,8 @@ v8_header_set("v8_internal_headers") {
|
||||
"src/wasm/baseline/ppc/liftoff-assembler-ppc.h",
|
||||
]
|
||||
} else if (v8_current_cpu == "ppc64") {
|
||||
sources += [ ### gcmole(arch:ppc64) ###
|
||||
sources += [
|
||||
### gcmole(ppc64) ###
|
||||
"src/baseline/ppc/baseline-assembler-ppc-inl.h",
|
||||
"src/baseline/ppc/baseline-compiler-ppc-inl.h",
|
||||
"src/codegen/ppc/assembler-ppc-inl.h",
|
||||
@ -3938,7 +3946,8 @@ v8_header_set("v8_internal_headers") {
|
||||
"src/wasm/baseline/ppc/liftoff-assembler-ppc.h",
|
||||
]
|
||||
} else if (v8_current_cpu == "s390" || v8_current_cpu == "s390x") {
|
||||
sources += [ ### gcmole(arch:s390) ###
|
||||
sources += [
|
||||
### gcmole(s390) ###
|
||||
"src/baseline/s390/baseline-assembler-s390-inl.h",
|
||||
"src/baseline/s390/baseline-compiler-s390-inl.h",
|
||||
"src/codegen/s390/assembler-s390-inl.h",
|
||||
@ -3956,7 +3965,8 @@ v8_header_set("v8_internal_headers") {
|
||||
"src/wasm/baseline/s390/liftoff-assembler-s390.h",
|
||||
]
|
||||
} else if (v8_current_cpu == "riscv64") {
|
||||
sources += [ ### gcmole(arch:riscv64) ###
|
||||
sources += [
|
||||
### gcmole(riscv64) ###
|
||||
"src/baseline/riscv/baseline-assembler-riscv-inl.h",
|
||||
"src/baseline/riscv/baseline-compiler-riscv-inl.h",
|
||||
"src/codegen/riscv/assembler-riscv-inl.h",
|
||||
@ -3995,7 +4005,8 @@ v8_header_set("v8_internal_headers") {
|
||||
"src/wasm/baseline/riscv64/liftoff-assembler-riscv64.h",
|
||||
]
|
||||
} else if (v8_current_cpu == "riscv32") {
|
||||
sources += [ ### gcmole(arch:riscv32) ###
|
||||
sources += [
|
||||
### gcmole(riscv32) ###
|
||||
"src/baseline/riscv/baseline-assembler-riscv-inl.h",
|
||||
"src/baseline/riscv/baseline-compiler-riscv-inl.h",
|
||||
"src/codegen/riscv/assembler-riscv.h",
|
||||
@ -4771,7 +4782,8 @@ v8_source_set("v8_base_without_compiler") {
|
||||
}
|
||||
|
||||
if (v8_enable_webassembly) {
|
||||
sources += [ ### gcmole(all) ###
|
||||
sources += [
|
||||
### gcmole(all) ###
|
||||
"src/asmjs/asm-js.cc",
|
||||
"src/asmjs/asm-parser.cc",
|
||||
"src/asmjs/asm-scanner.cc",
|
||||
@ -4853,7 +4865,8 @@ v8_source_set("v8_base_without_compiler") {
|
||||
}
|
||||
|
||||
if (v8_current_cpu == "x86") {
|
||||
sources += [ ### gcmole(arch:ia32) ###
|
||||
sources += [
|
||||
### gcmole(ia32) ###
|
||||
"src/codegen/ia32/assembler-ia32.cc",
|
||||
"src/codegen/ia32/cpu-ia32.cc",
|
||||
"src/codegen/ia32/macro-assembler-ia32.cc",
|
||||
@ -4868,7 +4881,8 @@ v8_source_set("v8_base_without_compiler") {
|
||||
"src/regexp/ia32/regexp-macro-assembler-ia32.cc",
|
||||
]
|
||||
} else if (v8_current_cpu == "x64") {
|
||||
sources += [ ### gcmole(arch:x64) ###
|
||||
sources += [
|
||||
### gcmole(x64) ###
|
||||
"src/codegen/shared-ia32-x64/macro-assembler-shared-ia32-x64.cc",
|
||||
"src/codegen/x64/assembler-x64.cc",
|
||||
"src/codegen/x64/cpu-x64.cc",
|
||||
@ -4906,7 +4920,8 @@ v8_source_set("v8_base_without_compiler") {
|
||||
}
|
||||
}
|
||||
} else if (v8_current_cpu == "arm") {
|
||||
sources += [ ### gcmole(arch:arm) ###
|
||||
sources += [
|
||||
### gcmole(arm) ###
|
||||
"src/codegen/arm/assembler-arm.cc",
|
||||
"src/codegen/arm/constants-arm.cc",
|
||||
"src/codegen/arm/cpu-arm.cc",
|
||||
@ -4924,7 +4939,8 @@ v8_source_set("v8_base_without_compiler") {
|
||||
"src/regexp/arm/regexp-macro-assembler-arm.cc",
|
||||
]
|
||||
} else if (v8_current_cpu == "arm64") {
|
||||
sources += [ ### gcmole(arch:arm64) ###
|
||||
sources += [
|
||||
### gcmole(arm64) ###
|
||||
"src/codegen/arm64/assembler-arm64.cc",
|
||||
"src/codegen/arm64/cpu-arm64.cc",
|
||||
"src/codegen/arm64/decoder-arm64.cc",
|
||||
@ -4971,7 +4987,8 @@ v8_source_set("v8_base_without_compiler") {
|
||||
sources += [ "src/diagnostics/unwinding-info-win64.cc" ]
|
||||
}
|
||||
} else if (v8_current_cpu == "mips64" || v8_current_cpu == "mips64el") {
|
||||
sources += [ ### gcmole(arch:mips64el) ###
|
||||
sources += [
|
||||
### gcmole(mips64el) ###
|
||||
"src/codegen/mips64/assembler-mips64.cc",
|
||||
"src/codegen/mips64/constants-mips64.cc",
|
||||
"src/codegen/mips64/cpu-mips64.cc",
|
||||
@ -4988,7 +5005,8 @@ v8_source_set("v8_base_without_compiler") {
|
||||
"src/regexp/mips64/regexp-macro-assembler-mips64.cc",
|
||||
]
|
||||
} else if (v8_current_cpu == "loong64") {
|
||||
sources += [ ### gcmole(arch:loong64) ###
|
||||
sources += [
|
||||
### gcmole(loong64) ###
|
||||
"src/codegen/loong64/assembler-loong64.cc",
|
||||
"src/codegen/loong64/constants-loong64.cc",
|
||||
"src/codegen/loong64/cpu-loong64.cc",
|
||||
@ -5005,7 +5023,8 @@ v8_source_set("v8_base_without_compiler") {
|
||||
"src/regexp/loong64/regexp-macro-assembler-loong64.cc",
|
||||
]
|
||||
} else if (v8_current_cpu == "ppc") {
|
||||
sources += [ ### gcmole(arch:ppc) ###
|
||||
sources += [
|
||||
### gcmole(ppc) ###
|
||||
"src/codegen/ppc/assembler-ppc.cc",
|
||||
"src/codegen/ppc/constants-ppc.cc",
|
||||
"src/codegen/ppc/cpu-ppc.cc",
|
||||
@ -5023,7 +5042,8 @@ v8_source_set("v8_base_without_compiler") {
|
||||
"src/regexp/ppc/regexp-macro-assembler-ppc.cc",
|
||||
]
|
||||
} else if (v8_current_cpu == "ppc64") {
|
||||
sources += [ ### gcmole(arch:ppc64) ###
|
||||
sources += [
|
||||
### gcmole(ppc64) ###
|
||||
"src/codegen/ppc/assembler-ppc.cc",
|
||||
"src/codegen/ppc/constants-ppc.cc",
|
||||
"src/codegen/ppc/cpu-ppc.cc",
|
||||
@ -5041,7 +5061,8 @@ v8_source_set("v8_base_without_compiler") {
|
||||
"src/regexp/ppc/regexp-macro-assembler-ppc.cc",
|
||||
]
|
||||
} else if (v8_current_cpu == "s390" || v8_current_cpu == "s390x") {
|
||||
sources += [ ### gcmole(arch:s390) ###
|
||||
sources += [
|
||||
### gcmole(s390) ###
|
||||
"src/codegen/s390/assembler-s390.cc",
|
||||
"src/codegen/s390/constants-s390.cc",
|
||||
"src/codegen/s390/cpu-s390.cc",
|
||||
@ -5059,7 +5080,8 @@ v8_source_set("v8_base_without_compiler") {
|
||||
"src/regexp/s390/regexp-macro-assembler-s390.cc",
|
||||
]
|
||||
} else if (v8_current_cpu == "riscv64") {
|
||||
sources += [ ### gcmole(arch:riscv64) ###
|
||||
sources += [
|
||||
### gcmole(riscv64) ###
|
||||
"src/codegen/riscv/assembler-riscv.cc",
|
||||
"src/codegen/riscv/base-assembler-riscv.cc",
|
||||
"src/codegen/riscv/base-constants-riscv.cc",
|
||||
@ -5085,7 +5107,8 @@ v8_source_set("v8_base_without_compiler") {
|
||||
"src/regexp/riscv/regexp-macro-assembler-riscv.cc",
|
||||
]
|
||||
} else if (v8_current_cpu == "riscv32") {
|
||||
sources += [ ### gcmole(arch:riscv32) ###
|
||||
sources += [
|
||||
### gcmole(riscv32) ###
|
||||
"src/codegen/riscv/assembler-riscv.cc",
|
||||
"src/codegen/riscv/base-assembler-riscv.cc",
|
||||
"src/codegen/riscv/base-constants-riscv.cc",
|
||||
|
@ -85,6 +85,7 @@ def _V8PresubmitChecks(input_api, output_api):
|
||||
sys.path.append(input_api.os_path.join(
|
||||
input_api.PresubmitLocalPath(), 'tools'))
|
||||
from v8_presubmit import CppLintProcessor
|
||||
from v8_presubmit import GCMoleProcessor
|
||||
from v8_presubmit import JSLintProcessor
|
||||
from v8_presubmit import TorqueLintProcessor
|
||||
from v8_presubmit import SourceProcessor
|
||||
@ -126,6 +127,9 @@ def _V8PresubmitChecks(input_api, output_api):
|
||||
if not StatusFilesProcessor().RunOnFiles(
|
||||
input_api.AffectedFiles(include_deletes=True)):
|
||||
results.append(output_api.PresubmitError("Status file check failed"))
|
||||
if not GCMoleProcessor().RunOnFiles(
|
||||
input_api.AffectedFiles(include_deletes=False)):
|
||||
results.append(output_api.PresubmitError("GCMole pattern check failed"))
|
||||
results.extend(input_api.canned_checks.CheckAuthorizedAuthor(
|
||||
input_api, output_api, bot_allowlist=[
|
||||
'v8-ci-autoroll-builder@chops-service-accounts.iam.gserviceaccount.com'
|
||||
|
@ -207,7 +207,8 @@ v8_source_set("cctest_sources") {
|
||||
]
|
||||
|
||||
if (v8_current_cpu == "arm") {
|
||||
sources += [ ### gcmole(arch:arm) ###
|
||||
sources += [
|
||||
### gcmole(arm) ###
|
||||
"assembler-helper-arm.cc",
|
||||
"assembler-helper-arm.h",
|
||||
"test-assembler-arm.cc",
|
||||
@ -215,7 +216,8 @@ v8_source_set("cctest_sources") {
|
||||
"test-sync-primitives-arm.cc",
|
||||
]
|
||||
} else if (v8_current_cpu == "arm64") {
|
||||
sources += [ ### gcmole(arch:arm64) ###
|
||||
sources += [
|
||||
### gcmole(arm64) ###
|
||||
"test-assembler-arm64.cc",
|
||||
"test-fuzz-arm64.cc",
|
||||
"test-javascript-arm64.cc",
|
||||
@ -228,48 +230,60 @@ v8_source_set("cctest_sources") {
|
||||
sources += [ "test-stack-unwinding-win64.cc" ]
|
||||
}
|
||||
} else if (v8_current_cpu == "x86") {
|
||||
sources += [ ### gcmole(arch:ia32) ###
|
||||
sources += [
|
||||
### gcmole(ia32) ###
|
||||
"test-assembler-ia32.cc",
|
||||
"test-log-stack-tracer.cc",
|
||||
]
|
||||
} else if (v8_current_cpu == "mips64") {
|
||||
sources += [ ### gcmole(arch:mips64) ###
|
||||
sources += [
|
||||
### gcmole(mips64) ###
|
||||
"test-assembler-mips64.cc",
|
||||
"test-macro-assembler-mips64.cc",
|
||||
]
|
||||
} else if (v8_current_cpu == "mips64el") {
|
||||
sources += [ ### gcmole(arch:mips64el) ###
|
||||
sources += [
|
||||
### gcmole(mips64el) ###
|
||||
"test-assembler-mips64.cc",
|
||||
"test-macro-assembler-mips64.cc",
|
||||
]
|
||||
} else if (v8_current_cpu == "x64") {
|
||||
sources += [
|
||||
### gcmole(arch:x64) ###
|
||||
### gcmole(x64) ###
|
||||
"test-log-stack-tracer.cc",
|
||||
]
|
||||
if (is_win) {
|
||||
sources += [ "test-stack-unwinding-win64.cc" ]
|
||||
}
|
||||
} else if (v8_current_cpu == "ppc" || v8_current_cpu == "ppc64") {
|
||||
sources += [ "test-assembler-ppc.cc" ] ### gcmole(arch:ppc) ###
|
||||
sources += [
|
||||
### gcmole(ppc) ###
|
||||
"test-assembler-ppc.cc",
|
||||
]
|
||||
} else if (v8_current_cpu == "s390" || v8_current_cpu == "s390x") {
|
||||
sources += [ "test-assembler-s390.cc" ] ### gcmole(arch:s390) ###
|
||||
sources += [
|
||||
### gcmole(s390) ###
|
||||
"test-assembler-s390.cc",
|
||||
]
|
||||
} else if (v8_current_cpu == "riscv64") {
|
||||
sources += [ ### gcmole(arch:riscv64) ###
|
||||
sources += [
|
||||
### gcmole(riscv64) ###
|
||||
"test-assembler-riscv64.cc",
|
||||
"test-helper-riscv64.cc",
|
||||
"test-macro-assembler-riscv64.cc",
|
||||
"test-simple-riscv64.cc",
|
||||
]
|
||||
} else if (v8_current_cpu == "riscv32") {
|
||||
sources += [ ### gcmole(arch:riscv32) ###
|
||||
sources += [
|
||||
### gcmole(riscv32) ###
|
||||
"test-assembler-riscv32.cc",
|
||||
"test-helper-riscv32.cc",
|
||||
"test-macro-assembler-riscv32.cc",
|
||||
"test-simple-riscv32.cc",
|
||||
]
|
||||
} else if (v8_current_cpu == "loong64") {
|
||||
sources += [ ### gcmole(arch:loong64) ###
|
||||
sources += [
|
||||
### gcmole(loong64) ###
|
||||
"test-assembler-loong64.cc",
|
||||
"test-macro-assembler-loong64.cc",
|
||||
]
|
||||
|
32
tools/gcmole/PRESUBMIT.py
Normal file
32
tools/gcmole/PRESUBMIT.py
Normal file
@ -0,0 +1,32 @@
|
||||
# Copyright 2022 the V8 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.
|
||||
|
||||
USE_PYTHON3 = True
|
||||
|
||||
|
||||
def _RunTests(input_api, output_api):
|
||||
return input_api.RunTests(
|
||||
input_api.canned_checks.GetUnitTestsInDirectory(
|
||||
input_api,
|
||||
output_api,
|
||||
'.',
|
||||
files_to_check=[r'.+_test\.py$'],
|
||||
run_on_python2=False))
|
||||
|
||||
|
||||
def _CommonChecks(input_api, output_api):
|
||||
"""Checks common to both upload and commit."""
|
||||
checks = [
|
||||
_RunTests,
|
||||
]
|
||||
|
||||
return sum([check(input_api, output_api) for check in checks], [])
|
||||
|
||||
|
||||
def CheckChangeOnCommit(input_api, output_api):
|
||||
return _CommonChecks(input_api, output_api)
|
||||
|
||||
|
||||
def CheckChangeOnUpload(input_api, output_api):
|
||||
return _CommonChecks(input_api, output_api)
|
@ -222,58 +222,42 @@ def invoke_clang_plugin_for_each_file(filenames, plugin, plugin_args, options):
|
||||
# -----------------------------------------------------------------------------
|
||||
|
||||
|
||||
def parse_gn_file(options, for_test):
|
||||
def build_file_list(options, for_test):
|
||||
"""Calculates the list of source files to be checked with gcmole.
|
||||
|
||||
The list comprises all files from marked source sections in the
|
||||
listed BUILD.gn files. All files preceeded by the following comment and
|
||||
until the end of the source section are used:
|
||||
### gcmole(arch) ###
|
||||
Where arch can either be all (all architectures) or one of the supported V8
|
||||
architectures.
|
||||
|
||||
The structure of these directives is also checked by presubmit via:
|
||||
tools/v8_presubmit.py::GCMoleProcessor.
|
||||
|
||||
Returns: List of file paths (of type Path).
|
||||
"""
|
||||
if for_test:
|
||||
return {"all": [options.v8_root_dir / "tools/gcmole/gcmole-test.cc"]}
|
||||
result = {}
|
||||
return [options.v8_root_dir / "tools/gcmole/gcmole-test.cc"]
|
||||
result = []
|
||||
gn_files = [
|
||||
("BUILD.gn", re.compile('"([^"]*?\.cc)"'), ""),
|
||||
("test/cctest/BUILD.gn", re.compile('"(test-[^"]*?\.cc)"'),
|
||||
Path("test/cctest/")),
|
||||
]
|
||||
for filename, pattern, prefix in gn_files:
|
||||
gn_re = re.compile(f"### gcmole\((all|{options.v8_target_cpu})\) ###(.*?)\]",
|
||||
re.MULTILINE | re.DOTALL)
|
||||
for filename, file_pattern, prefix in gn_files:
|
||||
path = options.v8_root_dir / filename
|
||||
with open(path) as gn_file:
|
||||
gn = gn_file.read()
|
||||
for condition, sources in re.findall("### gcmole\((.*?)\) ###(.*?)\]", gn,
|
||||
re.MULTILINE | re.DOTALL):
|
||||
if condition not in result:
|
||||
result[condition] = []
|
||||
for file in pattern.findall(sources):
|
||||
result[condition].append(options.v8_root_dir / prefix / file)
|
||||
for _, sources in gn_re.findall(gn):
|
||||
for file in file_pattern.findall(sources):
|
||||
result.append(options.v8_root_dir / prefix / file)
|
||||
|
||||
return result
|
||||
|
||||
|
||||
def evaluate_condition(cond, props):
|
||||
if cond == "all":
|
||||
return True
|
||||
|
||||
m = re.match("(\w+):(\w+)", cond)
|
||||
if m is None:
|
||||
fatal("failed to parse condition: {}", cond)
|
||||
p, v = m.groups()
|
||||
if p not in props:
|
||||
fatal("undefined configuration property: {}", p)
|
||||
|
||||
return props[p] == v
|
||||
|
||||
|
||||
def build_file_list(options, for_test):
|
||||
sources = parse_gn_file(options, for_test)
|
||||
props = {
|
||||
"os": "linux",
|
||||
"arch": options.v8_target_cpu,
|
||||
"mode": "debug",
|
||||
"simulator": ""
|
||||
}
|
||||
ret = []
|
||||
for condition, files in list(sources.items()):
|
||||
if evaluate_condition(condition, props):
|
||||
ret += files
|
||||
return ret
|
||||
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
# GCSuspects Generation
|
||||
|
||||
|
64
tools/gcmole/gcmole_test.py
Normal file
64
tools/gcmole/gcmole_test.py
Normal file
@ -0,0 +1,64 @@
|
||||
#!/usr/bin/env python3
|
||||
# Copyright 2022 the V8 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.
|
||||
|
||||
from pathlib import Path
|
||||
|
||||
import collections
|
||||
import os
|
||||
import unittest
|
||||
|
||||
import gcmole
|
||||
|
||||
TESTDATA_PATH = os.path.join(
|
||||
os.path.dirname(os.path.abspath(__file__)), 'testdata', 'v8')
|
||||
|
||||
Options = collections.namedtuple('Options', ['v8_root_dir', 'v8_target_cpu'])
|
||||
|
||||
|
||||
def abs_test_file(f):
|
||||
return Path(os.path.join(TESTDATA_PATH, f))
|
||||
|
||||
|
||||
class FilesTest(unittest.TestCase):
|
||||
|
||||
def testFileList_for_testing(self):
|
||||
options = Options(Path(TESTDATA_PATH), 'x64')
|
||||
self.assertEqual(
|
||||
gcmole.build_file_list(options, True),
|
||||
list(map(abs_test_file, ['tools/gcmole/gcmole-test.cc'])))
|
||||
|
||||
def testFileList_x64(self):
|
||||
options = Options(Path(TESTDATA_PATH), 'x64')
|
||||
expected = [
|
||||
'file1.cc',
|
||||
'file2.cc',
|
||||
'x64/file1.cc',
|
||||
'x64/file2.cc',
|
||||
'file3.cc',
|
||||
'file4.cc',
|
||||
'test/cctest/test-x64-file1.cc',
|
||||
'test/cctest/test-x64-file2.cc',
|
||||
]
|
||||
self.assertEqual(
|
||||
gcmole.build_file_list(options, False),
|
||||
list(map(abs_test_file, expected)))
|
||||
|
||||
def testFileList_arm(self):
|
||||
options = Options(Path(TESTDATA_PATH), 'arm')
|
||||
expected = [
|
||||
'file1.cc',
|
||||
'file2.cc',
|
||||
'file3.cc',
|
||||
'file4.cc',
|
||||
'arm/file1.cc',
|
||||
'arm/file2.cc',
|
||||
]
|
||||
self.assertEqual(
|
||||
gcmole.build_file_list(options, False),
|
||||
list(map(abs_test_file, expected)))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
35
tools/gcmole/testdata/v8/BUILD.gn
vendored
Normal file
35
tools/gcmole/testdata/v8/BUILD.gn
vendored
Normal file
@ -0,0 +1,35 @@
|
||||
# Copyright 2022 the V8 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.
|
||||
|
||||
# Test data for gcmole.
|
||||
|
||||
some_sources = [
|
||||
### gcmole(all) ###
|
||||
"file1.cc",
|
||||
"file1.h",
|
||||
"file2.cc",
|
||||
]
|
||||
|
||||
other_sources = [
|
||||
### gcmole(x64) ###
|
||||
"x64/file1.cc",
|
||||
"x64/file1.h",
|
||||
"x64/file2.cc",
|
||||
]
|
||||
|
||||
yet_more_sources = [
|
||||
### gcmole(all) ###
|
||||
"file3.cc",
|
||||
|
||||
# Some other comment.
|
||||
"file4.cc",
|
||||
"file4.h",
|
||||
]
|
||||
|
||||
the_last_sources = [
|
||||
### gcmole(arm) ###
|
||||
"arm/file1.cc",
|
||||
"arm/file1.h",
|
||||
"arm/file2.cc",
|
||||
]
|
12
tools/gcmole/testdata/v8/test/cctest/BUILD.gn
vendored
Normal file
12
tools/gcmole/testdata/v8/test/cctest/BUILD.gn
vendored
Normal file
@ -0,0 +1,12 @@
|
||||
# Copyright 2022 the V8 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.
|
||||
|
||||
# Test data for gcmole.
|
||||
|
||||
some_sources = [
|
||||
### gcmole(x64) ###
|
||||
"foo-x64-file1.cc",
|
||||
"test-x64-file1.cc",
|
||||
"test-x64-file2.cc",
|
||||
]
|
@ -719,6 +719,45 @@ class StatusFilesProcessor(SourceFileProcessor):
|
||||
return status_files
|
||||
|
||||
|
||||
class GCMoleProcessor(SourceFileProcessor):
|
||||
"""Check relevant BUILD.gn files for correct gcmole file pattern.
|
||||
|
||||
The pattern must match the algorithm used in:
|
||||
tools/gcmole/gcmole.py::build_file_list()
|
||||
"""
|
||||
gcmole_re = re.compile('### gcmole(.*)')
|
||||
arch_re = re.compile('\((.+)\) ###')
|
||||
|
||||
def IsRelevant(self, name):
|
||||
return True
|
||||
|
||||
def GetPathsToSearch(self):
|
||||
# TODO(https://crbug.com/v8/12660): These should be directories according
|
||||
# to the API, but in order to find the toplevel BUILD.gn, we'd need to walk
|
||||
# the entire project.
|
||||
return ['BUILD.gn', 'test/cctest/BUILD.gn']
|
||||
|
||||
def ProcessFiles(self, files):
|
||||
success = True
|
||||
for path in files:
|
||||
with open(path) as f:
|
||||
gn_file_text = f.read()
|
||||
for suffix in self.gcmole_re.findall(gn_file_text):
|
||||
arch_match = self.arch_re.match(suffix)
|
||||
if not arch_match:
|
||||
print(f'{path}: Malformed gcmole suffix: {suffix}')
|
||||
success = False
|
||||
continue
|
||||
arch = arch_match.group(1)
|
||||
if arch not in [
|
||||
'all', 'ia32', 'x64', 'arm', 'arm64', 's390', 'ppc', 'ppc64',
|
||||
'mips64', 'mips64el', 'riscv32', 'riscv64', 'loong64'
|
||||
]:
|
||||
print(f'{path}: Unknown architecture for gcmole: {arch}')
|
||||
success = False
|
||||
return success
|
||||
|
||||
|
||||
def CheckDeps(workspace):
|
||||
checkdeps_py = join(workspace, 'buildtools', 'checkdeps', 'checkdeps.py')
|
||||
return subprocess.call([sys.executable, checkdeps_py, workspace]) == 0
|
||||
@ -792,6 +831,8 @@ def Main():
|
||||
success &= StatusFilesProcessor().RunOnPath(workspace)
|
||||
print("Running python tests...")
|
||||
success &= PyTests(workspace)
|
||||
print("Running gcmole pattern check...")
|
||||
success &= GCMoleProcessor().RunOnPath(workspace)
|
||||
if success:
|
||||
return 0
|
||||
else:
|
||||
|
Loading…
Reference in New Issue
Block a user