Fixing accidental revert in merge commit.
authorTim 'mithro' Ansell <mithro@mithis.com>
Fri, 13 Jan 2017 13:12:02 +0000 (00:12 +1100)
committerTim 'mithro' Ansell <mithro@mithis.com>
Fri, 13 Jan 2017 13:13:53 +0000 (00:13 +1100)
litex/build/tools.py
litex/soc/integration/builder.py

index f585f018b7781f2dc93d29ea7d3806c4a2f1a8cd..598c0ff94522eed2e2983b6480a2af613fd335c2 100644 (file)
@@ -19,6 +19,9 @@ def write_to_file(filename, contents, force_unix=False):
     newline = None
     if force_unix:
         newline = "\n"
+    if os.path.exists(filename):
+        if open(filename, "r", newline=newline).read() == contents:
+            return
     with open(filename, "w", newline=newline) as f:
         f.write(contents)
 
index 2f1af0fdd2c8a94dd97fa7ece23e160b915964cd..d97d37151a51f8c24672b9e9a5e8cda5779983a2 100644 (file)
@@ -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,30 +67,39 @@ 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)
-            f.write("export BUILDINC_DIRECTORY\n")
-            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))
-
-        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))
+
+        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)
+        variables_contents.append("export BUILDINC_DIRECTORY\n")
+        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))
+
+        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()
@@ -98,8 +108,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: