diff --git a/compiler/tests/30_openram_back_end_library_test.py b/compiler/tests/30_openram_back_end_library_test.py new file mode 100755 index 00000000..7ed9730b --- /dev/null +++ b/compiler/tests/30_openram_back_end_library_test.py @@ -0,0 +1,99 @@ +#!/usr/bin/env python3 +# See LICENSE for licensing information. +# +# Copyright (c) 2016-2022 Regents of the University of California, Santa Cruz +# All rights reserved. +# +import sys, os, re +import shutil +import getpass +import unittest +from testutils import * + +import openram +from openram import debug +from openram import OPTS + + +class openram_back_end_library_test(openram_test): + + def runTest(self): + global OPTS + # Set output name and path before calling init_openram() + out_file = "testsram" + out_path = "/tmp/testsram_{0}_{1}_{2}".format(OPTS.tech_name, getpass.getuser(), os.getpid()) + OPTS.output_name = out_file + OPTS.output_path = out_path + + OPENRAM_HOME = os.path.abspath(os.environ.get("OPENRAM_HOME")) + config_file = "{}/tests/configs/config_back_end".format(os.getenv("OPENRAM_HOME")) + # FIXME: is_unit_test=True causes error + openram.init_openram(config_file, is_unit_test=False) + + debug.info(1, "Testing top-level back-end sram_compiler.py with 2-bit, 16 word SRAM.") + + # make sure we start without the files existing + if os.path.exists(out_path): + shutil.rmtree(out_path, ignore_errors=True) + self.assertEqual(os.path.exists(out_path), False) + + try: + os.makedirs(out_path, 0o0750) + except OSError as e: + if e.errno == 17: # errno.EEXIST + os.chmod(out_path, 0o0750) + + # Update OPTS to match sram_compiler library test + OPTS.output_name = out_file + OPTS.output_path = out_path + OPTS.num_threads = 2 + + # Create an SRAM using the library + from openram.modules import sram + s = sram() + s.save() + + # assert an error until we actually check a resul + for extension in ["gds", "v", "lef", "sp", "lvs.sp"]: + filename = "{0}/{1}.{2}".format(out_path, out_file, extension) + debug.info(1, "Checking for file: " + filename) + self.assertEqual(os.path.exists(filename), True) + + # check if the auxiliary scripts were created + for script_name in ["run_drc.sh", "run_lvs.sh"]: + filename = "{0}/{1}".format(out_path, script_name) + debug.info(1, "Checking for file: " + filename) + self.assertEqual(os.path.exists(filename), True) + + # Make sure there is any .lib file + import glob + files = glob.glob('{0}/*.lib'.format(out_path)) + self.assertTrue(len(files)>0) + + # Make sure there is any .html file + if os.path.exists(out_path): + datasheets = glob.glob('{0}/*html'.format(out_path)) + self.assertTrue(len(datasheets)>0) + + # grep any errors from the output + output_log = open("{0}/{1}.log".format(out_path, out_file), "r") + output = output_log.read() + output_log.close() + self.assertEqual(len(re.findall('ERROR', output)), 0) + self.assertEqual(len(re.findall('WARNING', output)), 0) + + # now clean up the directory + if not OPTS.keep_temp: + if os.path.exists(out_path): + shutil.rmtree(out_path, ignore_errors=True) + self.assertEqual(os.path.exists(out_path), False) + + openram.end_openram() + + +# run the test from the command line +if __name__ == "__main__": + (OPTS, args) = openram.parse_args() + del sys.argv[1:] + header(__file__, OPTS.tech_name) + unittest.main(testRunner=debugTestRunner()) diff --git a/compiler/tests/30_openram_front_end_library_test.py b/compiler/tests/30_openram_front_end_library_test.py new file mode 100755 index 00000000..88d60f72 --- /dev/null +++ b/compiler/tests/30_openram_front_end_library_test.py @@ -0,0 +1,94 @@ +#!/usr/bin/env python3 +# See LICENSE for licensing information. +# +# Copyright (c) 2016-2022 Regents of the University of California, Santa Cruz +# All rights reserved. +# +import sys, os, re +import shutil +import getpass +import unittest +from testutils import * + +import openram +from openram import debug +from openram import OPTS + + +class openram_front_end_library_test(openram_test): + + def runTest(self): + global OPTS + # Set output name and path before calling init_openram() + out_file = "testsram" + out_path = "/tmp/testsram_{0}_{1}_{2}".format(OPTS.tech_name, getpass.getuser(), os.getpid()) + OPTS.output_name = out_file + OPTS.output_path = out_path + + OPENRAM_HOME = os.path.abspath(os.environ.get("OPENRAM_HOME")) + config_file = "{}/tests/configs/config_front_end".format(os.getenv("OPENRAM_HOME")) + # FIXME: is_unit_test=True causes error + openram.init_openram(config_file, is_unit_test=False) + + debug.info(1, "Testing top-level front-end library with 2-bit, 16 word SRAM.") + + # make sure we start without the files existing + if os.path.exists(out_path): + shutil.rmtree(out_path, ignore_errors=True) + self.assertEqual(os.path.exists(out_path), False) + + try: + os.makedirs(out_path, 0o0750) + except OSError as e: + if e.errno == 17: # errno.EEXIST + os.chmod(out_path, 0o0750) + + # Update OPTS to match sram_compiler library test + OPTS.output_name = out_file + OPTS.output_path = out_path + OPTS.check_lvsdrc = False + OPTS.num_threads = 2 + + # Create an SRAM using the library + from openram.modules import sram + s = sram() + s.save() + + # assert an error until we actually check a result + for extension in ["v", "lef", "sp", "gds"]: + filename = "{0}/{1}.{2}".format(out_path, out_file, extension) + debug.info(1, "Checking for file: " + filename) + self.assertEqual(os.path.exists(filename), True) + + # Make sure there is any .lib file + import glob + files = glob.glob('{0}/*.lib'.format(out_path)) + self.assertTrue(len(files)>0) + + # Make sure there is any .html file + if os.path.exists(out_path): + datasheets = glob.glob('{0}/*html'.format(out_path)) + self.assertTrue(len(datasheets)>0) + + # grep any errors from the output + output_log = open("{0}/{1}.log".format(out_path, out_file), "r") + output = output_log.read() + output_log.close() + self.assertEqual(len(re.findall('ERROR', output)), 0) + self.assertEqual(len(re.findall('WARNING', output)), 0) + + # now clean up the directory + if not OPTS.keep_temp: + if os.path.exists(out_path): + shutil.rmtree(out_path, ignore_errors=True) + self.assertEqual(os.path.exists(out_path), False) + + openram.end_openram() + + +# run the test from the command line +if __name__ == "__main__": + (OPTS, args) = openram.parse_args() + del sys.argv[1:] + header(__file__, OPTS.tech_name) + unittest.main(testRunner=debugTestRunner())