Move build_llvm into LLVMBuildConfig

This makes it possible to know what build tool to use in dry run mode
when the build directory has not been configured yet.

Change-Id: Ib620167c62f4c290621ace582d6ad893ad475bc3
diff --git a/tests/unittests/testbuildllvm.py b/tests/unittests/testbuildllvm.py
index 5a31eb3..a1f9282 100644
--- a/tests/unittests/testbuildllvm.py
+++ b/tests/unittests/testbuildllvm.py
@@ -1,4 +1,4 @@
-from modules.llvm import build_llvm
+from modules.llvm import LLVMBuildConfig
 
 import os
 
@@ -27,8 +27,9 @@
     def test_invalid_build_dir(self):
         self.buildDir = create_empty_dir()
 
+        buildConfig = LLVMBuildConfig(None, self.buildDir, None)
         with self.assertRaises(RuntimeError) as context:
-            build_llvm(None, self.buildDir)
+            buildConfig.build()
 
         self.assertRegex(
             str(context.exception),
@@ -39,7 +40,8 @@
         self.buildDir = create_dir_with_empty_file("build.ninja")
         consumer = MagicMock()
 
-        build_llvm(consumer, self.buildDir)
+        buildConfig = LLVMBuildConfig(None, self.buildDir, consumer)
+        buildConfig.build()
         command, directory = consumer.consume.call_args[0]
 
         self.assertEqual(command, ["ninja"])
@@ -49,7 +51,8 @@
         self.buildDir = create_dir_with_empty_file("Makefile")
         consumer = MagicMock()
 
-        build_llvm(consumer, self.buildDir)
+        buildConfig = LLVMBuildConfig(None, self.buildDir, consumer)
+        buildConfig.build()
         command, directory = consumer.consume.call_args[0]
 
         self.assertEqual(command, ["make"])
@@ -59,8 +62,25 @@
         self.buildDir = create_dir_with_empty_file("build.ninja")
         consumer = MagicMock()
 
-        build_llvm(consumer, self.buildDir, ["-t", "targets"])
+        buildConfig = LLVMBuildConfig(None, self.buildDir, consumer)
+        buildConfig.build(["-t", "targets"])
         command, directory = consumer.consume.call_args[0]
 
         self.assertEqual(command, ["ninja", "-t", "targets"])
         self.assertEqual(directory, self.buildDir)
+
+    def test_cmake_then_build(self):
+        """
+        Test that when using the same build config to both configure and build,
+        we use the build tool corresponding to the generator used for cmake
+        regardless of what the build directory already contains.
+        """
+        self.buildDir = create_dir_with_empty_file("Makefile")
+        sourceConfig = MagicMock()
+        consumer = MagicMock()
+
+        buildConfig = LLVMBuildConfig(sourceConfig, self.buildDir, consumer)
+        buildConfig.cmake([], "Ninja")
+        buildConfig.build()
+
+        consumer.consume.assert_called_with(["ninja"], self.buildDir)
diff --git a/tests/unittests/testllvmbuildconfig.py b/tests/unittests/testllvmbuildconfig.py
index 509e8a4..efc7bfa 100644
--- a/tests/unittests/testllvmbuildconfig.py
+++ b/tests/unittests/testllvmbuildconfig.py
@@ -25,10 +25,11 @@
 
     def test_configure_generator(self):
         """Test that we can use a custom generator for our CMake command."""
-        buildConfig = LLVMBuildConfig(self.sourceConfig, self.buildPath)
-
         consumer = MagicMock()
-        buildConfig.cmake(consumer, [], "Unix Makefiles")
+        buildConfig = LLVMBuildConfig(self.sourceConfig, self.buildPath,
+                                      consumer)
+
+        buildConfig.cmake([], "Unix Makefiles")
         command, directory = consumer.consume.call_args[0]
 
         self.assertEqual(directory, self.buildPath)
@@ -41,12 +42,13 @@
 
     def test_configure_definitions(self):
         """Test that we can define custom CMake variables."""
-        buildConfig = LLVMBuildConfig(self.sourceConfig, self.buildPath)
+        consumer = MagicMock()
+        buildConfig = LLVMBuildConfig(self.sourceConfig, self.buildPath,
+                                      consumer)
         flags = ["-DCMAKE_BUILD_TYPE=Release",
                  "-DCMAKE_CXX_FLAGS=\"-Oz -g\""]
 
-        consumer = MagicMock()
-        buildConfig.cmake(consumer, flags, "Ninja")
+        buildConfig.cmake(flags, "Ninja")
         command, directory = consumer.consume.call_args[0]
 
         self.assertEqual(directory, self.buildPath)
@@ -74,10 +76,11 @@
 
         self.sourceConfig.for_each_subproj.side_effect = for_each_subproj
 
-        buildConfig = LLVMBuildConfig(self.sourceConfig, self.buildPath)
-
         consumer = MagicMock()
-        buildConfig.cmake(consumer, [], "Ninja")
+        buildConfig = LLVMBuildConfig(self.sourceConfig, self.buildPath,
+                                      consumer)
+
+        buildConfig.cmake([], "Ninja")
         command, directory = consumer.consume.call_args[0]
 
         self.assertEqual(directory, self.buildPath)