blob: efc7bfa033da211252a2979cce04b442d56fd2fd [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."""
Diana Picus052b7d32017-11-24 16:19:41 +010028 consumer = MagicMock()
Diana Picus6b1935f2018-02-07 16:44:11 +010029 buildConfig = LLVMBuildConfig(self.sourceConfig, self.buildPath,
30 consumer)
31
32 buildConfig.cmake([], "Unix Makefiles")
Diana Picus052b7d32017-11-24 16:19:41 +010033 command, directory = consumer.consume.call_args[0]
34
35 self.assertEqual(directory, self.buildPath)
36
37 self.assertEqual(command[0], "cmake")
38 self.assertIn(self.sourcePath, command)
39 self.assertEqual(
40 command.index("-G") + 1,
41 command.index("Unix Makefiles"))
42
43 def test_configure_definitions(self):
44 """Test that we can define custom CMake variables."""
Diana Picus6b1935f2018-02-07 16:44:11 +010045 consumer = MagicMock()
46 buildConfig = LLVMBuildConfig(self.sourceConfig, self.buildPath,
47 consumer)
Diana Picus052b7d32017-11-24 16:19:41 +010048 flags = ["-DCMAKE_BUILD_TYPE=Release",
49 "-DCMAKE_CXX_FLAGS=\"-Oz -g\""]
50
Diana Picus6b1935f2018-02-07 16:44:11 +010051 buildConfig.cmake(flags, "Ninja")
Diana Picus052b7d32017-11-24 16:19:41 +010052 command, directory = consumer.consume.call_args[0]
53
54 self.assertEqual(directory, self.buildPath)
55
56 self.assertEqual(command[0], "cmake")
57 self.assertEqual(command.index("-G") + 1, command.index("Ninja"))
58 self.assertIn(self.sourcePath, command)
59 self.assertEqual(command.index(flags[0]) + 1, command.index(flags[1]))
60
61 def test_update_projects(self):
62 """
63 Test that we explicitly enable/disable subprojects based on what is
64 enabled in the source config.
65 """
66
67 def for_each_subproj(action):
68 # Pretend that clang is enabled and lld isn't.
69 clang_subproj = MagicMock()
70 clang_subproj.cmake_var = "BUILD_CLANG"
71 action(clang_subproj, True)
72
73 lld_subproj = MagicMock()
74 lld_subproj.cmake_var = "BUILD_LLD"
75 action(lld_subproj, False)
76
77 self.sourceConfig.for_each_subproj.side_effect = for_each_subproj
78
Diana Picus052b7d32017-11-24 16:19:41 +010079 consumer = MagicMock()
Diana Picus6b1935f2018-02-07 16:44:11 +010080 buildConfig = LLVMBuildConfig(self.sourceConfig, self.buildPath,
81 consumer)
82
83 buildConfig.cmake([], "Ninja")
Diana Picus052b7d32017-11-24 16:19:41 +010084 command, directory = consumer.consume.call_args[0]
85
86 self.assertEqual(directory, self.buildPath)
87
88 self.assertEqual(command[0], "cmake")
89 self.assertEqual(command.index("-G") + 1, command.index("Ninja"))
90 self.assertIn(self.sourcePath, command)
91 self.assertIn("-DBUILD_CLANG=ON", command)
92 self.assertIn("-DBUILD_LLD=OFF", command)