@@ -34,6 +34,7 @@ DSYMUTIL := true
34
34
35
35
ifeq ($(CFG_OSTYPE ) , FreeBSD)
36
36
CFG_RUNTIME := librustrt.so
37
+ CFG_SUPPORT := librustllvm.so
37
38
CFG_STDLIB := libstd.so
38
39
CFG_GCC_CFLAGS += -fPIC -march=i686 -I/usr/local/include
39
40
CFG_GCC_LINK_FLAGS += -shared -fPIC -lpthread -lrt
47
48
48
49
ifeq ($(CFG_OSTYPE ) , Linux)
49
50
CFG_RUNTIME := librustrt.so
51
+ CFG_SUPPORT := librustllvm.so
50
52
CFG_STDLIB := libstd.so
51
53
CFG_GCC_CFLAGS += -fPIC -march=i686
52
54
CFG_GCC_LINK_FLAGS += -shared -fPIC -ldl -lpthread -lrt
60
62
61
63
ifeq ($(CFG_OSTYPE ) , Darwin)
62
64
CFG_RUNTIME := librustrt.dylib
65
+ CFG_SUPPORT := librustllvm.dylib
63
66
CFG_STDLIB := libstd.dylib
64
67
CFG_UNIXY := 1
65
68
CFG_GCC_LINK_FLAGS += -dynamiclib -lpthread
@@ -85,8 +88,8 @@ ifdef CFG_WINDOWSY
85
88
CFG_NATIVE := 1
86
89
endif
87
90
CFG_RUNTIME := rustrt.dll
91
+ CFG_SUPPORT := rustllvm.dll
88
92
CFG_STDLIB := std.dll
89
- CFG_OBJ_SUFFIX := .o
90
93
CFG_EXE_SUFFIX := .exe
91
94
CFG_BOOT := ./rustboot.exe
92
95
CFG_RUSTC := ./rustc.exe
@@ -101,20 +104,19 @@ ifdef CFG_UNIXY
101
104
CFG_INFO := $(info cfg: unix-y environment)
102
105
CFG_BOOT := ./rustboot
103
106
CFG_RUSTC := ./rustc
104
- CFG_OBJ_SUFFIX := .o
105
107
CFG_RUN_TARG = LD_LIBRARY_PATH=. $(CFG_VALGRIND ) $(1 )
106
108
CFG_GCC := 1
107
109
ifdef MINGW_CROSS
108
110
CFG_INFO := $(info cfg: mingw-cross)
109
111
CFG_GCC_CROSS := i586-mingw32msvc-
110
112
CFG_BOOT_FLAGS += -t win32-x86-pe
111
113
CFG_RUNTIME := rustrt.dll
114
+ CFG_SUPPORT := rustllvm.dll
112
115
CFG_STDLIB := std.dll
113
116
CFG_RUSTC := ./rustc.exe
114
117
ifdef CFG_VALGRIND
115
118
CFG_VALGRIND += wine
116
119
endif
117
- CFG_OBJ_SUFFIX := .o
118
120
CFG_EXE_SUFFIX := .exe
119
121
CFG_GCC_CFLAGS := -march=i686
120
122
CFG_GCC_LINK_FLAGS := -shared
@@ -182,7 +184,7 @@ endif
182
184
ifneq ($(CFG_LLVM_CONFIG ) ,)
183
185
CFG_LLVM_VERSION := $(shell $(CFG_LLVM_CONFIG ) --version)
184
186
$(info cfg : found llvm-config at $(CFG_LLVM_CONFIG ) )
185
- CFG_LLVM_ALLOWED_VERSIONS := 2.8svn 2.8 2.9svn
187
+ CFG_LLVM_ALLOWED_VERSIONS := 2.8svn 2.8 2.9svn 3.0svn
186
188
ifneq ($(findstring $(CFG_LLVM_VERSION),$(CFG_LLVM_ALLOWED_VERSIONS)),)
187
189
$(info cfg : using LLVM version $(CFG_LLVM_VERSION ) )
188
190
else
@@ -196,6 +198,10 @@ ifdef CFG_LLVM_CONFIG
196
198
LLC := "$(shell $(CFG_LLVM_CONFIG ) --bindir) /llc"
197
199
CFG_LLC_CFLAGS := -march=x86
198
200
LLVM-DIS := "$(shell $(CFG_LLVM_CONFIG ) --bindir) /llvm-dis"
201
+ CFG_LLVM_INCDIR := $(shell $(CFG_LLVM_CONFIG ) --includedir)
202
+ CFG_LLVM_CXXFLAGS := $(shell $(CFG_LLVM_CONFIG ) --cxxflags)
203
+ CFG_LLVM_LDFLAGS := $(shell $(CFG_LLVM_CONFIG ) --ldflags)
204
+ CFG_LLVM_LIBS := $(shell $(CFG_LLVM_CONFIG ) --libs)
199
205
endif
200
206
201
207
MKFILES := Makefile
@@ -302,15 +308,22 @@ RUNTIME_HDR := rt/globals.h \
302
308
rt/test/rust_test_util.h
303
309
304
310
RUNTIME_INCS := -Irt/isaac -Irt/uthash
305
- RUNTIME_OBJS := $(RUNTIME_CS:.cpp=$(CFG_OBJ_SUFFIX ) )
306
- RUNTIME_LIBS := $(CFG_RUNTIME_LIBS )
311
+ RUNTIME_OBJS := $(RUNTIME_CS:.cpp=.o )
312
+
313
+ SUPPORT_CS := llvmext/Object.cpp
314
+
315
+ SUPPORT_HDR := llvmext/include/llvm-c/Object.h
316
+
317
+ SUPPORT_INCS := -iquote $(CFG_LLVM_INCDIR ) -iquote llvmext/include
318
+ SUPPORT_OBJS := $(SUPPORT_CS:.cpp=.o )
319
+ SUPPORT_LIBS := $(CFG_LLVM_LDFLAGS ) $(CFG_LLVM_LIBS )
307
320
308
321
STDLIB_CRATE := lib/std.rc
309
322
STDLIB_INPUTS := $(wildcard lib/* .rc lib/* .rs lib/* /* .rs)
310
323
COMPILER_CRATE := comp/rustc.rc
311
- COMPILER_INPUTS := $(wildcard comp/* .rc comp/* .rs comp/* /* .rs)
324
+ COMPILER_INPUTS := $(wildcard comp/rustc .rc comp/* .rs comp/* /* .rs)
312
325
313
- GENERATED := boot/fe/lexer.ml boot/util/version.ml
326
+ GENERATED := boot/fe/lexer.ml boot/util/version.ml glue.o
314
327
315
328
all : $(CFG_RUSTC ) $(MKFILES ) $(GENERATED )
316
329
@@ -325,14 +338,24 @@ $(CFG_RUNTIME): $(RUNTIME_OBJS) $(MKFILES) $(RUNTIME_HDR)
325
338
@$(call CFG_ECHO, compile: $< )
326
339
$(CFG_QUIET )$(call CFG_LINK_C, $@ ) $(RUNTIME_OBJS )
327
340
341
+ $(CFG_SUPPORT ) : $(SUPPORT_OBJS ) $(MKFILES ) $(SUPPORT_HDR )
342
+ @$(call CFG_ECHO, compile: $< )
343
+ $(CFG_QUIET )$(call CFG_LINK_C, $@ $(CFG_LLVM_LDFLAGS ) $(CFG_LLVM_LIBS ) ) \
344
+ $(SUPPORT_OBJS )
345
+
328
346
$(CFG_STDLIB ) : $(STDLIB_CRATE ) $(CFG_BOOT ) $(MKFILES )
329
347
@$(call CFG_ECHO, compile: $< )
330
348
$(BOOT ) -shared -o $@ $(STDLIB_CRATE )
331
349
332
- % $( CFG_OBJ_SUFFIX ) : % .cpp $(MKFILES )
350
+ rt/ % .o : rt/ % .cpp $(MKFILES )
333
351
@$(call CFG_ECHO, compile: $< )
334
352
$(CFG_QUIET )$(call CFG_COMPILE_C, $@ , $(RUNTIME_INCS ) ) $<
335
353
354
+ llvmext/% .o : llvmext/% .cpp $(MKFILES )
355
+ @$(call CFG_ECHO, compile: $< )
356
+ $(CFG_QUIET )$(call CFG_COMPILE_C, $@ , $(CFG_LLVM_CXXFLAGS ) \
357
+ $(SUPPORT_INCS ) ) $<
358
+
336
359
ifdef CFG_NATIVE
337
360
$(CFG_BOOT ) : $(BOOT_CMXS ) $(MKFILES )
338
361
@$(call CFG_ECHO, compile: $< )
@@ -363,13 +386,18 @@ endif
363
386
# Main compiler targets and rules
364
387
# #####################################################################
365
388
366
- $(CFG_RUSTC ) : $(COMPILER_INPUTS ) $(CFG_BOOT ) $(CFG_RUNTIME ) $(CFG_STDLIB )
389
+ $(CFG_RUSTC ) : $(COMPILER_INPUTS ) $(CFG_BOOT ) $(CFG_RUNTIME ) $(CFG_STDLIB ) \
390
+ $(CFG_SUPPORT )
367
391
@$(call CFG_ECHO, compile: $< )
368
392
$(BOOT ) -minimal -o $@ $<
369
393
$(CFG_QUIET ) chmod 0755 $@
370
394
395
+ glue.bc : $(CFG_RUSTC ) $(CFG_RUNTIME ) $(CFG_STDLIB )
396
+ @$(call CFG_ECHO, generate: $@ )
397
+ $(RUSTC ) -o $@ -glue
398
+
371
399
self : $(CFG_RUSTC )
372
- @$(call CFG_ECHO, compile: $< )
400
+ @$(call CFG_ECHO, compile: $( COMPILER_CRATE ) )
373
401
$(RUSTC ) $(COMPILER_CRATE )
374
402
375
403
@@ -402,19 +430,23 @@ TEST_XFAILS_BOOT := $(TASK_XFAILS) \
402
430
$(NOMINAL_TAG_XFAILS ) \
403
431
$(CONST_TAG_XFAILS ) \
404
432
test/run-pass/arith-unsigned.rs \
433
+ test/run-pass/box-compare.rs \
405
434
test/run-pass/child-outlives-parent.rs \
406
435
test/run-pass/clone-with-exterior.rs \
407
436
test/run-pass/constrained-type.rs \
408
437
test/run-pass/destructor-ordering.rs \
409
438
test/run-pass/obj-as.rs \
410
439
test/run-pass/vec-slice.rs \
411
440
test/run-pass/fn-lval.rs \
441
+ test/run-pass/generic-bind-2.rs \
412
442
test/run-pass/generic-fn-box.rs \
413
443
test/run-pass/generic-tup.rs \
414
444
test/run-pass/iter-ret.rs \
445
+ test/run-pass/leak-tag-copy.rs \
415
446
test/run-pass/lib-io.rs \
416
447
test/run-pass/mlist-cycle.rs \
417
448
test/run-pass/obj-as.rs \
449
+ test/run-pass/seq-compare.rs \
418
450
test/run-pass/task-comm.rs \
419
451
test/run-pass/task-comm-3.rs \
420
452
test/run-pass/vec-slice.rs \
@@ -439,24 +471,11 @@ TEST_XFAILS_RUSTC := $(addprefix test/run-pass/, \
439
471
basic-1.rs \
440
472
basic-2.rs \
441
473
basic.rs \
442
- bind-obj-ctor.rs \
443
474
child-outlives-parent.rs \
444
475
clone-with-exterior.rs \
445
476
comm.rs \
446
477
constrained-type.rs \
447
478
destructor-ordering.rs \
448
- drop-parametric-closure-with-bound-box.rs \
449
- export-non-interference.rs \
450
- foreach-nested-2.rs \
451
- foreach-nested.rs \
452
- foreach-put-structured.rs \
453
- foreach-simple-outer-slot.rs \
454
- generic-fn-twice.rs \
455
- generic-iter-frame.rs \
456
- generic-recursive-tag.rs \
457
- generic-tag-alt.rs \
458
- generic-tag-values.rs \
459
- iter-range.rs \
460
479
iter-ret.rs \
461
480
lazychan.rs \
462
481
lib-bitv.rs \
@@ -478,7 +497,6 @@ TEST_XFAILS_RUSTC := $(addprefix test/run-pass/, \
478
497
mutable-alias-vec.rs \
479
498
obj-as.rs \
480
499
obj-dtor.rs \
481
- obj-return-polytypes.rs \
482
500
pred.rs \
483
501
preempt.rs \
484
502
rt-circular-buffer.rs \
@@ -511,13 +529,11 @@ TEST_XFAILS_RUSTC := $(addprefix test/run-pass/, \
511
529
threads.rs \
512
530
type-sizes.rs \
513
531
typestate-cfg-nesting.rs \
514
- use-import-export.rs \
515
532
user.rs \
516
533
utf8.rs \
517
534
vec-alloc-append.rs \
518
535
vec-append.rs \
519
536
vec-slice.rs \
520
- while-prelude-drop.rs \
521
537
while-with-break.rs \
522
538
yield.rs \
523
539
yield2.rs \
@@ -764,9 +780,9 @@ test/bench/shootout/%.boot$(CFG_EXE_SUFFIX): \
764
780
@$(call CFG_ECHO, assemble [llvm]: $< )
765
781
$(CFG_QUIET ) gcc $(CFG_GCC_CFLAGS ) -o $@ -c $<
766
782
767
- % .rustc$(CFG_EXE_SUFFIX ) : % .o $(CFG_RUNTIME )
783
+ % .rustc$(CFG_EXE_SUFFIX ) : % .o $(CFG_RUNTIME ) glue.o
768
784
@$(call CFG_ECHO, link [llvm]: $< )
769
- $(CFG_QUIET ) gcc $(CFG_GCC_CFLAGS ) -o $@ $< -L. -lrustrt
785
+ $(CFG_QUIET ) gcc $(CFG_GCC_CFLAGS ) glue.o -o $@ $< -L. -lrustrt
770
786
@# dsymutil sometimes fails or prints a warning, but the
771
787
@# program still runs. Since it simplifies debugging other
772
788
@# programs, I\'ll live with the noise.
@@ -803,7 +819,7 @@ C_DEPFILES := $(RUNTIME_CS:%.cpp=%.d)
803
819
% .d : % .cpp $(MKFILES )
804
820
@$(call CFG_ECHO, dep: $< )
805
821
$(CFG_QUIET )$(call CFG_DEPEND_C, $@ \
806
- $(patsubst %.cpp, %$(CFG_OBJ_SUFFIX) , $<), \
822
+ $(patsubst %.cpp, %.o , $<), \
807
823
$(RUNTIME_INCS)) $< $(CFG_PATH_MUNGE) >
[email protected] \
808
824
809
825
@@ -826,9 +842,15 @@ RUSTBOOT_PROBE := $(wildcard $(CFG_BOOT))
826
842
ifneq ($(RUSTBOOT_PROBE ) ,)
827
843
CFG_INFO := $(info cfg: using built $(CFG_BOOT ) for rust deps)
828
844
STDLIB_DEPFILE := $(CFG_STDLIB ) .d
845
+ RUSTC_DEPFILE := $(CFG_RUSTC ) .d
829
846
CRATE_DEPFILES := $(ALL_TEST_CRATES:%.rc=%.d ) $(STDLIB_DEPFILE )
830
847
831
- $(STDLIB_DEPFILE ) : $(STDLIB_CRATE ) $(MKFILES ) $(CFG_BOOT )
848
+ $(STDLIB_DEPFILE ) : $(STDLIB_CRATE ) $(MKFILES ) $(CFG_BOOT ) $(STDLIB_INPUTS )
849
+ @$(call CFG_ECHO, dep: $< )
850
+ $(BOOT ) -shared -rdeps $< $(CFG_PATH_MUNGE ) > $@ .tmp \
851
+
852
+
853
+ $(RUSTC_DEPFILE ) : $(STDLIB_CRATE ) $(MKFILES ) $(CFG_BOOT ) $(COMPILER_INPUTS )
832
854
@$(call CFG_ECHO, dep: $< )
833
855
$(BOOT ) -shared -rdeps $< $(CFG_PATH_MUNGE ) > $@ .tmp \
834
856
@@ -920,12 +942,12 @@ clean:
920
942
$(CFG_QUIET ) rm -f $(ML_DEPFILES:%.d=%.d.tmp )
921
943
$(CFG_QUIET ) rm -f $(C_DEPFILES:%.d=%.d.tmp )
922
944
$(CFG_QUIET ) rm -f $(CRATE_DEPFILES:%.d=%.d.tmp )
923
- $(CFG_QUIET ) rm -f $(GENERATED )
945
+ $(CFG_QUIET ) rm -f $(GENERATED ) glue.bc glue.s
924
946
$(CFG_QUIET ) rm -f $(CFG_BOOT ) $(CFG_RUNTIME ) $(CFG_STDLIB )
925
947
$(CFG_QUIET ) rm -Rf $(PKG_NAME ) -* .tar.gz dist
926
- $(CFG_QUIET ) rm -f $(foreach ext,cmx cmi cmo cma o a d exe,\
948
+ $(CFG_QUIET ) rm -f $(foreach ext,cmx cmi cmo cma bc o a d exe,\
927
949
$(wildcard boot/*/*.$(ext) boot/*/*/*.$(ext)))
928
- $(CFG_QUIET)rm -Rf $(foreach ext,out llvm x86 boot rustc o s exe dSYM,\
950
+ $(CFG_QUIET)rm -Rf $(foreach ext,out llvm x86 boot rustc bc o s exe dSYM,\
929
951
$(wildcard test/*/*.$(ext)))
930
952
931
953
0 commit comments