aboutsummaryrefslogtreecommitdiff
path: root/tools/Vulkan-Tools/scripts/common_codegen.py
diff options
context:
space:
mode:
Diffstat (limited to 'tools/Vulkan-Tools/scripts/common_codegen.py')
-rw-r--r--tools/Vulkan-Tools/scripts/common_codegen.py114
1 files changed, 114 insertions, 0 deletions
diff --git a/tools/Vulkan-Tools/scripts/common_codegen.py b/tools/Vulkan-Tools/scripts/common_codegen.py
new file mode 100644
index 00000000..d44cd643
--- /dev/null
+++ b/tools/Vulkan-Tools/scripts/common_codegen.py
@@ -0,0 +1,114 @@
+#!/usr/bin/python3 -i
+#
+# Copyright (c) 2015-2017, 2019-2021 The Khronos Group Inc.
+# Copyright (c) 2015-2017, 2019-2021 Valve Corporation
+# Copyright (c) 2015-2017, 2019-2021 LunarG, Inc.
+#
+# 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.
+#
+# Author: Mark Lobodzinski <mark@lunarg.com>
+
+import os
+import sys
+import subprocess
+
+# Copyright text prefixing all headers (list of strings).
+prefixStrings = [
+ '/*',
+ '** Copyright (c) 2015-2017, 2019-2021 The Khronos Group Inc.',
+ '** Copyright (c) 2015-2017, 2019-2021 Valve Corporation',
+ '** Copyright (c) 2015-2017, 2019-2021 LunarG, Inc.',
+ '** Copyright (c) 2015-2017, 2019-2021 Google Inc.',
+ '**',
+ '** 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.',
+ '*/',
+ ''
+]
+
+
+platform_dict = {
+ 'android' : 'VK_USE_PLATFORM_ANDROID_KHR',
+ 'fuchsia' : 'VK_USE_PLATFORM_FUCHSIA',
+ 'ggp': 'VK_USE_PLATFORM_GGP',
+ 'ios' : 'VK_USE_PLATFORM_IOS_MVK',
+ 'macos' : 'VK_USE_PLATFORM_MACOS_MVK',
+ 'metal' : 'VK_USE_PLATFORM_METAL_EXT',
+ 'vi' : 'VK_USE_PLATFORM_VI_NN',
+ 'wayland' : 'VK_USE_PLATFORM_WAYLAND_KHR',
+ 'win32' : 'VK_USE_PLATFORM_WIN32_KHR',
+ 'xcb' : 'VK_USE_PLATFORM_XCB_KHR',
+ 'xlib' : 'VK_USE_PLATFORM_XLIB_KHR',
+ 'xlib_xrandr' : 'VK_USE_PLATFORM_XLIB_XRANDR_EXT',
+ 'provisional' : 'VK_ENABLE_BETA_EXTENSIONS',
+ 'directfb' : 'VK_USE_PLATFORM_DIRECTFB_EXT',
+ 'screen' : 'VK_USE_PLATFORM_SCREEN_QNX',
+ 'sci' : 'VK_USE_PLATFORM_SCI',
+ 'ohos' : 'VK_USE_PLATFORM_OHOS',
+}
+
+#
+# Return appropriate feature protect string from 'platform' tag on feature
+def GetFeatureProtect(interface):
+ """Get platform protection string"""
+ platform = interface.get('platform')
+ if platform is not None:
+ return platform_dict[platform]
+
+ provisional = interface.get('provisional')
+ if provisional == 'true':
+ return platform_dict['provisional']
+
+# Returns true if we are running in GitHub actions
+# https://docs.github.com/en/actions/learn-github-actions/variables#default-environment-variables
+def IsGHA():
+ if 'GITHUB_ACTION' in os.environ:
+ return True
+ return False
+
+# Points to the directory containing the top level CMakeLists.txt
+PROJECT_SRC_DIR = os.path.abspath(os.path.join(os.path.split(os.path.abspath(__file__))[0], '..'))
+if not os.path.isfile(f'{PROJECT_SRC_DIR}/CMakeLists.txt'):
+ print(f'PROJECT_SRC_DIR invalid! {PROJECT_SRC_DIR}')
+ sys.exit(1)
+
+# helper to define paths relative to the repo root
+def RepoRelative(path):
+ return os.path.abspath(os.path.join(os.path.dirname(__file__), '..', path))
+
+# Runs a command in a directory and returns its return code.
+# Directory is project root by default, or a relative path from project root
+def RunShellCmd(command, start_dir = PROJECT_SRC_DIR, env=None, verbose=False):
+ # Flush stdout here. Helps when debugging on CI.
+ sys.stdout.flush()
+
+ if start_dir != PROJECT_SRC_DIR:
+ start_dir = RepoRelative(start_dir)
+ cmd_list = command.split(" ")
+
+ # Helps a lot when debugging CI issues
+ if IsGHA():
+ verbose = True
+
+ if verbose:
+ print(f'CICMD({cmd_list}, env={env})')
+ subprocess.check_call(cmd_list, cwd=start_dir, env=env) \ No newline at end of file