mirror of
https://github.com/MonsterDruide1/OdysseyDecomp
synced 2026-04-23 09:04:21 +00:00
65 lines
2 KiB
Python
Executable file
65 lines
2 KiB
Python
Executable file
#!/usr/bin/env python3
|
|
|
|
import argparse
|
|
from setup import get_build_dir
|
|
import subprocess
|
|
import os
|
|
import time
|
|
from common import setup_common as setup
|
|
|
|
project_root = setup.ROOT
|
|
|
|
def touch_cmake_lists():
|
|
cmake_lists_path = project_root / 'CMakeLists.txt'
|
|
os.utime(cmake_lists_path, times=None)
|
|
|
|
build_sources_path = get_build_dir() / '.build_sources'
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser(
|
|
'build.py', description="Build the Super Mario Odyssey decompilation project")
|
|
parser.add_argument('--clean', action='store_true',
|
|
help="Clean before building")
|
|
parser.add_argument('--verbose', action='store_true',
|
|
help="Give verbose output")
|
|
args = parser.parse_args()
|
|
|
|
if not get_build_dir().is_dir():
|
|
print("Please run setup.py first.")
|
|
exit(1)
|
|
|
|
cmake_args = ['cmake', '--build', str(get_build_dir())]
|
|
if args.clean:
|
|
cmake_args.append('--clean-first')
|
|
if args.verbose:
|
|
os.environ['VERBOSE'] = '1'
|
|
|
|
# Touch CMakeLists.txt if necessary, for reglobbing
|
|
|
|
# Adding real source files
|
|
real_source_paths = []
|
|
for dir in [project_root/'lib'/'al', project_root/'src']:
|
|
for root, _, files in os.walk(dir):
|
|
for file in files:
|
|
file_path = os.path.join(root, file)
|
|
file_str = str(file_path)
|
|
if file_str.endswith('.h') or file_str.endswith('.hpp') or file_str.endswith('.c') or file_str.endswith('.cpp'):
|
|
real_source_paths.append(str(file_path))
|
|
|
|
# Checking if real files/files from build folder match
|
|
with open(build_sources_path, 'r') as f:
|
|
paths = f.read().splitlines()
|
|
paths.sort()
|
|
real_source_paths.sort()
|
|
|
|
if paths != real_source_paths:
|
|
touch_cmake_lists()
|
|
|
|
try:
|
|
subprocess.run(cmake_args, check=True)
|
|
except subprocess.CalledProcessError:
|
|
exit(1) # silently exit with failure if build failed
|
|
|
|
if __name__ == "__main__":
|
|
main()
|