diff options
author | alexv-smirnov <alex@ydb.tech> | 2023-03-15 19:59:12 +0300 |
---|---|---|
committer | alexv-smirnov <alex@ydb.tech> | 2023-03-15 19:59:12 +0300 |
commit | 056bb284ccf8dd6793ec3a54ffa36c4fb2b9ad11 (patch) | |
tree | 4740980126f32e3af7937ba0ca5f83e59baa4ab0 /build/conf/linkers/msvc_linker.conf | |
parent | 269126dcced1cc8b53eb4398b4a33e5142f10290 (diff) | |
download | ydb-056bb284ccf8dd6793ec3a54ffa36c4fb2b9ad11.tar.gz |
add library/cpp/actors, ymake build to ydb oss export
Diffstat (limited to 'build/conf/linkers/msvc_linker.conf')
-rw-r--r-- | build/conf/linkers/msvc_linker.conf | 271 |
1 files changed, 271 insertions, 0 deletions
diff --git a/build/conf/linkers/msvc_linker.conf b/build/conf/linkers/msvc_linker.conf new file mode 100644 index 0000000000..9f852b1ef4 --- /dev/null +++ b/build/conf/linkers/msvc_linker.conf @@ -0,0 +1,271 @@ +_MSVC_ARCH= +when ($ARCH_I386 == "yes" || $ARCH_I686 == "yes") { + _MSVC_ARCH=x86 +} +elsewhen ($ARCH_X86_64 == "yes") { + _MSVC_ARCH=x64 +} +elsewhen ($ARCH_ARM == "yes") { + _MSVC_ARCH=arm +} + +_FLAGS_MACHINE=/MACHINE:${toupper:_MSVC_ARCH} + +_FLAGS_IGNORE=/IGNORE:4221 + +_FLAGS_COMMON_IDE_MSVS= +when ($IDE_MSVS == "yes") { + _FLAGS_COMMON_IDE_MSVS=/INCREMENTAL +} +otherwise { + _FLAGS_COMMON_IDE_MSVS=/INCREMENTAL:NO +} + +# TODO(nslus): DEVTOOLS-1868 remove restriction. +_FLAGS_DEBUG_ONLY_DEBUG= +_FLAGS_RELEASE_ONLY_DEBUG= +_FLAGS_COMMON_DEBUG= +when (!$NO_DEBUGINFO || $NO_DEBUGINFO == "no" || $NO_DEBUGINFO == "0") { + when ($IDE_MSVS == "yes") { + when ($CLANG_CL == "yes") { + _FLAGS_DEBUG_ONLY_DEBUG=/DEBUG + } + otherwise { + _FLAGS_DEBUG_ONLY_DEBUG=/DEBUG:FASTLINK + } + _FLAGS_RELEASE_ONLY_DEBUG=/DEBUG + } + otherwise { + _FLAGS_COMMON_DEBUG=/DEBUG + } +} + +_FLAGS_COMMON_LIBPATHS= +when ($IDE_MSVS != "yes") { + _FLAGS_COMMON_LIBPATHS=\ + /LIBPATH:"$_MSVC_TC_KIT_LIBS/um/$_MSVC_ARCH" \ + /LIBPATH:"$_MSVC_TC_KIT_LIBS/ucrt/$_MSVC_ARCH" \ + /LIBPATH:"$_MSVC_TC_VC_ROOT/lib/$_MSVC_ARCH" +} + +_FLAGS_COMMON =/NOLOGO /ERRORREPORT:PROMPT /SUBSYSTEM:CONSOLE /TLBID:1 $MSVC_DYNAMICBASE /NXCOMPAT +_FLAGS_COMMON+=$_FLAGS_IGNORE +_FLAGS_COMMON+=$_FLAGS_MACHINE +_FLAGS_COMMON+=$_FLAGS_COMMON_IDE_MSVS +_FLAGS_COMMON+=$_FLAGS_COMMON_DEBUG +_FLAGS_COMMON+=$_FLAGS_COMMON_LIBPATHS + +_FLAGS_DEBUG_ONLY_CLANG_CL= +when ($CLANG_CL == "yes") { + _FLAGS_DEBUG_ONLY_CLANG_CL=/STACK:4194304 +} + +_FLAGS_DEBUG_ONLY =$_FLAGS_DEBUG_ONLY_CLANG_CL +_FLAGS_DEBUG_ONLY+=$_FLAGS_DEBUG_ONLY_DEBUG +_FLAGS_RELEASE_ONLY =$_FLAGS_RELEASE_ONLY_DEBUG + +LINK_EXE_FLAGS_DEBUG =$_FLAGS_COMMON +LINK_EXE_FLAGS_DEBUG+=$_FLAGS_DEBUG_ONLY + +LINK_EXE_FLAGS_RELEASE =$_FLAGS_COMMON +LINK_EXE_FLAGS_RELEASE+=$_FLAGS_RELEASE_ONLY + +LINK_LIB_FLAGS=$_FLAGS_IGNORE $_FLAGS_MACHINE + +LINK_STDLIBS=\ + advapi32.lib \ + comdlg32.lib \ + crypt32.lib \ + dnsapi.lib \ + gdi32.lib \ + iphlpapi.lib \ + kernel32.lib \ + mswsock.lib \ + ole32.lib \ + oleaut32.lib \ + psapi.lib \ + rpcrt4.lib \ + secur32.lib \ + shell32.lib \ + shlwapi.lib \ + user32.lib \ + userenv.lib \ + uuid.lib \ + version.lib \ + winmm.lib \ + winspool.lib \ + ws2_32.lib + +LDFLAGS_GLOBAL= +LDFLAGS= +OBJADDE= + +LINK_EXE_FLAGS=$LINK_EXE_FLAGS_PER_TYPE + +LINK_IMPLIB=/IMPLIB:${output;noext;rootrel;pre=$MODULE_PREFIX:REALPRJNAME.lib} +_LINK_EXTRA_OUTPUT= +when (!$NO_DEBUGINFO || $NO_DEBUGINFO == "no" || $NO_DEBUGINFO == "0") { + _LINK_EXTRA_OUTPUT=/PDB:${output;noext;rootrel;pre=$MODULE_PREFIX:REALPRJNAME.pdb} +} +LINK_EXTRA_OUTPUT=$_LINK_EXTRA_OUTPUT + +LIB_WRAPPER=${FIX_MSVC_OUTPUT} lib +LINK_WRAPPER=${FIX_MSVC_OUTPUT} link +when ($_UNDER_WINE == "yes") { + LIB_WRAPPER= + LINK_WRAPPER= +} + +LINK_WRAPPER_DYNLIB=${YMAKE_PYTHON} ${input:"build/scripts/link_dyn_lib.py"} --arch WINDOWS --target $TARGET + +EXPORTS_VALUE= +LINK_IMPLIB_VALUE= +when ($EXPORTS_FILE) { + LINK_IMPLIB_VALUE=$LINK_IMPLIB + EXPORTS_VALUE=/DEF:${input:EXPORTS_FILE} +} + +GENERATE_MF_CMD=\ + $YMAKE_PYTHON ${input:"build/scripts/generate_mf.py"} ${input;hide:"build/scripts/process_command_files.py"} \ + --build-root $ARCADIA_BUILD_ROOT \ + --module-name $REALPRJNAME \ + -o ${output;rootrel;pre=$MODULE_PREFIX;suf=$MODULE_SUFFIX.mf:REALPRJNAME} \ + -t $MODULE_TYPE \ + --ya-start-command-file \ + -Ya,lics $LICENSE_NAMES \ + -Ya,peers ${rootrel:PEERS} \ + -Ya,credits ${input:CREDITS_TEXTS_FILE} $CREDITS_FLAGS \ + --ya-end-command-file + +# we split srcs_global into two groups: libs and objs +# # each group can be in its own command file +# first group need /WHOLEARCHIVE: prefix which will be added in fix_msvc_output.py or run_msvc_wine.py +# the tail of link commands will be added in the third command file +_MSVC_SRCS_GLOBALS=\ +--start-wa --ya-start-command-file ${qe;rootrel;ext=.lib:SRCS_GLOBAL} --ya-end-command-file --end-wa \ +--ya-start-command-file ${qe;rootrel;ext=.obj:SRCS_GLOBAL} --ya-end-command-file + +REAL_LINK_DYN_LIB_CMDLINE=\ + ${TOOLCHAIN_ENV} \ + ${cwd:ARCADIA_BUILD_ROOT} \ + ${LINK_WRAPPER} \ + ${LINK_WRAPPER_DYNLIB} \ + ${LINK_EXE_CMD} \ + ${LINK_IMPLIB_VALUE} \ + /DLL \ + /OUT:${qe;rootrel:TARGET} \ + ${LINK_EXTRA_OUTPUT} \ + ${EXPORTS_VALUE} \ + ${pre=--whole-archive-peers :WHOLE_ARCHIVE_PEERS} \ + ${pre=--whole-archive-libs :_WHOLE_ARCHIVE_LIBS_VALUE_GLOBAL} \ + $_MSVC_SRCS_GLOBALS \ + --ya-start-command-file \ + ${VCS_C_OBJ_RR} \ + ${qe;rootrel:AUTO_INPUT} \ + ${qe;rootrel;ext=.lib:PEERS} ${qe;rootrel;ext=.dll;noext;suf=.lib:PEERS} \ + $LINK_EXE_FLAGS \ + $LINK_STDLIBS $LDFLAGS \ + $LDFLAGS_GLOBAL \ + $OBJADDE \ + --ya-end-command-file + +REAL_LINK_DYN_LIB=$REAL_LINK_DYN_LIB_IMPL($_WHOLE_ARCHIVE_PEERS_VALUE) + +SWIG_DLL_JAR_CMD=$GENERATE_MF && $GENERATE_VCS_C_INFO_NODEP && $REAL_SWIG_DLL_JAR_CMD + +_MSVC_HEAD_LINK_LIB=${TOOLCHAIN_ENV} ${cwd:ARCADIA_BUILD_ROOT} ${LIB_WRAPPER} ${LINK_LIB_CMD} +_MSVC_TAIL_LINK_LIB=\ + --ya-start-command-file \ + ${qe;rootrel:AUTO_INPUT} \ + $LINK_LIB_FLAGS \ + --ya-end-command-file \ + ${hide;kv:"soe"} ${hide;kv:"p AR"} ${hide;kv:"pc light-red"} + +LINK_LIB=${GENERATE_MF} && $_MSVC_HEAD_LINK_LIB /OUT:${qe;rootrel:TARGET} $_MSVC_TAIL_LINK_LIB +GLOBAL_LINK_LIB=$_MSVC_HEAD_LINK_LIB /OUT:${qe;rootrel:GLOBAL_TARGET} $_MSVC_TAIL_LINK_LIB + +LINK_EXE_CMDLINE=\ + ${GENERATE_MF} && \ + $GENERATE_VCS_C_INFO_NODEP && \ + ${TOOLCHAIN_ENV} \ + ${cwd:ARCADIA_BUILD_ROOT} \ + ${LINK_WRAPPER} \ + ${LINK_EXE_CMD} \ + /OUT:${qe;rootrel:TARGET} \ + ${pre=--whole-archive-peers :WHOLE_ARCHIVE_PEERS} \ + ${pre=--whole-archive-libs :_WHOLE_ARCHIVE_LIBS_VALUE_GLOBAL} \ + ${LINK_EXTRA_OUTPUT} \ + $_MSVC_SRCS_GLOBALS \ + --ya-start-command-file \ + ${VCS_C_OBJ_RR} \ + ${qe;rootrel:AUTO_INPUT} \ + $LINK_EXE_FLAGS \ + $LINK_STDLIBS \ + $LDFLAGS \ + $LDFLAGS_GLOBAL \ + $OBJADDE \ + ${qe;rootrel;ext=.lib:PEERS} ${qe;rootrel;ext=.dll;noext;suf=.lib:PEERS} \ + --ya-end-command-file \ + ${hide;kv:"soe"} ${hide;kv:"p LD"} ${hide;kv:"pc blue"} + +LINK_EXE=$LINK_EXE_IMPL($_WHOLE_ARCHIVE_PEERS_VALUE) + +LINK_DYN_LIB=${GENERATE_MF} && $GENERATE_VCS_C_INFO_NODEP && $REAL_LINK_DYN_LIB ${hide;kv:"soe"} ${hide;kv:"p LD"} ${hide;kv:"pc blue"} + +LINK_EXEC_DYN_LIB_CMDLINE=\ + ${GENERATE_MF} && \ + $GENERATE_VCS_C_INFO_NODEP && \ + ${TOOLCHAIN_ENV} \ + ${cwd:ARCADIA_BUILD_ROOT} \ + ${LINK_WRAPPER} \ + ${LINK_WRAPPER_DYNLIB} \ + ${LINK_EXE_CMD} \ + /OUT:${qe;rootrel:TARGET} \ + ${LINK_EXTRA_OUTPUT} \ + ${EXPORTS_VALUE} \ + ${pre=--whole-archive-peers :WHOLE_ARCHIVE_PEERS} \ + ${pre=--whole-archive-libs :_WHOLE_ARCHIVE_LIBS_VALUE_GLOBAL} \ + $_MSVC_SRCS_GLOBALS \ + '--ya-start-command-file \ + ${VCS_C_OBJ_RR} \ + ${qe;rootrel:AUTO_INPUT} \ + ${qe;rootrel;ext=.lib:PEERS} ${qe;rootrel;ext=.dll;noext;suf=.lib:PEERS} \ + $LINK_EXE_FLAGS \ + $LINK_STDLIBS \ + $LDFLAGS $LDFLAGS_GLOBAL \ + $OBJADDE \ + --ya-end-command-file \ + ${hide;kv:"soe"} ${hide;kv:"p LD"} ${hide;kv:"pc blue"} + +LINK_EXEC_DYN_LIB=$LINK_EXEC_DYN_LIB_IMPL($_WHOLE_ARCHIVE_PEERS_VALUE) + +LINK_GLOBAL_FAT_OBJECT=\ + ${TOOLCHAIN_ENV} \ + ${cwd:ARCADIA_BUILD_ROOT} \ + ${LIB_WRAPPER} \ + ${LINK_LIB_CMD} \ + /OUT:${qe;rootrel:TARGET} \ + --ya-start-command-file \ + ${qe;rootrel;ext=.lib:SRCS_GLOBAL} \ + ${qe;rootrel;ext=.obj:SRCS_GLOBAL} \ + ${qe;rootrel:AUTO_INPUT} \ + $LINK_LIB_FLAGS \ + --ya-end-command-file + +LINK_PEERS_FAT_OBJECT=\ + ${TOOLCHAIN_ENV} \ + ${cwd:ARCADIA_BUILD_ROOT} \ + ${LIB_WRAPPER} \ + ${LINK_LIB_CMD} \ + /OUT:${qe;rootrel;output:REALPRJNAME.lib} \ + --ya-start-command-file \ + ${qe;rootrel:PEERS} \ + $LINK_LIB_FLAGS \ + --ya-end-command-file + +LINK_FAT_OBJECT=\ + ${GENERATE_MF} && \ + $GENERATE_VCS_C_INFO_NODEP && \ + $LINK_GLOBAL_FAT_OBJECT && \ + $LINK_PEERS_FAT_OBJECT \ + ${kv;hide:"p LD"} ${kv;hide:"pc light-blue"} ${kv;hide:"show_out"} |