vendor.lattice_{ecp5,machxo_2_3l}: remove -forceAll from Diamond scripts.
[nmigen.git] / tests / test_toolchain_cxx.py
1 import os
2 import ctypes
3 import tempfile
4 import unittest
5
6 from nmigen._toolchain.cxx import *
7
8
9 class ToolchainCxxTestCase(unittest.TestCase):
10 def setUp(self):
11 self.include_dir = None
12 self.build_dir = None
13
14 def tearDown(self):
15 if self.include_dir:
16 self.include_dir.cleanup()
17 if self.build_dir:
18 self.build_dir.cleanup()
19
20 def test_filename(self):
21 self.build_dir, filename = build_cxx(
22 cxx_sources={"test.cc": ""},
23 output_name="answer",
24 include_dirs=[],
25 macros=[],
26 )
27 self.assertTrue(filename.startswith("answer"))
28
29 def test_simple(self):
30 self.build_dir, filename = build_cxx(
31 cxx_sources={"test.cc": """
32 extern "C" int answer() { return 42; }
33 """},
34 output_name="answer",
35 include_dirs=[],
36 macros=[],
37 )
38 library = ctypes.cdll.LoadLibrary(os.path.join(self.build_dir.name, filename))
39 self.assertEqual(library.answer(), 42)
40
41 def test_macro(self):
42 self.build_dir, filename = build_cxx(
43 cxx_sources={"test.cc": """
44 extern "C" int answer() { return ANSWER; }
45 """},
46 output_name="answer",
47 include_dirs=[],
48 macros=["ANSWER=42"],
49 )
50 library = ctypes.cdll.LoadLibrary(os.path.join(self.build_dir.name, filename))
51 self.assertEqual(library.answer(), 42)
52
53 def test_include(self):
54 self.include_dir = tempfile.TemporaryDirectory(prefix="nmigen_hxx_")
55 with open(os.path.join(self.include_dir.name, "answer.h"), "w") as f:
56 f.write("#define ANSWER 42")
57
58 self.build_dir, filename = build_cxx(
59 cxx_sources={"test.cc": """
60 #include <answer.h>
61 extern "C" int answer() { return ANSWER; }
62 """},
63 output_name="answer",
64 include_dirs=[self.include_dir.name],
65 macros=[],
66 )
67 library = ctypes.cdll.LoadLibrary(os.path.join(self.build_dir.name, filename))
68 self.assertEqual(library.answer(), 42)