diff --git a/litex/soc/integration/builder.py b/litex/soc/integration/builder.py index 866a4fcdd..dac60305c 100644 --- a/litex/soc/integration/builder.py +++ b/litex/soc/integration/builder.py @@ -3,6 +3,7 @@ import subprocess import struct import shutil +from litex.build.tools import write_to_file from litex.soc.integration import cpu_interface, soc_sdram, sdram_init @@ -66,29 +67,38 @@ class Builder: buildinc_dir = os.path.join(self.output_dir, "software", "include") generated_dir = os.path.join(buildinc_dir, "generated") os.makedirs(generated_dir, exist_ok=True) - with open(os.path.join(generated_dir, "variables.mak"), "w") as f: - def define(k, v): - f.write("{}={}\n".format(k, _makefile_escape(v))) - for k, v in cpu_interface.get_cpu_mak(cpu_type): - define(k, v) - define("SOC_DIRECTORY", soc_directory) - define("BUILDINC_DIRECTORY", buildinc_dir) - for name, src_dir in self.software_packages: - define(name.upper() + "_DIRECTORY", src_dir) - with open(os.path.join(generated_dir, "output_format.ld"), "w") as f: - f.write(cpu_interface.get_linker_output_format(cpu_type)) - with open(os.path.join(generated_dir, "regions.ld"), "w") as f: - f.write(cpu_interface.get_linker_regions(memory_regions)) + variables_contents = [] + def define(k, v): + variables_contents.append("{}={}\n".format(k, _makefile_escape(v))) + for k, v in cpu_interface.get_cpu_mak(cpu_type): + define(k, v) + define("SOC_DIRECTORY", soc_directory) + define("BUILDINC_DIRECTORY", buildinc_dir) + for name, src_dir in self.software_packages: + define(name.upper() + "_DIRECTORY", src_dir) + write_to_file( + os.path.join(generated_dir, "variables.mak"), + "".join(variables_contents)) - with open(os.path.join(generated_dir, "mem.h"), "w") as f: - f.write(cpu_interface.get_mem_header(memory_regions, flash_boot_address)) - with open(os.path.join(generated_dir, "csr.h"), "w") as f: - f.write(cpu_interface.get_csr_header(csr_regions, constants)) + write_to_file( + os.path.join(generated_dir, "output_format.ld"), + cpu_interface.get_linker_output_format(cpu_type)) + write_to_file( + os.path.join(generated_dir, "regions.ld"), + cpu_interface.get_linker_regions(memory_regions)) + + write_to_file( + os.path.join(generated_dir, "mem.h"), + cpu_interface.get_mem_header(memory_regions, flash_boot_address)) + write_to_file( + os.path.join(generated_dir, "csr.h"), + cpu_interface.get_csr_header(csr_regions, constants)) if sdram_phy_settings is not None: - with open(os.path.join(generated_dir, "sdram_phy.h"), "w") as f: - f.write(sdram_init.get_sdram_phy_header(sdram_phy_settings)) + write_to_file( + os.path.join(generated_dir, "sdram_phy.h"), + sdram_init.get_sdram_phy_header(sdram_phy_settings)) def _generate_csr_csv(self): memory_regions = self.soc.get_memory_regions() @@ -97,8 +107,9 @@ class Builder: csr_dir = os.path.dirname(self.csr_csv) os.makedirs(csr_dir, exist_ok=True) - with open(self.csr_csv, "w") as f: - f.write(cpu_interface.get_csr_csv(csr_regions, constants, memory_regions)) + write_to_file( + self.csr_csv, + cpu_interface.get_csr_csv(csr_regions, constants, memory_regions)) def _prepare_software(self): for name, src_dir in self.software_packages: