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