1 ######################################################################
2 # Runtime (C++) library variables
3 ######################################################################
5 RUNTIME_CS := rt/sync/timer.cpp \
7 rt/sync/lock_and_signal.cpp \
10 rt/rust_run_program.cpp \
11 rt/rust_crate_cache.cpp \
13 rt/rust_scheduler.cpp \
15 rt/rust_task_list.cpp \
22 rt/circular_buffer.cpp \
23 rt/isaac/randport.cpp \
32 rt/memory_region.cpp \
33 rt/test/rust_test_harness.cpp \
34 rt/test/rust_test_runtime.cpp \
35 rt/test/rust_test_util.cpp \
36 rt/arch/i386/context.cpp \
40 RUNTIME_S := rt/arch/i386/_context.S \
43 RUNTIME_HDR := rt/globals.h \
62 rt/circular_buffer.h \
63 rt/util/array_list.h \
64 rt/util/indexed_list.h \
65 rt/util/synchronized_indexed_list.h \
69 rt/sync/lock_and_signal.h \
70 rt/sync/lock_free_queue.h \
75 rt/test/rust_test_harness.h \
76 rt/test/rust_test_runtime.h \
77 rt/test/rust_test_util.h \
78 rt/arch/i386/context.h \
80 ifeq ($(CFG_WINDOWSY), 1)
82 LIBUV_LIB := rt/libuv/Default/obj.target/src/rt/libuv/libuv.a
83 else ifeq ($(CFG_OSTYPE), apple-darwin)
85 LIBUV_LIB := rt/libuv/Default/libuv.a
88 LIBUV_LIB := rt/libuv/Default/obj.target/src/rt/libuv/libuv.a
91 RUNTIME_DEF := rt/rustrt$(CFG_DEF_SUFFIX)
92 RUNTIME_INCS := -I $(S)src/rt/isaac -I $(S)src/rt/uthash \
93 -I $(S)src/rt/arch/i386 -I $(S)src/rt/libuv/include
94 RUNTIME_OBJS := $(RUNTIME_CS:.cpp=.o) $(RUNTIME_LL:.ll=.o) $(RUNTIME_S:.S=.o)
95 RUNTIME_LIBS := $(LIBUV_LIB)
97 rt/%.o: rt/%.cpp $(MKFILES)
98 @$(call E, compile: $@)
99 $(Q)$(call CFG_COMPILE_C, $@, $(RUNTIME_INCS)) $<
101 rt/%.o: rt/%.S $(MKFILES)
102 @$(call E, compile: $@)
103 $(Q)$(call CFG_COMPILE_C, $@, $(RUNTIME_INCS)) $<
106 rt/main.ll: rt/main.ll.in
108 $(Q)sed 's/MAIN/WinMain@16/' < $^ > $@
110 rt/main.ll: rt/main.ll.in
112 $(Q)sed 's/MAIN/main/' < $^ > $@
115 rt/%.o: rt/%.ll $(MKFILES)
117 $(Q)$(LLC) -filetype=obj -relocation-model=pic -march=x86 -o $@ $<
119 rt/$(CFG_RUNTIME): $(RUNTIME_OBJS) $(MKFILES) $(RUNTIME_HDR) $(RUNTIME_DEF) $(RUNTIME_LIBS)
121 $(Q)$(call CFG_LINK_C,$@, $(RUNTIME_OBJS) \
122 $(CFG_GCCISH_POST_LIB_FLAGS) $(RUNTIME_LIBS) \
123 $(CFG_LIBUV_LINK_FLAGS),$(RUNTIME_DEF),$(CFG_RUNTIME))
125 # FIXME: For some reason libuv's makefiles can't figure out the correct definition
126 # of CC on the mingw I'm using, so we are explicitly using gcc. Also, we
127 # have to list environment variables first on windows... mysterious
128 $(LIBUV_LIB): $(wildcard \
130 $(S)src/rt/libuv/*/* \
131 $(S)src/rt/libuv/*/*/* \
132 $(S)src/rt/libuv/*/*/*/*)
133 $(Q)$(MAKE) -C $(S)mk/libuv/$(LIBUV_OSTYPE) \
134 CFLAGS="-m32" LDFLAGS="-m32" \
135 CC="$(CFG_GCCISH_CROSS)$(CC)" \
136 CXX="$(CFG_GCCISH_CROSS)$(CXX)" \
137 AR="$(CFG_GCCISH_CROSS)$(AR)" \
138 builddir_name="$(CFG_BUILD_DIR)/rt/libuv" \
139 V=$(VERBOSE) FLOCK= uv
141 # These could go in rt.mk or rustllvm.mk, they're needed for both.
143 %.linux.def: %.def.in $(MKFILES)
146 $(Q)sed 's/.$$/&;/' $< >> $@
149 %.darwin.def: %.def.in $(MKFILES)
151 $(Q)sed 's/^./_&/' $< > $@
154 %.def: %.def.in $(MKFILES)
156 $(Q)echo LIBRARY $* > $@
157 $(Q)echo EXPORTS >> $@
158 $(Q)sed 's/^./ &/' $< >> $@