diff options
author | robot-ya-builder <[email protected]> | 2023-03-06 16:56:18 +0300 |
---|---|---|
committer | robot-ya-builder <[email protected]> | 2023-03-06 16:56:18 +0300 |
commit | cbc0c479c131a1e63ca86fe98b031e1bcac725d8 (patch) | |
tree | 12245a82da1c7f54d54befcfb7706643e8166505 /cmake | |
parent | ea8e336dc456c44b848619e120a8f3643c6125af (diff) |
External build system generator release 17
Update tools: yexport
Diffstat (limited to 'cmake')
-rw-r--r-- | cmake/common.cmake | 70 | ||||
-rw-r--r-- | cmake/conan.cmake | 36 | ||||
-rw-r--r-- | cmake/global_flags.cmake | 140 | ||||
-rw-r--r-- | cmake/global_flags.compiler.gnu.cmake | 77 | ||||
-rw-r--r-- | cmake/global_flags.compiler.msvc.cmake | 111 | ||||
-rw-r--r-- | cmake/global_flags.linker.gnu.cmake | 9 | ||||
-rw-r--r-- | cmake/global_flags.linker.msvc.cmake | 16 | ||||
-rw-r--r-- | cmake/global_vars.cmake | 2 | ||||
-rw-r--r-- | cmake/protobuf.cmake | 13 |
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 ) |