blob: a1f928246ac202413c7c9619dc0385fc2e09d0a1 [file] [log] [blame]
Diana Picus6b1935f2018-02-07 16:44:11 +01001from modules.llvm import LLVMBuildConfig
Diana Picus37126b82018-01-19 16:14:26 +01002
3import os
4
5from shutil import rmtree
6from tempfile import mkdtemp
7
8from unittest import TestCase
9from unittest.mock import MagicMock
10
11
12def create_empty_dir():
13 return mkdtemp()
14
15
16def create_dir_with_empty_file(filename):
17 dir = create_empty_dir()
18 open(os.path.join(dir, filename), "wt").close()
19 return dir
20
21
22class TestBuildLLVM(TestCase):
23
24 def tearDown(self):
25 rmtree(self.buildDir)
26
27 def test_invalid_build_dir(self):
28 self.buildDir = create_empty_dir()
29
Diana Picus6b1935f2018-02-07 16:44:11 +010030 buildConfig = LLVMBuildConfig(None, self.buildDir, None)
Diana Picus37126b82018-01-19 16:14:26 +010031 with self.assertRaises(RuntimeError) as context:
Diana Picus6b1935f2018-02-07 16:44:11 +010032 buildConfig.build()
Diana Picus37126b82018-01-19 16:14:26 +010033
34 self.assertRegex(
35 str(context.exception),
36 "(.*\n)*Couldn't identify build system to use for {}(.*\n)*".format(
37 self.buildDir))
38
39 def test_ninja_build_dir(self):
40 self.buildDir = create_dir_with_empty_file("build.ninja")
41 consumer = MagicMock()
42
Diana Picus6b1935f2018-02-07 16:44:11 +010043 buildConfig = LLVMBuildConfig(None, self.buildDir, consumer)
44 buildConfig.build()
Diana Picus37126b82018-01-19 16:14:26 +010045 command, directory = consumer.consume.call_args[0]
46
47 self.assertEqual(command, ["ninja"])
48 self.assertEqual(directory, self.buildDir)
49
50 def test_make_build_dir(self):
51 self.buildDir = create_dir_with_empty_file("Makefile")
52 consumer = MagicMock()
53
Diana Picus6b1935f2018-02-07 16:44:11 +010054 buildConfig = LLVMBuildConfig(None, self.buildDir, consumer)
55 buildConfig.build()
Diana Picus37126b82018-01-19 16:14:26 +010056 command, directory = consumer.consume.call_args[0]
57
58 self.assertEqual(command, ["make"])
59 self.assertEqual(directory, self.buildDir)
60
61 def test_flags(self):
62 self.buildDir = create_dir_with_empty_file("build.ninja")
63 consumer = MagicMock()
64
Diana Picus6b1935f2018-02-07 16:44:11 +010065 buildConfig = LLVMBuildConfig(None, self.buildDir, consumer)
66 buildConfig.build(["-t", "targets"])
Diana Picus37126b82018-01-19 16:14:26 +010067 command, directory = consumer.consume.call_args[0]
68
69 self.assertEqual(command, ["ninja", "-t", "targets"])
70 self.assertEqual(directory, self.buildDir)
Diana Picus6b1935f2018-02-07 16:44:11 +010071
72 def test_cmake_then_build(self):
73 """
74 Test that when using the same build config to both configure and build,
75 we use the build tool corresponding to the generator used for cmake
76 regardless of what the build directory already contains.
77 """
78 self.buildDir = create_dir_with_empty_file("Makefile")
79 sourceConfig = MagicMock()
80 consumer = MagicMock()
81
82 buildConfig = LLVMBuildConfig(sourceConfig, self.buildDir, consumer)
83 buildConfig.cmake([], "Ninja")
84 buildConfig.build()
85
86 consumer.consume.assert_called_with(["ninja"], self.buildDir)