CMake: lit(check.vcproj) can run with multiple configurations on Visual Studio.
authorNAKAMURA Takumi <geek4civic@gmail.com>
Sat, 27 Nov 2010 13:10:11 +0000 (13:10 +0000)
committerNAKAMURA Takumi <geek4civic@gmail.com>
Sat, 27 Nov 2010 13:10:11 +0000 (13:10 +0000)
Unittests need LLVM_BUILD_MODE to pick up each test.

Confirmed on CentOS5, Mingw, MSYS, and with possible configurations on VS8 and VS10.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@120212 91177308-0d34-0410-b5e6-96231b3b80d8

CMakeLists.txt
test/CMakeLists.txt
test/Unit/lit.site.cfg.in
test/lit.site.cfg.in

index 2c2c1152c3658d674beb0fb92501d7b4480b49c5..4c1cc170e7eee8cd9ee74ad78a680c7965079e4e 100644 (file)
@@ -27,6 +27,20 @@ This process created the file `CMakeCache.txt' and the directory `CMakeFiles'.
 Please delete them.")
 endif()
 
+# Run-time build mode; It is used for unittests.
+if(MSVC_IDE)
+  # Expect "$(Configuration)", "$(OutDir)", etc.
+  # It is expanded by msbuild or similar.
+  set(RUNTIME_BUILD_MODE "${CMAKE_CFG_INTDIR}")
+elseif(NOT CMAKE_BUILD_TYPE STREQUAL "")
+  # Expect "Release" "Debug", etc.
+  # Or unittests could not run.
+  set(RUNTIME_BUILD_MODE ${CMAKE_BUILD_TYPE})
+else()
+  # It might be "."
+  set(RUNTIME_BUILD_MODE "${CMAKE_CFG_INTDIR}")
+endif()
+
 string(TOUPPER "${CMAKE_BUILD_TYPE}" uppercase_CMAKE_BUILD_TYPE)
 
 set(LLVM_MAIN_SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR})
index 5a8678be2b287e15007ecda51f9efead4c49bd7c..0d622fa536bcf184176d93964dadc126fc3b207c 100644 (file)
@@ -50,20 +50,14 @@ if(PYTHONINTERP_FOUND)
 
   MAKE_DIRECTORY(${CMAKE_CURRENT_BINARY_DIR}/Unit)
 
+  # Configuration-time: See Unit/lit.site.cfg.in
+  set(LLVM_BUILD_MODE "%(build_mode)s")
+
   set(LLVM_SOURCE_DIR ${LLVM_MAIN_SRC_DIR})
   set(LLVM_BINARY_DIR ${LLVM_BINARY_DIR})
-  set(LLVM_TOOLS_DIR "${LLVM_TOOLS_BINARY_DIR}/${CMAKE_CFG_INTDIR}")
+  set(LLVM_TOOLS_DIR "${LLVM_TOOLS_BINARY_DIR}/%(build_config)s")
   set(LLVMGCCDIR "")
   set(PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE})
-  if (CMAKE_CONFIGURATION_TYPES)
-    # FIXME: We have no idea. It could be any of them... So just output all of
-    # them.
-    set(LLVM_BUILD_MODE "${CMAKE_CONFIGURATION_TYPES}")
-  elseif (CMAKE_BUILD_TYPE)
-    set(LLVM_BUILD_MODE "${CMAKE_BUILD_TYPE}")
-  else()
-    set(LLVM_BUILD_MODE "None")
-  endif()
   set(ENABLE_SHARED ${LLVM_SHARED_LIBS_ENABLED})
   set(SHLIBPATH_VAR ${SHLIBPATH_VAR})
 
@@ -81,6 +75,8 @@ if(PYTHONINTERP_FOUND)
                 ${LLVM_SOURCE_DIR}/utils/lit/lit.py
                 --param llvm_site_config=${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg
                 --param llvm_unit_site_config=${CMAKE_CURRENT_BINARY_DIR}/Unit/lit.site.cfg
+                --param build_config=${CMAKE_CFG_INTDIR}
+                --param build_mode=${RUNTIME_BUILD_MODE}
                 ${LIT_ARGS}
                 ${CMAKE_CURRENT_BINARY_DIR}
                 DEPENDS
index 51b5bc416f69bebe8124c90203ed5fbcfd98e618..75932a4897b7e849c3d76e8cefdf95e2ade8192a 100644 (file)
@@ -8,5 +8,14 @@ config.llvm_build_mode = "@LLVM_BUILD_MODE@"
 config.enable_shared = @ENABLE_SHARED@
 config.shlibpath_var = "@SHLIBPATH_VAR@"
 
+# Support substitution of the tools_dir and build_mode with user parameters.
+# This is used when we can't determine the tool dir at configuration time.
+try:
+    config.llvm_tools_dir = config.llvm_tools_dir % lit.params
+    config.llvm_build_mode = config.llvm_build_mode % lit.params
+except KeyError,e:
+    key, = e.args
+    lit.fatal("unable to find %r parameter, use '--param=%s=VALUE'" % (key,key))
+
 # Let the main config do the real work.
 lit.load_config(config, "@LLVM_SOURCE_DIR@/test/Unit/lit.cfg")
index 79b2c602a07c35da83f4fbcf28a6ef56e2bfc402..56b0a82f6f798b357f4b8b2d714501ec6e6790cc 100644 (file)
@@ -6,5 +6,13 @@ config.llvm_tools_dir = "@LLVM_TOOLS_DIR@"
 config.llvmgcc_dir = "@LLVMGCCDIR@"
 config.python_executable = "@PYTHON_EXECUTABLE@"
 
+# Support substitution of the tools_dir with user parameters. This is
+# used when we can't determine the tool dir at configuration time.
+try:
+    config.llvm_tools_dir = config.llvm_tools_dir % lit.params
+except KeyError,e:
+    key, = e.args
+    lit.fatal("unable to find %r parameter, use '--param=%s=VALUE'" % (key,key))
+
 # Let the main config do the real work.
 lit.load_config(config, "@LLVM_SOURCE_DIR@/test/lit.cfg")