Skip to content

Commit

Permalink
[BuildScripts] All of them have been optimised by ChatGPT4.
Browse files Browse the repository at this point in the history
  • Loading branch information
PanosK92 committed Mar 30, 2023
1 parent 67ff83b commit c811111
Show file tree
Hide file tree
Showing 4 changed files with 130 additions and 90 deletions.
163 changes: 91 additions & 72 deletions build_scripts/generate_project_files.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,78 +2,97 @@
import shutil
import sys
import subprocess
import pathlib

# Define some paths using pathlib. A cross-platform way to handle slashes.
path_binaries = pathlib.Path("binaries")
path_binaries_data = pathlib.Path("binaries/data")
path_binaries_models = pathlib.Path("binaries/project/models")
path_binaries_environment = pathlib.Path("binaries/project/environment")
path_binaries_music = pathlib.Path("binaries/project/music")
path_binaries_height_maps = pathlib.Path("binaries/project/height_maps")
path_binaries_materials = pathlib.Path("binaries/project/materials")
path_third_party_lib_dx = pathlib.Path("third_party/libraries/dxcompiler.dll")
path_third_party_lib_fmod = pathlib.Path("third_party/libraries/fmod.dll")
path_third_party_lib_fmod_debug = pathlib.Path("third_party/libraries/fmodL.dll")
path_assets_models = pathlib.Path("assets/models")
path_assets_environment = pathlib.Path("assets/environment")
path_assets_music = pathlib.Path("assets/music")
path_assets_height_maps = pathlib.Path("assets/height_maps")
path_assets_materials = pathlib.Path("assets/materials")

# Define a function to check if a path represents a directory, even if it doesn't exist.
from pathlib import Path

paths = {
"binaries": {
"data": Path("binaries/data"),
"models": Path("binaries/project/models"),
"environment": Path("binaries/project/environment"),
"music": Path("binaries/project/music"),
"height_maps": Path("binaries/project/height_maps"),
"materials": Path("binaries/project/materials"),
},
"third_party_libs": {
"dx": Path("third_party/libraries/dxcompiler.dll"),
"fmod": Path("third_party/libraries/fmod.dll"),
"fmod_debug": Path("third_party/libraries/fmodL.dll"),
},
"assets": {
"models": Path("assets/models"),
"environment": Path("assets/environment"),
"music": Path("assets/music"),
"height_maps": Path("assets/height_maps"),
"materials": Path("assets/materials"),
},
}


def is_directory(path):
if not os.path.exists(path):
return os.path.splitext(path)[1] == ""
return os.path.isdir(path)
if not os.path.exists(path):
return os.path.splitext(path)[1] == ""
return os.path.isdir(path)


# Define a recursive copy function which can copy directories and files as well as create any directories that don't exist.
def copy(source, destination):
# copy file to directory
if os.path.isfile(source) and is_directory(destination):
print("Copying file \"" + str(source) + "\" to directory \"" + str(destination) + "\"...")
shutil.copy(source, destination)
# copy directory to directory
elif is_directory(source) and is_directory(destination):
print("Copying directory \"" + str(source) + "\" to directory \"" + str(destination) + "\"...")
if os.path.exists(destination): #copytree requires that the destination directory doesn't already exist.
shutil.rmtree(destination)
shutil.copytree(source, destination)
else:
print("Error: " + str(source) + " and " + str(destination) + " are not compatible.")
sys.exit(1)

# 1. Extract third-party libraries (that the project will link to)
print("1. Extracting third-party dependencies...")
if sys.argv[1] == "vs2022": # windows
os.system("build_scripts\\7z.exe e third_party\\libraries\\libraries.7z -othird_party\\libraries\\ -aoa")
else: # linux
os.system("7za e third_party/libraries/libraries.7z -othird_party/libraries/ -aoa")

# 2. Create binaries folder
print("\n2. Copying required data to the binaries directory..")
copy("data", path_binaries_data)

# 3. Copy engine DLLs to the binary directory
print("\n3. Copying required DLLs to the binary directory...")
copy(path_third_party_lib_dx, path_binaries)
copy(path_third_party_lib_fmod, path_binaries)
copy(path_third_party_lib_fmod_debug, path_binaries)

# 4. Copy some assets to the project directory
print("\n4. Copying some assets to the project directory...")
copy(path_assets_models, path_binaries_models)
copy(path_assets_environment, path_binaries_environment)
copy(path_assets_music, path_binaries_music)
copy(path_assets_height_maps, path_binaries_height_maps)
copy(path_assets_materials, path_binaries_materials)

# 5. Generate project files
print("\n5. Generating project files...")
if sys.argv[1] == "vs2022": # windows
subprocess.Popen("build_scripts\\premake5.exe --file=build_scripts\\premake.lua " + sys.argv[1] + " " + sys.argv[2], shell=True).communicate()
else: # Linux
subprocess.Popen("premake5 --file=build_scripts/premake.lua " + sys.argv[1] + " " + sys.argv[2], shell=True).communicate()

# Exit
sys.exit(0)
if os.path.isfile(source) and is_directory(destination):
print(f"Copying file \"{source}\" to directory \"{destination}\"...")
shutil.copy(source, destination)
elif is_directory(source) and is_directory(destination):
print(f"Copying directory \"{source}\" to directory \"{destination}\"...")
if os.path.exists(destination):
shutil.rmtree(destination)
shutil.copytree(source, destination)
else:
print(f"Error: {source} and {destination} are not compatible.")
sys.exit(1)


def extract_third_party_dependencies():
print("1. Extracting third-party dependencies...")
cmd = (
"build_scripts\\7z.exe e third_party\\libraries\\libraries.7z -othird_party\\libraries\\ -aoa"
if sys.argv[1] == "vs2022"
else "7za e third_party/libraries/libraries.7z -othird_party/libraries/ -aoa"
)
os.system(cmd)


def create_binaries_folder():
print("\n2. Copying required data to the binaries directory..")
copy("data", paths["binaries"]["data"])


def copy_dlls():
print("\n3. Copying required DLLs to the binary directory...")
for lib in paths["third_party_libs"].values():
copy(lib, Path("binaries"))


def copy_assets():
print("\n4. Copying some assets to the project directory...")
for asset_type, asset_path in paths["assets"].items():
copy(asset_path, paths["binaries"][asset_type])


def generate_project_files():
print("\n5. Generating project files...")
cmd = (
f"build_scripts\\premake5.exe --file=build_scripts\\premake.lua {sys.argv[1]} {sys.argv[2]}"
if sys.argv[1] == "vs2022"
else f"premake5 --file=build_scripts/premake.lua {sys.argv[1]} {sys.argv[2]}"
)
subprocess.Popen(cmd, shell=True).communicate()


def main():
extract_third_party_dependencies()
create_binaries_folder()
copy_dlls()
copy_assets()
generate_project_files()
sys.exit(0)


if __name__ == "__main__":
main()
19 changes: 13 additions & 6 deletions generate_vs2022_d3d11.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,16 @@
import os
import subprocess
import sys
# change working directory to script directory
os.chdir(os.path.dirname(__file__))
# run script
subprocess.Popen("python build_scripts/generate_project_files.py vs2022 d3d11").communicate()
# exit
sys.exit(0)
from pathlib import Path

def main():
script_dir = Path(__file__).parent
os.chdir(script_dir)

script = script_dir / "build_scripts" / "generate_project_files.py"
subprocess.Popen([sys.executable, str(script), "vs2022", "d3d11"]).communicate()

sys.exit(0)

if __name__ == "__main__":
main()
19 changes: 13 additions & 6 deletions generate_vs2022_d3d12.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,16 @@
import os
import subprocess
import sys
# change working directory to script directory
os.chdir(os.path.dirname(__file__))
# run script
subprocess.Popen("python build_scripts/generate_project_files.py vs2022 d3d12").communicate()
# exit
sys.exit(0)
from pathlib import Path

def main():
script_dir = Path(__file__).parent
os.chdir(script_dir)

script = script_dir / "build_scripts" / "generate_project_files.py"
subprocess.Popen([sys.executable, str(script), "vs2022", "d3d12"]).communicate()

sys.exit(0)

if __name__ == "__main__":
main()
19 changes: 13 additions & 6 deletions generate_vs2022_vulkan.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,16 @@
import os
import subprocess
import sys
# change working directory to script directory
os.chdir(os.path.dirname(__file__))
# run script
subprocess.Popen("python build_scripts/generate_project_files.py vs2022 vulkan").communicate()
# exit
sys.exit(0)
from pathlib import Path

def main():
script_dir = Path(__file__).parent
os.chdir(script_dir)

script = script_dir / "build_scripts" / "generate_project_files.py"
subprocess.Popen([sys.executable, str(script), "vs2022", "vulkan"]).communicate()

sys.exit(0)

if __name__ == "__main__":
main()

0 comments on commit c811111

Please sign in to comment.