Add an argument to add_source for files copy
With this argument, added files will be copied to the gateware directory and referenced in the project from this new location.
This commit is contained in:
parent
5fd7c758a1
commit
598d678f59
|
@ -9,6 +9,7 @@
|
||||||
import sys
|
import sys
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
|
import shutil
|
||||||
|
|
||||||
from migen.fhdl.structure import Signal, Cat
|
from migen.fhdl.structure import Signal, Cat
|
||||||
from migen.genlib.record import Record
|
from migen.genlib.record import Record
|
||||||
|
@ -312,6 +313,7 @@ class GenericPlatform:
|
||||||
self.sources = []
|
self.sources = []
|
||||||
self.verilog_include_paths = []
|
self.verilog_include_paths = []
|
||||||
self.output_dir = None
|
self.output_dir = None
|
||||||
|
self.gateware_dir = None
|
||||||
self.finalized = False
|
self.finalized = False
|
||||||
self.use_default_clk = False
|
self.use_default_clk = False
|
||||||
|
|
||||||
|
@ -367,20 +369,30 @@ class GenericPlatform:
|
||||||
except ConstraintError:
|
except ConstraintError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def add_source(self, filename, language=None, library=None):
|
def add_source(self, filename, language=None, library=None, copy=False):
|
||||||
filename = os.path.abspath(filename)
|
filename = os.path.abspath(filename)
|
||||||
if language is None:
|
if language is None:
|
||||||
language = tools.language_by_filename(filename)
|
language = tools.language_by_filename(filename)
|
||||||
if library is None:
|
if library is None:
|
||||||
library = "work"
|
library = "work"
|
||||||
for f, _, _ in self.sources:
|
for f, *r in self.sources:
|
||||||
if f == filename:
|
if f == filename:
|
||||||
return
|
return
|
||||||
self.sources.append((filename, language, library))
|
# If the gateware_dir is already defined, we can copy the file
|
||||||
|
if self.gateware_dir:
|
||||||
|
dst = filename
|
||||||
|
if copy:
|
||||||
|
dst = os.path.join(self.gateware_dir, os.path.basename(s[0]))
|
||||||
|
shutil.copyfile(filename, dst)
|
||||||
|
self.sources.append((dst, language, library))
|
||||||
|
# If it's too early and the gateware_dir is not known and if it's
|
||||||
|
# necessary, the file will be copied by the Builder class
|
||||||
|
else:
|
||||||
|
self.sources.append((filename, language, library, copy))
|
||||||
|
|
||||||
def add_sources(self, path, *filenames, language=None, library=None):
|
def add_sources(self, path, *filenames, language=None, library=None, copy=False):
|
||||||
for f in filenames:
|
for f in filenames:
|
||||||
self.add_source(os.path.join(path, f), language, library)
|
self.add_source(os.path.join(path, f), language, library, copy)
|
||||||
|
|
||||||
def add_source_dir(self, path, recursive=True, language=None, library=None):
|
def add_source_dir(self, path, recursive=True, language=None, library=None):
|
||||||
dir_files = []
|
dir_files = []
|
||||||
|
|
|
@ -278,7 +278,8 @@ class Builder:
|
||||||
|
|
||||||
def build(self, **kwargs):
|
def build(self, **kwargs):
|
||||||
# Pass Output Directory to Platform.
|
# Pass Output Directory to Platform.
|
||||||
self.soc.platform.output_dir = self.output_dir
|
self.soc.platform.output_dir = self.output_dir
|
||||||
|
self.soc.platform.gateware_dir = self.gateware_dir
|
||||||
|
|
||||||
# Check if BIOS is used and add software package if so.
|
# Check if BIOS is used and add software package if so.
|
||||||
with_bios = self.soc.cpu_type is not None
|
with_bios = self.soc.cpu_type is not None
|
||||||
|
@ -288,6 +289,16 @@ class Builder:
|
||||||
# Create Gateware directory.
|
# Create Gateware directory.
|
||||||
_create_dir(self.gateware_dir)
|
_create_dir(self.gateware_dir)
|
||||||
|
|
||||||
|
# If asked, copy files to the gateware directory and change the source file location.
|
||||||
|
# Drop the 'copy' element from the tupple.
|
||||||
|
# 'copy' may or may not be present in the tupple.
|
||||||
|
for i, (f, language, library, *r) in enumerate(self.soc.platform.sources):
|
||||||
|
dst = f
|
||||||
|
if r[0] is True:
|
||||||
|
dst = os.path.join(self.gateware_dir, os.path.basename(f))
|
||||||
|
shutil.copyfile(f, dst)
|
||||||
|
self.soc.platform.sources[i] = (dst, language, library)
|
||||||
|
|
||||||
# Create Software directory.
|
# Create Software directory.
|
||||||
# First check if software needs a full re-build and remove software dir if so.
|
# First check if software needs a full re-build and remove software dir if so.
|
||||||
if with_bios:
|
if with_bios:
|
||||||
|
|
Loading…
Reference in New Issue