diff --git a/scripts/build_env.py b/scripts/build_env.py index c4b475e..571ec7f 100644 --- a/scripts/build_env.py +++ b/scripts/build_env.py @@ -1,25 +1,48 @@ import os +import subprocess -def buildEnvExists(): +def ghdlEnvExists(relativePath="work"): + ## Check if work exists try: - result = os.lstat("work") - except FileNotFoundError: - result = "-1" - except e: - result = "-2" - if result == "-2": - print(f"Encountered an unexpected error {e}") - print("exiting...") - return - if result == "-1": - print("Work doesn't exist, initializing build environment") - return - print("Work exists, no filesystem things to do") - if os.access("work", os.W_OK): - print("write access checked inside work, nothing to do") - else: - print("work is not writable, change permissions of dir") + os.lstat(relativePath) + except: + return False + ## Check that work is writable + if not os.access(relativePath, os.W_OK): + print(f"{relativePath} is write-protected, please acquire correct permissions") + return False + cfFileExists = False + filesInWork = os.listdir(relativePath) + for file in filesInWork: + if ".cf" in file: + cfFileExists = True + if not cfFileExists: + return False + ## Nothing bad, continue + return True + +def createBuildEnv(): + if ghdlEnvExists(): + return -1 + ## Create build env + os.makedirs("work",exist_ok=True) + addAllVHDLFiles(init=False) + return 0 + +def addAllVHDLFiles(init=False): + ## Ensure everything is ready for adding files + ## (init exception to avoid one if-case in ghdlEnvExists) + if not ghdlEnvExists() and not init: + return -1 + ## Add files + vhdlFiles = [] + for file in os.listdir(): + if ".vhd" in file: + vhdlFiles.append(file) + command = ["ghdl", "-i", "--workdir=work"] + vhdlFiles + subprocess.run(command) + return 0 if __name__ == "__main__": - buildEnvExists() + createBuildEnv()