blob: 509e8a44464dd59054a8f106004381076ae14c9b [file] [log] [blame]
Diana Picus052b7d32017-11-24 16:19:41 +01001from modules.llvm import LLVMBuildConfig
2
3from os import makedirs
4from shutil import rmtree
5
6from unittest import TestCase
7from unittest.mock import MagicMock
8from uuid import uuid4
9
10
11class TestLLVMBuildConfig(TestCase):
12 testdirprefix = "BuildConfigUT"
13
14 def setUp(self):
15 self.sourcePath = "llvm" + str(uuid4())
16 self.buildPath = "build" + str(uuid4())
17
18 sourceConfigAttrs = {"get_path.return_value": self.sourcePath}
19 self.sourceConfig = MagicMock(**sourceConfigAttrs)
20
21 makedirs(self.buildPath)
22
23 def tearDown(self):
24 rmtree(self.buildPath)
25
26 def test_configure_generator(self):
27 """Test that we can use a custom generator for our CMake command."""
28 buildConfig = LLVMBuildConfig(self.sourceConfig, self.buildPath)
29
30 consumer = MagicMock()
31 buildConfig.cmake(consumer, [], "Unix Makefiles")
32 command, directory = consumer.consume.call_args[0]
33
34 self.assertEqual(directory, self.buildPath)
35
36 self.assertEqual(command[0], "cmake")
37 self.assertIn(self.sourcePath, command)
38 self.assertEqual(
39 command.index("-G") + 1,
40 command.index("Unix Makefiles"))
41
42 def test_configure_definitions(self):
43 """Test that we can define custom CMake variables."""
44 buildConfig = LLVMBuildConfig(self.sourceConfig, self.buildPath)
45 flags = ["-DCMAKE_BUILD_TYPE=Release",
46 "-DCMAKE_CXX_FLAGS=\"-Oz -g\""]
47
48 consumer = MagicMock()
49 buildConfig.cmake(consumer, flags, "Ninja")
50 command, directory = consumer.consume.call_args[0]
51
52 self.assertEqual(directory, self.buildPath)
53
54 self.assertEqual(command[0], "cmake")
55 self.assertEqual(command.index("-G") + 1, command.index("Ninja"))
56 self.assertIn(self.sourcePath, command)
57 self.assertEqual(command.index(flags[0]) + 1, command.index(flags[1]))
58
59 def test_update_projects(self):
60 """
61 Test that we explicitly enable/disable subprojects based on what is
62 enabled in the source config.
63 """
64
65 def for_each_subproj(action):
66 # Pretend that clang is enabled and lld isn't.
67 clang_subproj = MagicMock()
68 clang_subproj.cmake_var = "BUILD_CLANG"
69 action(clang_subproj, True)
70
71 lld_subproj = MagicMock()
72 lld_subproj.cmake_var = "BUILD_LLD"
73 action(lld_subproj, False)
74
75 self.sourceConfig.for_each_subproj.side_effect = for_each_subproj
76
77 buildConfig = LLVMBuildConfig(self.sourceConfig, self.buildPath)
78
79 consumer = MagicMock()
80 buildConfig.cmake(consumer, [], "Ninja")
81 command, directory = consumer.consume.call_args[0]
82
83 self.assertEqual(directory, self.buildPath)
84
85 self.assertEqual(command[0], "cmake")
86 self.assertEqual(command.index("-G") + 1, command.index("Ninja"))
87 self.assertIn(self.sourcePath, command)
88 self.assertIn("-DBUILD_CLANG=ON", command)
89 self.assertIn("-DBUILD_LLD=OFF", command)