Skip to content

Commit

Permalink
configure: correct submodule code, only reconfigure LLVM when changed.
Browse files Browse the repository at this point in the history
  • Loading branch information
graydon committed Feb 29, 2012
1 parent 341f414 commit 8c33702
Showing 1 changed file with 149 additions and 120 deletions.
269 changes: 149 additions & 120 deletions configure
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,6 @@ opt() {
fi
}


msg "looking for configure programs"
need_cmd cmp
need_cmd mkdir
Expand Down Expand Up @@ -482,138 +481,168 @@ then
fi

# Have to be in the top of src directory for this
cd ${CFG_SRC_DIR}

if [ -z $CFG_DISABLE_MANAGE_SUBMODULES ]
then
msg "git: submodule sync"
"${CFG_GIT}" submodule sync --quiet
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)$?
else
NEED_INIT=
NEED_UPDATE=
fi

if [ $NEED_INIT ]
then
msg "git: submodule init"
"${CFG_GIT}" submodule init --quiet
need_ok "git failed"
fi

if [ $NEED_UPDATE ]
then
msg "git: submodule update"
"${CFG_GIT}" submodule update --quiet
need_ok "git failed"
cd ${CFG_SRC_DIR}
msg "git: submodule sync"
"${CFG_GIT}" submodule sync --quiet
SUBMODULES=$("${CFG_GIT}" submodule status | awk '{print $2}')
for s in $SUBMODULES
do
msg "git: submodule status ${s}"
status=$("${CFG_GIT}" submodule status ${s} | awk '{print $1}')
case ${status} in
-*)
msg "${s} is not initialized, initializing"
"${CFG_GIT}" submodule init --quiet ${s}
need_ok "git failed"
msg "${s} updating"
"${CFG_GIT}" submodule update --quiet ${s}
need_ok "git failed"
;;
+*)
msg "${s} is not up to date, updating"
"${CFG_GIT}" submodule update --quiet ${s}
need_ok "git failed"
;;
*)
msg "${s} is clean"
;;
esac
done
cd ${CFG_BUILD_DIR}
fi

cd ${CFG_BUILD_DIR}


# Configure llvm. Here we go...
# Configure llvm, only if necessary
step_msg "looking at LLVM"
CFG_LLVM_SRC_DIR=${CFG_SRC_DIR}src/llvm

for t in $CFG_TARGET_TRIPLES
do
do_reconfigure=1

if [ -z $CFG_LLVM_ROOT ]
then
step_msg "configuring LLVM for $t"

LLVM_BUILD_DIR=$CFG_BUILD_DIR/llvm/$t
LLVM_BUILD_DIR=$CFG_BUILD_DIR/llvm/$t
if [ ! -z "$CFG_DISABLE_OPTIMIZE_LLVM" ]
then
LLVM_DBG_OPTS=""
# Just use LLVM straight from its build directory to
# avoid 'make install' time
LLVM_INST_DIR=$LLVM_BUILD_DIR/Debug+Asserts
else
LLVM_DBG_OPTS="--enable-optimized"
LLVM_INST_DIR=$LLVM_BUILD_DIR/Release+Asserts
fi
else
msg "not reconfiguring LLVM, external LLVM root"
# The user is using their own LLVM
LLVM_BUILD_DIR=
LLVM_INST_DIR=$CFG_LLVM_ROOT
do_reconfigure=0
fi

LLVM_TARGETS="--enable-targets=x86,x86_64"
LLVM_BUILD="--build=$t"
LLVM_HOST="--host=$t"
LLVM_TARGET="--target=$t"

if [ ! -z "$CFG_DISABLE_OPTIMIZE_LLVM" ]
if [ ${do_reconfigure} -ne 0 ]
then
LLVM_DBG_OPTS=""
# Just use LLVM straight from its build directory to
# avoid 'make install' time
LLVM_INST_DIR=$LLVM_BUILD_DIR/Debug+Asserts
else
LLVM_DBG_OPTS="--enable-optimized"
LLVM_INST_DIR=$LLVM_BUILD_DIR/Release+Asserts
# because git is hilarious, it might have put the module index
# in a couple places.
index1="${CFG_SRC_DIR}.git/modules/src/llvm/index"
index2="${CFG_SRC_DIR}src/llvm/.git/index"
for index in ${index1} ${index2}
do
config_status="${CFG_BUILD_DIR}/llvm/$t/config.status"
if test -e ${index} -a \
-e ${config_status} -a \
${config_status} -nt ${index}
then
msg "not reconfiguring LLVM, config.status is fresh"
do_reconfigure=0
fi
done
fi
# Disable unused LLVM features
LLVM_OPTS="$LLVM_DBG_OPTS --disable-docs --disable-jit --enable-bindings=none --disable-threads --disable-pthreads"

if [ "$CFG_C_COMPILER" = "clang" ]
then
LLVM_CXX_32="clang++ -m32"
LLVM_CC_32="clang -m32"

LLVM_CXX_64="clang++"
LLVM_CC_64="clang"
else
LLVM_CXX_32="g++ -m32"
LLVM_CC_32="gcc -m32"

LLVM_CXX_64="g++"
LLVM_CC_64="gcc"
fi

LLVM_CFLAGS_32="-m32"
LLVM_CXXFLAGS_32="-m32"
LLVM_LDFLAGS_32="-m32"

LLVM_CFLAGS_64=""
LLVM_CXXFLAGS_64=""
LLVM_LDFLAGS_64=""

if echo $t | grep x86_64
then
LLVM_CXX=$LLVM_CXX_64
LLVM_CC=$LLVM_CC_64
LLVM_CFLAGS=$LLVM_CFLAGS_64
LLVM_CXXFLAGS=$LLVM_CXXFLAGS_64
LLVM_LDFLAGS=$LLVM_LDFLAGS_64
else
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
fi

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
need_ok "LLVM configure failed"
cd $CFG_BUILD_DIR
else
LLVM_BUILD_DIR=
# The user is using their own LLVM
LLVM_INST_DIR=$CFG_LLVM_ROOT

if [ ${do_reconfigure} -ne 0 ]
then
msg "configuring LLVM for $t"

LLVM_TARGETS="--enable-targets=x86,x86_64"
LLVM_BUILD="--build=$t"
LLVM_HOST="--host=$t"
LLVM_TARGET="--target=$t"

# Disable unused LLVM features
LLVM_OPTS="$LLVM_DBG_OPTS --disable-docs --disable-jit \
--enable-bindings=none --disable-threads \
--disable-pthreads"

if [ "$CFG_C_COMPILER" = "clang" ]
then
LLVM_CXX_32="clang++ -m32"
LLVM_CC_32="clang -m32"

LLVM_CXX_64="clang++"
LLVM_CC_64="clang"
else
LLVM_CXX_32="g++ -m32"
LLVM_CC_32="gcc -m32"

LLVM_CXX_64="g++"
LLVM_CC_64="gcc"
fi

LLVM_CFLAGS_32="-m32"
LLVM_CXXFLAGS_32="-m32"
LLVM_LDFLAGS_32="-m32"

LLVM_CFLAGS_64=""
LLVM_CXXFLAGS_64=""
LLVM_LDFLAGS_64=""

if echo $t | grep -q x86_64
then
LLVM_CXX=$LLVM_CXX_64
LLVM_CC=$LLVM_CC_64
LLVM_CFLAGS=$LLVM_CFLAGS_64
LLVM_CXXFLAGS=$LLVM_CXXFLAGS_64
LLVM_LDFLAGS=$LLVM_LDFLAGS_64
else
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
fi

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
need_ok "LLVM configure failed"
cd $CFG_BUILD_DIR
fi

# Construct variables for LLVM build and install directories for
Expand Down

0 comments on commit 8c33702

Please sign in to comment.