summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorQuentin Colombet <qcolombet@apple.com>2016-02-11 19:18:27 +0000
committerQuentin Colombet <qcolombet@apple.com>2016-02-11 19:18:27 +0000
commitbde158cbc7fabe7b6d4cad12a6884a98623948b9 (patch)
tree21d6ca8435e23bd2a78ca66ed873d541c7d90bec /llvm/lib
parent33c641bddfa0584a01d5049a6ade61c579f0b283 (diff)
downloadbcm5719-llvm-bde158cbc7fabe7b6d4cad12a6884a98623948b9.tar.gz
bcm5719-llvm-bde158cbc7fabe7b6d4cad12a6884a98623948b9.zip
[CMake] Produce an empty library for GlobalISel when not building it.
The rational for this change is that LLVMBuild cannot express conditional dependencies. Therefore, when we start optionally using GlobalISel library for say AArch64, without that change, all the tools that use the AArch64 library would need to explicitly link with GlobalISel when we ask for it. This does not scale. Instead, we will set the dependencies between the target and GlobalISel and if we did not ask to build GlobalISel, the library will just be empty. Thanks to Chris Bieneman and Mehdi Animi for the idea. llvm-svn: 260566
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/CodeGen/CMakeLists.txt4
-rw-r--r--llvm/lib/CodeGen/GlobalISel/CMakeLists.txt22
-rw-r--r--llvm/lib/CodeGen/GlobalISel/EmptyFile.cpp19
3 files changed, 40 insertions, 5 deletions
diff --git a/llvm/lib/CodeGen/CMakeLists.txt b/llvm/lib/CodeGen/CMakeLists.txt
index 8e326fae4e3..de6d21dde5e 100644
--- a/llvm/lib/CodeGen/CMakeLists.txt
+++ b/llvm/lib/CodeGen/CMakeLists.txt
@@ -143,6 +143,4 @@ add_dependencies(LLVMCodeGen intrinsics_gen)
add_subdirectory(SelectionDAG)
add_subdirectory(AsmPrinter)
add_subdirectory(MIRParser)
-if(LLVM_BUILD_GLOBAL_ISEL)
- add_subdirectory(GlobalISel)
-endif()
+add_subdirectory(GlobalISel)
diff --git a/llvm/lib/CodeGen/GlobalISel/CMakeLists.txt b/llvm/lib/CodeGen/GlobalISel/CMakeLists.txt
index c18934acca1..a226dcc479d 100644
--- a/llvm/lib/CodeGen/GlobalISel/CMakeLists.txt
+++ b/llvm/lib/CodeGen/GlobalISel/CMakeLists.txt
@@ -1,6 +1,24 @@
+# List of all GlobalISel files.
+set(GLOBAL_ISEL_FILES
+ IRTranslator.cpp
+ MachineIRBuilder.cpp
+ )
+
+# Add GlobalISel files to the dependencies if the user wants to build it.
+if(LLVM_BUILD_GLOBAL_ISEL)
+ set(GLOBAL_ISEL_BUILD_FILES ${GLOBAL_ISEL_FILES})
+else()
+ set(GLOBAL_ISEL_BUILD_FILES"")
+ set(LLVM_OPTIONAL_SOURCES LLVMGlobalISel ${GLOBAL_ISEL_FILES})
+endif()
+
+
+# In LLVMBuild.txt files, it is not possible to mark a dependency to a
+# library as optional. So instead, generate an empty library if we did
+# not ask for it.
add_llvm_library(LLVMGlobalISel
- IRTranslator.cpp
- MachineIRBuilder.cpp
+ ${GLOBAL_ISEL_BUILD_FILES}
+ EmptyFile.cpp
)
add_dependencies(LLVMGlobalISel intrinsics_gen)
diff --git a/llvm/lib/CodeGen/GlobalISel/EmptyFile.cpp b/llvm/lib/CodeGen/GlobalISel/EmptyFile.cpp
new file mode 100644
index 00000000000..b87d9523660
--- /dev/null
+++ b/llvm/lib/CodeGen/GlobalISel/EmptyFile.cpp
@@ -0,0 +1,19 @@
+//===-- llvm/CodeGen/GlobalISel/EmptyFile.cpp ------ EmptyFile ---*- C++ -*-==//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+/// \file
+/// The purpose of this file is to please cmake by not creating an
+/// empty library when we do not build GlobalISel.
+/// \todo This file should be removed when GlobalISel is not optional anymore.
+//===----------------------------------------------------------------------===//
+
+// Anonymous namespace so that we do not step on anyone's toes.
+namespace {
+__attribute__ ((unused)) void foo(void) {
+}
+}
OpenPOWER on IntegriCloud