One stop solution for all Vulkan samples
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

192 lines
5.2 KiB

#!/usr/bin/env python
# Copyright 2023, Thomas Atkinson
#
# SPDX-License-Identifier: Apache-2.0
#
# 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 argparse
import os
from shutil import which
from subprocess import check_output
import sys
SCRIPT_DIR = os.path.dirname(os.path.realpath(__file__))
ROOT_DIR = os.path.join(SCRIPT_DIR, "..")
class terminal_colors:
SUCCESS = "\033[92m"
INFO = "\033[94m"
WARNING = "\033[33m"
ERROR = "\033[91m"
END = "\033[0m"
def generate_android_gradle_help(subparsers):
parser = subparsers.add_parser(
"android",
help="Generate Android Gradle files",
)
parser.set_defaults(func=generate_android_gradle)
parser.add_argument(
"--output-dir",
type=str,
help="Relative Output Directory: <project_dir>/build/android_gradle",
default=None,
)
def generate_android_gradle(args):
output_dir = (
os.path.join(ROOT_DIR, args.output_dir)
if args.output_dir
else os.path.join(ROOT_DIR, "build", "android_gradle")
)
if not which("cmake"):
print("Missing cmake")
sys.exit(1)
print(
terminal_colors.INFO
+ "Generating Android Gradle files at "
+ output_dir
+ terminal_colors.END
)
check_output(
[
"cmake",
"-DPROJECT_NAME=vulkan_samples",
"-DANDROID_API=30",
"-DARCH_ABI=arm64-v8a",
"-DANDROID_MANIFEST={}".format(
os.path.join(ROOT_DIR, "app", "android", "AndroidManifest.xml")
),
"-DJAVA_DIRS={}".format(os.path.join(ROOT_DIR, "app", "android", "java")),
"-DRES_DIRS={}".format(os.path.join(ROOT_DIR, "app", "android", "res")),
"-DOUTPUT_DIR={}".format(output_dir),
"-DASSET_DIRS=",
"-DJNI_LIBS_DIRS=",
"-DNATIVE_SCRIPT={}".format(os.path.join(ROOT_DIR, "CMakeLists.txt")),
"-P",
os.path.join(ROOT_DIR, "bldsys", "cmake", "create_gradle_project.cmake"),
]
)
def generate_sample_help(subparsers, template):
parser = subparsers.add_parser(
template,
help="Generate sample project",
)
parser.set_defaults(func=generate_sample(template))
parser.add_argument(
"--name",
type=str,
help="Name of the sample project",
default="SampleTest",
)
parser.add_argument(
"--category",
type=str,
help="Which category the sample project belongs to",
default="api",
)
parser.add_argument(
"--output-dir",
type=str,
help="Output Directory: <project_dir>/samples/<category>",
default=None,
)
def prompt_if_path_exists(output_dir, name):
path = os.path.join(output_dir, name)
if os.path.exists(path):
yes = {'yes', 'y'}
no = {'no', 'n', ''}
print(terminal_colors.WARNING
+ f"The output directory {path} is not empty. Would you like to overwrite its content with the sample template? [y/N]"
+ terminal_colors.END)
while True:
choice = input().lower()
if choice in yes:
return True
elif choice in no:
return False
else:
print("Please respond with 'y' or 'n'")
return True
def generate_sample(template):
def func(args):
output_dir = (
args.output_dir
if args.output_dir
else os.path.join(ROOT_DIR, "samples", args.category)
)
if not which("cmake"):
print("Missing cmake")
sys.exit(1)
if not prompt_if_path_exists(output_dir, args.name):
return
print(
terminal_colors.INFO
+ "Generating sample project "
+ args.name
+ terminal_colors.END
)
check_output(
[
"cmake",
"-DSAMPLE_NAME={}".format(args.name),
"-DTEMPLATE_NAME={}".format(template),
"-DOUTPUT_DIR={}".format(output_dir),
"-P",
os.path.join(ROOT_DIR, "bldsys", "cmake", "create_sample_project.cmake"),
]
)
return func
if __name__ == "__main__":
argument_parser = argparse.ArgumentParser(description="Generate utility.")
subparsers = argument_parser.add_subparsers(
help="Commands",
)
generate_android_gradle_help(subparsers)
generate_sample_help(subparsers, "sample")
generate_sample_help(subparsers, "sample_api")
args = argument_parser.parse_args()
if len(sys.argv) == 1:
argument_parser.print_help(sys.stderr)
sys.exit(1)
args.func(args)