llvm-config: Add support for CMake build trees in which the build

mode does not form part of the path.

llvm-svn: 149010
This commit is contained in:
Peter Collingbourne 2012-01-26 01:31:38 +00:00
parent e3593114a1
commit 76e1c8c9ae
1 changed files with 19 additions and 7 deletions

View File

@ -169,7 +169,8 @@ int main(int argc, char **argv) {
// and from an installed path. We try and auto-detect which case we are in so // and from an installed path. We try and auto-detect which case we are in so
// that we can report the correct information when run from a development // that we can report the correct information when run from a development
// tree. // tree.
bool IsInDevelopmentTree, DevelopmentTreeLayoutIsCMakeStyle; bool IsInDevelopmentTree;
enum { MakefileStyle, CMakeStyle, CMakeBuildModeStyle } DevelopmentTreeLayout;
llvm::SmallString<256> CurrentPath(GetExecutablePath(argv[0]).str()); llvm::SmallString<256> CurrentPath(GetExecutablePath(argv[0]).str());
std::string CurrentExecPrefix; std::string CurrentExecPrefix;
std::string ActiveObjRoot; std::string ActiveObjRoot;
@ -185,7 +186,7 @@ int main(int argc, char **argv) {
// symbolic links, but is good enough. // symbolic links, but is good enough.
if (CurrentExecPrefix == std::string(LLVM_OBJ_ROOT) + "/" + LLVM_BUILDMODE) { if (CurrentExecPrefix == std::string(LLVM_OBJ_ROOT) + "/" + LLVM_BUILDMODE) {
IsInDevelopmentTree = true; IsInDevelopmentTree = true;
DevelopmentTreeLayoutIsCMakeStyle = false; DevelopmentTreeLayout = MakefileStyle;
// If we are in a development tree, then check if we are in a BuildTools // If we are in a development tree, then check if we are in a BuildTools
// directory. This indicates we are built for the build triple, but we // directory. This indicates we are built for the build triple, but we
@ -195,9 +196,13 @@ int main(int argc, char **argv) {
} else { } else {
ActiveObjRoot = LLVM_OBJ_ROOT; ActiveObjRoot = LLVM_OBJ_ROOT;
} }
} else if (CurrentExecPrefix == std::string(LLVM_OBJ_ROOT)) {
IsInDevelopmentTree = true;
DevelopmentTreeLayout = CMakeStyle;
ActiveObjRoot = LLVM_OBJ_ROOT;
} else if (CurrentExecPrefix == std::string(LLVM_OBJ_ROOT) + "/bin") { } else if (CurrentExecPrefix == std::string(LLVM_OBJ_ROOT) + "/bin") {
IsInDevelopmentTree = true; IsInDevelopmentTree = true;
DevelopmentTreeLayoutIsCMakeStyle = true; DevelopmentTreeLayout = CMakeBuildModeStyle;
ActiveObjRoot = LLVM_OBJ_ROOT; ActiveObjRoot = LLVM_OBJ_ROOT;
} else { } else {
IsInDevelopmentTree = false; IsInDevelopmentTree = false;
@ -213,12 +218,19 @@ int main(int argc, char **argv) {
// CMake organizes the products differently than a normal prefix style // CMake organizes the products differently than a normal prefix style
// layout. // layout.
if (DevelopmentTreeLayoutIsCMakeStyle) { switch (DevelopmentTreeLayout) {
ActiveBinDir = ActiveObjRoot + "/bin/" + LLVM_BUILDMODE; case MakefileStyle:
ActiveLibDir = ActiveObjRoot + "/lib/" + LLVM_BUILDMODE;
} else {
ActiveBinDir = ActiveObjRoot + "/" + LLVM_BUILDMODE + "/bin"; ActiveBinDir = ActiveObjRoot + "/" + LLVM_BUILDMODE + "/bin";
ActiveLibDir = ActiveObjRoot + "/" + LLVM_BUILDMODE + "/lib"; ActiveLibDir = ActiveObjRoot + "/" + LLVM_BUILDMODE + "/lib";
break;
case CMakeStyle:
ActiveBinDir = ActiveObjRoot + "/bin";
ActiveLibDir = ActiveObjRoot + "/lib";
break;
case CMakeBuildModeStyle:
ActiveBinDir = ActiveObjRoot + "/bin/" + LLVM_BUILDMODE;
ActiveLibDir = ActiveObjRoot + "/lib/" + LLVM_BUILDMODE;
break;
} }
// We need to include files from both the source and object trees. // We need to include files from both the source and object trees.