|
1 | 1 |
|
2 | 2 | # min-llvm-version 4.0
|
3 |
| -# ignore-mingw |
| 3 | +# ignore-msvc |
4 | 4 |
|
5 | 5 | -include ../tools.mk
|
6 | 6 |
|
7 |
| -# This test makes sure that the expected .llvmbc sections for use by |
8 |
| -# linker-based LTO are available in object files when compiling with |
9 |
| -# -Z cross-lang-lto |
| 7 | +# This test makes sure that the object files we generate are actually |
| 8 | +# LLVM bitcode files (as used by linker LTO plugins) when compiling with |
| 9 | +# -Z cross-lang-lto. |
10 | 10 |
|
11 |
| -LLVMBC_SECTION_NAME=\\.llvmbc |
| 11 | +ASSERT_IS_BITCODE_OBJ=llvm-bcanalyzer # this only succeeds for bitcode files |
| 12 | +EXTRACT_OBJS=(cd $(TMPDIR); rm -f ./*.o; llvm-ar x $(1)) |
12 | 13 |
|
13 |
| -ifeq ($(UNAME),Darwin) |
14 |
| - LLVMBC_SECTION_NAME=__bitcode |
15 |
| -endif |
16 |
| - |
17 |
| - |
18 |
| -OBJDUMP=llvm-objdump |
19 |
| -SECTION_HEADERS=$(OBJDUMP) -section-headers |
20 |
| - |
21 |
| -BUILD_LIB=$(RUSTC) lib.rs -Copt-level=2 -Z cross-lang-lto=no-link -Ccodegen-units=1 |
22 |
| - |
23 |
| -BUILD_EXE=$(RUSTC) main.rs -Copt-level=2 -Z cross-lang-lto=no-link -Ccodegen-units=1 --emit=obj |
| 14 | +BUILD_LIB=$(RUSTC) lib.rs -Copt-level=2 -Z cross-lang-lto=on -Ccodegen-units=1 |
| 15 | +BUILD_EXE=$(RUSTC) main.rs -Copt-level=2 -Z cross-lang-lto=on -Ccodegen-units=1 --emit=obj |
24 | 16 |
|
25 | 17 | all: staticlib staticlib-fat-lto staticlib-thin-lto rlib exe cdylib rdylib
|
26 | 18 |
|
27 | 19 | staticlib: lib.rs
|
28 | 20 | $(BUILD_LIB) --crate-type=staticlib -o $(TMPDIR)/liblib.a
|
29 |
| - [ "$$($(SECTION_HEADERS) $(TMPDIR)/liblib.a | grep -c $(LLVMBC_SECTION_NAME))" -ne "0" ] |
| 21 | + $(call EXTRACT_OBJS, liblib.a) |
| 22 | + $(ASSERT_IS_BITCODE_OBJ) $(TMPDIR)/liblib.lib0.rcgu.o |
30 | 23 |
|
31 | 24 | staticlib-fat-lto: lib.rs
|
32 | 25 | $(BUILD_LIB) --crate-type=staticlib -o $(TMPDIR)/liblib-fat-lto.a -Clto=fat
|
33 |
| - [ "$$($(SECTION_HEADERS) $(TMPDIR)/liblib-fat-lto.a | grep -c $(LLVMBC_SECTION_NAME))" -ne "0" ] |
| 26 | + $(call EXTRACT_OBJS, liblib-fat-lto.a) |
| 27 | + $(ASSERT_IS_BITCODE_OBJ) $(TMPDIR)/liblib-fat-lto.lib0.rcgu.o |
34 | 28 |
|
35 | 29 | staticlib-thin-lto: lib.rs
|
36 | 30 | $(BUILD_LIB) --crate-type=staticlib -o $(TMPDIR)/liblib-thin-lto.a -Clto=thin
|
37 |
| - [ "$$($(SECTION_HEADERS) $(TMPDIR)/liblib-thin-lto.a | grep -c $(LLVMBC_SECTION_NAME))" -ne "0" ] |
| 31 | + $(call EXTRACT_OBJS, liblib-thin-lto.a) |
| 32 | + $(ASSERT_IS_BITCODE_OBJ) $(TMPDIR)/liblib-thin-lto.lib0.rcgu.o |
38 | 33 |
|
39 | 34 | rlib: lib.rs
|
40 | 35 | $(BUILD_LIB) --crate-type=rlib -o $(TMPDIR)/liblib.rlib
|
41 |
| - [ "$$($(SECTION_HEADERS) $(TMPDIR)/liblib.rlib | grep -c $(LLVMBC_SECTION_NAME))" -ne "0" ] |
| 36 | + $(call EXTRACT_OBJS, liblib.rlib) |
| 37 | + $(ASSERT_IS_BITCODE_OBJ) $(TMPDIR)/liblib.lib0.rcgu.o |
42 | 38 |
|
43 | 39 | cdylib: lib.rs
|
44 | 40 | $(BUILD_LIB) --crate-type=cdylib --emit=obj -o $(TMPDIR)/cdylib.o
|
45 |
| - [ "$$($(SECTION_HEADERS) $(TMPDIR)/cdylib.o | grep -c $(LLVMBC_SECTION_NAME))" -ne "0" ] |
| 41 | + $(ASSERT_IS_BITCODE_OBJ) $(TMPDIR)/cdylib.o |
46 | 42 |
|
47 | 43 | rdylib: lib.rs
|
48 | 44 | $(BUILD_LIB) --crate-type=dylib --emit=obj -o $(TMPDIR)/rdylib.o
|
49 |
| - [ "$$($(SECTION_HEADERS) $(TMPDIR)/rdylib.o | grep -c $(LLVMBC_SECTION_NAME))" -ne "0" ] |
| 45 | + $(ASSERT_IS_BITCODE_OBJ) $(TMPDIR)/rdylib.o |
50 | 46 |
|
51 | 47 | exe: lib.rs
|
52 | 48 | $(BUILD_EXE) -o $(TMPDIR)/exe.o
|
53 |
| - [ "$$($(SECTION_HEADERS) $(TMPDIR)/exe.o | grep -c $(LLVMBC_SECTION_NAME))" -ne "0" ] |
| 49 | + $(ASSERT_IS_BITCODE_OBJ) $(TMPDIR)/exe.o |
0 commit comments