import struct
import shutil
+from litex import get_data_mod
from litex.build.tools import write_to_file
from litex.soc.integration import export, soc_core
-
-__all__ = ["soc_software_packages", "soc_directory",
- "Builder", "builder_args", "builder_argdict"]
+from litex.soc.cores import cpu
+
+__all__ = [
+ "soc_software_packages",
+ "soc_directory",
+ "Builder",
+ "builder_args",
+ "builder_argdict"
+]
soc_software_packages = [
"libcompiler_rt",
"libbase",
- "libnet",
+ "liblitedram",
+ "libliteeth",
+ "liblitespi",
+ "liblitesdcard",
"bios"
]
class Builder:
def __init__(self, soc,
- output_dir = None,
- gateware_dir = None,
- software_dir = None,
- include_dir = None,
- generated_dir = None,
- compile_software = True,
- compile_gateware = True,
- csr_json = None,
- csr_csv = None,
- csr_svd = None,
- mr_memory_x = None):
+ output_dir = None,
+ gateware_dir = None,
+ software_dir = None,
+ include_dir = None,
+ generated_dir = None,
+ compile_software = True,
+ compile_gateware = True,
+ csr_json = None,
+ csr_csv = None,
+ csr_svd = None,
+ memory_x = None,
+ bios_options = None):
self.soc = soc
- # From Python doc: makedirs() will become confused if the path
- # elements to create include '..'
- self.output_dir = os.path.abspath(output_dir or "soc_{}_{}".format(soc.__class__.__name__.lower(), soc.platform.name))
+ # From Python doc: makedirs() will become confused if the path elements to create include '..'
+ self.output_dir = os.path.abspath(output_dir or os.path.join("build", soc.platform.name))
self.gateware_dir = os.path.abspath(gateware_dir or os.path.join(self.output_dir, "gateware"))
self.software_dir = os.path.abspath(software_dir or os.path.join(self.output_dir, "software"))
self.include_dir = os.path.abspath(include_dir or os.path.join(self.software_dir, "include"))
self.csr_csv = csr_csv
self.csr_json = csr_json
self.csr_svd = csr_svd
- self.mr_memory_x = mr_memory_x
+ self.memory_x = memory_x
+ self.bios_options = bios_options
self.software_packages = []
for name in soc_software_packages:
os.makedirs(self.include_dir, exist_ok=True)
os.makedirs(self.generated_dir, exist_ok=True)
- if self.soc.cpu_type is not None:
+ if self.soc.cpu_type not in [None, "zynq7000"]:
variables_contents = []
def define(k, v):
variables_contents.append("{}={}\n".format(k, _makefile_escape(v)))
for k, v in export.get_cpu_mak(self.soc.cpu, self.compile_software):
define(k, v)
- # Distinguish between LiteX and MiSoC.
- define("LITEX", "1")
- # Distinguish between applications running from main RAM and
- # flash for user-provided software packages.
- exec_profiles = {
- "COPY_TO_MAIN_RAM" : "0",
- "EXECUTE_IN_PLACE" : "0"
- }
- if "main_ram" in self.soc.mem_regions.keys():
- exec_profiles["COPY_TO_MAIN_RAM"] = "1"
- else:
- exec_profiles["EXECUTE_IN_PLACE"] = "1"
- for k, v in exec_profiles.items():
- define(k, v)
+ define(
+ "COMPILER_RT_DIRECTORY",
+ get_data_mod("software", "compiler_rt").data_location)
define("SOC_DIRECTORY", soc_directory)
variables_contents.append("export BUILDINC_DIRECTORY\n")
define("BUILDINC_DIRECTORY", self.include_dir)
for name, src_dir in self.software_packages:
define(name.upper() + "_DIRECTORY", src_dir)
+ if self.bios_options is not None:
+ for option in self.bios_options:
+ define(option, "1")
+
write_to_file(
os.path.join(self.generated_dir, "variables.mak"),
"".join(variables_contents))
export.get_soc_header(self.soc.constants))
write_to_file(
os.path.join(self.generated_dir, "csr.h"),
- export.get_csr_header(self.soc.csr_regions,
- self.soc.constants)
+ export.get_csr_header(
+ regions = self.soc.csr_regions,
+ constants = self.soc.constants,
+ csr_base = self.soc.mem_regions['csr'].origin
+ )
)
write_to_file(
os.path.join(self.generated_dir, "git.h"),
write_to_file(self.csr_svd, export.get_csr_svd(self.soc))
def _generate_mem_region_map(self):
- if self.mr_memory_x is not None:
- mr_memory_x_dir = os.path.dirname(os.path.realpath(self.mr_memory_x))
- os.makedirs(mr_memory_x_dir, exist_ok=True)
- write_to_file(self.mr_memory_x, export.get_mr_memory_x(self.soc))
+ if self.memory_x is not None:
+ memory_x_dir = os.path.dirname(os.path.realpath(self.memory_x))
+ os.makedirs(memory_x_dir, exist_ok=True)
+ write_to_file(self.memory_x, export.get_memory_x(self.soc))
def _prepare_rom_software(self):
for name, src_dir in self.software_packages:
parser.add_argument("--csr-svd", default=None,
help="store CSR map in SVD format into the "
"specified file")
- parser.add_argument("--mr-memory-x", default=None,
- help="store memory regions in memory-x format into the "
+ parser.add_argument("--memory-x", default=None,
+ help="store Mem regions in memory-x format into the "
"specified file")
"csr_csv": args.csr_csv,
"csr_json": args.csr_json,
"csr_svd": args.csr_svd,
- "mr_memory_x": args.mr_memory_x,
+ "memory_x": args.memory_x,
}