2017-08-15 22:12:40 +08:00
|
|
|
import os
|
|
|
|
import sys
|
|
|
|
import subprocess
|
|
|
|
import unittest
|
|
|
|
import tempfile
|
|
|
|
from artiq.coredevice.comm_mgmt import CommMgmt
|
|
|
|
from artiq.test.hardware_testbench import ExperimentCase
|
|
|
|
from artiq.experiment import *
|
|
|
|
|
|
|
|
|
|
|
|
artiq_root = os.getenv("ARTIQ_ROOT")
|
|
|
|
|
|
|
|
|
|
|
|
class CheckLog(EnvExperiment):
|
|
|
|
def build(self):
|
|
|
|
self.setattr_device("core")
|
|
|
|
|
|
|
|
@kernel
|
|
|
|
def run(self):
|
|
|
|
core_log("test_artiq_compile")
|
|
|
|
|
|
|
|
|
2022-03-06 18:24:57 +08:00
|
|
|
|
|
|
|
class _Precompile(EnvExperiment):
|
|
|
|
def build(self):
|
|
|
|
self.setattr_device("core")
|
|
|
|
self.x = 1
|
|
|
|
self.y = 2
|
|
|
|
self.z = 3
|
|
|
|
|
|
|
|
def set_attr(self, value):
|
|
|
|
self.x = value
|
|
|
|
|
|
|
|
@kernel
|
|
|
|
def the_kernel(self, arg):
|
|
|
|
self.set_attr(arg + self.y)
|
|
|
|
self.z = 23
|
|
|
|
|
|
|
|
def run(self):
|
|
|
|
precompiled = self.core.precompile(self.the_kernel, 40)
|
|
|
|
self.y = 0
|
|
|
|
precompiled()
|
|
|
|
|
|
|
|
|
2017-08-15 22:12:40 +08:00
|
|
|
class TestCompile(ExperimentCase):
|
|
|
|
def test_compile(self):
|
|
|
|
core_addr = self.device_mgr.get_desc("core")["arguments"]["host"]
|
|
|
|
mgmt = CommMgmt(core_addr)
|
|
|
|
mgmt.clear_log()
|
|
|
|
with tempfile.TemporaryDirectory() as tmp:
|
|
|
|
db_path = os.path.join(artiq_root, "device_db.py")
|
|
|
|
subprocess.call([sys.executable, "-m", "artiq.frontend.artiq_compile", "--device-db", db_path,
|
2019-09-09 15:16:33 +08:00
|
|
|
"-c", "CheckLog", "-o", os.path.join(tmp, "check_log.elf"), __file__])
|
2017-08-15 22:12:40 +08:00
|
|
|
subprocess.call([sys.executable, "-m", "artiq.frontend.artiq_run", "--device-db", db_path,
|
|
|
|
os.path.join(tmp, "check_log.elf")])
|
|
|
|
log = mgmt.get_log()
|
|
|
|
self.assertIn("test_artiq_compile", log)
|
|
|
|
mgmt.close()
|
2022-03-06 18:24:57 +08:00
|
|
|
|
|
|
|
def test_precompile(self):
|
|
|
|
exp = self.create(_Precompile)
|
|
|
|
exp.run()
|
|
|
|
self.assertEqual(exp.x, 42)
|
|
|
|
self.assertEqual(exp.z, 3)
|