summaryrefslogtreecommitdiffstats
path: root/cmake
diff options
context:
space:
mode:
authorrobot-ya-builder <[email protected]>2023-03-06 16:56:18 +0300
committerrobot-ya-builder <[email protected]>2023-03-06 16:56:18 +0300
commitcbc0c479c131a1e63ca86fe98b031e1bcac725d8 (patch)
tree12245a82da1c7f54d54befcfb7706643e8166505 /cmake
parentea8e336dc456c44b848619e120a8f3643c6125af (diff)
External build system generator release 17
Update tools: yexport
Diffstat (limited to 'cmake')
-rw-r--r--cmake/common.cmake70
-rw-r--r--cmake/conan.cmake36
-rw-r--r--cmake/global_flags.cmake140
-rw-r--r--cmake/global_flags.compiler.gnu.cmake77
-rw-r--r--cmake/global_flags.compiler.msvc.cmake111
-rw-r--r--cmake/global_flags.linker.gnu.cmake9
-rw-r--r--cmake/global_flags.linker.msvc.cmake16
-rw-r--r--cmake/global_vars.cmake2
-rw-r--r--cmake/protobuf.cmake13
9 files changed, 322 insertions, 152 deletions
diff --git a/cmake/common.cmake b/cmake/common.cmake
index 6290d7ce344..4b44e40f978 100644
--- a/cmake/common.cmake
+++ b/cmake/common.cmake
@@ -4,9 +4,26 @@ find_package(Python3 REQUIRED)
add_compile_definitions(CATBOOST_OPENSOURCE=yes)
+# assumes ToolName is always both the binary and the target name
+function(get_built_tool_path OutBinPath OutDependency SrcPath ToolName)
+ if (MSVC)
+ set(BinPath "${TOOLS_ROOT}/${SrcPath}/\$(Configuration)/${ToolName}${CMAKE_EXECUTABLE_SUFFIX}")
+ else()
+ set(BinPath "${TOOLS_ROOT}/${SrcPath}/${ToolName}${CMAKE_EXECUTABLE_SUFFIX}")
+ endif()
+ set(${OutBinPath} ${BinPath} PARENT_SCOPE)
+ if (CMAKE_CROSSCOMPILING)
+ set(${OutDependency} ${BinPath} PARENT_SCOPE)
+ else()
+ set(${OutDependency} ${ToolName} PARENT_SCOPE)
+ endif()
+endfunction()
+
+
function(target_ragel_lexers TgtName Key Src)
- SET(RAGEL_BIN ${CMAKE_BINARY_DIR}/bin/ragel)
+ SET(RAGEL_BIN ${CMAKE_BINARY_DIR}/bin/ragel${CMAKE_EXECUTABLE_SUFFIX})
get_filename_component(OutPath ${Src} NAME_WLE)
+ get_filename_component(SrcDirPath ${Src} DIRECTORY)
get_filename_component(OutputExt ${OutPath} EXT)
if (OutputExt STREQUAL "")
string(APPEND OutPath .rl6.cpp)
@@ -15,12 +32,13 @@ function(target_ragel_lexers TgtName Key Src)
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${OutPath}
COMMAND Python3::Interpreter ${CMAKE_SOURCE_DIR}/build/scripts/run_tool.py -- ${RAGEL_BIN} ${RAGEL_FLAGS} ${ARGN} -o ${CMAKE_CURRENT_BINARY_DIR}/${OutPath} ${Src}
DEPENDS ${CMAKE_SOURCE_DIR}/build/scripts/run_tool.py ${Src}
+ WORKING_DIRECTORY ${SrcDirPath}
)
target_sources(${TgtName} ${Key} ${CMAKE_CURRENT_BINARY_DIR}/${OutPath})
endfunction()
function(target_yasm_source TgtName Key Src)
- SET(YASM_BIN ${CMAKE_BINARY_DIR}/bin/yasm)
+ SET(YASM_BIN ${CMAKE_BINARY_DIR}/bin/yasm${CMAKE_EXECUTABLE_SUFFIX})
get_filename_component(OutPath ${Src} NAME_WLE)
string(APPEND OutPath .o)
add_custom_command(
@@ -93,36 +111,39 @@ function(generate_enum_serilization Tgt Input)
"${multival_args}"
${ARGN}
)
+
+ get_built_tool_path(enum_parser_bin enum_parser_dependency tools/enum_parser/enum_parser enum_parser)
+
get_filename_component(BaseName ${Input} NAME)
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${BaseName}_serialized.cpp
COMMAND
- ${TOOLS_ROOT}/tools/enum_parser/enum_parser/enum_parser
+ ${enum_parser_bin}
${Input}
--include-path ${ENUM_SERIALIZATION_ARGS_INCLUDE_HEADERS}
--output ${CMAKE_CURRENT_BINARY_DIR}/${BaseName}_serialized.cpp
- DEPENDS ${Input} ${TOOLS_ROOT}/tools/enum_parser/enum_parser/enum_parser
+ DEPENDS ${Input} ${enum_parser_dependency}
)
target_sources(${Tgt} PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/${BaseName}_serialized.cpp)
endfunction()
function(add_global_library_for TgtName MainName)
- add_library(${TgtName} STATIC ${ARGN})
- add_library(${TgtName}.wholearchive INTERFACE)
- add_dependencies(${TgtName}.wholearchive ${TgtName})
- add_dependencies(${TgtName} ${MainName})
if (MSVC)
- target_link_options(${TgtName}.wholearchive INTERFACE "SHELL:/WHOLEARCHIVE:$<TARGET_FILE:${TgtName}>")
- elseif(APPLE)
- target_link_options(${TgtName}.wholearchive INTERFACE "SHELL:-Wl,-force_load,$<TARGET_FILE:${TgtName}>")
+ add_library(${TgtName} OBJECT ${ARGN})
+ add_dependencies(${TgtName} ${MainName}) # needed because object library can use some extra generated files in MainName
+ target_link_libraries(${MainName} INTERFACE ${TgtName} "$<TARGET_OBJECTS:${TgtName}>")
else()
- target_link_options(${TgtName}.wholearchive INTERFACE "SHELL:-Wl,--whole-archive $<TARGET_FILE:${TgtName}> -Wl,--no-whole-archive")
+ add_library(${TgtName} STATIC ${ARGN})
+ add_library(${TgtName}.wholearchive INTERFACE)
+ add_dependencies(${TgtName}.wholearchive ${TgtName})
+ add_dependencies(${TgtName} ${MainName})
+ if(APPLE)
+ target_link_options(${TgtName}.wholearchive INTERFACE "SHELL:-Wl,-force_load,$<TARGET_FILE:${TgtName}>")
+ else()
+ target_link_options(${TgtName}.wholearchive INTERFACE "SHELL:-Wl,--whole-archive $<TARGET_FILE:${TgtName}> -Wl,--no-whole-archive")
+ endif()
+ target_link_libraries(${MainName} INTERFACE ${TgtName}.wholearchive)
endif()
- target_link_libraries(${MainName} INTERFACE ${TgtName}.wholearchive)
-endfunction()
-
-function(target_link_flags)
- target_link_libraries(${ARGN})
endfunction()
function(copy_file From To)
@@ -164,10 +185,13 @@ function(resources Tgt Output)
list(APPEND ResourcesList ${Input})
list(APPEND ResourcesList ${Key})
endforeach()
+
+ get_built_tool_path(rescompiler_bin rescompiler_dependency tools/rescompiler/bin rescompiler)
+
add_custom_command(
OUTPUT ${Output}
- COMMAND ${TOOLS_ROOT}/tools/rescompiler/bin/rescompiler ${Output} ${ResourcesList}
- DEPENDS ${RESOURCE_ARGS_INPUTS} ${TOOLS_ROOT}/tools/rescompiler/bin/rescompiler
+ COMMAND ${rescompiler_bin} ${Output} ${ResourcesList}
+ DEPENDS ${RESOURCE_ARGS_INPUTS} ${rescompiler_dependency}
)
endfunction()
@@ -176,7 +200,7 @@ function(use_export_script Target ExportFile)
set(OutPath ${CMAKE_CURRENT_BINARY_DIR}/gen_${OutName})
if (MSVC)
- target_link_flags(${Target} PRIVATE /DEF:${OutPath})
+ target_link_options(${Target} PRIVATE /DEF:${OutPath})
set(EXPORT_SCRIPT_FLAVOR msvc)
elseif(APPLE)
execute_process(
@@ -189,11 +213,11 @@ function(use_export_script Target ExportFile)
message(FATAL_ERROR "Failed to parse export symbols from ${ExportFile}:\n${_SCRIPT_STDERR}")
return()
endif()
- target_link_flags(${Target} PRIVATE ${_SCRIPT_FLAGS})
+ target_link_options(${Target} PRIVATE ${_SCRIPT_FLAGS})
return()
else()
set(EXPORT_SCRIPT_FLAVOR gnu)
- target_link_flags(${Target} PRIVATE -Wl,--gc-sections -rdynamic -Wl,--version-script=${OutPath})
+ target_link_options(${Target} PRIVATE -Wl,--gc-sections -rdynamic -Wl,--version-script=${OutPath})
endif()
add_custom_command(
@@ -246,7 +270,7 @@ function(set_yunittest_property)
${ARGN}
)
get_property(SPLIT_FACTOR TARGET ${YUNITTEST_ARGS_TEST} PROPERTY SPLIT_FACTOR)
-
+
if (${SPLIT_FACTOR} EQUAL 1)
set_property(TEST ${YUNITTEST_ARGS_TEST} PROPERTY ${YUNITTEST_ARGS_PROPERTY} ${YUNITTEST_ARGS_UNPARSED_ARGUMENTS})
return()
diff --git a/cmake/conan.cmake b/cmake/conan.cmake
index 72548473633..d6a8b5e8c4e 100644
--- a/cmake/conan.cmake
+++ b/cmake/conan.cmake
@@ -398,7 +398,35 @@ function(conan_cmake_detect_vs_runtime result)
if(build_type)
string(TOUPPER "${build_type}" build_type)
- endif()
+ endif()
+
+ if (DEFINED CMAKE_MSVC_RUNTIME_LIBRARY)
+ if(${CMAKE_MSVC_RUNTIME_LIBRARY} STREQUAL MultiThreaded)
+ set(${result} "MT" PARENT_SCOPE)
+ elseif(${CMAKE_MSVC_RUNTIME_LIBRARY} STREQUAL MultiThreadedDebug)
+ set(${result} "MTd" PARENT_SCOPE)
+ elseif(${CMAKE_MSVC_RUNTIME_LIBRARY} STREQUAL MultiThreadedDLL)
+ set(${result} "MD" PARENT_SCOPE)
+ elseif(${CMAKE_MSVC_RUNTIME_LIBRARY} STREQUAL MultiThreadedDebugDLL)
+ set(${result} "MDd" PARENT_SCOPE)
+ elseif(${CMAKE_MSVC_RUNTIME_LIBRARY} STREQUAL "MultiThreaded$<$<CONFIG:Debug>:Debug>")
+ if(${build_type} STREQUAL DEBUG)
+ set(${result} "MTd" PARENT_SCOPE)
+ else()
+ set(${result} "MT" PARENT_SCOPE)
+ endif()
+ elseif(${CMAKE_MSVC_RUNTIME_LIBRARY} STREQUAL "MultiThreaded$<$<CONFIG:Debug>:Debug>DLL")
+ if(${build_type} STREQUAL DEBUG)
+ set(${result} "MDd" PARENT_SCOPE)
+ else()
+ set(${result} "MD" PARENT_SCOPE)
+ endif()
+ else()
+ message(FATAL_ERROR "Incorrect CMAKE_MSVC_RUNTIME_LIBRARY value ${CMAKE_MSVC_RUNTIME_LIBRARY}")
+ endif()
+ return()
+ endif()
+
set(variables CMAKE_CXX_FLAGS_${build_type} CMAKE_C_FLAGS_${build_type} CMAKE_CXX_FLAGS CMAKE_C_FLAGS)
foreach(variable ${variables})
if(NOT "${${variable}}" STREQUAL "")
@@ -541,7 +569,7 @@ function(conan_cmake_install)
set(installOptions UPDATE NO_IMPORTS OUTPUT_QUIET ERROR_QUIET)
set(installOneValueArgs PATH_OR_REFERENCE REFERENCE REMOTE LOCKFILE LOCKFILE_OUT LOCKFILE_NODE_ID INSTALL_FOLDER)
set(installMultiValueArgs GENERATOR BUILD ENV ENV_HOST ENV_BUILD OPTIONS_HOST OPTIONS OPTIONS_BUILD PROFILE
- PROFILE_HOST PROFILE_BUILD SETTINGS SETTINGS_HOST SETTINGS_BUILD)
+ PROFILE_HOST PROFILE_BUILD SETTINGS SETTINGS_HOST SETTINGS_BUILD CONF)
cmake_parse_arguments(ARGS "${installOptions}" "${installOneValueArgs}" "${installMultiValueArgs}" ${ARGN})
foreach(arg ${installOptions})
if(ARGS_${arg})
@@ -594,6 +622,8 @@ function(conan_cmake_install)
set(flag "--settings:host")
elseif("${arg}" STREQUAL "SETTINGS_BUILD")
set(flag "--settings:build")
+ elseif("${arg}" STREQUAL "CONF")
+ set(flag "--conf")
endif()
list(LENGTH ARGS_${arg} numargs)
foreach(item ${ARGS_${arg}})
@@ -613,7 +643,7 @@ function(conan_cmake_install)
endif()
set(install_args install ${PATH_OR_REFERENCE} ${REFERENCE} ${UPDATE} ${NO_IMPORTS} ${REMOTE} ${LOCKFILE} ${LOCKFILE_OUT} ${LOCKFILE_NODE_ID} ${INSTALL_FOLDER}
${GENERATOR} ${BUILD} ${ENV} ${ENV_HOST} ${ENV_BUILD} ${OPTIONS} ${OPTIONS_HOST} ${OPTIONS_BUILD}
- ${PROFILE} ${PROFILE_HOST} ${PROFILE_BUILD} ${SETTINGS} ${SETTINGS_HOST} ${SETTINGS_BUILD})
+ ${PROFILE} ${PROFILE_HOST} ${PROFILE_BUILD} ${SETTINGS} ${SETTINGS_HOST} ${SETTINGS_BUILD} ${CONF})
string(REPLACE ";" " " _install_args "${install_args}")
message(STATUS "Conan executing: ${CONAN_CMD} ${_install_args}")
diff --git a/cmake/global_flags.cmake b/cmake/global_flags.cmake
index 63fb9ce56e7..cd857ecd383 100644
--- a/cmake/global_flags.cmake
+++ b/cmake/global_flags.cmake
@@ -1,129 +1,27 @@
-set(CMAKE_C_FLAGS "\
- -fexceptions \
- -fno-common \
- -fcolor-diagnostics \
- -faligned-allocation \
- -ffunction-sections \
- -fdata-sections \
- -Wall \
- -Wextra \
- -Wno-parentheses \
- -Wno-implicit-const-int-float-conversion \
- -Wno-unknown-warning-option \
- -D_THREAD_SAFE \
- -D_PTHREADS \
- -D_REENTRANT \
- -D_LARGEFILE_SOURCE \
- -D__STDC_CONSTANT_MACROS \
- -D__STDC_FORMAT_MACROS \
- -D_FILE_OFFSET_BITS=64 \
- -D_GNU_SOURCE \
- -D_YNDX_LIBUNWIND_ENABLE_EXCEPTION_BACKTRACE \
- -D__LONG_LONG_SUPPORTED \
- -D_libunwind_ \
- -DLIBCXX_BUILDING_LIBCXXRT \
- "
-)
-set(CMAKE_CXX_FLAGS "\
- -fexceptions \
- -fno-common \
- -fcolor-diagnostics \
- -faligned-allocation \
- -ffunction-sections \
- -fdata-sections \
- -Wall \
- -Wextra \
- -Wno-parentheses \
- -Wno-implicit-const-int-float-conversion \
- -Wno-unknown-warning-option \
- -D_THREAD_SAFE \
- -D_PTHREADS \
- -D_REENTRANT \
- -D_LARGEFILE_SOURCE \
- -D__STDC_CONSTANT_MACROS \
- -D__STDC_FORMAT_MACROS \
- -D_GNU_SOURCE \
- -D_YNDX_LIBUNWIND_ENABLE_EXCEPTION_BACKTRACE \
- -D__LONG_LONG_SUPPORTED \
- -D_libunwind_ \
- -DLIBCXX_BUILDING_LIBCXXRT \
- -Woverloaded-virtual \
- -Wimport-preprocessor-directive-pedantic \
- -Wno-undefined-var-template \
- -Wno-return-std-move \
- -Wno-address-of-packed-member \
- -Wno-defaulted-function-deleted \
- -Wno-pessimizing-move \
- -Wno-range-loop-construct \
- -Wno-deprecated-anon-enum-enum-conversion \
- -Wno-deprecated-enum-enum-conversion \
- -Wno-deprecated-enum-float-conversion \
- -Wno-ambiguous-reversed-operator \
- -Wno-deprecated-volatile \
- "
-)
-add_link_options(
- -nodefaultlibs
- -lc
- -lm
-)
-if (APPLE)
- set(CMAKE_SHARED_LINKER_FLAGS "-undefined dynamic_lookup")
-elseif(UNIX)
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fuse-init-array")
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fuse-init-array")
-endif()
+set(CMAKE_C_FLAGS "")
+set(CMAKE_CXX_FLAGS "")
-if (ANDROID)
- include_directories(SYSTEM ${CMAKE_ANDROID_NDK}/sources/cxx-stl/llvm-libc++abi/include)
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsigned-char")
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsigned-char")
+if (MSVC)
+ include(global_flags.compiler.msvc)
+ include(global_flags.linker.msvc)
else()
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_FILE_OFFSET_BITS=64")
-endif()
-
-if (CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64")
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsigned-char")
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsigned-char")
+ include(global_flags.compiler.gnu)
+ include(global_flags.linker.gnu)
endif()
-if (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
- set(CMAKE_CXX_FLAGS "\
- ${CMAKE_CXX_FLAGS} \
- -m64 \
- -DSSE_ENABLED=1 \
- -DSSE3_ENABLED=1 \
- -DSSSE3_ENABLED=1 \
- -DSSE41_ENABLED=1 \
- -DSSE42_ENABLED=1 \
- -DPOPCNT_ENABLED=1 \
- -DCX16_ENABLED=1 \
- -msse2 \
- -msse3 \
- -mssse3 \
- -msse4.1 \
- -msse4.2 \
- -mpopcnt \
- -mcx16 \
- ")
- set(CMAKE_C_FLAGS "\
- ${CMAKE_C_FLAGS} \
- -m64 \
- -msse2 \
- -msse3 \
- -mssse3 \
- -msse4.1 \
- -msse4.2 \
- -mpopcnt \
- -mcx16 \
- -DSSE_ENABLED=1 \
- -DSSE3_ENABLED=1 \
- -DSSSE3_ENABLED=1 \
- -DSSE41_ENABLED=1 \
- -DSSE42_ENABLED=1 \
- -DPOPCNT_ENABLED=1 \
- -DCX16_ENABLED=1 \
+if ((CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") OR (CMAKE_SYSTEM_PROCESSOR STREQUAL "AMD64"))
+ set(_X86_64_DEFINES "\
+ -DSSE_ENABLED=1 \
+ -DSSE3_ENABLED=1 \
+ -DSSSE3_ENABLED=1 \
+ -DSSE41_ENABLED=1 \
+ -DSSE42_ENABLED=1 \
+ -DPOPCNT_ENABLED=1 \
+ -DCX16_ENABLED=1 \
")
+
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${_X86_64_DEFINES}")
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${_X86_64_DEFINES}")
endif()
if (NOT CMAKE_CROSSCOMPILING)
diff --git a/cmake/global_flags.compiler.gnu.cmake b/cmake/global_flags.compiler.gnu.cmake
new file mode 100644
index 00000000000..f606b71e0ef
--- /dev/null
+++ b/cmake/global_flags.compiler.gnu.cmake
@@ -0,0 +1,77 @@
+set(_GNU_COMMON_C_CXX_FLAGS "\
+ -fexceptions \
+ -fno-common \
+ -fcolor-diagnostics \
+ -faligned-allocation \
+ -ffunction-sections \
+ -fdata-sections \
+ -Wall \
+ -Wextra \
+ -Wno-parentheses \
+ -Wno-implicit-const-int-float-conversion \
+ -Wno-unknown-warning-option \
+ -pipe \
+ -D_THREAD_SAFE \
+ -D_PTHREADS \
+ -D_REENTRANT \
+ -D_LIBCPP_ENABLE_CXX17_REMOVED_FEATURES \
+ -D_LARGEFILE_SOURCE \
+ -D__STDC_CONSTANT_MACROS \
+ -D__STDC_FORMAT_MACROS \
+ -D_GNU_SOURCE \
+ -D__LONG_LONG_SUPPORTED \
+ -D_YNDX_LIBUNWIND_ENABLE_EXCEPTION_BACKTRACE \
+ -D_libunwind_ \
+ -DLIBCXX_BUILDING_LIBCXXRT \
+")
+
+set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${_GNU_COMMON_C_CXX_FLAGS} \
+ -D_FILE_OFFSET_BITS=64 \
+")
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${_GNU_COMMON_C_CXX_FLAGS} \
+ -Woverloaded-virtual \
+ -Wimport-preprocessor-directive-pedantic \
+ -Wno-undefined-var-template \
+ -Wno-return-std-move \
+ -Wno-defaulted-function-deleted \
+ -Wno-pessimizing-move \
+ -Wno-deprecated-anon-enum-enum-conversion \
+ -Wno-deprecated-enum-enum-conversion \
+ -Wno-deprecated-enum-float-conversion \
+ -Wno-ambiguous-reversed-operator \
+ -Wno-deprecated-volatile \
+")
+
+if (NOT APPLE)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fuse-init-array")
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fuse-init-array")
+endif()
+
+if (ANDROID)
+ include_directories(SYSTEM ${CMAKE_ANDROID_NDK}/sources/cxx-stl/llvm-libc++abi/include)
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsigned-char")
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsigned-char")
+else()
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_FILE_OFFSET_BITS=64")
+endif()
+
+if (CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64")
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsigned-char")
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsigned-char")
+endif()
+
+if ((CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") OR (CMAKE_SYSTEM_PROCESSOR STREQUAL "AMD64"))
+ set(_X86_64_GNU_COMPILER_FLAGS "\
+ -m64 \
+ -msse2 \
+ -msse3 \
+ -mssse3 \
+ -msse4.1 \
+ -msse4.2 \
+ -mpopcnt \
+ -mcx16 \
+ ")
+
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${_X86_64_GNU_COMPILER_FLAGS}")
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${_X86_64_GNU_COMPILER_FLAGS}")
+endif()
diff --git a/cmake/global_flags.compiler.msvc.cmake b/cmake/global_flags.compiler.msvc.cmake
new file mode 100644
index 00000000000..b32761b7f36
--- /dev/null
+++ b/cmake/global_flags.compiler.msvc.cmake
@@ -0,0 +1,111 @@
+set(_WARNS_ENABLED
+ 4018 # 'expression' : signed/unsigned mismatch
+ 4265 # 'class' : class has virtual functions, but destructor is not virtual
+ 4296 # 'operator' : expression is always false
+ 4431 # missing type specifier - int assumed
+)
+
+set(_WARNS_AS_ERROR
+ 4013 # 'function' undefined; assuming extern returning int
+)
+
+set(_WARNS_DISABLED
+ # While this warning corresponds to enabled-by-default -Wmacro-redefinition,
+ # it floods clog with abundant amount of log lines,
+ # as yvals_core.h from Windows SDK redefines certain
+ # which macros logically belong to libcxx
+ 4005 # '__cpp_lib_*': macro redefinition.
+
+ # Ne need to recheck this, but it looks like _CRT_USE_BUILTIN_OFFSETOF still makes sense
+ 4117 # macro name '_CRT_USE_BUILTIN_OFFSETOF' is reserved, '#define' ignored
+
+ 4127 # conditional expression is constant
+ 4200 # nonstandard extension used : zero-sized array in struct/union
+ 4201 # nonstandard extension used : nameless struct/union
+ 4351 # elements of array will be default initialized
+ 4355 # 'this' : used in base member initializer list
+ 4503 # decorated name length exceeded, name was truncated
+ 4510 # default constructor could not be generated
+ 4511 # copy constructor could not be generated
+ 4512 # assignment operator could not be generated
+ 4554 # check operator precedence for possible error; use parentheses to clarify precedence
+ 4610 # 'object' can never be instantiated - user defined constructor required
+ 4706 # assignment within conditional expression
+ 4800 # forcing value to bool 'true' or 'false' (performance warning)
+ 4996 # The POSIX name for this item is deprecated
+ 4714 # function marked as __forceinline not inlined
+ 4197 # 'TAtomic' : top-level volatile in cast is ignored
+ 4245 # 'initializing' : conversion from 'int' to 'ui32', signed/unsigned mismatch
+ 4324 # 'ystd::function<void (uint8_t *)>': structure was padded due to alignment specifier
+ 5033 # 'register' is no longer a supported storage class
+)
+
+set (_MSVC_COMMON_C_CXX_FLAGS " \
+ /DARCADIA_ROOT=$(SolutionDir.Replace('\\','/')).. \
+ /DARCADIA_BUILD_ROOT=$(SolutionDir.Replace('\\','/'))$(Configuration) \
+ /DWIN32 \
+ /D_WIN32 \
+ /D_WINDOWS \
+ /D_CRT_SECURE_NO_WARNINGS \
+ /D_CRT_NONSTDC_NO_WARNINGS \
+ /D_USE_MATH_DEFINES \
+ /D__STDC_CONSTANT_MACROS \
+ /D__STDC_FORMAT_MACROS \
+ /D_USING_V110_SDK71_ \
+ /D_LIBCPP_ENABLE_CXX17_REMOVED_FEATURES \
+ /DWIN32_LEAN_AND_MEAN \
+ /DNOMINMAX \
+ /nologo \
+ /Zm500 \
+ /GR \
+ /bigobj \
+ /FC \
+ /EHs \
+ /errorReport:prompt \
+ /Zc:inline \
+ /utf-8 \
+ /permissive- \
+ /D_WIN32_WINNT=0x0601 \
+ /D_MBCS \
+ /DY_UCRT_INCLUDE=\"$(UniversalCRT_IncludePath.Split(';')[0].Replace('\\','/'))\" \
+ /DY_MSVC_INCLUDE=\"$(VC_VC_IncludePath.Split(';')[0].Replace('\\','/'))\" \
+ /MP \
+")
+
+foreach(WARN ${_WARNS_AS_ERROR})
+ string(APPEND _MSVC_COMMON_C_CXX_FLAGS " /we${WARN}")
+endforeach()
+
+foreach(WARN ${_WARNS_ENABLED})
+ string(APPEND _MSVC_COMMON_C_CXX_FLAGS " /w1${WARN}")
+endforeach()
+
+foreach(WARN ${_WARNS_DISABLED})
+ string(APPEND _MSVC_COMMON_C_CXX_FLAGS " /wd${WARN}")
+endforeach()
+
+set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${_MSVC_COMMON_C_CXX_FLAGS} \
+")
+
+# TODO - '/D_CRT_USE_BUILTIN_OFFSETOF'
+# TODO - -DUSE_STL_SYSTEM
+
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${_MSVC_COMMON_C_CXX_FLAGS} \
+ /std:c++latest \
+ /Zc:__cplusplus \
+")
+set(CMAKE_CXX_FLAGS_DEBUG "/Z7")
+set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "/Z7")
+
+if ((CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") OR (CMAKE_SYSTEM_PROCESSOR STREQUAL "AMD64"))
+ set(CMAKE_C_FLAGS "\
+ ${CMAKE_C_FLAGS} \
+ /D_WIN64 \
+ /DWIN64 \
+ ")
+ set(CMAKE_CXX_FLAGS "\
+ ${CMAKE_CXX_FLAGS} \
+ /D_WIN64 \
+ /DWIN64 \
+ ")
+endif()
diff --git a/cmake/global_flags.linker.gnu.cmake b/cmake/global_flags.linker.gnu.cmake
new file mode 100644
index 00000000000..2bb54fbd786
--- /dev/null
+++ b/cmake/global_flags.linker.gnu.cmake
@@ -0,0 +1,9 @@
+add_link_options(
+ -nodefaultlibs
+ -lc
+ -lm
+)
+
+if (APPLE)
+ set(CMAKE_SHARED_LINKER_FLAGS "-undefined dynamic_lookup")
+endif()
diff --git a/cmake/global_flags.linker.msvc.cmake b/cmake/global_flags.linker.msvc.cmake
new file mode 100644
index 00000000000..d70ff2c3f1a
--- /dev/null
+++ b/cmake/global_flags.linker.msvc.cmake
@@ -0,0 +1,16 @@
+cmake_policy(SET CMP0091 NEW)
+set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
+
+add_link_options(
+ /NOLOGO
+ /ERRORREPORT:PROMPT
+ /SUBSYSTEM:CONSOLE
+ /TLBID:1
+ /NXCOMPAT
+ /IGNORE:4221
+ /INCREMENTAL
+)
+
+if ((CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") OR (CMAKE_SYSTEM_PROCESSOR STREQUAL "AMD64"))
+ add_link_options(/MACHINE:X64)
+endif()
diff --git a/cmake/global_vars.cmake b/cmake/global_vars.cmake
index f14210c11b3..e1d7f4d9e35 100644
--- a/cmake/global_vars.cmake
+++ b/cmake/global_vars.cmake
@@ -6,7 +6,7 @@
# original buildsystem will not be accepted.
-if(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE AND NOT ANDROID)
+if(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE AND NOT ANDROID AND NOT HAVE_CUDA)
set(YASM_FLAGS -f elf64 -D UNIX -D _x86_64_ -D_YASM_ -g dwarf2)
set(BISON_FLAGS -v)
set(RAGEL_FLAGS -L -I ${CMAKE_SOURCE_DIR}/)
diff --git a/cmake/protobuf.cmake b/cmake/protobuf.cmake
index 95a599ca378..880ac6cd8b4 100644
--- a/cmake/protobuf.cmake
+++ b/cmake/protobuf.cmake
@@ -1,3 +1,5 @@
+include(common)
+
function(target_proto_plugin Tgt Name PluginTarget)
set_property(TARGET ${Tgt} APPEND PROPERTY
PROTOC_OPTS --${Name}_out=${CMAKE_BINARY_DIR}/$<TARGET_PROPERTY:${Tgt},PROTO_NAMESPACE> --plugin=protoc-gen-${Name}=$<TARGET_FILE:${PluginTarget}>
@@ -20,6 +22,9 @@ function(target_proto_outs Tgt)
endfunction()
function(target_proto_messages Tgt Scope)
+ get_built_tool_path(protoc_bin protoc_dependency contrib/tools/protoc/bin protoc)
+ get_built_tool_path(cpp_styleguide_bin cpp_styleguide_dependency contrib/tools/protoc/plugins/cpp_styleguide cpp_styleguide)
+
get_property(ProtocExtraOutsSuf TARGET ${Tgt} PROPERTY PROTOC_EXTRA_OUTS)
foreach(proto ${ARGN})
if(proto MATCHES ${CMAKE_BINARY_DIR})
@@ -37,18 +42,18 @@ function(target_proto_messages Tgt Scope)
${OutputDir}/${OutputBase}.pb.cc
${OutputDir}/${OutputBase}.pb.h
${ProtocExtraOuts}
- COMMAND ${TOOLS_ROOT}/contrib/tools/protoc/bin/protoc
+ COMMAND ${protoc_bin}
${COMMON_PROTOC_FLAGS}
"-I$<JOIN:$<TARGET_GENEX_EVAL:${Tgt},$<TARGET_PROPERTY:${Tgt},PROTO_ADDINCL>>,;-I>"
"$<JOIN:$<TARGET_GENEX_EVAL:${Tgt},$<TARGET_PROPERTY:${Tgt},PROTO_OUTS>>,;>"
- --plugin=protoc-gen-cpp_styleguide=${TOOLS_ROOT}/contrib/tools/protoc/plugins/cpp_styleguide/cpp_styleguide
+ --plugin=protoc-gen-cpp_styleguide=${cpp_styleguide_bin}
"$<JOIN:$<TARGET_GENEX_EVAL:${Tgt},$<TARGET_PROPERTY:${Tgt},PROTOC_OPTS>>,;>"
${protoRel}
DEPENDS
${proto}
$<TARGET_PROPERTY:${Tgt},PROTOC_DEPS>
- ${TOOLS_ROOT}/contrib/tools/protoc/bin/protoc
- ${TOOLS_ROOT}/contrib/tools/protoc/plugins/cpp_styleguide/cpp_styleguide
+ ${protoc_dependency}
+ ${cpp_styleguide_dependency}
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
COMMAND_EXPAND_LISTS
)