普通文本  |  165行  |  4.37 KB

# -*- coding: utf-8 -*-

#-------------------------------------------------------------------------
# drawElements Quality Program utilities
# --------------------------------------
#
# Copyright 2015 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
#-------------------------------------------------------------------------

import os
import sys
import shlex
import subprocess

SRC_DIRS = [
	"delibs/debase",
	"delibs/deimage",
	"delibs/depool",
	"delibs/dethread",
	"delibs/deutil",
	"delibs/decpp",

	"deqp/execserver",
	"deqp/executor",
	"deqp/modules/candytest",
	"deqp/modules/egl",
	"deqp/modules/gles2",
	"deqp/modules/gles3",
	"deqp/modules/gles31",
	"deqp/modules/gl3",
	"deqp/modules/glshared",
	"deqp/modules/glusecases",
	"deqp/modules/opencl",
	"deqp/modules/internal",
	"deqp/framework/qphelper",
	"deqp/framework/common",
	"deqp/framework/egl",
	"deqp/framework/opengl",
	"deqp/framework/opencl",
	"deqp/framework/platform",
	"deqp/framework/randomshaders",
	"deqp/framework/referencerenderer",
	"deqp/wrappers/dynlib",
	"deqp/wrappers/gles3",

	"gapir",
]

INCLUDE_DIRS = [
	"delibs/libpng",
	"delibs/libzip",
	"delibs/zlib",

	"deqp/wrappers/dynlib/inc",
	"deqp/wrappers/gles3/inc",
	"deqp/modules/gles2/accuracy",
	"deqp/modules/gles2/functional",
	"deqp/modules/gles2/performance",
	"deqp/modules/gles2/stress",
	"deqp/modules/gles2/usecases",
	"deqp/modules/gles3/accuracy",
	"deqp/modules/gles3/functional",
	"deqp/modules/gles3/stress",
	"deqp/modules/gles3/usecases",
	"deqp/modules/gles3/performance",
	"deqp/modules/gles31/functional",
	"deqp/modules/gles31/stress",
	"deqp/modules/gl3/functional",
	"deqp/modules/gl3/performance",
	"deqp/modules/gl3/stress",
	"deqp/framework/opengl/simplereference",
	"deqp/framework/opencl/inc",
	"deqp/framework/opengl/wrapper",
	"deqp/framework/opengl/simplereference",

	"gapir/base",
	"gapir/egl",
	"gapir/gles2",
	"gapir/util",

	"domeni/eigen2",
	"domeni/base",
	"domeni/engine",
	"domeni/m3g",
	"domeni/m3g_adapter",
	"domeni/renderer",
	"domeni/resource",
	"domeni/tools"
] + SRC_DIRS

ARGS = [
	"--enable=all,style",
	"--xml-version=2",
	"--platform=win64",
	"-D__cplusplus",
	"-D_M_X64",
	"-D_WIN32",
	"-D_MSC_VER=1600",
	"-DDE_DEBUG=1",
	"-DDE_COMPILER=1", # Is preprocessor buggy in recent cppcheck?
	"-DDE_OS=1",
	"-DDE_CPU=1",
	"-DDE_PTR_SIZE=4",
	"-DAB_COMPILER=1",
	"-DAB_OS=1",
	"-DDEQP_SUPPORT_GLES2=1",
	"-DDEQP_SUPPORT_GLES3=1",
	"-DDEQP_SUPPORT_OPENCL=1",
	"-DDEQP_SUPPORT_OPENGL=1",
	"-DDEQP_TARGET_NAME=\"Cppcheck\"",
	"-D_XOPEN_SOURCE=600",
	"--suppress=arrayIndexOutOfBounds:deqp/framework/common/tcuVector.hpp",
	"--suppress=invalidPointerCast:deqp/framework/common/tcuTexture.cpp",
	"--suppress=*:deqp/framework/opencl/cl.hpp",
	"--suppress=invalidPointerCast:deqp/modules/opencl/tclSIRLogger.cpp",
	"--suppress=preprocessorErrorDirective:deqp/framework/platform/android/tcuAndroidMain.cpp",
	"--suppress=invalidPointerCast:deqp/modules/gles3/functional/es3fTransformFeedbackTests.cpp",
	"--suppress=invalidPointerCast:deqp/modules/gles3/functional/es3fUniformBlockCase.cpp",
	"--suppress=unusedStructMember",
	"--suppress=postfixOperator",
	"--suppress=unusedFunction",
	"--suppress=unusedPrivateFunction",
	"--rule-file=deqp/scripts/no_empty_fail.rule"
]

def runCppCheck (srcBaseDir, dstFile):
	fullDstFile	= os.path.realpath(dstFile)
	command		= '"C:\\Program Files (x86)\\Cppcheck\\cppcheck.exe"'

	for arg in ARGS + ["--xml"]:
		command += " %s" % arg

	for path in INCLUDE_DIRS:
		command += " -I %s" % path

	for path in SRC_DIRS:
		command += " %s" % path

	command += ' 2> "%s"' % fullDstFile

	os.chdir(srcBaseDir)
	os.system('"%s"' % command) # Double-quotes needed for some reason

if __name__ == "__main__":
	if len(sys.argv) != 2:
		print "%s: [reportfile]" % sys.argv[0]
		sys.exit(-1)

	dstFile	= sys.argv[1]
	srcDir	= os.path.realpath(os.path.normpath(os.path.join(os.path.dirname(__file__), "..", "..")))
	runCppCheck(srcDir, dstFile)