rust/mk/rt.mk

166 lines
5.2 KiB
Makefile
Raw Normal View History

2011-05-01 15:18:52 -05:00
######################################################################
# 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 \
rt/rust_env.cpp \
rt/rust_scheduler.cpp \
2011-05-01 15:18:52 -05:00
rt/rust_task.cpp \
rt/rust_task_list.cpp \
rt/rust_chan.cpp \
rt/rust_port.cpp \
rt/rust_upcall.cpp \
2011-06-16 00:04:31 -05:00
rt/rust_uv.cpp \
2011-05-01 15:18:52 -05:00
rt/rust_log.cpp \
rt/rust_timer.cpp \
rt/circular_buffer.cpp \
rt/isaac/randport.cpp \
rt/rust_srv.cpp \
rt/rust_kernel.cpp \
rt/rust_shape.cpp \
rt/rust_obstack.cpp \
2011-08-18 20:48:32 -05:00
rt/rust_gc.cpp \
rt/rust_abi.cpp \
2011-09-20 18:47:59 -05:00
rt/rust_cc.cpp \
rt/rust_debug.cpp \
2011-05-01 15:18:52 -05:00
rt/memory_region.cpp \
rt/test/rust_test_harness.cpp \
rt/test/rust_test_runtime.cpp \
rt/test/rust_test_util.cpp \
rt/arch/i386/context.cpp \
2011-05-01 15:18:52 -05:00
2011-06-15 20:03:15 -05:00
RUNTIME_LL :=
2011-05-18 14:43:48 -05:00
RUNTIME_S := rt/arch/i386/_context.S \
rt/arch/i386/ccall.S
2011-05-01 15:18:52 -05:00
RUNTIME_HDR := rt/globals.h \
rt/rust.h \
2011-10-05 19:41:01 -05:00
rt/rust_abi.h \
rt/rust_cc.h \
rt/rust_debug.h \
rt/rust_gc.h \
2011-05-01 15:18:52 -05:00
rt/rust_internal.h \
rt/rust_util.h \
rt/rust_chan.h \
rt/rust_env.h \
2011-10-05 19:41:01 -05:00
rt/rust_obstack.h \
rt/rust_unwind.h \
rt/rust_upcall.h \
2011-05-01 15:18:52 -05:00
rt/rust_port.h \
rt/rust_scheduler.h \
2011-10-05 19:41:01 -05:00
rt/rust_shape.h \
2011-05-01 15:18:52 -05:00
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 \
rt/test/rust_test_harness.h \
rt/test/rust_test_runtime.h \
rt/test/rust_test_util.h \
rt/arch/i386/context.h \
2011-05-01 15:18:52 -05:00
ifeq ($(CFG_WINDOWSY), 1)
LIBUV_OSTYPE := win
LIBUV_LIB := rt/libuv/Default/obj.target/src/rt/libuv/libuv.a
else ifeq ($(CFG_OSTYPE), apple-darwin)
LIBUV_OSTYPE := mac
LIBUV_LIB := rt/libuv/Default/libuv.a
else
LIBUV_OSTYPE := unix
LIBUV_LIB := rt/libuv/Default/obj.target/src/rt/libuv/libuv.a
endif
2011-05-01 15:18:52 -05:00
RUNTIME_DEF := rt/rustrt$(CFG_DEF_SUFFIX)
RUNTIME_INCS := -I $(S)src/rt/isaac -I $(S)src/rt/uthash \
-I $(S)src/rt/arch/i386 -I $(S)src/rt/libuv/include
RUNTIME_OBJS := $(RUNTIME_CS:.cpp=.o) $(RUNTIME_LL:.ll=.o) $(RUNTIME_S:.S=.o)
RUNTIME_LIBS := $(LIBUV_LIB)
2011-05-01 15:18:52 -05:00
rt/%.o: rt/%.cpp $(MKFILES)
@$(call E, compile: $@)
$(Q)$(call CFG_COMPILE_C, $@, $(RUNTIME_INCS)) $<
rt/%.o: rt/%.S $(MKFILES)
@$(call E, compile: $@)
$(Q)$(call CFG_COMPILE_C, $@, $(RUNTIME_INCS)) $<
ifdef CFG_WINDOWSY
rt/main.ll: rt/main.ll.in
2011-06-25 14:23:27 -05:00
@$(call E, sed: $@)
$(Q)sed 's/MAIN/WinMain@16/' < $^ > $@
rt/main0.ll: rt/main0.ll.in
@$(call E, sed: $@)
$(Q)sed 's/MAIN/WinMain@16/' < $^ > $@
else
rt/main.ll: rt/main.ll.in
2011-06-25 14:23:27 -05:00
@$(call E, sed: $@)
$(Q)sed 's/MAIN/main/' < $^ > $@
rt/main0.ll: rt/main0.ll.in
@$(call E, sed: $@)
$(Q)sed 's/MAIN/main/' < $^ > $@
endif
2011-05-18 14:43:48 -05:00
rt/%.o: rt/%.ll $(MKFILES)
@$(call E, llc: $@)
$(Q)$(LLC) -filetype=obj -relocation-model=pic -march=x86 -o $@ $<
2011-05-01 15:18:52 -05:00
2011-06-14 10:28:10 -05:00
rt/$(CFG_RUNTIME): $(RUNTIME_OBJS) $(MKFILES) $(RUNTIME_HDR) $(RUNTIME_DEF) $(RUNTIME_LIBS)
2011-05-01 15:18:52 -05:00
@$(call E, link: $@)
$(Q)$(call CFG_LINK_C,$@, $(RUNTIME_OBJS) \
2011-08-04 16:11:33 -05:00
$(CFG_GCCISH_POST_LIB_FLAGS) $(RUNTIME_LIBS) \
2011-10-06 15:09:00 -05:00
$(CFG_LIBUV_LINK_FLAGS),$(RUNTIME_DEF),$(CFG_RUNTIME))
2011-06-14 10:28:10 -05:00
2011-08-04 16:11:33 -05:00
# 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
$(LIBUV_LIB): $(wildcard \
$(S)src/rt/libuv/* \
$(S)src/rt/libuv/*/* \
$(S)src/rt/libuv/*/*/* \
$(S)src/rt/libuv/*/*/*/*)
$(Q)$(MAKE) -C $(S)mk/libuv/$(LIBUV_OSTYPE) \
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
2011-05-01 15:18:52 -05:00
# 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