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