Introduce new headers whose inclusion forces linking and
[oota-llvm.git] / include / llvm / InitializeAllTargets.h
diff --git a/include/llvm/InitializeAllTargets.h b/include/llvm/InitializeAllTargets.h
new file mode 100644 (file)
index 0000000..c5fda7e
--- /dev/null
@@ -0,0 +1,34 @@
+//===- llvm/InitializeAllTargets.h - Initialize All Targets -----*- C++ -*-===//
+//
+//                      The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This header initializes all configured LLVM targets, ensuring that they
+// are registered.
+//
+//===----------------------------------------------------------------------===//
+#ifndef LLVM_INITIALIZE_ALL_TARGETS_H
+#define LLVM_INITIALIZE_ALL_TARGETS_H
+
+namespace llvm {
+
+  // Declare all of the target-initialization functions.
+#define LLVM_TARGET(TargetName) void Initialize##TargetName##Target();
+#include "llvm/Config/Targets.def"
+
+  namespace {
+    struct InitializeAllTargets {
+      InitializeAllTargets() {
+        // Call all of the target-initialization functions.
+#define LLVM_TARGET(TargetName) llvm::Initialize##TargetName##Target();
+#include "llvm/Config/Targets.def"
+      }
+    } DoInitializeAllTargets;
+  }
+} // end namespace llvm
+
+#endif // LLVM_INITIALIZE_ALL_TARGETS_H