diff options
| author | Alex Crichton <alex@alexcrichton.com> | 2015-05-11 15:49:30 -0700 |
|---|---|---|
| committer | Alex Crichton <alex@alexcrichton.com> | 2015-05-19 10:53:07 -0700 |
| commit | b538189ba0abb77658c7b082d2d541daaaa7f80a (patch) | |
| tree | 10bfbb144628df7710c2c196000818fcf01cabc8 /src | |
| parent | ce8b317558a83021b7ea0f40c5719995e234da03 (diff) | |
| download | rust-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.py | 25 |
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 |
