about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorAlex Crichton <alex@alexcrichton.com>2015-05-11 15:49:30 -0700
committerAlex Crichton <alex@alexcrichton.com>2015-05-19 10:53:07 -0700
commitb538189ba0abb77658c7b082d2d541daaaa7f80a (patch)
tree10bfbb144628df7710c2c196000818fcf01cabc8 /src
parentce8b317558a83021b7ea0f40c5719995e234da03 (diff)
downloadrust-b538189ba0abb77658c7b082d2d541daaaa7f80a.tar.gz
rust-b538189ba0abb77658c7b082d2d541daaaa7f80a.zip
mk: Generate a .def file for rustc_llvm on MSVC
Windows needs explicit exports of functions from DLLs but LLVM does not mention
any of its symbols as being export-able from a DLL. The compiler, however,
relies on being able to use LLVM symbols across DLL boundaries so we need to
force many of LLVM's symbols to be exported from `rustc_llvm.dll`. This commit
adds support for generation of a `rustc_llvm.def` file which is passed along to
the linker when generating `rustc_llvm.dll` which should keep all these symbols
exportable and usable.
Diffstat (limited to 'src')
-rw-r--r--src/etc/mklldef.py25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/etc/mklldef.py b/src/etc/mklldef.py
new file mode 100644
index 00000000000..d2f8ee469a4
--- /dev/null
+++ b/src/etc/mklldef.py
@@ -0,0 +1,25 @@
+# Copyright 2015 The Rust Project Developers. See the COPYRIGHT
+# file at the top-level directory of this distribution and at
+# http://rust-lang.org/COPYRIGHT.
+#
+# Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+# http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+# <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+# option. This file may not be copied, modified, or distributed
+# except according to those terms.
+
+import sys
+
+input_file = sys.argv[1]
+output_file = sys.argv[2]
+name = sys.argv[3]
+
+with open(input_file, 'r') as f:
+    with open(output_file, 'w') as g:
+        print >> g, 'LIBRARY ' + name
+        print >> g, 'EXPORTS'
+        for x in f:
+            x = str(x)
+            if not x.startswith('    pub fn LLVM'): continue
+            name = x[11:x.find('(')]
+            print >> g, '  ' + name