1# -*- coding: utf-8 -*-
2
3#-------------------------------------------------------------------------
4# Vulkan CTS
5# ----------
6#
7# Copyright (c) 2022 Google LLC.
8#
9# Licensed under the Apache License, Version 2.0 (the "License");
10# you may not use this file except in compliance with the License.
11# You may obtain a copy of the License at
12#
13#      http://www.apache.org/licenses/LICENSE-2.0
14#
15# Unless required by applicable law or agreed to in writing, software
16# distributed under the License is distributed on an "AS IS" BASIS,
17# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18# See the License for the specific language governing permissions and
19# limitations under the License.
20#
21#-------------------------------------------------------------------------
22
23import os
24import sys
25import argparse
26import tempfile
27
28scriptPath = os.path.join(os.path.dirname(__file__), "..", "..", "..", "scripts")
29sys.path.insert(0, scriptPath)
30
31from ctsbuild.common import *
32from ctsbuild.config import *
33from ctsbuild.build import *
34
35class Module:
36	def __init__ (self, name, dirName, binName):
37		self.name		= name
38		self.dirName	= dirName
39		self.binName	= binName
40
41VULKAN_MODULE		= Module("dEQP-VK", "../external/vulkancts/modules/vulkan", "deqp-vk")
42DEFAULT_BUILD_DIR	= os.path.join(tempfile.gettempdir(), "amber-verify", "{targetName}-{buildType}")
43DEFAULT_TARGET		= "null"
44DEFAULT_DST_DIR		= os.path.join(DEQP_DIR, "external", "vulkancts", "data", "vulkan", "prebuilt")
45
46def getBuildConfig (buildPathPtrn, targetName, buildType):
47	buildPath = buildPathPtrn.format(
48		targetName	= targetName,
49		buildType	= buildType)
50
51	return BuildConfig(buildPath, buildType, [f"-DDEQP_TARGET={targetName}"])
52
53def execBuildPrograms (buildCfg, generator, module):
54	workDir		= os.path.join(buildCfg.getBuildDir(), "modules", module.dirName)
55
56	pushWorkingDir(workDir)
57
58	try:
59		binPath = generator.getBinaryPath(buildCfg.getBuildType(), os.path.join(".", "deqp-vk"))
60		execute([binPath, "--deqp-runmode=amber-verify"])
61	finally:
62		popWorkingDir()
63
64def parseArgs ():
65	parser = argparse.ArgumentParser(description = "Verify amber device requirements between CTS and .amber file",
66									 formatter_class=argparse.ArgumentDefaultsHelpFormatter)
67	parser.add_argument("-b",
68						"--build-dir",
69						dest="buildDir",
70						default=DEFAULT_BUILD_DIR,
71						help="Temporary build directory")
72	parser.add_argument("-t",
73						"--build-type",
74						dest="buildType",
75						default="Release",
76						help="Build type")
77	parser.add_argument("-c",
78						"--deqp-target",
79						dest="targetName",
80						default=DEFAULT_TARGET,
81						help="dEQP build target")
82	parser.add_argument("-d",
83						"--dst-path",
84						dest="dstPath",
85						default=DEFAULT_DST_DIR,
86						help="Destination path")
87	return parser.parse_args()
88
89if __name__ == "__main__":
90	args = parseArgs()
91
92	generator	= ANY_GENERATOR
93	buildCfg	= getBuildConfig(args.buildDir, args.targetName, args.buildType)
94	module		= VULKAN_MODULE
95
96	build(buildCfg, generator, ["deqp-vk"])
97
98	if not os.path.exists(args.dstPath):
99		os.makedirs(args.dstPath)
100
101	execBuildPrograms(buildCfg, generator, module)
102