]> git.proxmox.com Git - rustc.git/blob - src/test/run-make/tools.mk
New upstream version 1.22.1+dfsg1
[rustc.git] / src / test / run-make / tools.mk
1 # These deliberately use `=` and not `:=` so that client makefiles can
2 # augment HOST_RPATH_DIR / TARGET_RPATH_DIR.
3 HOST_RPATH_ENV = \
4 $(LD_LIB_PATH_ENVVAR)="$(TMPDIR):$(HOST_RPATH_DIR):$($(LD_LIB_PATH_ENVVAR))"
5 TARGET_RPATH_ENV = \
6 $(LD_LIB_PATH_ENVVAR)="$(TMPDIR):$(TARGET_RPATH_DIR):$($(LD_LIB_PATH_ENVVAR))"
7
8 RUSTC_ORIGINAL := $(RUSTC)
9 BARE_RUSTC := $(HOST_RPATH_ENV) '$(RUSTC)'
10 RUSTC := $(BARE_RUSTC) --out-dir $(TMPDIR) -L $(TMPDIR) $(RUSTFLAGS)
11 #CC := $(CC) -L $(TMPDIR)
12 HTMLDOCCK := $(PYTHON) $(S)/src/etc/htmldocck.py
13
14 # This is the name of the binary we will generate and run; use this
15 # e.g. for `$(CC) -o $(RUN_BINFILE)`.
16 RUN_BINFILE = $(TMPDIR)/$(1)
17
18 # RUN and FAIL are basic way we will invoke the generated binary. On
19 # non-windows platforms, they set the LD_LIBRARY_PATH environment
20 # variable before running the binary.
21
22 RLIB_GLOB = lib$(1)*.rlib
23 BIN = $(1)
24
25 UNAME = $(shell uname)
26
27 ifeq ($(UNAME),Darwin)
28 RUN = $(TARGET_RPATH_ENV) $(RUN_BINFILE)
29 FAIL = $(TARGET_RPATH_ENV) $(RUN_BINFILE) && exit 1 || exit 0
30 DYLIB_GLOB = lib$(1)*.dylib
31 DYLIB = $(TMPDIR)/lib$(1).dylib
32 STATICLIB = $(TMPDIR)/lib$(1).a
33 STATICLIB_GLOB = lib$(1)*.a
34 else
35 ifdef IS_WINDOWS
36 RUN = PATH="$(PATH):$(TARGET_RPATH_DIR)" $(RUN_BINFILE)
37 FAIL = PATH="$(PATH):$(TARGET_RPATH_DIR)" $(RUN_BINFILE) && exit 1 || exit 0
38 DYLIB_GLOB = $(1)*.dll
39 DYLIB = $(TMPDIR)/$(1).dll
40 STATICLIB = $(TMPDIR)/$(1).lib
41 STATICLIB_GLOB = $(1)*.lib
42 BIN = $(1).exe
43 else
44 RUN = $(TARGET_RPATH_ENV) $(RUN_BINFILE)
45 FAIL = $(TARGET_RPATH_ENV) $(RUN_BINFILE) && exit 1 || exit 0
46 DYLIB_GLOB = lib$(1)*.so
47 DYLIB = $(TMPDIR)/lib$(1).so
48 STATICLIB = $(TMPDIR)/lib$(1).a
49 STATICLIB_GLOB = lib$(1)*.a
50 endif
51 endif
52
53 ifdef IS_MSVC
54 COMPILE_OBJ = $(CC) -c -Fo:`cygpath -w $(1)` $(2)
55 NATIVE_STATICLIB_FILE = $(1).lib
56 NATIVE_STATICLIB = $(TMPDIR)/$(call NATIVE_STATICLIB_FILE,$(1))
57 OUT_EXE=-Fe:`cygpath -w $(TMPDIR)/$(call BIN,$(1))` \
58 -Fo:`cygpath -w $(TMPDIR)/$(1).obj`
59 else
60 COMPILE_OBJ = $(CC) -c -o $(1) $(2)
61 NATIVE_STATICLIB_FILE = lib$(1).a
62 NATIVE_STATICLIB = $(call STATICLIB,$(1))
63 OUT_EXE=-o $(TMPDIR)/$(1)
64 endif
65
66
67 # Extra flags needed to compile a working executable with the standard library
68 ifdef IS_WINDOWS
69 ifdef IS_MSVC
70 EXTRACFLAGS := ws2_32.lib userenv.lib shell32.lib advapi32.lib
71 else
72 EXTRACFLAGS := -lws2_32 -luserenv
73 endif
74 else
75 ifeq ($(UNAME),Darwin)
76 EXTRACFLAGS := -lresolv
77 else
78 ifeq ($(UNAME),FreeBSD)
79 EXTRACFLAGS := -lm -lpthread -lgcc_s
80 else
81 ifeq ($(UNAME),Bitrig)
82 EXTRACFLAGS := -lm -lpthread
83 EXTRACXXFLAGS := -lc++ -lc++abi
84 else
85 ifeq ($(UNAME),SunOS)
86 EXTRACFLAGS := -lm -lpthread -lposix4 -lsocket -lresolv
87 else
88 ifeq ($(UNAME),OpenBSD)
89 EXTRACFLAGS := -lm -lpthread
90 RUSTC := $(RUSTC) -C linker="$(word 1,$(CC:ccache=))"
91 else
92 EXTRACFLAGS := -lm -lrt -ldl -lpthread
93 EXTRACXXFLAGS := -lstdc++
94 endif
95 endif
96 endif
97 endif
98 endif
99 endif
100
101 REMOVE_DYLIBS = rm $(TMPDIR)/$(call DYLIB_GLOB,$(1))
102 REMOVE_RLIBS = rm $(TMPDIR)/$(call RLIB_GLOB,$(1))
103
104 %.a: %.o
105 ar crus $@ $<
106 ifdef IS_MSVC
107 %.lib: lib%.o
108 $(MSVC_LIB) -out:`cygpath -w $@` $<
109 else
110 %.lib: lib%.o
111 ar crus $@ $<
112 endif
113 %.dylib: %.o
114 $(CC) -dynamiclib -Wl,-dylib -o $@ $<
115 %.so: %.o
116 $(CC) -o $@ $< -shared
117
118 ifdef IS_MSVC
119 %.dll: lib%.o
120 $(CC) $< -link -dll -out:`cygpath -w $@`
121 else
122 %.dll: lib%.o
123 $(CC) -o $@ $< -shared
124 endif
125
126 $(TMPDIR)/lib%.o: %.c
127 $(call COMPILE_OBJ,$@,$<)