49 lines
1.2 KiB
Python
49 lines
1.2 KiB
Python
import os
|
|
import subprocess
|
|
|
|
def ghdlEnvExists(relativePath="work"):
|
|
## Check if work exists
|
|
try:
|
|
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=True)
|
|
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__":
|
|
createBuildEnv()
|