forked from OSchip/llvm-project
Add a cl.exe compatible driver mode
The mode doesn't actually do anything yet, but this provides a way to get into it. llvm-svn: 186720
This commit is contained in:
parent
673d81b8c7
commit
e4b031ca03
|
@ -54,7 +54,8 @@ class Driver {
|
||||||
enum DriverMode {
|
enum DriverMode {
|
||||||
GCCMode,
|
GCCMode,
|
||||||
GXXMode,
|
GXXMode,
|
||||||
CPPMode
|
CPPMode,
|
||||||
|
CLMode
|
||||||
} Mode;
|
} Mode;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
|
@ -96,6 +96,7 @@ void Driver::ParseDriverMode(ArrayRef<const char *> Args) {
|
||||||
.Case("gcc", GCCMode)
|
.Case("gcc", GCCMode)
|
||||||
.Case("g++", GXXMode)
|
.Case("g++", GXXMode)
|
||||||
.Case("cpp", CPPMode)
|
.Case("cpp", CPPMode)
|
||||||
|
.Case("cl", CLMode)
|
||||||
.Default(~0U);
|
.Default(~0U);
|
||||||
|
|
||||||
if (M != ~0U)
|
if (M != ~0U)
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
// RUN: %clang_cl -fsyntax-only -c %s
|
||||||
|
|
||||||
|
void f();
|
|
@ -204,7 +204,8 @@ config.substitutions.append( ('%clang_cc1', '%s -cc1 -internal-isystem %s'
|
||||||
getClangBuiltinIncludeDir(config.clang))) )
|
getClangBuiltinIncludeDir(config.clang))) )
|
||||||
config.substitutions.append( ('%clang_cpp', ' ' + config.clang +
|
config.substitutions.append( ('%clang_cpp', ' ' + config.clang +
|
||||||
' --driver-mode=cpp '))
|
' --driver-mode=cpp '))
|
||||||
|
config.substitutions.append( ('%clang_cl', ' ' + config.clang +
|
||||||
|
' --driver-mode=cl '))
|
||||||
config.substitutions.append( ('%clangxx', ' ' + config.clang +
|
config.substitutions.append( ('%clangxx', ' ' + config.clang +
|
||||||
' --driver-mode=g++ '))
|
' --driver-mode=g++ '))
|
||||||
config.substitutions.append( ('%clang', ' ' + config.clang + ' ') )
|
config.substitutions.append( ('%clang', ' ' + config.clang + ' ') )
|
||||||
|
@ -227,6 +228,9 @@ config.substitutions.append(
|
||||||
config.substitutions.append(
|
config.substitutions.append(
|
||||||
(' %clang-cpp ',
|
(' %clang-cpp ',
|
||||||
"""*** invalid substitution, use '%clang_cpp'. ***""") )
|
"""*** invalid substitution, use '%clang_cpp'. ***""") )
|
||||||
|
config.substitutions.append(
|
||||||
|
(' %clang-cl ',
|
||||||
|
"""*** invalid substitution, use '%clang_cl'. ***""") )
|
||||||
|
|
||||||
###
|
###
|
||||||
|
|
||||||
|
|
|
@ -76,8 +76,16 @@ add_custom_command(TARGET clang POST_BUILD
|
||||||
set_property(DIRECTORY APPEND
|
set_property(DIRECTORY APPEND
|
||||||
PROPERTY ADDITIONAL_MAKE_CLEAN_FILES ${clang_pp})
|
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
|
install(TARGETS clang
|
||||||
RUNTIME DESTINATION bin)
|
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}\")
|
install(SCRIPT clang_symlink.cmake -DCMAKE_INSTALL_PREFIX=\"${CMAKE_INSTALL_PREFIX}\")
|
||||||
|
|
|
@ -19,9 +19,16 @@ endif()
|
||||||
set(bindir "${CLANGXX_DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/")
|
set(bindir "${CLANGXX_DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/")
|
||||||
set(clang "clang${EXECUTABLE_SUFFIX}")
|
set(clang "clang${EXECUTABLE_SUFFIX}")
|
||||||
set(clangxx "clang++${EXECUTABLE_SUFFIX}")
|
set(clangxx "clang++${EXECUTABLE_SUFFIX}")
|
||||||
|
set(clang_cl "clang-cl${EXECUTABLE_SUFFIX}")
|
||||||
|
|
||||||
message("Creating clang++ executable based on ${clang}")
|
message("Creating clang++ executable based on ${clang}")
|
||||||
|
|
||||||
execute_process(
|
execute_process(
|
||||||
COMMAND "${CMAKE_COMMAND}" -E ${CLANGXX_LINK_OR_COPY} "${clang}" "${clangxx}"
|
COMMAND "${CMAKE_COMMAND}" -E ${CLANGXX_LINK_OR_COPY} "${clang}" "${clangxx}"
|
||||||
WORKING_DIRECTORY "${bindir}")
|
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}")
|
||||||
|
|
|
@ -219,8 +219,10 @@ static void ParseProgName(SmallVectorImpl<const char *> &ArgVector,
|
||||||
{ "clang-cpp", "--driver-mode=cpp" },
|
{ "clang-cpp", "--driver-mode=cpp" },
|
||||||
{ "clang-g++", "--driver-mode=g++" },
|
{ "clang-g++", "--driver-mode=g++" },
|
||||||
{ "clang-gcc", 0 },
|
{ "clang-gcc", 0 },
|
||||||
|
{ "clang-cl", "--driver-mode=cl" },
|
||||||
{ "cc", 0 },
|
{ "cc", 0 },
|
||||||
{ "cpp", "--driver-mode=cpp" },
|
{ "cpp", "--driver-mode=cpp" },
|
||||||
|
{ "cl" , "--driver-mode=cl" },
|
||||||
{ "++", "--driver-mode=g++" },
|
{ "++", "--driver-mode=g++" },
|
||||||
};
|
};
|
||||||
std::string ProgName(llvm::sys::path::stem(ArgVector[0]));
|
std::string ProgName(llvm::sys::path::stem(ArgVector[0]));
|
||||||
|
|
Loading…
Reference in New Issue