]> granicus.if.org Git - clang/commitdiff
Add a cl.exe compatible driver mode
authorHans Wennborg <hans@hanshq.net>
Fri, 19 Jul 2013 20:33:20 +0000 (20:33 +0000)
committerHans Wennborg <hans@hanshq.net>
Fri, 19 Jul 2013 20:33:20 +0000 (20:33 +0000)
The mode doesn't actually do anything yet, but this provides a
way to get into it.

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

include/clang/Driver/Driver.h
lib/Driver/Driver.cpp
test/Driver/cl.c [new file with mode: 0644]
test/lit.cfg
tools/driver/CMakeLists.txt
tools/driver/clang_symlink.cmake
tools/driver/driver.cpp

index 18d81e1b5fa0899089ee2cdd0bb8efda6c804455..7633ae60daa5d6040e01ebbf48eaa6a95819f33a 100644 (file)
@@ -54,7 +54,8 @@ class Driver {
   enum DriverMode {
     GCCMode,
     GXXMode,
-    CPPMode
+    CPPMode,
+    CLMode
   } Mode;
 
 public:
index 0c3f6ca2436e74fb5d432eda9cd5db6faaaba981..98b87bebc0e63655d1142bf39017f2138f636411 100644 (file)
@@ -96,6 +96,7 @@ void Driver::ParseDriverMode(ArrayRef<const char *> Args) {
         .Case("gcc", GCCMode)
         .Case("g++", GXXMode)
         .Case("cpp", CPPMode)
+        .Case("cl",  CLMode)
         .Default(~0U);
 
     if (M != ~0U)
diff --git a/test/Driver/cl.c b/test/Driver/cl.c
new file mode 100644 (file)
index 0000000..c527313
--- /dev/null
@@ -0,0 +1,3 @@
+// RUN: %clang_cl -fsyntax-only -c %s
+
+void f();
index 46fc5b500872f25c02bf256dfcc09d3ee05c882a..a5bb350f08d8960a25429d1a1520347439ff57c6 100644 (file)
@@ -204,7 +204,8 @@ config.substitutions.append( ('%clang_cc1', '%s -cc1 -internal-isystem %s'
                                  getClangBuiltinIncludeDir(config.clang))) )
 config.substitutions.append( ('%clang_cpp', ' ' + config.clang +
                               ' --driver-mode=cpp '))
-
+config.substitutions.append( ('%clang_cl', ' ' + config.clang +
+                              ' --driver-mode=cl '))
 config.substitutions.append( ('%clangxx', ' ' + config.clang +
                               ' --driver-mode=g++ '))
 config.substitutions.append( ('%clang', ' ' + config.clang + ' ') )
@@ -227,6 +228,9 @@ config.substitutions.append(
 config.substitutions.append(
     (' %clang-cpp ',
      """*** invalid substitution, use '%clang_cpp'. ***""") )
+config.substitutions.append(
+    (' %clang-cl ',
+     """*** invalid substitution, use '%clang_cl'. ***""") )
 
 ###
 
index 3dac964f802c419ff9f756660ab4bdfafee601d3..77c819e70d205104edd493e27b1771633702e280 100644 (file)
@@ -76,8 +76,16 @@ add_custom_command(TARGET clang POST_BUILD
 set_property(DIRECTORY APPEND
   PROPERTY ADDITIONAL_MAKE_CLEAN_FILES ${clang_pp})
 
+# Create the clang-cl symlink in the build directory.
+set(clang_cl "${LLVM_BINARY_DIR}/bin/${CMAKE_CFG_INTDIR}/clang-cl${CMAKE_EXECUTABLE_SUFFIX}")
+add_custom_command(TARGET clang POST_BUILD
+    COMMAND ${CMAKE_COMMAND} -E ${CLANGXX_LINK_OR_COPY} "${clang_binary}" "${clang_cl}")
+
+set_property(DIRECTORY APPEND
+  PROPERTY ADDITIONAL_MAKE_CLEAN_FILES ${clang_cl})
+
 install(TARGETS clang
   RUNTIME DESTINATION bin)
 
-# Create the clang++ symlink at installation time.
+# Create the clang++ and clang-cl symlinks at installation time.
 install(SCRIPT clang_symlink.cmake -DCMAKE_INSTALL_PREFIX=\"${CMAKE_INSTALL_PREFIX}\")
index c7341cb2fa613ad4155e97386ffbbf7e4b5dfa8e..9204f9f36655da04db2742a4bb6038fad61bcbdf 100644 (file)
@@ -19,9 +19,16 @@ endif()
 set(bindir "${CLANGXX_DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/")
 set(clang "clang${EXECUTABLE_SUFFIX}")
 set(clangxx "clang++${EXECUTABLE_SUFFIX}")
+set(clang_cl "clang-cl${EXECUTABLE_SUFFIX}")
 
 message("Creating clang++ executable based on ${clang}")
 
 execute_process(
   COMMAND "${CMAKE_COMMAND}" -E ${CLANGXX_LINK_OR_COPY} "${clang}" "${clangxx}"
   WORKING_DIRECTORY "${bindir}")
+
+message("Creating clang-cl executable based on ${clang}")
+
+execute_process(
+  COMMAND "${CMAKE_COMMAND}" -E ${CLANGXX_LINK_OR_COPY} "${clang}" "${clang_cl}"
+  WORKING_DIRECTORY "${bindir}")
index b3f2a83e121ba710e1803f4b018492f63f0d568b..7ad3d0ab40bf47d6bd47f7ac6f278cdad5ce96e5 100644 (file)
@@ -219,8 +219,10 @@ static void ParseProgName(SmallVectorImpl<const char *> &ArgVector,
     { "clang-cpp", "--driver-mode=cpp" },
     { "clang-g++", "--driver-mode=g++" },
     { "clang-gcc", 0 },
+    { "clang-cl",  "--driver-mode=cl"  },
     { "cc",        0 },
     { "cpp",       "--driver-mode=cpp" },
+    { "cl" ,       "--driver-mode=cl"  },
     { "++",        "--driver-mode=g++" },
   };
   std::string ProgName(llvm::sys::path::stem(ArgVector[0]));