-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
added convenient scripts to configure/build
- Loading branch information
Showing
5 changed files
with
240 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,104 @@ | ||
#!/usr/bin/env python3 | ||
|
||
# Copyright (c) 2022 pongasoft | ||
# | ||
# 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 Yan Pujante | ||
|
||
import argparse | ||
import os | ||
import sys | ||
import platform | ||
|
||
if sys.hexversion < 0x03070000: | ||
print("You must use python version 3.7+") | ||
sys.exit(1) | ||
|
||
parser = argparse.ArgumentParser(allow_abbrev=False, | ||
usage='configure.py [-h] [-n] [-f] [-r] [-G GENERATOR] [-B BUILD_DIR] [-- <cmake_options>]', | ||
formatter_class=argparse.RawDescriptionHelpFormatter, | ||
epilog=''' | ||
Notes | ||
-G defaults to "Xcode" on macOS and "Visual Studio 16 2019" for Windows10 | ||
run 'cmake --help' to get the list of generators supported | ||
For single-config generators, Debug is used by default and can be changed with -r for Release | ||
For multi-config generators, -r is ignored | ||
To provide extra options to CMake you do it this way | ||
python3 configure.py -- -Wdev | ||
Examples | ||
# Use default paths and uses another generator | ||
python3 configure.py -G "CodeBlocks - Unix Makefiles" | ||
# Use defaults | ||
python3 configure.py | ||
''') | ||
parser.add_argument("-n", "--dry-run", help="Dry run (prints what it is going to do)", action="store_true", dest="dry_run") | ||
parser.add_argument("-f", "--force", help="Force a regeneration (delete and recreate build folder)", action="store_true") | ||
parser.add_argument("-r", "--release", help="Use CMake Release build type (for single-config generators)", action="store_true") | ||
parser.add_argument("-G", "--generator", help="CMake generator (optional)") | ||
parser.add_argument("-B", "--build-dir", help="Build folder (defaults to ./build)", dest="build_dir") | ||
parser.add_argument('cmake_options', help="Any options for cmake", nargs=argparse.REMAINDER) | ||
|
||
args = parser.parse_args() | ||
|
||
# The CMakeLists.txt file is a sibling of this script | ||
this_script_root_dir = os.path.dirname(os.path.realpath(sys.argv[0])) | ||
|
||
# CMake generator | ||
cmake_generator = ['-G'] | ||
if args.generator: | ||
cmake_generator.append(args.generator) | ||
else: | ||
if platform.system() == 'Darwin': | ||
cmake_generator.append('Xcode') | ||
else: | ||
cmake_generator.append('Visual Studio 16 2019') | ||
|
||
# CMake options | ||
cmake_options = [] if not args.cmake_options else args.cmake_options[1:] | ||
|
||
# CMake build type (for single config generators) | ||
cmake_build_type = [f'-DCMAKE_BUILD_TYPE={"Release" if args.release else "Debug"}'] | ||
|
||
# CMake build directory | ||
build_dir = args.build_dir if args.build_dir else 'build' | ||
cmake_build_dir = ['-B', build_dir] | ||
|
||
# CMake command | ||
cmake_command = ['cmake', | ||
*cmake_build_dir, | ||
*cmake_build_type, | ||
*cmake_generator, | ||
*cmake_options, | ||
this_script_root_dir] | ||
|
||
if args.dry_run: | ||
escaped_command = ' '.join([f'"{x}"' for x in cmake_command[1:]]) | ||
print(f'cmake {escaped_command}') | ||
else: | ||
if args.force: | ||
import shutil | ||
if os.path.exists(build_dir): | ||
shutil.rmtree(build_dir) | ||
|
||
import subprocess | ||
subprocess.run(cmake_command) | ||
|
||
|
||
|
||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,115 @@ | ||
#!/usr/bin/env python3 | ||
|
||
# Copyright (c) 2022 pongasoft | ||
# | ||
# 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 Yan Pujante | ||
|
||
import argparse | ||
import sys | ||
|
||
if sys.hexversion < 0x03070000: | ||
print("You must use python version 3.7+") | ||
sys.exit(1) | ||
|
||
generator_is_multi_config = @python_GENERATOR_IS_MULTI_CONFIG@ | ||
cmake_single_config_build_type = '@CMAKE_BUILD_TYPE@' | ||
|
||
parser = argparse.ArgumentParser(allow_abbrev=False, | ||
usage=f're-edit.py [-hnvbdr] <command> [<command> ...] [-- [native-options]]', | ||
formatter_class=argparse.RawDescriptionHelpFormatter, | ||
epilog=f''' | ||
Commands | ||
---- Main commands ---- | ||
clean : clean all builds | ||
build : build the tool | ||
test : run the tests for the tool | ||
archive : create an archive containing the tool | ||
---- CMake target ---- | ||
<command> : Any unknown <command> is treated as a cmake target | ||
--- Native options ---- | ||
Pass remaining options to the native tool (ex: -- -j 8 for parallel build) | ||
''') | ||
|
||
parser.add_argument("-n", "--dry-run", help="Dry run (prints what it is going to do)", action="store_true", | ||
dest="dry_run") | ||
parser.add_argument("-v", "--verbose", help="Verbose build", action="store_true") | ||
parser.add_argument("-b", "--banner", help="Display a banner before every command", action="store_true") | ||
parser.add_argument("-d", "--debug", help="use Debug build config", action="store_true") | ||
parser.add_argument("-r", "--release", help="use Release build config", action="store_true") | ||
|
||
parser.add_argument('command', help='See "Commands" section', nargs=argparse.REMAINDER) | ||
|
||
args = parser.parse_args() | ||
|
||
# determines '--' position | ||
commands = args.command | ||
native_tool_options = [] | ||
pos = next((i for i, x in enumerate(commands) if x == '--'), -1) | ||
if pos > -1: | ||
commands = args.command[:pos] | ||
native_tool_options = args.command[pos:] | ||
|
||
if not commands: | ||
parser.print_help() | ||
exit(0) | ||
|
||
available_commands = { | ||
'clean': 'clean', | ||
'build': 're-edit', | ||
'test': 'run_tests', | ||
'archive': 'create_archive' | ||
} | ||
|
||
cmake_verbose = [] if not args.verbose else ['--verbose'] | ||
|
||
if args.release and args.debug: | ||
print('Conflicting options (-r and -d) used') | ||
exit(1) | ||
|
||
config = 'Debug' | ||
cmake_config = ['--config', config] | ||
|
||
step = 0 | ||
|
||
for command in commands: | ||
step += 1 | ||
if args.banner: | ||
if step > 1: | ||
print("") | ||
print("") | ||
print("=============================================================") | ||
print("==") | ||
print(f"== Step {step} : {command}") | ||
print("==") | ||
print("=============================================================") | ||
if command in available_commands: | ||
cmake_target = available_commands[command] | ||
else: | ||
cmake_target = command | ||
cmake_command = ['cmake', '--build', '.', *cmake_verbose, *cmake_config, '--target', cmake_target, *native_tool_options] | ||
if args.dry_run: | ||
print(' '.join(cmake_command)) | ||
else: | ||
import os | ||
import subprocess | ||
|
||
this_script_root_dir = os.path.dirname(os.path.realpath(sys.argv[0])) | ||
cp = subprocess.run(cmake_command, cwd=this_script_root_dir) | ||
if cp.returncode != 0: | ||
args = ' '.join(cp.args) | ||
print(f'Error: Command "{command}" [{args}] failed with error code {cp.returncode}', file=sys.stderr) | ||
exit(cp.returncode) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters