Skip to content

Commit f627846

Browse files
committed
---
yaml --- r: 6161 b: refs/heads/master c: 4b6585c h: refs/heads/master i: 6159: f82f335 v: v3
1 parent 4e5fbf2 commit f627846

File tree

7 files changed

+127
-82
lines changed

7 files changed

+127
-82
lines changed

[refs]

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
---
2-
refs/heads/master: a4e1a438f676be35be660a0fe0170bbe69d62179
2+
refs/heads/master: 4b6585c92450b6783081150b2f3f3b0b5acbe82f

trunk/Makefile.in

+24-12
Original file line numberDiff line numberDiff line change
@@ -196,19 +196,31 @@ COMPILER_INPUTS := $(wildcard $(addprefix $(S)src/comp/, \
196196
# LLVM macros
197197
######################################################################
198198

199+
define DEF_LLVM_VARS
200+
# The configure script defines these variables with the target triples
201+
# separated by Z. This defines new ones with the expected format.
202+
CFG_LLVM_BUILD_DIR_$(1):=$$(CFG_LLVM_BUILD_DIR_$(subst -,_,$(1)))
203+
CFG_LLVM_INST_DIR_$(1):=$$(CFG_LLVM_INST_DIR_$(subst -,_,$(1)))
204+
199205
# Any rules that depend on LLVM should depend on LLVM_CONFIG
200-
LLVM_CONFIG:=$(CFG_LLVM_INST_DIR)/bin/llvm-config
201-
LLVM_VERSION=$(shell "$(LLVM_CONFIG)" --version)
202-
LLVM_BINDIR=$(shell "$(LLVM_CONFIG)" --bindir)
203-
LLVM_INCDIR=$(shell "$(LLVM_CONFIG)" --includedir)
204-
LLVM_LIBDIR=$(shell "$(LLVM_CONFIG)" --libdir)
205-
LLVM_LIBS=$(shell "$(LLVM_CONFIG)" --libs)
206-
LLVM_LDFLAGS=$(shell "$(LLVM_CONFIG)" --ldflags)
207-
LLVM_CXXFLAGS=$(shell "$(LLVM_CONFIG)" --cxxflags)
208-
LLVM_HOST_TRIPLE=$(shell "$(LLVM_CONFIG)" --host-target)
209-
210-
LLVM_AS=$(LLVM_BINDIR)/llvm-as$(X)
211-
LLC=$(LLVM_BINDIR)/llc$(X)
206+
LLVM_CONFIG_$(1):=$$(CFG_LLVM_INST_DIR_$(1))/bin/llvm-config
207+
LLVM_VERSION_$(1)=$$(shell "$$(LLVM_CONFIG_$(1))" --version)
208+
LLVM_BINDIR_$(1)=$$(shell "$$(LLVM_CONFIG_$(1))" --bindir)
209+
LLVM_INCDIR_$(1)=$$(shell "$$(LLVM_CONFIG_$(1))" --includedir)
210+
LLVM_LIBDIR_$(1)=$$(shell "$$(LLVM_CONFIG_$(1))" --libdir)
211+
LLVM_LIBS_$(1)=$$(shell "$$(LLVM_CONFIG_$(1))" --libs)
212+
LLVM_LDFLAGS_$(1)=$$(shell "$$(LLVM_CONFIG_$(1))" --ldflags)
213+
LLVM_CXXFLAGS_$(1)=$$(shell "$$(LLVM_CONFIG_$(1))" --cxxflags)
214+
LLVM_HOST_TRIPLE_$(1)=$$(shell "$$(LLVM_CONFIG_$(1))" --host-target)
215+
216+
LLVM_AS_$(1)=$$(LLVM_BINDIR_$(1))/llvm-as$$(X)
217+
LLC_$(1)=$$(LLVM_BINDIR_$(1))/llc$$(X)
218+
219+
endef
220+
221+
$(foreach target,$(CFG_TARGET_TRIPLES), \
222+
$(eval $(call DEF_LLVM_VARS,$(target))))
223+
212224

213225
######################################################################
214226
# Exports for sub-utilities

trunk/configure

+77-56
Original file line numberDiff line numberDiff line change
@@ -372,12 +372,17 @@ for i in \
372372
nd nd/std \
373373
dl \
374374
test/run-pass test/run-fail test/compile-fail \
375-
test/bench test/perf test/pretty \
376-
llvm
375+
test/bench test/perf test/pretty
377376
do
378377
make_dir $i
379378
done
380379

380+
make_dir llvm
381+
for t in $CFG_TARGET_TRIPLES
382+
do
383+
make_dir llvm/$t
384+
done
385+
381386
make_dir rustllvm
382387
for t in $CFG_TARGET_TRIPLES
383388
do
@@ -446,62 +451,78 @@ msg
446451

447452
# Configure llvm. Here we go...
448453
CFG_LLVM_SRC_DIR=${CFG_SRC_DIR}src/llvm
449-
CFG_LLVM_BUILD_DIR=${CFG_BUILD_DIR}/llvm
450-
# Just use LLVM straight from its build directory to avoid 'make install' time
451-
CFG_LLVM_INST_DIR=${CFG_LLVM_BUILD_DIR}/Release+Asserts
454+
putvar CFG_LLVM_SRC_DIR
452455

453-
if [ -z $CFG_LLVM_ROOT ]
454-
then
455-
step_msg "configuring LLVM"
456-
457-
LLVM_TARGETS="--enable-targets=x86,x86_64"
458-
LLVM_BUILD="--build=${CFG_HOST_TRIPLE}"
459-
LLVM_HOST="--host=${CFG_HOST_TRIPLE}"
460-
LLVM_TARGET="--target=${CFG_HOST_TRIPLE}"
461-
LLVM_OPTS="--enable-optimized --disable-docs"
462-
463-
LLVM_CXX_32="g++ -m32"
464-
LLVM_CC_32="gcc -m32"
465-
LLVM_CFLAGS_32="-m32"
466-
LLVM_CXXFLAGS_32="-m32"
467-
LLVM_LDFLAGS_32="-m32"
468-
469-
# FIXME: Need to change flags for x64
470-
LLVM_CXX=$LLVM_CXX_32
471-
LLVM_CC=$LLVM_CC_32
472-
LLVM_CFLAGS=$LLVM_CFLAGS_32
473-
LLVM_CXXFLAGS=$LLVM_CXXFLAGS_32
474-
LLVM_LDFLAGS=$LLVM_LDFLAGS_32
475-
476-
CXX=$LLVM_CXX
477-
CC=$LLVM_CC
478-
CFLAGS=$LLVM_CFLAGS
479-
CXXFLAGS=$LLVM_CXXFLAGS
480-
LDFLAGS=$LLVM_LDFLAGS
481-
482-
LLVM_FLAGS="$LLVM_TARGETS $LLVM_OPTS $LLVM_BUILD $LLVM_HOST $LLVM_TARGET"
483-
484-
msg "configuring LLVM with:"
485-
msg "$LLVM_FLAGS"
486-
487-
export CXX
488-
export CC
489-
export CFLAGS
490-
export CXXFLAGS
491-
export LDFLAGS
492-
493-
cd $CFG_LLVM_BUILD_DIR
494-
# FIXME: This won't work if CFG_SRC_DIR is absolute
495-
${CFG_BUILD_DIR}/${CFG_LLVM_SRC_DIR}/configure $LLVM_FLAGS
496-
cd $CFG_BUILD_DIR
497-
else
498-
# The user is using their own LLVM
499-
CFG_LLVM_INST_DIR=$CFG_LLVM_ROOT
500-
fi
456+
for t in $CFG_TARGET_TRIPLES
457+
do
458+
if [ -z $CFG_LLVM_ROOT ]
459+
then
460+
step_msg "configuring LLVM for $t"
461+
462+
LLVM_BUILD_DIR=$CFG_BUILD_DIR/llvm/$t
463+
# Just use LLVM straight from its build directory to
464+
# avoid 'make install' time
465+
LLVM_INST_DIR=$LLVM_BUILD_DIR/Release+Asserts
466+
467+
LLVM_TARGETS="--enable-targets=x86,x86_64"
468+
LLVM_BUILD="--build=$t"
469+
LLVM_HOST="--host=$t"
470+
LLVM_TARGET="--target=$t"
471+
LLVM_OPTS="--enable-optimized --disable-docs"
472+
473+
LLVM_CXX_32="g++ -m32"
474+
LLVM_CC_32="gcc -m32"
475+
LLVM_CFLAGS_32="-m32"
476+
LLVM_CXXFLAGS_32="-m32"
477+
LLVM_LDFLAGS_32="-m32"
478+
479+
# FIXME: Need to change flags for x64
480+
LLVM_CXX=$LLVM_CXX_32
481+
LLVM_CC=$LLVM_CC_32
482+
LLVM_CFLAGS=$LLVM_CFLAGS_32
483+
LLVM_CXXFLAGS=$LLVM_CXXFLAGS_32
484+
LLVM_LDFLAGS=$LLVM_LDFLAGS_32
485+
486+
CXX=$LLVM_CXX
487+
CC=$LLVM_CC
488+
CFLAGS=$LLVM_CFLAGS
489+
CXXFLAGS=$LLVM_CXXFLAGS
490+
LDFLAGS=$LLVM_LDFLAGS
491+
492+
LLVM_FLAGS="$LLVM_TARGETS $LLVM_OPTS $LLVM_BUILD $LLVM_HOST $LLVM_TARGET"
493+
494+
msg "configuring LLVM with:"
495+
msg "$LLVM_FLAGS"
496+
497+
export CXX
498+
export CC
499+
export CFLAGS
500+
export CXXFLAGS
501+
export LDFLAGS
502+
503+
cd $LLVM_BUILD_DIR
504+
# FIXME: This won't work if CFG_SRC_DIR is absolute
505+
${CFG_BUILD_DIR}/${CFG_LLVM_SRC_DIR}/configure $LLVM_FLAGS
506+
cd $CFG_BUILD_DIR
507+
else
508+
LLVM_BUILD_DIR=bogus
509+
# The user is using their own LLVM
510+
LLVM_INST_DIR=$CFG_LLVM_ROOT
511+
fi
501512

502-
putvar CFG_LLVM_SRC_DIR
503-
putvar CFG_LLVM_BUILD_DIR
504-
putvar CFG_LLVM_INST_DIR
513+
# Construct variables for LLVM build and install directories for
514+
# each target. These will be named
515+
# CFG_LLVM_BUILD_DIR_${target_triple} but all the hyphens in
516+
# target_triple will be converted to underscore, because bash
517+
# variables can't contain hyphens. The makefile will then have to
518+
# convert back.
519+
CFG_LLVM_BUILD_DIR=$(echo CFG_LLVM_BUILD_DIR_${t} | tr - _)
520+
CFG_LLVM_INST_DIR=$(echo CFG_LLVM_INST_DIR_${t} | tr - _)
521+
eval ${CFG_LLVM_BUILD_DIR}="'$LLVM_BUILD_DIR'"
522+
eval ${CFG_LLVM_INST_DIR}="'$LLVM_INST_DIR'"
523+
putvar $CFG_LLVM_BUILD_DIR
524+
putvar $CFG_LLVM_INST_DIR
525+
done
505526

506527

507528
# Munge any paths that appear in config.mk back to posix-y

trunk/mk/autodep.mk

+2-2
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,11 @@ rt/%.d: rt/%.cpp $(MKFILES)
1414
1515
1616

17-
rustllvm/%.d: rustllvm/%.cpp $(MKFILES) $(LLVM_CONFIG)
17+
rustllvm/%.d: rustllvm/%.cpp $(MKFILES) $(LLVM_CONFIG_$(CFG_HOST_TRIPLE))
1818
@$(call E, dep: $@)
1919
$(Q)$(call CFG_DEPEND_C, $@ \
2020
$(subst $(S)src/,,$(patsubst %.cpp, %.o, $<)), \
21-
$(LLVM_CXXFLAGS) $(RUSTLLVM_INCS)) $< >[email protected]
21+
$(LLVM_CXXFLAGS_$(CFG_HOST_TRIPLE)) $(RUSTLLVM_INCS)) $< >[email protected]
2222
$(Q)$(CFG_PATH_MUNGE) [email protected]
2323
2424

trunk/mk/llvm.mk

+15-3
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,18 @@
22
LLVM_DEPS:=$(wildcard $(addprefix $(CFG_LLVM_SRC_DIR)/, \
33
* */*h */*/*h */*/*/*h */*cpp */*/*cpp */*/*/*cpp))
44

5-
$(LLVM_CONFIG): $(LLVM_DEPS)
6-
@$(call E, make: llvm)
7-
$(Q)make -C $(CFG_LLVM_BUILD_DIR)
5+
define DEF_LLVM_RULES
6+
7+
# If CFG_LLVM_ROOT is defined then we don't build LLVM ourselves
8+
ifeq ($(CFG_LLVM_ROOT),)
9+
10+
$$(LLVM_CONFIG_$(1)): $$(LLVM_DEPS_$(1))
11+
@$$(call E, make: llvm)
12+
$$(Q)make -C $$(CFG_LLVM_BUILD_DIR_$(1))
13+
14+
endif
15+
16+
endef
17+
18+
$(foreach target,$(CFG_TARGET_TRIPLES), \
19+
$(eval $(call DEF_LLVM_RULES,$(target))))

trunk/mk/rustllvm.mk

+6-6
Original file line numberDiff line numberDiff line change
@@ -14,21 +14,21 @@ endif
1414

1515
RUSTLLVM_DEF_$(1) := rustllvm/rustllvm$$(CFG_DEF_SUFFIX)
1616

17-
RUSTLLVM_INCS_$(1) := -iquote $$(LLVM_INCDIR) \
18-
-iquote $$(S)src/rustllvm/include
17+
RUSTLLVM_INCS_$(1) = -iquote $$(LLVM_INCDIR_$(1)) \
18+
-iquote $$(S)src/rustllvm/include
1919
RUSTLLVM_OBJS_OBJS_$(1) := $$(RUSTLLVM_OBJS_CS_$(1):rustllvm/%.cpp=rustllvm/$(1)/%.o)
2020

2121
rustllvm/$(1)/$(CFG_RUSTLLVM): $$(RUSTLLVM_OBJS_OBJS_$(1)) \
2222
$$(MKFILES) $$(RUSTLLVM_DEF_$(1))
2323
@$$(call E, link: $$@)
2424
$$(Q)$$(call CFG_LINK_C_$(1),$$@,$$(RUSTLLVM_OBJS_OBJS_$(1)) \
25-
$$(CFG_GCCISH_PRE_LIB_FLAGS) $$(LLVM_LIBS) \
25+
$$(CFG_GCCISH_PRE_LIB_FLAGS) $$(LLVM_LIBS_$(1)) \
2626
$$(CFG_GCCISH_POST_LIB_FLAGS) \
27-
$$(LLVM_LDFLAGS),$$(RUSTLLVM_DEF_$(1)),$$(CFG_RUSTLLVM))
27+
$$(LLVM_LDFLAGS_$(1)),$$(RUSTLLVM_DEF_$(1)),$$(CFG_RUSTLLVM))
2828

29-
rustllvm/$(1)/%.o: rustllvm/%.cpp $$(MKFILES) $$(LLVM_CONFIG)
29+
rustllvm/$(1)/%.o: rustllvm/%.cpp $$(MKFILES) $$(LLVM_CONFIG_$(1))
3030
@$$(call E, compile: $$@)
31-
$$(Q)$$(call CFG_COMPILE_C_$(1), $$@, $$(LLVM_CXXFLAGS) $$(RUSTLLVM_INCS_$(1))) $$<
31+
$$(Q)$$(call CFG_COMPILE_C_$(1), $$@, $$(LLVM_CXXFLAGS_$(1)) $$(RUSTLLVM_INCS_$(1))) $$<
3232
endef
3333

3434
# Instantiate template for all stages

trunk/mk/target.mk

+2-2
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@ $$(TARGET_LIB$(1)$(2))/intrinsics.ll: \
1313
$$(Q)sed s/@CFG_TARGET_TRIPLE@/$(2)/ $$< > $$@
1414

1515
$$(TARGET_LIB$(1)$(2))/intrinsics.bc: $$(TARGET_LIB$(1)$(2))/intrinsics.ll \
16-
$$(LLVM_CONFIG)
16+
$$(LLVM_CONFIG_$(2))
1717
@$$(call E, llvms-as: $$@)
18-
$$(Q)$$(LLVM_AS) -o $$@ $$<
18+
$$(Q)$$(LLVM_AS_$(2)) -o $$@ $$<
1919

2020
$$(TARGET_LIB$(1)$(2))/$$(CFG_STDLIB): \
2121
$$(STDLIB_CRATE) $$(STDLIB_INPUTS) \

0 commit comments

Comments
 (0)