]> git.proxmox.com Git - rustc.git/blame - src/etc/make-win-dist.py
Imported Upstream version 1.0.0-alpha.2
[rustc.git] / src / etc / make-win-dist.py
CommitLineData
1a4d82fc
JJ
1# Copyright 2013-2014 The Rust Project Developers. See the COPYRIGHT
2# file at the top-level directory of this distribution and at
3# http://rust-lang.org/COPYRIGHT.
4#
5# Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6# http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7# <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8# option. This file may not be copied, modified, or distributed
9# except according to those terms.
10
11# Script parameters:
12# argv[1] = rust component root,
13# argv[2] = gcc component root,
14# argv[3] = target triple
15# The first two correspond to the two installable components defined in the setup script.
16
85aaf69f
SL
17import sys
18import os
19import shutil
20import subprocess
21
1a4d82fc
JJ
22
23def find_files(files, path):
24 found = []
25 for fname in files:
26 for dir in path:
27 filepath = os.path.normpath(os.path.join(dir, fname))
28 if os.path.isfile(filepath):
29 found.append(filepath)
30 break
31 else:
32 raise Exception("Could not find '%s' in %s" % (fname, path))
33 return found
34
85aaf69f 35
1a4d82fc
JJ
36def make_win_dist(rust_root, gcc_root, target_triple):
37 # Ask gcc where it keeps its stuff
38 gcc_out = subprocess.check_output(["gcc.exe", "-print-search-dirs"])
39 bin_path = os.environ["PATH"].split(os.pathsep)
40 lib_path = []
41 for line in gcc_out.splitlines():
42 key, val = line.split(':', 1)
43 if key == "programs":
44 bin_path.extend(val.lstrip(' =').split(';'))
45 elif key == "libraries":
46 lib_path.extend(val.lstrip(' =').split(';'))
47
48 target_tools = ["gcc.exe", "ld.exe", "ar.exe", "dlltool.exe", "windres.exe"]
49
50 rustc_dlls = ["libstdc++-6.dll"]
51 if target_triple.startswith("i686-"):
52 rustc_dlls.append("libgcc_s_dw2-1.dll")
53 else:
54 rustc_dlls.append("libgcc_s_seh-1.dll")
55
56 target_libs = [ # MinGW libs
57 "crtbegin.o",
58 "crtend.o",
59 "crt2.o",
60 "dllcrt2.o",
61 "libgcc.a",
62 "libgcc_eh.a",
63 "libgcc_s.a",
64 "libm.a",
65 "libmingw32.a",
66 "libmingwex.a",
67 "libstdc++.a",
68 "libiconv.a",
69 "libmoldname.a",
70 # Windows import libs
71 "libadvapi32.a",
72 "libbcrypt.a",
73 "libcomctl32.a",
74 "libcomdlg32.a",
75 "libcrypt32.a",
76 "libgdi32.a",
77 "libimagehlp.a",
78 "libiphlpapi.a",
79 "libkernel32.a",
80 "libmsvcrt.a",
81 "libodbc32.a",
82 "libole32.a",
83 "liboleaut32.a",
84 "libopengl32.a",
85 "libpsapi.a",
86 "librpcrt4.a",
87 "libsetupapi.a",
88 "libshell32.a",
89 "libuser32.a",
85aaf69f 90 "libuserenv.a",
1a4d82fc
JJ
91 "libuuid.a",
92 "libwinhttp.a",
93 "libwinmm.a",
94 "libwinspool.a",
95 "libws2_32.a",
96 "libwsock32.a",
97 ]
98
99 # Find mingw artifacts we want to bundle
100 target_tools = find_files(target_tools, bin_path)
101 rustc_dlls = find_files(rustc_dlls, bin_path)
102 target_libs = find_files(target_libs, lib_path)
103
104 # Copy runtime dlls next to rustc.exe
105 dist_bin_dir = os.path.join(rust_root, "bin")
106 for src in rustc_dlls:
107 shutil.copy(src, dist_bin_dir)
108
109 # Copy platform tools to platform-specific bin directory
110 target_bin_dir = os.path.join(gcc_root, "bin", "rustlib", target_triple, "bin")
111 if not os.path.exists(target_bin_dir):
112 os.makedirs(target_bin_dir)
113 for src in target_tools:
114 shutil.copy(src, target_bin_dir)
115
116 # Copy platform libs to platform-specific lib directory
117 target_lib_dir = os.path.join(gcc_root, "bin", "rustlib", target_triple, "lib")
118 if not os.path.exists(target_lib_dir):
119 os.makedirs(target_lib_dir)
120 for src in target_libs:
121 shutil.copy(src, target_lib_dir)
122
85aaf69f 123if __name__ == "__main__":
1a4d82fc 124 make_win_dist(sys.argv[1], sys.argv[2], sys.argv[3])