Skip to content

Commit 8c33702

Browse files
committed
configure: correct submodule code, only reconfigure LLVM when changed.
1 parent 341f414 commit 8c33702

File tree

1 file changed

+149
-120
lines changed

1 file changed

+149
-120
lines changed

configure

+149-120
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,6 @@ opt() {
173173
fi
174174
}
175175

176-
177176
msg "looking for configure programs"
178177
need_cmd cmp
179178
need_cmd mkdir
@@ -482,138 +481,168 @@ then
482481
fi
483482

484483
# Have to be in the top of src directory for this
485-
cd ${CFG_SRC_DIR}
486-
487484
if [ -z $CFG_DISABLE_MANAGE_SUBMODULES ]
488485
then
489-
msg "git: submodule sync"
490-
"${CFG_GIT}" submodule sync --quiet
491-
SUBMODULE_STATUS=$("${CFG_GIT}" submodule status)
492-
NEED_INIT_COUNT=$(echo "$SUBMODULE_STATUS" | grep -c "^-")
493-
NEED_UPDATE_COUNT=$(echo "$SUBMODULE_STATUS" | grep -c "^+")
494-
NEED_INIT=$(test $NEED_INIT_COUNT -gt 0)$?
495-
NEED_UPDATE=$(test "($NEED_INIT)" -o "$NEED_UPDATE_COUNT" -gt 0)$?
496-
else
497-
NEED_INIT=
498-
NEED_UPDATE=
499-
fi
500-
501-
if [ $NEED_INIT ]
502-
then
503-
msg "git: submodule init"
504-
"${CFG_GIT}" submodule init --quiet
505-
need_ok "git failed"
506-
fi
507-
508-
if [ $NEED_UPDATE ]
509-
then
510-
msg "git: submodule update"
511-
"${CFG_GIT}" submodule update --quiet
512-
need_ok "git failed"
486+
cd ${CFG_SRC_DIR}
487+
msg "git: submodule sync"
488+
"${CFG_GIT}" submodule sync --quiet
489+
SUBMODULES=$("${CFG_GIT}" submodule status | awk '{print $2}')
490+
for s in $SUBMODULES
491+
do
492+
msg "git: submodule status ${s}"
493+
status=$("${CFG_GIT}" submodule status ${s} | awk '{print $1}')
494+
case ${status} in
495+
-*)
496+
msg "${s} is not initialized, initializing"
497+
"${CFG_GIT}" submodule init --quiet ${s}
498+
need_ok "git failed"
499+
msg "${s} updating"
500+
"${CFG_GIT}" submodule update --quiet ${s}
501+
need_ok "git failed"
502+
;;
503+
+*)
504+
msg "${s} is not up to date, updating"
505+
"${CFG_GIT}" submodule update --quiet ${s}
506+
need_ok "git failed"
507+
;;
508+
*)
509+
msg "${s} is clean"
510+
;;
511+
esac
512+
done
513+
cd ${CFG_BUILD_DIR}
513514
fi
514515

515-
cd ${CFG_BUILD_DIR}
516-
517-
518-
# Configure llvm. Here we go...
516+
# Configure llvm, only if necessary
517+
step_msg "looking at LLVM"
519518
CFG_LLVM_SRC_DIR=${CFG_SRC_DIR}src/llvm
520-
521519
for t in $CFG_TARGET_TRIPLES
522520
do
521+
do_reconfigure=1
522+
523523
if [ -z $CFG_LLVM_ROOT ]
524524
then
525-
step_msg "configuring LLVM for $t"
526-
527-
LLVM_BUILD_DIR=$CFG_BUILD_DIR/llvm/$t
525+
LLVM_BUILD_DIR=$CFG_BUILD_DIR/llvm/$t
526+
if [ ! -z "$CFG_DISABLE_OPTIMIZE_LLVM" ]
527+
then
528+
LLVM_DBG_OPTS=""
529+
# Just use LLVM straight from its build directory to
530+
# avoid 'make install' time
531+
LLVM_INST_DIR=$LLVM_BUILD_DIR/Debug+Asserts
532+
else
533+
LLVM_DBG_OPTS="--enable-optimized"
534+
LLVM_INST_DIR=$LLVM_BUILD_DIR/Release+Asserts
535+
fi
536+
else
537+
msg "not reconfiguring LLVM, external LLVM root"
538+
# The user is using their own LLVM
539+
LLVM_BUILD_DIR=
540+
LLVM_INST_DIR=$CFG_LLVM_ROOT
541+
do_reconfigure=0
542+
fi
528543

529-
LLVM_TARGETS="--enable-targets=x86,x86_64"
530-
LLVM_BUILD="--build=$t"
531-
LLVM_HOST="--host=$t"
532-
LLVM_TARGET="--target=$t"
533544

534-
if [ ! -z "$CFG_DISABLE_OPTIMIZE_LLVM" ]
545+
if [ ${do_reconfigure} -ne 0 ]
535546
then
536-
LLVM_DBG_OPTS=""
537-
# Just use LLVM straight from its build directory to
538-
# avoid 'make install' time
539-
LLVM_INST_DIR=$LLVM_BUILD_DIR/Debug+Asserts
540-
else
541-
LLVM_DBG_OPTS="--enable-optimized"
542-
LLVM_INST_DIR=$LLVM_BUILD_DIR/Release+Asserts
547+
# because git is hilarious, it might have put the module index
548+
# in a couple places.
549+
index1="${CFG_SRC_DIR}.git/modules/src/llvm/index"
550+
index2="${CFG_SRC_DIR}src/llvm/.git/index"
551+
for index in ${index1} ${index2}
552+
do
553+
config_status="${CFG_BUILD_DIR}/llvm/$t/config.status"
554+
if test -e ${index} -a \
555+
-e ${config_status} -a \
556+
${config_status} -nt ${index}
557+
then
558+
msg "not reconfiguring LLVM, config.status is fresh"
559+
do_reconfigure=0
560+
fi
561+
done
543562
fi
544-
# Disable unused LLVM features
545-
LLVM_OPTS="$LLVM_DBG_OPTS --disable-docs --disable-jit --enable-bindings=none --disable-threads --disable-pthreads"
546-
547-
if [ "$CFG_C_COMPILER" = "clang" ]
548-
then
549-
LLVM_CXX_32="clang++ -m32"
550-
LLVM_CC_32="clang -m32"
551-
552-
LLVM_CXX_64="clang++"
553-
LLVM_CC_64="clang"
554-
else
555-
LLVM_CXX_32="g++ -m32"
556-
LLVM_CC_32="gcc -m32"
557-
558-
LLVM_CXX_64="g++"
559-
LLVM_CC_64="gcc"
560-
fi
561-
562-
LLVM_CFLAGS_32="-m32"
563-
LLVM_CXXFLAGS_32="-m32"
564-
LLVM_LDFLAGS_32="-m32"
565-
566-
LLVM_CFLAGS_64=""
567-
LLVM_CXXFLAGS_64=""
568-
LLVM_LDFLAGS_64=""
569-
570-
if echo $t | grep x86_64
571-
then
572-
LLVM_CXX=$LLVM_CXX_64
573-
LLVM_CC=$LLVM_CC_64
574-
LLVM_CFLAGS=$LLVM_CFLAGS_64
575-
LLVM_CXXFLAGS=$LLVM_CXXFLAGS_64
576-
LLVM_LDFLAGS=$LLVM_LDFLAGS_64
577-
else
578-
LLVM_CXX=$LLVM_CXX_32
579-
LLVM_CC=$LLVM_CC_32
580-
LLVM_CFLAGS=$LLVM_CFLAGS_32
581-
LLVM_CXXFLAGS=$LLVM_CXXFLAGS_32
582-
LLVM_LDFLAGS=$LLVM_LDFLAGS_32
583-
fi
584-
585-
CXX=$LLVM_CXX
586-
CC=$LLVM_CC
587-
CFLAGS=$LLVM_CFLAGS
588-
CXXFLAGS=$LLVM_CXXFLAGS
589-
LDFLAGS=$LLVM_LDFLAGS
590-
591-
LLVM_FLAGS="$LLVM_TARGETS $LLVM_OPTS $LLVM_BUILD $LLVM_HOST $LLVM_TARGET"
592-
593-
msg "configuring LLVM with:"
594-
msg "$LLVM_FLAGS"
595-
596-
export CXX
597-
export CC
598-
export CFLAGS
599-
export CXXFLAGS
600-
export LDFLAGS
601-
602-
cd $LLVM_BUILD_DIR
603-
case $CFG_SRC_DIR in
604-
/* | [a-z]:* | [A-Z]:*)
605-
${CFG_LLVM_SRC_DIR}/configure $LLVM_FLAGS
606-
;;
607-
*)
608-
${CFG_BUILD_DIR}/${CFG_LLVM_SRC_DIR}/configure $LLVM_FLAGS
609-
;;
610-
esac
611-
need_ok "LLVM configure failed"
612-
cd $CFG_BUILD_DIR
613-
else
614-
LLVM_BUILD_DIR=
615-
# The user is using their own LLVM
616-
LLVM_INST_DIR=$CFG_LLVM_ROOT
563+
564+
if [ ${do_reconfigure} -ne 0 ]
565+
then
566+
msg "configuring LLVM for $t"
567+
568+
LLVM_TARGETS="--enable-targets=x86,x86_64"
569+
LLVM_BUILD="--build=$t"
570+
LLVM_HOST="--host=$t"
571+
LLVM_TARGET="--target=$t"
572+
573+
# Disable unused LLVM features
574+
LLVM_OPTS="$LLVM_DBG_OPTS --disable-docs --disable-jit \
575+
--enable-bindings=none --disable-threads \
576+
--disable-pthreads"
577+
578+
if [ "$CFG_C_COMPILER" = "clang" ]
579+
then
580+
LLVM_CXX_32="clang++ -m32"
581+
LLVM_CC_32="clang -m32"
582+
583+
LLVM_CXX_64="clang++"
584+
LLVM_CC_64="clang"
585+
else
586+
LLVM_CXX_32="g++ -m32"
587+
LLVM_CC_32="gcc -m32"
588+
589+
LLVM_CXX_64="g++"
590+
LLVM_CC_64="gcc"
591+
fi
592+
593+
LLVM_CFLAGS_32="-m32"
594+
LLVM_CXXFLAGS_32="-m32"
595+
LLVM_LDFLAGS_32="-m32"
596+
597+
LLVM_CFLAGS_64=""
598+
LLVM_CXXFLAGS_64=""
599+
LLVM_LDFLAGS_64=""
600+
601+
if echo $t | grep -q x86_64
602+
then
603+
LLVM_CXX=$LLVM_CXX_64
604+
LLVM_CC=$LLVM_CC_64
605+
LLVM_CFLAGS=$LLVM_CFLAGS_64
606+
LLVM_CXXFLAGS=$LLVM_CXXFLAGS_64
607+
LLVM_LDFLAGS=$LLVM_LDFLAGS_64
608+
else
609+
LLVM_CXX=$LLVM_CXX_32
610+
LLVM_CC=$LLVM_CC_32
611+
LLVM_CFLAGS=$LLVM_CFLAGS_32
612+
LLVM_CXXFLAGS=$LLVM_CXXFLAGS_32
613+
LLVM_LDFLAGS=$LLVM_LDFLAGS_32
614+
fi
615+
616+
CXX=$LLVM_CXX
617+
CC=$LLVM_CC
618+
CFLAGS=$LLVM_CFLAGS
619+
CXXFLAGS=$LLVM_CXXFLAGS
620+
LDFLAGS=$LLVM_LDFLAGS
621+
622+
LLVM_FLAGS="$LLVM_TARGETS $LLVM_OPTS $LLVM_BUILD \
623+
$LLVM_HOST $LLVM_TARGET"
624+
625+
msg "configuring LLVM with:"
626+
msg "$LLVM_FLAGS"
627+
628+
export CXX
629+
export CC
630+
export CFLAGS
631+
export CXXFLAGS
632+
export LDFLAGS
633+
634+
cd $LLVM_BUILD_DIR
635+
case $CFG_SRC_DIR in
636+
/* | [a-z]:* | [A-Z]:*)
637+
${CFG_LLVM_SRC_DIR}/configure $LLVM_FLAGS
638+
;;
639+
*)
640+
${CFG_BUILD_DIR}/${CFG_LLVM_SRC_DIR}/configure \
641+
$LLVM_FLAGS
642+
;;
643+
esac
644+
need_ok "LLVM configure failed"
645+
cd $CFG_BUILD_DIR
617646
fi
618647

619648
# Construct variables for LLVM build and install directories for

0 commit comments

Comments
 (0)