about summary refs log tree commit diff
diff options
context:
space:
mode:
authorCameron Hart <cameron.hart@gmail.com>2016-07-24 19:49:10 +1000
committerCameron Hart <cameron.hart@gmail.com>2016-07-24 19:49:10 +1000
commitce50bedd8ce2bca3bde12f6397f6d13889d2dae1 (patch)
treee3b8496be3f3915c730b7b6d8a6a093ce59d0c16
parent6aee1e2a67d0608257a1087477e11e5b37e48d87 (diff)
Pass -DLLVM_RUSTLLVM to compile against rust llvm fork.
If using system llvm don't try use modifications made in the fork.
-rw-r--r--mk/rustllvm.mk6
-rw-r--r--src/rustllvm/PassWrapper.cpp20
2 files changed, 23 insertions, 3 deletions
diff --git a/mk/rustllvm.mk b/mk/rustllvm.mk
index 834a11d37fa..26b593c8c47 100644
--- a/mk/rustllvm.mk
+++ b/mk/rustllvm.mk
@@ -32,6 +32,11 @@ RUSTLLVM_INCS_$(1) = $$(LLVM_EXTRA_INCDIRS_$(1)) \
                      $$(call CFG_CC_INCLUDE_$(1),$$(S)src/rustllvm/include)
 RUSTLLVM_OBJS_OBJS_$(1) := $$(RUSTLLVM_OBJS_CS_$(1):rustllvm/%.cpp=$(1)/rustllvm/%.o)
 
+# Flag that we are building with Rust's llvm fork
+ifeq ($(CFG_LLVM_ROOT),)
+RUSTLLVM_CXXFLAGS_$(1) := -DLLVM_RUSTLLVM
+endif
+
 # Note that we appease `cl.exe` and its need for some sort of exception
 # handling flag with the `EHsc` argument here as well.
 ifeq ($$(findstring msvc,$(1)),msvc)
@@ -55,6 +60,7 @@ $(1)/rustllvm/%.o: $(S)src/rustllvm/%.cpp $$(MKFILE_DEPS) $$(LLVM_CONFIG_$(1))
 	$$(Q)$$(call CFG_COMPILE_CXX_$(1), $$@,) \
 		$$(subst  /,//,$$(LLVM_CXXFLAGS_$(1))) \
 		$$(RUSTLLVM_COMPONENTS_$(1)) \
+		$$(RUSTLLVM_CXXFLAGS_$(1)) \
 		$$(EXTRA_RUSTLLVM_CXXFLAGS_$(1)) \
 		$$(RUSTLLVM_INCS_$(1)) \
 		$$<
diff --git a/src/rustllvm/PassWrapper.cpp b/src/rustllvm/PassWrapper.cpp
index 962e81b018b..b94e667701c 100644
--- a/src/rustllvm/PassWrapper.cpp
+++ b/src/rustllvm/PassWrapper.cpp
@@ -162,6 +162,7 @@ LLVMRustHasFeature(LLVMTargetMachineRef TM,
     return (Bits & FeatureEntry->Value) == FeatureEntry->Value;
 }
 
+#if LLVM_RUSTLLVM
 /// getLongestEntryLength - Return the length of the longest entry in the table.
 ///
 static size_t getLongestEntryLength(ArrayRef<SubtargetFeatureKV> Table) {
@@ -178,7 +179,7 @@ LLVMRustPrintTargetCPUs(LLVMTargetMachineRef TM) {
     const ArrayRef<SubtargetFeatureKV> CPUTable = MCInfo->getCPUTable();
     unsigned MaxCPULen = getLongestEntryLength(CPUTable);
 
-    printf("Available CPUs for this target:\n\n");
+    printf("Available CPUs for this target:\n");
     for (auto &CPU : CPUTable)
         printf("    %-*s - %s.\n", MaxCPULen, CPU.Key, CPU.Desc);
     printf("\n");
@@ -191,15 +192,28 @@ LLVMRustPrintTargetFeatures(LLVMTargetMachineRef TM) {
     const ArrayRef<SubtargetFeatureKV> FeatTable = MCInfo->getFeatureTable();
     unsigned MaxFeatLen = getLongestEntryLength(FeatTable);
 
-    printf("Available features for this target:\n\n");
+    printf("Available features for this target:\n");
     for (auto &Feature : FeatTable)
         printf("    %-*s - %s.\n", MaxFeatLen, Feature.Key, Feature.Desc);
     printf("\n");
 
     printf("Use +feature to enable a feature, or -feature to disable it.\n"
-            "For example, rustc -C -target-cpu=mycpu -C target-feature=+feature1,-feature2\n");
+            "For example, rustc -C -target-cpu=mycpu -C target-feature=+feature1,-feature2\n\n");
 }
 
+#else
+
+extern "C" void
+LLVMRustPrintTargetCPUs(LLVMTargetMachineRef) {
+    printf("Target CPU help is not supported by this LLVM version.\n\n");
+}
+
+extern "C" void
+LLVMRustPrintTargetFeatures(LLVMTargetMachineRef) {
+    printf("Target features help is not supported by this LLVM version.\n\n");
+}
+#endif
+
 extern "C" LLVMTargetMachineRef
 LLVMRustCreateTargetMachine(const char *triple,
                             const char *cpu,