193 lines
5.2 KiB
Python
193 lines
5.2 KiB
Python
#!/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)
|