Commit 5e6d6130 authored by Tristan Gingold's avatar Tristan Gingold

isim, makefilevsim: factorize code.

parent bea57492
......@@ -133,6 +133,19 @@ class ToolISim(MakefileSim):
else:
return None
def _makefile_sim_libraries(self, libs):
# ISim does not have a vmap command to insert additional libraries in
#.ini file.
for lib in libs:
libfile = self.get_stamp_library(lib)
self.writeln("{}:".format(libfile))
self.write("\t({mkdir} {lib} && {touch} {libfile}".format(
lib=lib, libfile=libfile, mkdir=shell.mkdir_command(), touch=shell.touch_command()))
# Modify xilinxsim.ini file by including the extra local libraries
self.write(" && echo {lib}={lib} >> xilinxsim.ini) ".format(lib=lib))
self.write("|| {rm} {lib} \n".format(lib=lib, rm=shell.del_command()))
self.writeln()
def _makefile_sim_compilation(self):
"""Print the compile simulation target for Xilinx ISim"""
libs = self.get_all_libs()
......@@ -151,17 +164,5 @@ fuse:
\t\tfuse work.$(TOP_MODULE) -intstyle ise -incremental -o $(FUSE_OUTPUT)
""")
# ISim does not have a vmap command to insert additional libraries in
#.ini file.
for lib in libs:
libfile = lib + shell.makefile_slash_char() + "." + lib
self.write("{}:\n".format(libfile))
self.write("\t({mkdir} {lib} && {touch} {libfile}".format(
lib=lib, libfile=libfile, mkdir=shell.mkdir_command(), touch=shell.touch_command()))
self.write(" && echo {lib}={lib} >> xilinxsim.ini) ".format(lib=lib))
self.write("|| {rm} {lib} \n".format(lib=lib, rm=shell.del_command()))
self.write('\n')
# Modify xilinxsim.ini file by including the extra local libraries
# self.write(' '.join(["\t(echo """, lib+"="+lib+"/."+lib, ">>",
# "${XILINX_INI_PATH}/xilinxsim.ini"]))
self._makefile_sim_libraries(libs)
self._makefile_sim_dep_files()
......@@ -60,6 +60,9 @@ class MakefileSim(ToolMakefile):
name = dep_file.purename
return os.path.join(dep_file.library, name, ".{}_{}".format(name, dep_file.extension()))
def get_stamp_library(self, lib):
return lib + shell.makefile_slash_char() + "." + lib
def _makefile_touch_stamp_file(self):
self.write("\t\t@" + shell.mkdir_command() + " $(dir $@)")
self.writeln(" && " + shell.touch_command() + " $@\n")
......@@ -134,10 +137,7 @@ class MakefileSim(ToolMakefile):
def _makefile_sim_libs_variables(self, libs):
"""Create variables for libraries name"""
self.writeln('LIBS := ' + ' '.join(libs))
self.write('LIB_IND := ')
self.write(' '.join([lib + shell.makefile_slash_char() +
"." + lib for lib in libs]))
self.write('\n')
self.writeln('LIB_IND := ' + ' '.join([self.get_stamp_library(lib) for lib in libs]))
self.writeln()
def _makefile_sim_command(self):
......
......@@ -90,6 +90,16 @@ class MakefileVsim(MakefileSim):
else:
return None
def _makefile_sim_libraries(self, libs):
for lib in libs:
libfile = self.get_stamp_library(lib)
self.writeln("{}:".format(libfile))
self.writeln("\t(vlib {lib} && vmap $(VMAP_FLAGS) {lib} "
"&& {touch} {libfile}) || {rm} {lib}".format(
lib=lib, touch=shell.touch_command(), libfile=libfile,
rm=shell.del_command()))
self.writeln()
def _makefile_sim_compilation(self):
"""Write a properly formatted Makefile for the simulator.
The Makefile format is shared, but flags, dependencies, clean rules,
......@@ -111,11 +121,5 @@ class MakefileVsim(MakefileSim):
for filename, filesource in six.iteritems(self.copy_rules):
self.writeln("{}: {}".format(filename, filesource))
self.writeln("\t\t{} $< . 2>&1".format(shell.copy_command()))
for lib in libs:
self.write(lib + shell.makefile_slash_char() + "." + lib + ":\n")
self.writeln("\t(vlib {lib} && vmap $(VMAP_FLAGS) {lib} "
"&& {touch} {lib}{slash}.{lib}) || {rm} {lib}".format(
lib=lib, touch=shell.touch_command(), slash=shell.makefile_slash_char(),
rm=shell.del_command()))
self.writeln()
self._makefile_sim_libraries(libs)
self._makefile_sim_dep_files()
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment