mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-11 08:20:18 -06:00
Per-language Win32/Console flags
Allows using different compilers with different flags for different languages. For example Clang with GNU-like commandline for CXX and MSVC as host compiler for CUDA. Should help with #21914.
This commit is contained in:
@@ -10,7 +10,6 @@ set(__CYGWIN_COMPILER_GNU 1)
|
||||
|
||||
# TODO: Is -Wl,--enable-auto-import now always default?
|
||||
string(APPEND CMAKE_EXE_LINKER_FLAGS_INIT " -Wl,--enable-auto-import")
|
||||
set(CMAKE_CREATE_WIN32_EXE "-mwindows")
|
||||
|
||||
set(CMAKE_GNULD_IMAGE_VERSION
|
||||
"-Wl,--major-image-version,<TARGET_VERSION_MAJOR>,--minor-image-version,<TARGET_VERSION_MINOR>")
|
||||
@@ -23,6 +22,7 @@ macro(__cygwin_compiler_gnu lang)
|
||||
"<CMAKE_${lang}_COMPILER> <LANGUAGE_COMPILE_FLAGS> <CMAKE_SHARED_LIBRARY_${lang}_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS> -o <TARGET> -Wl,--out-implib,<TARGET_IMPLIB> ${CMAKE_GNULD_IMAGE_VERSION} <OBJECTS> <LINK_LIBRARIES>")
|
||||
set(CMAKE_${lang}_LINK_EXECUTABLE
|
||||
"<CMAKE_${lang}_COMPILER> <FLAGS> <CMAKE_${lang}_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET> -Wl,--out-implib,<TARGET_IMPLIB> ${CMAKE_GNULD_IMAGE_VERSION} <LINK_LIBRARIES>")
|
||||
set(CMAKE_${lang}_CREATE_WIN32_EXE "-mwindows")
|
||||
|
||||
# No -fPIC on cygwin
|
||||
set(CMAKE_${lang}_COMPILE_OPTIONS_PIC "")
|
||||
|
||||
@@ -71,8 +71,8 @@ macro(__windows_compiler_clang_gnu lang)
|
||||
set(CMAKE_${lang}_LINK_EXECUTABLE
|
||||
"<CMAKE_${lang}_COMPILER> -fuse-ld=lld-link -nostartfiles -nostdlib <FLAGS> <CMAKE_${lang}_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET> -Xlinker /implib:<TARGET_IMPLIB> -Xlinker /pdb:<TARGET_PDB> -Xlinker /version:<TARGET_VERSION_MAJOR>.<TARGET_VERSION_MINOR> ${CMAKE_GNULD_IMAGE_VERSION} <LINK_LIBRARIES>")
|
||||
|
||||
set(CMAKE_CREATE_WIN32_EXE "-Xlinker /subsystem:windows")
|
||||
set(CMAKE_CREATE_CONSOLE_EXE "-Xlinker /subsystem:console")
|
||||
set(CMAKE_${lang}_CREATE_WIN32_EXE "-Xlinker /subsystem:windows")
|
||||
set(CMAKE_${lang}_CREATE_CONSOLE_EXE "-Xlinker /subsystem:console")
|
||||
|
||||
if(NOT "${lang}" STREQUAL "ASM")
|
||||
set(CMAKE_${lang}_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreaded -Xclang -flto-visibility-public-std -D_MT -Xclang --dependent-lib=libcmt)
|
||||
|
||||
@@ -51,11 +51,6 @@ set(CMAKE_FIND_LIBRARY_SUFFIXES "-bcc.lib" ".lib")
|
||||
# Borland cannot handle + in the file name, so mangle object file name
|
||||
set (CMAKE_MANGLE_OBJECT_FILE_NAMES "ON")
|
||||
|
||||
# extra flags for a win32 exe
|
||||
set(CMAKE_CREATE_WIN32_EXE "${_tW}" )
|
||||
# extra flags for a console app
|
||||
set(CMAKE_CREATE_CONSOLE_EXE "${_tC}" )
|
||||
|
||||
set (CMAKE_BUILD_TYPE Debug CACHE STRING
|
||||
"Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel.")
|
||||
|
||||
@@ -124,6 +119,9 @@ macro(__embarcadero_language lang)
|
||||
"tlib ${CMAKE_START_TEMP_FILE}/p512 <LINK_FLAGS> /a <TARGET_QUOTED> <OBJECTS>${CMAKE_END_TEMP_FILE}"
|
||||
)
|
||||
|
||||
set(CMAKE_${lang}_CREATE_WIN32_EXE "${_tW}")
|
||||
set(CMAKE_${lang}_CREATE_CONSOLE_EXE "${_tC}")
|
||||
|
||||
# Precompile Headers
|
||||
if (EMBARCADERO)
|
||||
set(CMAKE_PCH_EXTENSION .pch)
|
||||
|
||||
@@ -35,7 +35,6 @@ set(CMAKE_LIBRARY_PATH_FLAG "-L")
|
||||
set(CMAKE_LINK_LIBRARY_FLAG "-l")
|
||||
set(CMAKE_LINK_DEF_FILE_FLAG "") # Empty string: passing the file is enough
|
||||
set(CMAKE_LINK_LIBRARY_SUFFIX "")
|
||||
set(CMAKE_CREATE_WIN32_EXE "-mwindows")
|
||||
|
||||
set(CMAKE_GNULD_IMAGE_VERSION
|
||||
"-Wl,--major-image-version,<TARGET_VERSION_MAJOR>,--minor-image-version,<TARGET_VERSION_MINOR>")
|
||||
@@ -105,6 +104,7 @@ macro(__windows_compiler_gnu lang)
|
||||
"<CMAKE_${lang}_COMPILER> <CMAKE_SHARED_LIBRARY_${lang}_FLAGS> <LANGUAGE_COMPILE_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS> -o <TARGET> -Wl,--out-implib,<TARGET_IMPLIB> ${CMAKE_GNULD_IMAGE_VERSION} <OBJECTS> <LINK_LIBRARIES>")
|
||||
set(CMAKE_${lang}_LINK_EXECUTABLE
|
||||
"<CMAKE_${lang}_COMPILER> <FLAGS> <CMAKE_${lang}_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET> -Wl,--out-implib,<TARGET_IMPLIB> ${CMAKE_GNULD_IMAGE_VERSION} <LINK_LIBRARIES>")
|
||||
set(CMAKE_${lang}_CREATE_WIN32_EXE "-mwindows")
|
||||
|
||||
list(APPEND CMAKE_${lang}_ABI_FILES "Platform/Windows-GNU-${lang}-ABI")
|
||||
|
||||
|
||||
@@ -27,12 +27,8 @@ else()
|
||||
endif()
|
||||
|
||||
if(CMAKE_SYSTEM_NAME STREQUAL "WindowsCE")
|
||||
set(CMAKE_CREATE_WIN32_EXE "/entry:WinMainCRTStartup")
|
||||
set(CMAKE_CREATE_CONSOLE_EXE "/entry:mainACRTStartup")
|
||||
set(_PLATFORM_LINK_FLAGS " /subsystem:windowsce")
|
||||
else()
|
||||
set(CMAKE_CREATE_WIN32_EXE "/subsystem:windows")
|
||||
set(CMAKE_CREATE_CONSOLE_EXE "/subsystem:console")
|
||||
set(_PLATFORM_LINK_FLAGS "")
|
||||
endif()
|
||||
|
||||
@@ -351,6 +347,14 @@ macro(__windows_compiler_msvc lang)
|
||||
set(CMAKE_${lang}_LINK_EXECUTABLE
|
||||
"${_CMAKE_VS_LINK_EXE}<CMAKE_LINKER> ${CMAKE_CL_NOLOGO} <OBJECTS> ${CMAKE_START_TEMP_FILE} /out:<TARGET> /implib:<TARGET_IMPLIB> /pdb:<TARGET_PDB> /version:<TARGET_VERSION_MAJOR>.<TARGET_VERSION_MINOR>${_PLATFORM_LINK_FLAGS} <CMAKE_${lang}_LINK_FLAGS> <LINK_FLAGS> <LINK_LIBRARIES>${CMAKE_END_TEMP_FILE}")
|
||||
|
||||
if(CMAKE_SYSTEM_NAME STREQUAL "WindowsCE")
|
||||
set(CMAKE_${lang}_CREATE_WIN32_EXE "/entry:WinMainCRTStartup")
|
||||
set(CMAKE_${lang}_CREATE_CONSOLE_EXE "/entry:mainACRTStartup")
|
||||
else()
|
||||
set(CMAKE_${lang}_CREATE_WIN32_EXE "/subsystem:windows")
|
||||
set(CMAKE_${lang}_CREATE_CONSOLE_EXE "/subsystem:console")
|
||||
endif()
|
||||
|
||||
set(CMAKE_PCH_EXTENSION .pch)
|
||||
set(CMAKE_LINK_PCH ON)
|
||||
if (CMAKE_${lang}_COMPILER_ID STREQUAL "Clang")
|
||||
|
||||
@@ -1 +1,2 @@
|
||||
include(Platform/Windows-OpenWatcom)
|
||||
__windows_open_watcom(C)
|
||||
|
||||
@@ -1 +1,2 @@
|
||||
include(Platform/Windows-OpenWatcom)
|
||||
__windows_open_watcom(CXX)
|
||||
|
||||
@@ -6,8 +6,6 @@ include_guard()
|
||||
|
||||
set(CMAKE_BUILD_TYPE_INIT Debug)
|
||||
|
||||
set(CMAKE_CREATE_WIN32_EXE "system nt_win" )
|
||||
set(CMAKE_CREATE_CONSOLE_EXE "system nt" )
|
||||
string(APPEND CMAKE_SHARED_LINKER_FLAGS_INIT " system nt_dll")
|
||||
string(APPEND CMAKE_MODULE_LINKER_FLAGS_INIT " system nt_dll")
|
||||
|
||||
@@ -30,3 +28,8 @@ if(CMAKE_CROSSCOMPILING)
|
||||
set(CMAKE_CXX_STANDARD_INCLUDE_DIRECTORIES $ENV{WATCOM}/h $ENV{WATCOM}/h/nt)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
macro(__windows_open_watcom lang)
|
||||
set(CMAKE_${lang}_CREATE_WIN32_EXE "system nt_win")
|
||||
set(CMAKE_${lang}_CREATE_CONSOLE_EXE "system nt")
|
||||
endmacro()
|
||||
|
||||
@@ -27,8 +27,8 @@ set(CMAKE_Fortran_COMPILE_OBJECT
|
||||
set(CMAKE_Fortran_LINK_EXECUTABLE
|
||||
"<CMAKE_Fortran_COMPILER> ${CMAKE_CL_NOLOGO} ${CMAKE_START_TEMP_FILE} <FLAGS> /exe:<TARGET> <OBJECTS> /link <CMAKE_Fortran_LINK_FLAGS> <LINK_FLAGS> <LINK_LIBRARIES>${CMAKE_END_TEMP_FILE}")
|
||||
|
||||
set(CMAKE_CREATE_WIN32_EXE /winapp)
|
||||
set(CMAKE_CREATE_CONSOLE_EXE )
|
||||
set(CMAKE_Fortran_CREATE_WIN32_EXE /winapp)
|
||||
set(CMAKE_Fortran_CREATE_CONSOLE_EXE )
|
||||
|
||||
# does the compiler support pdbtype and is it the newer compiler
|
||||
|
||||
|
||||
@@ -1527,12 +1527,12 @@ void cmLocalGenerator::GetTargetFlags(
|
||||
}
|
||||
|
||||
if (target->IsWin32Executable(config)) {
|
||||
exeFlags +=
|
||||
this->Makefile->GetSafeDefinition("CMAKE_CREATE_WIN32_EXE");
|
||||
exeFlags += this->Makefile->GetSafeDefinition(
|
||||
cmStrCat("CMAKE_", linkLanguage, "_CREATE_WIN32_EXE"));
|
||||
exeFlags += " ";
|
||||
} else {
|
||||
exeFlags +=
|
||||
this->Makefile->GetSafeDefinition("CMAKE_CREATE_CONSOLE_EXE");
|
||||
exeFlags += this->Makefile->GetSafeDefinition(
|
||||
cmStrCat("CMAKE_", linkLanguage, "_CREATE_CONSOLE_EXE"));
|
||||
exeFlags += " ";
|
||||
}
|
||||
|
||||
|
||||
@@ -384,11 +384,14 @@ void cmMakefileExecutableTargetGenerator::WriteExecutableRule(bool relink)
|
||||
if (this->GeneratorTarget->IsWin32Executable(
|
||||
this->Makefile->GetSafeDefinition("CMAKE_BUILD_TYPE"))) {
|
||||
this->LocalGenerator->AppendFlags(
|
||||
linkFlags, this->Makefile->GetSafeDefinition("CMAKE_CREATE_WIN32_EXE"));
|
||||
linkFlags,
|
||||
this->Makefile->GetSafeDefinition(
|
||||
cmStrCat("CMAKE_", linkLanguage, "_CREATE_WIN32_EXE")));
|
||||
} else {
|
||||
this->LocalGenerator->AppendFlags(
|
||||
linkFlags,
|
||||
this->Makefile->GetSafeDefinition("CMAKE_CREATE_CONSOLE_EXE"));
|
||||
this->Makefile->GetSafeDefinition(
|
||||
cmStrCat("CMAKE_", linkLanguage, "_CREATE_CONSOLE_EXE")));
|
||||
}
|
||||
|
||||
// Add symbol export flags if necessary.
|
||||
|
||||
@@ -131,7 +131,7 @@ else()
|
||||
# as a language, cmake needs language specific versions
|
||||
# of these variables....
|
||||
if(WIN32 AND CMAKE_Fortran_COMPILER_ID MATCHES "GNU")
|
||||
set(CMAKE_CREATE_CONSOLE_EXE )
|
||||
set(CMAKE_Fortran_CREATE_CONSOLE_EXE )
|
||||
set(CMAKE_LIBRARY_PATH_FLAG "-L")
|
||||
set(CMAKE_LINK_LIBRARY_FLAG "-l")
|
||||
set(CMAKE_LINK_LIBRARY_SUFFIX )
|
||||
|
||||
Reference in New Issue
Block a user