rt.mk 5.1 KB
Newer Older
G
Graydon Hoare 已提交
1 2 3 4 5 6 7 8 9 10 11
######################################################################
# Runtime (C++) library variables
######################################################################

RUNTIME_CS := rt/sync/timer.cpp \
              rt/sync/sync.cpp \
              rt/sync/lock_and_signal.cpp \
              rt/rust.cpp \
              rt/rust_builtin.cpp \
              rt/rust_run_program.cpp \
              rt/rust_crate_cache.cpp \
12
              rt/rust_env.cpp \
13
              rt/rust_scheduler.cpp \
G
Graydon Hoare 已提交
14 15 16 17 18
              rt/rust_task.cpp \
              rt/rust_task_list.cpp \
              rt/rust_chan.cpp \
              rt/rust_port.cpp \
              rt/rust_upcall.cpp \
R
Rob Arnold 已提交
19
              rt/rust_uv.cpp \
G
Graydon Hoare 已提交
20 21 22 23 24 25
              rt/rust_log.cpp \
              rt/rust_timer.cpp \
              rt/circular_buffer.cpp \
              rt/isaac/randport.cpp \
              rt/rust_srv.cpp \
              rt/rust_kernel.cpp \
26
              rt/rust_shape.cpp \
27
              rt/rust_obstack.cpp \
P
Patrick Walton 已提交
28
              rt/rust_gc.cpp \
29
              rt/rust_abi.cpp \
30
              rt/rust_cc.cpp \
31
              rt/rust_debug.cpp \
G
Graydon Hoare 已提交
32
              rt/memory_region.cpp \
33 34
              rt/test/rust_test_harness.cpp \
              rt/test/rust_test_runtime.cpp \
N
Niko Matsakis 已提交
35 36
              rt/test/rust_test_util.cpp \
              rt/arch/i386/context.cpp
G
Graydon Hoare 已提交
37

38
RUNTIME_LL :=
39

40
RUNTIME_S := rt/arch/i386/_context.S \
41 42
             rt/arch/i386/ccall.S \
             rt/arch/i386/morestack.S
43

G
Graydon Hoare 已提交
44 45
RUNTIME_HDR := rt/globals.h \
               rt/rust.h \
B
Brian Anderson 已提交
46 47 48 49
               rt/rust_abi.h \
               rt/rust_cc.h \
               rt/rust_debug.h \
               rt/rust_gc.h \
G
Graydon Hoare 已提交
50 51 52
               rt/rust_internal.h \
               rt/rust_util.h \
               rt/rust_chan.h \
53
               rt/rust_env.h \
B
Brian Anderson 已提交
54 55 56
               rt/rust_obstack.h \
               rt/rust_unwind.h \
               rt/rust_upcall.h \
G
Graydon Hoare 已提交
57
               rt/rust_port.h \
58
               rt/rust_scheduler.h \
B
Brian Anderson 已提交
59
               rt/rust_shape.h \
G
Graydon Hoare 已提交
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
               rt/rust_task.h \
               rt/rust_task_list.h \
               rt/rust_log.h \
               rt/circular_buffer.h \
               rt/util/array_list.h \
               rt/util/indexed_list.h \
               rt/util/synchronized_indexed_list.h \
               rt/util/hash_map.h \
               rt/sync/sync.h \
               rt/sync/timer.h \
               rt/sync/lock_and_signal.h \
               rt/sync/lock_free_queue.h \
               rt/rust_srv.h \
               rt/rust_kernel.h \
               rt/memory_region.h \
               rt/memory.h \
76 77 78
               rt/test/rust_test_harness.h \
               rt/test/rust_test_runtime.h \
               rt/test/rust_test_util.h \
79
               rt/arch/i386/context.h
G
Graydon Hoare 已提交
80

E
Erick Tryzelaar 已提交
81 82
ifeq ($(CFG_WINDOWSY), 1)
  LIBUV_OSTYPE := win
83
  LIBUV_ARCH := ia32
E
Erick Tryzelaar 已提交
84 85 86
  LIBUV_LIB := rt/libuv/Default/obj.target/src/rt/libuv/libuv.a
else ifeq ($(CFG_OSTYPE), apple-darwin)
  LIBUV_OSTYPE := mac
87
  LIBUV_ARCH := ia32
E
Erick Tryzelaar 已提交
88 89 90
  LIBUV_LIB := rt/libuv/Default/libuv.a
else
  LIBUV_OSTYPE := unix
91
  LIBUV_ARCH := ia32
E
Erick Tryzelaar 已提交
92 93 94
  LIBUV_LIB := rt/libuv/Default/obj.target/src/rt/libuv/libuv.a
endif

G
Graydon Hoare 已提交
95
RUNTIME_DEF := rt/rustrt$(CFG_DEF_SUFFIX)
96
RUNTIME_INCS := -I $(S)src/rt/isaac -I $(S)src/rt/uthash \
97
                -I $(S)src/rt/arch/i386 \
N
Niko Matsakis 已提交
98
				-I $(S)src/rt/libuv/include
99
RUNTIME_OBJS := $(RUNTIME_CS:.cpp=.o) $(RUNTIME_LL:.ll=.o) $(RUNTIME_S:.S=.o)
E
Erick Tryzelaar 已提交
100
RUNTIME_LIBS := $(LIBUV_LIB)
G
Graydon Hoare 已提交
101

102 103
RT_COMPILE_C := $(call CFG_COMPILE_C, $(0), $(1) -I $(S)src/rt/arch/$(2))

G
Graydon Hoare 已提交
104 105 106 107
rt/%.o: rt/%.cpp $(MKFILES)
	@$(call E, compile: $@)
	$(Q)$(call CFG_COMPILE_C, $@, $(RUNTIME_INCS)) $<

108
rt/%.o: rt/%.S $(MKFILES)
109 110 111
	@$(call E, compile: $@)
	$(Q)$(call CFG_COMPILE_C, $@, $(RUNTIME_INCS)) $<

112 113 114
rt/%.o: rt/%.ll $(MKFILES)
	@$(call E, llc: $@)
	$(Q)$(LLC) -filetype=obj -relocation-model=pic -march=x86 -o $@ $<
G
Graydon Hoare 已提交
115

116
rt/$(CFG_RUNTIME): $(RUNTIME_OBJS) $(MKFILES) $(RUNTIME_HDR) $(RUNTIME_DEF) $(RUNTIME_LIBS)
G
Graydon Hoare 已提交
117
	@$(call E, link: $@)
118
	$(Q)$(call CFG_LINK_C,$@, $(RUNTIME_OBJS) \
B
Brian Anderson 已提交
119
	  $(CFG_GCCISH_POST_LIB_FLAGS) $(RUNTIME_LIBS) \
B
Brian Anderson 已提交
120
	  $(CFG_LIBUV_LINK_FLAGS),$(RUNTIME_DEF),$(CFG_RUNTIME))
121

B
Brian Anderson 已提交
122 123 124
# FIXME: For some reason libuv's makefiles can't figure out the correct definition
# of CC on the mingw I'm using, so we are explicitly using gcc. Also, we
# have to list environment variables first on windows... mysterious
E
Erick Tryzelaar 已提交
125
$(LIBUV_LIB): $(wildcard \
126 127 128 129
                     $(S)src/rt/libuv/* \
                     $(S)src/rt/libuv/*/* \
                     $(S)src/rt/libuv/*/*/* \
                     $(S)src/rt/libuv/*/*/*/*)
130
	$(Q)$(MAKE) -C $(S)mk/libuv/$(LIBUV_ARCH)/$(LIBUV_OSTYPE) \
E
Erick Tryzelaar 已提交
131 132 133 134 135 136
		CFLAGS="-m32" LDFLAGS="-m32" \
		CC="$(CFG_GCCISH_CROSS)$(CC)" \
		CXX="$(CFG_GCCISH_CROSS)$(CXX)" \
		AR="$(CFG_GCCISH_CROSS)$(AR)" \
		builddir_name="$(CFG_BUILD_DIR)/rt/libuv" \
		V=$(VERBOSE) FLOCK= uv
G
Graydon Hoare 已提交
137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156

# These could go in rt.mk or rustllvm.mk, they're needed for both.

%.linux.def:    %.def.in $(MKFILES)
	@$(call E, def: $@)
	$(Q)echo "{" > $@
	$(Q)sed 's/.$$/&;/' $< >> $@
	$(Q)echo "};" >> $@

%.darwin.def:	%.def.in $(MKFILES)
	@$(call E, def: $@)
	$(Q)sed 's/^./_&/' $< > $@

ifdef CFG_WINDOWSY
%.def:	%.def.in $(MKFILES)
	@$(call E, def: $@)
	$(Q)echo LIBRARY $* > $@
	$(Q)echo EXPORTS >> $@
	$(Q)sed 's/^./    &/' $< >> $@
endif