diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000000000..face37ff58c74 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "src/llvm"] + path = src/llvm + url = git://github.com/brson/llvm.git diff --git a/Makefile.in b/Makefile.in index a349b073f330b..7c7659e607bd9 100644 --- a/Makefile.in +++ b/Makefile.in @@ -62,8 +62,6 @@ CFG_INFO := $(info cfg: make restarts: $(MAKE_RESTARTS)) endif CFG_INFO := $(info cfg: shell host triple $(CFG_HOST_TRIPLE)) -CFG_INFO := $(info cfg: llvm host triple $(CFG_LLVM_TRIPLE)) -CFG_INFO := $(info cfg: llvm target triples $(CFG_TARGET_TRIPLES)) ifdef CFG_DISABLE_OPTIMIZE $(info cfg: disabling rustc optimization (CFG_DISABLE_OPTIMIZE)) @@ -194,6 +192,36 @@ COMPILER_CRATE := $(S)src/comp/rustc.rc COMPILER_INPUTS := $(wildcard $(addprefix $(S)src/comp/, \ rustc.rc *.rs */*.rs */*/*.rs)) +###################################################################### +# LLVM macros +###################################################################### + +define DEF_LLVM_VARS +# The configure script defines these variables with the target triples +# separated by Z. This defines new ones with the expected format. +CFG_LLVM_BUILD_DIR_$(1):=$$(CFG_LLVM_BUILD_DIR_$(subst -,_,$(1))) +CFG_LLVM_INST_DIR_$(1):=$$(CFG_LLVM_INST_DIR_$(subst -,_,$(1))) + +# Any rules that depend on LLVM should depend on LLVM_CONFIG +LLVM_CONFIG_$(1):=$$(CFG_LLVM_INST_DIR_$(1))/bin/llvm-config +LLVM_VERSION_$(1)=$$(shell "$$(LLVM_CONFIG_$(1))" --version) +LLVM_BINDIR_$(1)=$$(shell "$$(LLVM_CONFIG_$(1))" --bindir) +LLVM_INCDIR_$(1)=$$(shell "$$(LLVM_CONFIG_$(1))" --includedir) +LLVM_LIBDIR_$(1)=$$(shell "$$(LLVM_CONFIG_$(1))" --libdir) +LLVM_LIBS_$(1)=$$(shell "$$(LLVM_CONFIG_$(1))" --libs) +LLVM_LDFLAGS_$(1)=$$(shell "$$(LLVM_CONFIG_$(1))" --ldflags) +LLVM_CXXFLAGS_$(1)=$$(shell "$$(LLVM_CONFIG_$(1))" --cxxflags) +LLVM_HOST_TRIPLE_$(1)=$$(shell "$$(LLVM_CONFIG_$(1))" --host-target) + +LLVM_AS_$(1)=$$(LLVM_BINDIR_$(1))/llvm-as$$(X) +LLC_$(1)=$$(LLVM_BINDIR_$(1))/llc$$(X) + +endef + +$(foreach target,$(CFG_TARGET_TRIPLES), \ + $(eval $(call DEF_LLVM_VARS,$(target)))) + + ###################################################################### # Exports for sub-utilities ###################################################################### @@ -213,10 +241,6 @@ export CFG_PREFIX # Subprograms ###################################################################### -LLVM_AS := $(CFG_LLVM_BINDIR)/llvm-as$(X) - -LLC := $(CFG_LLVM_BINDIR)/llc$(X) - ###################################################################### # Per-stage targets and runner ###################################################################### @@ -318,6 +342,17 @@ endif # Re-configuration ###################################################################### +# This is a pretty expensive operation but I don't see any way to avoid it +SUBMODULE_STATUS=$(shell cd "$(CFG_SRC_DIR)" && "$(CFG_GIT)" submodule status) +# Look through for submodules prefixed with '-' (need init), or '+' (need update) +NEED_GIT_RECONFIG=$(shell echo "$(SUBMODULE_STATUS)" | grep -c '^\(+\|-\)') + +ifeq ($(NEED_GIT_RECONFIG),0) +else +# If the submodules have changed then always execute config.mk +.PHONY: config.mk +endif + config.mk: $(S)configure $(S)Makefile.in $(S)src/snapshots.txt @$(call E, cfg: reconfiguring) $(Q)$(S)configure $(CFG_CONFIGURE_ARGS) @@ -335,6 +370,7 @@ include $(CFG_SRC_DIR)/mk/rustllvm.mk include $(CFG_SRC_DIR)/mk/autodep.mk include $(CFG_SRC_DIR)/mk/tools.mk include $(CFG_SRC_DIR)/mk/docs.mk +include $(CFG_SRC_DIR)/mk/llvm.mk ###################################################################### # Secondary makefiles, conditionalized for speed diff --git a/configure b/configure index ada720c120feb..ba8e43e4b33c1 100755 --- a/configure +++ b/configure @@ -145,6 +145,7 @@ opt() { fi } + msg "looking for configure programs" need_cmd mkdir need_cmd printf @@ -158,6 +159,7 @@ need_cmd date need_cmd tr need_cmd sed + msg "inspecting environment" CFG_OSTYPE=$(uname -s) @@ -212,7 +214,8 @@ case $CFG_CPUTYPE in ;; x86_64 | x86-64 | x64) - CFG_CPUTYPE=x86_64 + # FIME: Once we do a 64-bit build this should be x86_64 + CFG_CPUTYPE=i686 ;; *) @@ -260,14 +263,9 @@ then exit 0 fi -step_msg "writing out basic parameters" -putvar CFG_SRC_DIR -putvar CFG_BUILD_DIR -putvar CFG_OSTYPE -putvar CFG_CPUTYPE -putvar CFG_CONFIGURE_ARGS step_msg "looking for build programs" + probe_need CFG_PERL perl probe_need CFG_PYTHON python probe_need CFG_CURL curl @@ -289,68 +287,23 @@ then err "either clang or gcc is required" fi -if head -n 1 ${CFG_SRC_DIR}src/snapshots.txt | grep -q '^T' -then - CFG_IN_TRANSITION=1 - putvar CFG_IN_TRANSITION -fi - -# Valgrind is only reliable on Linux. On Windows it doesn't work at all, and -# on the Mac the dynamic linker causes Valgrind to emit a huge stream of -# errors. -if [ $CFG_OSTYPE != unknown-linux-gnu ] && [ $CFG_OSTYPE != apple-darwin ] -then - CFG_BAD_VALGRIND=1 - putvar CFG_BAD_VALGRIND -fi - if [ ! -z "$CFG_LLVM_ROOT" -a -e "$CFG_LLVM_ROOT/bin/llvm-config" ] then - CFG_LLVM_CONFIG="$CFG_LLVM_ROOT/bin/llvm-config" -fi - -if [ ! -z "$CFG_LLVM_ROOT" -a -z "$CFG_LLVM_CONFIG" ] -then - CFG_LLVM_INCDIR="$CFG_LLVM_ROOT/include" - CFG_LLVM_BINDIR="$CFG_LLVM_ROOT/bin" - CFG_LLVM_LIBDIR="$CFG_LLVM_ROOT/lib" - CFG_LLVM_CXXFLAGS="-I$CFG_LLVM_INCDIR" - CFG_LLVM_LDFLAGS="" - CFG_LLVM_LIBS=$(find "$CFG_LLVM_LIBDIR" \ - -name '*.lib' \ - -exec echo '\"{}\"' ';' \ - | xargs echo) - CFG_LLVM_VERSION=$("$CFG_LLVM_BINDIR/llc" \ - --version \ - | grep version \ - | cut -d ' ' -f 5-) - CFG_LLVM_TRIPLE=$("$CFG_LLVM_BINDIR/llc" \ - --version \ - | grep Host: \ - | cut -d ' ' -f 4-) -elif [ ! -z "$CFG_LLVM_CONFIG" ] -then - CFG_LLVM_VERSION=$($CFG_LLVM_CONFIG --version) - CFG_LLVM_INCDIR=$($CFG_LLVM_CONFIG --includedir) - CFG_LLVM_BINDIR=$($CFG_LLVM_CONFIG --bindir) - CFG_LLVM_LIBDIR=$($CFG_LLVM_CONFIG --libdir) - CFG_LLVM_CXXFLAGS=$($CFG_LLVM_CONFIG --cxxflags) - CFG_LLVM_LDFLAGS=$($CFG_LLVM_CONFIG --ldflags) - CFG_LLVM_LIBS=$($CFG_LLVM_CONFIG --libs) - CFG_LLVM_TRIPLE=$($CFG_LLVM_CONFIG --host-target) -else - err "no llvm-config found and no --llvm-root specified" + step_msg "using custom LLVM at $CFG_LLVM_ROOT" + + LLVM_CONFIG="$CFG_LLVM_ROOT/bin/llvm-config" + LLVM_VERSION=$($LLVM_CONFIG --version) + + case $LLVM_VERSION in + (3.0svn | 3.0 | 3.1svn) + msg "found ok version of LLVM: $LLVM_VERSION" + ;; + (*) + err "bad LLVM version: $LLVM_VERSION, need >=3.0svn" + ;; + esac fi -case $CFG_LLVM_VERSION in - (3.0svn | 3.0 | 3.1svn) - step_msg "found ok version of LLVM: $CFG_LLVM_VERSION" - ;; - (*) - err "bad LLVM version: $CFG_LLVM_VERSION, need >=3.0svn" - ;; -esac - if [ ! -z "$CFG_ENABLE_CLANG" ] then if [ -z "$CFG_CLANG" ] @@ -368,8 +321,7 @@ then CFG_C_COMPILER="clang" ;; (*) - msg "bad CLANG version: $CFG_CLANG_VERSION, need >=3.0svn; disabling" - CFG_C_COMPILER="gcc" + err "bad CLANG version: $CFG_CLANG_VERSION, need >=3.0svn" ;; esac else @@ -381,45 +333,14 @@ then CFG_PREFIX=/usr/local fi -if [ ! -z "$CFG_LLVM_TRIPLE" ] -then - if [ $CFG_HOST_TRIPLE != $CFG_LLVM_TRIPLE ] - then - warn "LLVM host-triple $CFG_LLVM_TRIPLE differs from" - warn "detected host triple $CFG_HOST_TRIPLE" - warn "choosing LLVM host-triple instead" - msg "" - CFG_HOST_TRIPLE=$CFG_LLVM_TRIPLE - fi -fi - if [ -z "$CFG_TARGET_TRIPLES" ] then CFG_TARGET_TRIPLES="${CFG_HOST_TRIPLE}" fi -putvar CFG_HOST_TRIPLE -putvar CFG_TARGET_TRIPLES - -putvar CFG_C_COMPILER -putvar CFG_PREFIX - -putvar CFG_LLVM_ROOT -putvar CFG_LLVM_CONFIG -putvar CFG_LLVM_INCDIR -putvar CFG_LLVM_BINDIR -putvar CFG_LLVM_LIBDIR -putvar CFG_LLVM_CXXFLAGS -putvar CFG_LLVM_LDFLAGS -putvar CFG_LLVM_LIBS -putvar CFG_LLVM_TRIPLE - -# Munge any paths that appear in config.mk back to posix-y -perl -i.bak -p -e 's@ ([a-zA-Z]):[/\\]@ /\1/@go;' \ - -e 's@\\@/@go;' config.mk -rm -f config.mk.bak step_msg "making directories" + for i in \ doc doc/std \ nd nd/std \ @@ -430,6 +351,12 @@ do make_dir $i done +make_dir llvm +for t in $CFG_TARGET_TRIPLES +do + make_dir llvm/$t +done + make_dir rustllvm for t in $CFG_TARGET_TRIPLES do @@ -466,6 +393,158 @@ do done done + +# Configure submodules +step_msg "configuring submodules" + +# Have to be in the top of src directory for this +cd ${CFG_SRC_DIR} + +SUBMODULE_STATUS=$("${CFG_GIT}" submodule status) +NEED_INIT_COUNT=$(echo "$SUBMODULE_STATUS" | grep -c "^-") +NEED_UPDATE_COUNT=$(echo "$SUBMODULE_STATUS" | grep -c "^+") +NEED_INIT=$(test $NEED_INIT_COUNT -gt 0)$? +NEED_UPDATE=$(test "($NEED_INIT)" -o "$NEED_UPDATE_COUNT" -gt 0)$? + +if [ $NEED_INIT ] +then + msg "git: submodule init" + "${CFG_GIT}" submodule init --quiet +fi + +if [ $NEED_UPDATE ] +then + msg "git: submodule update" + "${CFG_GIT}" submodule update --quiet +fi + +cd ${CFG_BUILD_DIR} + + +# Configure llvm. Here we go... +CFG_LLVM_SRC_DIR=${CFG_SRC_DIR}src/llvm + +for t in $CFG_TARGET_TRIPLES +do + if [ -z $CFG_LLVM_ROOT ] + then + step_msg "configuring LLVM for $t" + + LLVM_BUILD_DIR=$CFG_BUILD_DIR/llvm/$t + # Just use LLVM straight from its build directory to + # avoid 'make install' time + LLVM_INST_DIR=$LLVM_BUILD_DIR/Release+Asserts + + LLVM_TARGETS="--enable-targets=x86,x86_64" + LLVM_BUILD="--build=$t" + LLVM_HOST="--host=$t" + LLVM_TARGET="--target=$t" + LLVM_OPTS="--enable-optimized --disable-docs" + + LLVM_CXX_32="g++ -m32" + LLVM_CC_32="gcc -m32" + LLVM_CFLAGS_32="-m32" + LLVM_CXXFLAGS_32="-m32" + LLVM_LDFLAGS_32="-m32" + + # FIXME: Need to change flags for x64 + LLVM_CXX=$LLVM_CXX_32 + LLVM_CC=$LLVM_CC_32 + LLVM_CFLAGS=$LLVM_CFLAGS_32 + LLVM_CXXFLAGS=$LLVM_CXXFLAGS_32 + LLVM_LDFLAGS=$LLVM_LDFLAGS_32 + + CXX=$LLVM_CXX + CC=$LLVM_CC + CFLAGS=$LLVM_CFLAGS + CXXFLAGS=$LLVM_CXXFLAGS + LDFLAGS=$LLVM_LDFLAGS + + LLVM_FLAGS="$LLVM_TARGETS $LLVM_OPTS $LLVM_BUILD $LLVM_HOST $LLVM_TARGET" + + msg "configuring LLVM with:" + msg "$LLVM_FLAGS" + + export CXX + export CC + export CFLAGS + export CXXFLAGS + export LDFLAGS + + cd $LLVM_BUILD_DIR + case $CFG_SRC_DIR in + /* | [a-z]:* | [A-Z]:*) + ${CFG_LLVM_SRC_DIR}/configure $LLVM_FLAGS + ;; + *) + ${CFG_BUILD_DIR}/${CFG_LLVM_SRC_DIR}/configure $LLVM_FLAGS + ;; + esac + cd $CFG_BUILD_DIR + else + LLVM_BUILD_DIR= + # The user is using their own LLVM + LLVM_INST_DIR=$CFG_LLVM_ROOT + fi + + # Construct variables for LLVM build and install directories for + # each target. These will be named + # CFG_LLVM_BUILD_DIR_${target_triple} but all the hyphens in + # target_triple will be converted to underscore, because bash + # variables can't contain hyphens. The makefile will then have to + # convert back. + CFG_LLVM_BUILD_DIR=$(echo CFG_LLVM_BUILD_DIR_${t} | tr - _) + CFG_LLVM_INST_DIR=$(echo CFG_LLVM_INST_DIR_${t} | tr - _) + eval ${CFG_LLVM_BUILD_DIR}="'$LLVM_BUILD_DIR'" + eval ${CFG_LLVM_INST_DIR}="'$LLVM_INST_DIR'" +done + + +step_msg "writing configuration" + +putvar CFG_SRC_DIR +putvar CFG_BUILD_DIR +putvar CFG_OSTYPE +putvar CFG_CPUTYPE +putvar CFG_CONFIGURE_ARGS +putvar CFG_HOST_TRIPLE +putvar CFG_TARGET_TRIPLES +putvar CFG_C_COMPILER +putvar CFG_PREFIX + +if head -n 1 ${CFG_SRC_DIR}src/snapshots.txt | grep -q '^T' +then + CFG_IN_TRANSITION=1 + putvar CFG_IN_TRANSITION +fi + +# Valgrind is only reliable on Linux. On Windows it doesn't work at all, and +# on the Mac the dynamic linker causes Valgrind to emit a huge stream of +# errors. +if [ $CFG_OSTYPE != unknown-linux-gnu ] && [ $CFG_OSTYPE != apple-darwin ] +then + CFG_BAD_VALGRIND=1 + putvar CFG_BAD_VALGRIND +fi + +putvar CFG_LLVM_ROOT +putvar CFG_LLVM_SRC_DIR + +for t in $CFG_TARGET_TRIPLES +do + CFG_LLVM_BUILD_DIR=$(echo CFG_LLVM_BUILD_DIR_${t} | tr - _) + CFG_LLVM_INST_DIR=$(echo CFG_LLVM_INST_DIR_${t} | tr - _) + putvar $CFG_LLVM_BUILD_DIR + putvar $CFG_LLVM_INST_DIR +done + + +# Munge any paths that appear in config.mk back to posix-y +perl -i.bak -p -e 's@ ([a-zA-Z]):[/\\]@ /\1/@go;' \ + -e 's@\\@/@go;' config.mk +rm -f config.mk.bak + +msg copy ${CFG_SRC_DIR}Makefile.in ./Makefile step_msg "complete" diff --git a/mk/autodep.mk b/mk/autodep.mk index 1eacbac1652e4..dc46b540ead38 100644 --- a/mk/autodep.mk +++ b/mk/autodep.mk @@ -14,11 +14,11 @@ rt/%.d: rt/%.cpp $(MKFILES) $(Q)rm -f $@.tmp.bak $(Q)mv $@.tmp $@ -rustllvm/%.d: rustllvm/%.cpp $(MKFILES) +rustllvm/%.d: rustllvm/%.cpp $(MKFILES) $(LLVM_CONFIG_$(CFG_HOST_TRIPLE)) @$(call E, dep: $@) $(Q)$(call CFG_DEPEND_C, $@ \ $(subst $(S)src/,,$(patsubst %.cpp, %.o, $<)), \ - $(CFG_LLVM_CXXFLAGS) $(RUSTLLVM_INCS)) $< >$@.tmp + $(LLVM_CXXFLAGS_$(CFG_HOST_TRIPLE)) $(RUSTLLVM_INCS)) $< >$@.tmp $(Q)$(CFG_PATH_MUNGE) $@.tmp $(Q)rm -f $@.tmp.bak $(Q)mv $@.tmp $@ diff --git a/mk/clean.mk b/mk/clean.mk index 2009df61f2d65..d1db178f9c004 100644 --- a/mk/clean.mk +++ b/mk/clean.mk @@ -6,8 +6,14 @@ CLEAN_STAGE_RULES = $(foreach target,$(CFG_TARGET_TRIPLES), \ clean0$(target) clean1$(target) clean2$(target) clean3$(target)) \ clean0 clean1 clean2 clean3 +CLEAN_LLVM_RULES = $(foreach target,$(CFG_TARGET_TRIPLES), \ + clean-llvm$(target)) -.PHONY: clean +.PHONY: clean clean-all clean-misc + +clean-all: clean clean-llvm + +clean-llvm: $(CLEAN_LLVM_RULES) clean: clean-misc $(CLEAN_STAGE_RULES) @@ -66,3 +72,19 @@ $(foreach target, $(CFG_TARGET_TRIPLES), \ $(eval $(call CLEAN_STAGE_N,1,$(target))) \ $(eval $(call CLEAN_STAGE_N,2,$(target))) \ $(eval $(call CLEAN_STAGE_N,3,$(target)))) + + +define DEF_CLEAN_LLVM_TARGET +ifeq ($(CFG_LLVM_ROOT),) + +clean-llvm$(1): + $$(Q)$$(MAKE) -C $$(CFG_LLVM_BUILD_DIR_$(1)) clean +else + +clean-llvm$(1): ; + +endif +endef + +$(foreach target, $(CFG_TARGET_TRIPLES), \ + $(eval $(call DEF_CLEAN_LLVM_TARGET,$(target)))) \ No newline at end of file diff --git a/mk/llvm.mk b/mk/llvm.mk new file mode 100644 index 0000000000000..4a575b27ce119 --- /dev/null +++ b/mk/llvm.mk @@ -0,0 +1,19 @@ +# This is just a rough approximation of LLVM deps +LLVM_DEPS:=$(wildcard $(addprefix $(CFG_LLVM_SRC_DIR)/, \ + * */*h */*/*h */*/*/*h */*cpp */*/*cpp */*/*/*cpp)) + +define DEF_LLVM_RULES + +# If CFG_LLVM_ROOT is defined then we don't build LLVM ourselves +ifeq ($(CFG_LLVM_ROOT),) + +$$(LLVM_CONFIG_$(1)): $$(LLVM_DEPS_$(1)) + @$$(call E, make: llvm) + $$(Q)$$(MAKE) -C $$(CFG_LLVM_BUILD_DIR_$(1)) $$(CFG_LLVM_BUILD_ENV) + +endif + +endef + +$(foreach target,$(CFG_TARGET_TRIPLES), \ + $(eval $(call DEF_LLVM_RULES,$(target)))) \ No newline at end of file diff --git a/mk/platform.mk b/mk/platform.mk index 21f515c2c6de3..a2bdc19a0de94 100644 --- a/mk/platform.mk +++ b/mk/platform.mk @@ -39,7 +39,7 @@ endif ifneq ($(findstring linux,$(CFG_OSTYPE)),) CFG_LIB_NAME=lib$(1).so - CFG_GCCISH_CFLAGS += -fPIC -march=i686 + CFG_GCCISH_CFLAGS += -fPIC CFG_GCCISH_LINK_FLAGS += -shared -fPIC -ldl -lpthread -lrt CFG_GCCISH_DEF_FLAG := -Wl,--export-dynamic,--dynamic-list= CFG_GCCISH_PRE_LIB_FLAGS := -Wl,-whole-archive @@ -64,6 +64,8 @@ ifneq ($(findstring linux,$(CFG_OSTYPE)),) endif endif CFG_INSTALL_NAME = + # Linux requires LLVM to be built like this to get backtraces into Rust code + CFG_LLVM_BUILD_ENV="CXXFLAGS=-fno-omit-frame-pointer" endif ifneq ($(findstring darwin,$(CFG_OSTYPE)),) @@ -154,7 +156,6 @@ ifdef CFG_WINDOWSY CFG_EXE_SUFFIX := .exe CFG_LIB_NAME=$(1).dll CFG_DEF_SUFFIX := .def - CFG_LDPATH :=$(CFG_LLVM_BINDIR) CFG_LDPATH :=$(CFG_LDPATH):$$PATH CFG_RUN=PATH="$(CFG_LDPATH):$(1)" $(2) CFG_RUN_TARG=$(call CFG_RUN,$(HOST_LIB$(1)),$(2)) diff --git a/mk/rustllvm.mk b/mk/rustllvm.mk index e5d30d5487b39..068c73400f5d3 100644 --- a/mk/rustllvm.mk +++ b/mk/rustllvm.mk @@ -14,22 +14,21 @@ endif RUSTLLVM_DEF_$(1) := rustllvm/rustllvm$$(CFG_DEF_SUFFIX) -RUSTLLVM_INCS_$(1) := -iquote $$(CFG_LLVM_INCDIR) \ - -iquote $$(S)src/rustllvm/include +RUSTLLVM_INCS_$(1) = -iquote $$(LLVM_INCDIR_$(1)) \ + -iquote $$(S)src/rustllvm/include RUSTLLVM_OBJS_OBJS_$(1) := $$(RUSTLLVM_OBJS_CS_$(1):rustllvm/%.cpp=rustllvm/$(1)/%.o) rustllvm/$(1)/$(CFG_RUSTLLVM): $$(RUSTLLVM_OBJS_OBJS_$(1)) \ $$(MKFILES) $$(RUSTLLVM_DEF_$(1)) @$$(call E, link: $$@) $$(Q)$$(call CFG_LINK_C_$(1),$$@,$$(RUSTLLVM_OBJS_OBJS_$(1)) \ - $$(CFG_GCCISH_PRE_LIB_FLAGS) $$(CFG_LLVM_LIBS) \ + $$(CFG_GCCISH_PRE_LIB_FLAGS) $$(LLVM_LIBS_$(1)) \ $$(CFG_GCCISH_POST_LIB_FLAGS) \ - $$(CFG_LLVM_LDFLAGS),$$(RUSTLLVM_DEF_$(1)),$$(CFG_RUSTLLVM)) + $$(LLVM_LDFLAGS_$(1)),$$(RUSTLLVM_DEF_$(1)),$$(CFG_RUSTLLVM)) -rustllvm/$(1)/%.o: rustllvm/%.cpp $$(MKFILES) +rustllvm/$(1)/%.o: rustllvm/%.cpp $$(MKFILES) $$(LLVM_CONFIG_$(1)) @$$(call E, compile: $$@) - $$(Q)$$(call CFG_COMPILE_C_$(1), $$@, $$(CFG_LLVM_CXXFLAGS) $$(RUSTLLVM_INCS_$(1))) $$< - + $$(Q)$$(call CFG_COMPILE_C_$(1), $$@, $$(LLVM_CXXFLAGS_$(1)) $$(RUSTLLVM_INCS_$(1))) $$< endef # Instantiate template for all stages diff --git a/mk/target.mk b/mk/target.mk index af31a937ec04b..b2c87d9b7e8db 100644 --- a/mk/target.mk +++ b/mk/target.mk @@ -12,9 +12,10 @@ $$(TARGET_LIB$(1)$(2))/intrinsics.ll: \ @$$(call E, sed: $$@) $$(Q)sed s/@CFG_TARGET_TRIPLE@/$(2)/ $$< > $$@ -$$(TARGET_LIB$(1)$(2))/intrinsics.bc: $$(TARGET_LIB$(1)$(2))/intrinsics.ll +$$(TARGET_LIB$(1)$(2))/intrinsics.bc: $$(TARGET_LIB$(1)$(2))/intrinsics.ll \ + $$(LLVM_CONFIG_$(2)) @$$(call E, llvms-as: $$@) - $$(Q)$$(LLVM_AS) -o $$@ $$< + $$(Q)$$(LLVM_AS_$(2)) -o $$@ $$< $$(TARGET_LIB$(1)$(2))/$$(CFG_STDLIB): \ $$(STDLIB_CRATE) $$(STDLIB_INPUTS) \ diff --git a/src/llvm b/src/llvm new file mode 160000 index 0000000000000..566f233ba64c0 --- /dev/null +++ b/src/llvm @@ -0,0 +1 @@ +Subproject commit 566f233ba64c0bb2773b5717cb18753c7564f4b7