122 lines
3.5 KiB
Python
Executable File
122 lines
3.5 KiB
Python
Executable File
#! /usr/bin/env python3
|
|
|
|
#
|
|
# Copyright 2016 - 2021 gary@drinkingtea.net
|
|
#
|
|
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
#
|
|
|
|
import argparse
|
|
import os
|
|
import platform
|
|
import shutil
|
|
import subprocess
|
|
import sys
|
|
|
|
import util
|
|
|
|
|
|
def main() -> int:
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument(
|
|
'--target',
|
|
help='Platform target',
|
|
default=f'{util.get_os()}-{util.get_arch()}')
|
|
parser.add_argument(
|
|
'--build_type',
|
|
help='Build type (asan,debug,release)',
|
|
default='release')
|
|
parser.add_argument(
|
|
'--build_tool',
|
|
help='Build tool (default,xcode)',
|
|
default='')
|
|
parser.add_argument(
|
|
'--build_root',
|
|
help='Path to the root build directory (must be in project dir)',
|
|
default='build')
|
|
parser.add_argument(
|
|
'--toolchain',
|
|
help='Path to CMake toolchain file',
|
|
default='')
|
|
parser.add_argument(
|
|
'--current_build',
|
|
help='Indicates whether or not to make this the active build',
|
|
default=1)
|
|
args = parser.parse_args()
|
|
|
|
if args.build_type == 'asan':
|
|
build_type_arg = 'Debug'
|
|
sanitizer_status = 'ON'
|
|
elif args.build_type == 'debug':
|
|
build_type_arg = 'Debug'
|
|
sanitizer_status = 'OFF'
|
|
elif args.build_type == 'release':
|
|
build_type_arg = 'Release'
|
|
sanitizer_status = 'OFF'
|
|
else:
|
|
print('Error: Invalid build tool')
|
|
return 1
|
|
|
|
if args.build_tool == 'xcode':
|
|
build_config = '{:s}-{:s}'.format(args.target, args.build_tool)
|
|
else:
|
|
build_config = '{:s}-{:s}'.format(args.target, args.build_type)
|
|
|
|
if 'QTDIR' in os.environ:
|
|
qt_path = '-DQTDIR={:s}'.format(os.environ['QTDIR'])
|
|
else:
|
|
qt_path = ''
|
|
|
|
if args.build_tool == '' or args.build_tool == 'default':
|
|
if shutil.which('ninja') is None:
|
|
build_tool = ''
|
|
else:
|
|
build_tool = '-GNinja'
|
|
elif args.build_tool == 'xcode':
|
|
build_tool = '-GXcode'
|
|
else:
|
|
print('Error: Invalid build tool')
|
|
return 1
|
|
|
|
project_dir = os.getcwd()
|
|
build_dir = f'{project_dir}/{args.build_root}/{build_config}'
|
|
util.rm(build_dir)
|
|
cmake_cmd = [
|
|
'cmake', '-S', project_dir, '-B', build_dir,
|
|
'-DCMAKE_EXPORT_COMPILE_COMMANDS=ON',
|
|
'-DCMAKE_TOOLCHAIN_FILE={:s}'.format(args.toolchain),
|
|
'-DCMAKE_BUILD_TYPE={:s}'.format(build_type_arg),
|
|
'-DUSE_ASAN={:s}'.format(sanitizer_status),
|
|
'-DBUILDCORE_BUILD_CONFIG={:s}'.format(build_config),
|
|
'-DBUILDCORE_TARGET={:s}'.format(args.target),
|
|
]
|
|
if build_tool != '':
|
|
cmake_cmd.append(build_tool)
|
|
if qt_path != '':
|
|
cmake_cmd.append(qt_path)
|
|
if platform.system() == 'Windows':
|
|
cmake_cmd.append('-A x64')
|
|
|
|
subprocess.run(cmake_cmd)
|
|
|
|
util.mkdir_p('dist')
|
|
if int(args.current_build) != 0:
|
|
cb = open('.current_build', 'w')
|
|
cb.write(args.build_type)
|
|
cb.close()
|
|
|
|
util.rm('compile_commands.json')
|
|
if platform.system() != 'Windows':
|
|
os.symlink(f'{build_dir}/compile_commands.json',
|
|
'compile_commands.json')
|
|
return 0
|
|
|
|
|
|
if __name__ == '__main__':
|
|
try:
|
|
sys.exit(main())
|
|
except KeyboardInterrupt:
|
|
sys.exit(1)
|