Esempio n. 1
0
    def _get_variables_contents(self):
        variables_contents = []

        def define(k, v):
            variables_contents.append("{}={}".format(k, _makefile_escape(v)))

        # Define packages and libraries.
        define("PACKAGES",
               " ".join(name for name, src_dir in self.software_packages))
        define("PACKAGE_DIRS",
               " ".join(src_dir for name, src_dir in self.software_packages))
        define("LIBS", " ".join(self.software_libraries))

        # Define the CPU variables.
        for k, v in export.get_cpu_mak(self.soc.cpu, self.compile_software):
            define(k, v)

        # Define the SoC/Compiler-RT/Software/Include directories.
        define("SOC_DIRECTORY", soc_directory)
        compiler_rt_directory = get_data_mod("software",
                                             "compiler_rt").data_location
        define("COMPILER_RT_DIRECTORY", compiler_rt_directory)
        variables_contents.append("export BUILDINC_DIRECTORY")
        define("BUILDINC_DIRECTORY", self.include_dir)
        for name, src_dir in self.software_packages:
            define(name.upper() + "_DIRECTORY", src_dir)

        # Define the BIOS Options.
        for bios_option in self.bios_options:
            assert bios_option in [
                "TERM_NO_HIST", "TERM_MINI", "TERM_NO_COMPLETE"
            ]
            define(bios_option, "1")

        return "\n".join(variables_contents)
Esempio n. 2
0
    def _generate_includes(self):
        os.makedirs(self.include_dir, exist_ok=True)
        os.makedirs(self.generated_dir, exist_ok=True)

        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)
            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)

            for bios_option in self.bios_options:
                assert bios_option in ["TERM_NO_HIST", "TERM_MINI", "TERM_NO_COMPLETE"]
                define(bios_option, "1")

            write_to_file(
                os.path.join(self.generated_dir, "variables.mak"),
                "".join(variables_contents))
            write_to_file(
                os.path.join(self.generated_dir, "output_format.ld"),
                export.get_linker_output_format(self.soc.cpu))
            write_to_file(
                os.path.join(self.generated_dir, "regions.ld"),
                export.get_linker_regions(self.soc.mem_regions))

        write_to_file(
            os.path.join(self.generated_dir, "mem.h"),
            export.get_mem_header(self.soc.mem_regions))
        write_to_file(
            os.path.join(self.generated_dir, "soc.h"),
            export.get_soc_header(self.soc.constants))
        write_to_file(
            os.path.join(self.generated_dir, "csr.h"),
            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"),
            export.get_git_header()
        )

        if hasattr(self.soc, "sdram"):
            from litedram.init import get_sdram_phy_c_header
            write_to_file(os.path.join(self.generated_dir, "sdram_phy.h"),
                get_sdram_phy_c_header(
                    self.soc.sdram.controller.settings.phy,
                    self.soc.sdram.controller.settings.timing))
Esempio n. 3
0
    def _generate_includes(self):
        os.makedirs(self.include_dir, exist_ok=True)
        os.makedirs(self.generated_dir, exist_ok=True)

        if self.soc.cpu_type is not None:
            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)

            write_to_file(os.path.join(self.generated_dir, "variables.mak"),
                          "".join(variables_contents))
            write_to_file(os.path.join(self.generated_dir, "output_format.ld"),
                          export.get_linker_output_format(self.soc.cpu))
            write_to_file(os.path.join(self.generated_dir, "regions.ld"),
                          export.get_linker_regions(self.soc.mem_regions))

        write_to_file(os.path.join(self.generated_dir, "mem.h"),
                      export.get_mem_header(self.soc.mem_regions))
        write_to_file(os.path.join(self.generated_dir, "soc.h"),
                      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))
        write_to_file(os.path.join(self.generated_dir, "git.h"),
                      export.get_git_header())

        if hasattr(self.soc, "sdram"):
            from litedram.init import get_sdram_phy_c_header
            write_to_file(
                os.path.join(self.generated_dir, "sdram_phy.h"),
                get_sdram_phy_c_header(
                    self.soc.sdram.controller.settings.phy,
                    self.soc.sdram.controller.settings.timing))
Esempio n. 4
0
    def _get_variables_contents(self):
        # Helper.
        variables_contents = []

        def define(k, v):
            try:
                variables_contents.append("{}={}".format(
                    k, _makefile_escape(v)))
            except AttributeError as e:
                print(colorer(f"problem with {k}:", 'red'))
                raise e

        # Define packages and libraries.
        define("PACKAGES",
               " ".join(name for name, src_dir in self.software_packages))
        define("PACKAGE_DIRS",
               " ".join(src_dir for name, src_dir in self.software_packages))
        define("LIBS", " ".join(self.software_libraries))

        # Define CPU variables.
        for k, v in export.get_cpu_mak(self.soc.cpu, self.compile_software):
            define(k, v)

        # Define SoC/Picolibc/Compiler-RT/Software/Include directories.
        picolibc_directory = get_data_mod("software", "picolibc").data_location
        compiler_rt_directory = get_data_mod("software",
                                             "compiler_rt").data_location

        define("SOC_DIRECTORY", soc_directory)
        define("PICOLIBC_DIRECTORY", picolibc_directory)
        define("COMPILER_RT_DIRECTORY", compiler_rt_directory)
        variables_contents.append("export BUILDINC_DIRECTORY")
        define("BUILDINC_DIRECTORY", self.include_dir)
        for name, src_dir in self.software_packages:
            define(name.upper() + "_DIRECTORY", src_dir)

        # Define Compile/BIOS Options.
        define("LTO", f"{self.lto:d}")
        for bios_option in self.bios_options:
            assert bios_option in [
                "TERM_NO_HIST", "TERM_MINI", "TERM_NO_COMPLETE"
            ]
            define(bios_option, "1")

        return "\n".join(variables_contents)
Esempio n. 5
0
    def _generate_includes(self):
        # Generate Include/Generated directories.
        _create_dir(self.include_dir)
        _create_dir(self.generated_dir)

        # Generate BIOS files when the SoC uses it.
        with_bios = self.soc.cpu_type not in [None, "zynq7000"]
        if with_bios:

            # Generate Variables to variables.mak.
            variables_contents = []

            def define(k, v):
                variables_contents.append("{}={}".format(
                    k, _makefile_escape(v)))

            # Define the CPU variables.
            for k, v in export.get_cpu_mak(self.soc.cpu,
                                           self.compile_software):
                define(k, v)

            # Define the SoC/Compiler-RT/Software/Include directories.
            define("SOC_DIRECTORY", soc_directory)
            compiler_rt_directory = get_data_mod("software",
                                                 "compiler_rt").data_location
            define("COMPILER_RT_DIRECTORY", compiler_rt_directory)
            variables_contents.append("export BUILDINC_DIRECTORY")
            define("BUILDINC_DIRECTORY", self.include_dir)
            for name, src_dir in self.software_packages:
                define(name.upper() + "_DIRECTORY", src_dir)

            # Define the BIOS Options.
            for bios_option in self.bios_options:
                assert bios_option in [
                    "TERM_NO_HIST", "TERM_MINI", "TERM_NO_COMPLETE"
                ]
                define(bios_option, "1")

            # Write to variables.mak.
            write_to_file(os.path.join(self.generated_dir, "variables.mak"),
                          "\n".join(variables_contents))

            # Generate Output Format to output_format.ld.
            output_format_contents = export.get_linker_output_format(
                self.soc.cpu)
            write_to_file(os.path.join(self.generated_dir, "output_format.ld"),
                          output_format_contents)

            # Generate Memory Regions to regions.ld.
            regions_contents = export.get_linker_regions(self.soc.mem_regions)
            write_to_file(os.path.join(self.generated_dir, "regions.ld"),
                          regions_contents)

        # Generate Memory Regions to mem.h.
        mem_contents = export.get_mem_header(self.soc.mem_regions)
        write_to_file(os.path.join(self.generated_dir, "mem.h"), mem_contents)

        # Generate Memory Regions to memory.x if specified.
        if self.memory_x is not None:
            memory_x_contents = export.get_memory_x(self.soc)
            write_to_file(os.path.realpath(self.memory_x), memory_x_contents)

        # Generate SoC Config/Constants to soc.h.
        soc_contents = export.get_soc_header(self.soc.constants)
        write_to_file(os.path.join(self.generated_dir, "soc.h"), soc_contents)

        # Generate CSR registers definitions/access functions to csr.h.
        csr_contents = 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, "csr.h"), csr_contents)

        # Generate Git SHA1 of tools to git.h
        git_contents = export.get_git_header()
        write_to_file(os.path.join(self.generated_dir, "git.h"), git_contents)

        # Generate LiteDRAM C header to sdram_phy.h when the SoC use it.
        if hasattr(self.soc, "sdram"):
            from litedram.init import get_sdram_phy_c_header
            sdram_contents = get_sdram_phy_c_header(
                self.soc.sdram.controller.settings.phy,
                self.soc.sdram.controller.settings.timing)
            write_to_file(os.path.join(self.generated_dir, "sdram_phy.h"),
                          sdram_contents)