diff options
author | Devtools Arcadia <arcadia-devtools@yandex-team.ru> | 2022-02-07 18:08:42 +0300 |
---|---|---|
committer | Devtools Arcadia <arcadia-devtools@mous.vla.yp-c.yandex.net> | 2022-02-07 18:08:42 +0300 |
commit | 1110808a9d39d4b808aef724c861a2e1a38d2a69 (patch) | |
tree | e26c9fed0de5d9873cce7e00bc214573dc2195b7 /build/conf | |
download | ydb-1110808a9d39d4b808aef724c861a2e1a38d2a69.tar.gz |
intermediate changes
ref:cde9a383711a11544ce7e107a78147fb96cc4029
Diffstat (limited to 'build/conf')
-rw-r--r-- | build/conf/compilers/gnu_compiler.conf | 470 | ||||
-rw-r--r-- | build/conf/compilers/msvc_compiler.conf | 294 | ||||
-rw-r--r-- | build/conf/java.ymake.conf | 179 | ||||
-rw-r--r-- | build/conf/jbuild.ymake.conf | 122 | ||||
-rw-r--r-- | build/conf/license.conf | 380 | ||||
-rw-r--r-- | build/conf/linkers/ld.conf | 383 | ||||
-rw-r--r-- | build/conf/linkers/msvc_linker.conf | 271 | ||||
-rw-r--r-- | build/conf/opensource.conf | 14 | ||||
-rw-r--r-- | build/conf/project_specific/maps/aar.conf | 350 | ||||
-rw-r--r-- | build/conf/project_specific/maps/asrc.conf | 122 | ||||
-rw-r--r-- | build/conf/project_specific/maps/mapkit.conf | 283 | ||||
-rw-r--r-- | build/conf/project_specific/maps/sproto.conf | 21 | ||||
-rw-r--r-- | build/conf/project_specific/other.conf | 11 | ||||
-rw-r--r-- | build/conf/project_specific/yql_udf.conf | 261 | ||||
-rw-r--r-- | build/conf/rules.conf | 43 | ||||
-rw-r--r-- | build/conf/settings.conf | 155 | ||||
-rw-r--r-- | build/conf/sysincl.conf | 61 | ||||
-rw-r--r-- | build/conf/toolchains/gnu_toolchain.conf | 0 | ||||
-rw-r--r-- | build/conf/toolchains/msvc_toolchain.conf | 7 | ||||
-rw-r--r-- | build/conf/ts.conf | 105 |
20 files changed, 3532 insertions, 0 deletions
diff --git a/build/conf/compilers/gnu_compiler.conf b/build/conf/compilers/gnu_compiler.conf new file mode 100644 index 0000000000..373be5bedd --- /dev/null +++ b/build/conf/compilers/gnu_compiler.conf @@ -0,0 +1,470 @@ +_C_DEFINES_ANDROID= +_C_DEFINES_ANDROID_OTHERWISE= +when ($OS_ANDROID == "yes") { + _C_DEFINES_ANDROID=-DANDROID_FAKEID=$ANDROID_FAKEID +} +otherwise { + # There is no usable _FILE_OFFSET_BITS=64 support in Androids until API 21. And it's incomplete until at least API 24. + # https://android.googlesource.com/platform/bionic/+/master/docs/32-bit-abi.md + # Arcadia have API 16 for 32-bit Androids. + _C_DEFINES_ANDROID_OTHERWISE=-D_FILE_OFFSET_BITS=64 +} + +_C_DEFINES_GNU_SOURCE= +when ($OS_LINUX == "yes" || $OS_ANDROID == "yes" || $OS_CYGWIN == "yes") { + _C_DEFINES_GNU_SOURCE=-D_GNU_SOURCE +} + +_C_DEFINES_CLANG_LINUX_X86_64= +when ($CLANG == "yes" && $OS_LINUX == "yes" && $ARCH_X86_64 == "yes") { + _C_DEFINES_CLANG_LINUX_X86_64=-D_YNDX_LIBUNWIND_ENABLE_EXCEPTION_BACKTRACE +} + +_C_DEFINES_IOS= +when ($OS_IOS == "yes") { + _C_DEFINES_IOS=-D_XOPEN_SOURCE -D_DARWIN_C_SOURCE +} + +_C_DEFINES_WITH_VALGRIND= +when ($WITH_VALGRIND == "yes") { + _C_DEFINES_WITH_VALGRIND=-DWITH_VALGRIND=1 +} + +C_DEFINES =-DFAKEID=$CPP_FAKEID +C_DEFINES+=$_C_DEFINES_ANDROID +C_DEFINES+=\ +-DARCADIA_ROOT=${ARCADIA_ROOT} \ +-DARCADIA_BUILD_ROOT=${ARCADIA_BUILD_ROOT} \ +-D_THREAD_SAFE \ +-D_PTHREADS \ +-D_REENTRANT \ +-D_LIBCPP_ENABLE_CXX17_REMOVED_FEATURES \ +-D_LARGEFILE_SOURCE \ +-D__STDC_CONSTANT_MACROS \ +-D__STDC_FORMAT_MACROS +C_DEFINES+=$_C_DEFINES_ANDROID_OTHERWISE +C_DEFINES+=$_C_DEFINES_GNU_SOURCE +C_DEFINES+=$_C_DEFINES_CLANG_LINUX_X86_64 +C_DEFINES+=$_C_DEFINES_IOS +C_DEFINES+=$_C_DEFINES_WITH_VALGRIND +C_DEFINES+=$_C_DEFINES_NDEBUG + +_C_FOPTIONS_INIT_ARRAY= +when ($CLANG == "yes" && $OS_LINUX == "yes") { + # Use .init_array instead of .ctors (default for old clang versions) + # See: https://maskray.me/blog/2021-11-07-init-ctors-init-array + _C_FOPTIONS_INIT_ARRAY=-fuse-init-array +} + +_C_FOPTIONS_COLOR= +_C_FOPTIONS_ALIGNED_ALLOCATION= +when ($CLANG == "yes") { + # Set up output colorization + _C_FOPTIONS_COLOR=-fcolor-diagnostics + # Enable aligned allocation + _C_FOPTIONS_ALIGNED_ALLOCATION=-faligned-allocation +} +elsewhen ($GCC == "yes") { + # Set up output colorization + _C_FOPTIONS_COLOR=-fdiagnostics-color=always + # It looks like there is no way to enable aligned allocation in gcc +} + +_C_FOPTIONS_MAPSMOBI_ARM= +when ($OS_IOS == "yes") { + when ($MAPSMOBI_BUILD_TARGET == "yes" && $ARCH_ARM == "yes") { + _C_FOPTIONS_MAPSMOBI_ARM=-fembed-bitcode + } +} + +_C_WARNINGS_CLANG= +_CXX_WARNINGS_CLANG= +when ($CLANG == "yes") { + + _CXX_WARNINGS_CLANG=\ +-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 + +# -Wno-unknown-warning-option +# For nvcc to accept the above. + _C_WARNINGS_CLANG=\ +-Wno-implicit-const-int-float-conversion \ +-Wno-unknown-warning-option + +} + +_C_FOPTIONS_GCC= +when ($GCC == "yes") { + _C_FOPTIONS_GCC=-fno-delete-null-pointer-checks -fabi-version=8 +} + +_C_FOPTIONS_IOS= +when ($OS_IOS != "yes") { + # Split all functions and data into separate sections for DCE and ICF linker passes + # NOTE: iOS build uses -fembed-bitcode which conflicts with -ffunction-sections (only relevant for ELF targets) + _C_FOPTIONS_IOS=-ffunction-sections -fdata-sections +} + +_C_FOPTIONS_DEBUG= +when ($_BUILD_DEBUG == "yes") { + _C_FOPTIONS_DEBUG=$FSTACK +} + +_C_FLAGS_RELEASE= +_C_FOPTIONS_RELEASE= +_OPTIMIZE_RELEASE= +when ($_BUILD_RELEASE == "yes") { + _C_FLAGS_RELEASE=$OPTIMIZE + when ($_BUILD_SIZE_OPTIMIZED == "yes") { + # -Oz is clang's more size-aggressive version of -Os + # For ARM specifically, clang -Oz is on par with gcc -Os: + # https://github.com/android/ndk/issues/133#issuecomment-365763507 + when($CLANG == "yes") { + _OPTIMIZE_RELEASE=-Oz + } + otherwise { + _OPTIMIZE_RELEASE=-Os + } + + # Generate sections with address significance tables for ICF linker pass + when($CLANG == "yes") { + _C_FOPTIONS_RELEASE=-faddrsig + } + } + otherwise { + _OPTIMIZE_RELEASE=-O3 + } +} + +_C_FOPTIONS_PROFILER= +when ($_BUILD_PROFILER_TYPE != "") { + when ($_BUILD_PROFILER_TYPE in ["generic", "gprof"]) { + _C_FOPTIONS_PROFILER=-fno-omit-frame-pointer + } +} + +_C_FOPTIONS = + +# Enable C++ exceptions (and allow them to be throw through pure C code) +_C_FOPTIONS+=-fexceptions + +# Enable standard-conforming behavior and generate duplicate symbol error in case of duplicated global constants. +# See: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85678#c0 +_C_FOPTIONS+=-fno-common + +_C_FOPTIONS+=$_C_FOPTIONS_INIT_ARRAY +_C_FOPTIONS+=$_C_FOPTIONS_COLOR +_C_FOPTIONS+=$_C_FOPTIONS_ALIGNED_ALLOCATION +_C_FOPTIONS+=$_C_FOPTIONS_MAPSMOBI_ARM +_C_FOPTIONS+=$_C_FOPTIONS_DEBUG +_C_FOPTIONS+=$_C_FOPTIONS_RELEASE +_C_FOPTIONS+=$_C_FOPTIONS_PROFILER +_C_FOPTIONS+=$_C_FOPTIONS_GCC +_C_FOPTIONS+=$_C_FOPTIONS_IOS + +# Enable default warnings subset +_C_WARNINGS =-Wall -Wextra + +# Disable some warnings which will fail compilation at the time +_C_WARNINGS+=-Wno-parentheses + +_C_WARNINGS+=$_C_WARNINGS_CLANG + +# Issue a warning if certain overload is hidden due to inheritance +_CXX_WARNINGS =-Woverloaded-virtual + +_CXX_WARNINGS+=$_CXX_WARNINGS_CLANG + +_C_FLAGS_ARCH= +when ($ARCH_I386 == "yes") { + _C_FLAGS_ARCH=-m32 +} +when ($ARCH_X86_64 == "yes") { + _C_FLAGS_ARCH=-m64 +} + +_C_FLAGS_FAST_DEBUG= +when ($_BUILD_FAST_DEBUG == "yes") { + _C_FLAGS_FAST_DEBUG=-Og +} + +_C_DEFINES_NDEBUG=-UNDEBUG +when ($_BUILD_WITH_NDEBUG == "yes") { + _C_DEFINES_NDEBUG=-DNDEBUG +} + +_C_FLAGS_PROFILER= +when ($_BUILD_PROFILER_TYPE == "gprof") { + _C_FLAGS_PROFILER=-pg +} + +_C_FLAGS=\ +$CL_DEBUG_INFO $CL_DEBUG_INFO_DISABLE_CACHE__NO_UID__ $_C_FLAGS_ARCH_OPT -pipe +_C_FLAGS+=$_C_FLAGS_ARCH +_C_FLAGS+=$_C_FLAGS_FAST_DEBUG +_C_FLAGS+=$_C_FLAGS_RELEASE +_C_FLAGS+=$_C_FLAGS_PROFILER + +_SFDL_FLAGS=-E -C -x c++ +when ($CLANG == "yes") { + _SFDL_FLAGS+=-Qunused-arguments +} + +_DEBUG_INFO_FLAGS=-g +when ($OS_LINUX == "yes") { + _DEBUG_INFO_FLAGS=-g -ggnu-pubnames +} + +_CROSS_SUFFIX=.pic +when ($FORCE_NO_PIC == "yes") { + _CROSS_SUFFIX= +} + +C_COMPILER=${quo:C_COMPILER_UNQUOTED} +OPTIMIZE=$_OPTIMIZE_RELEASE +FSTACK=-fstack-protector +DUMP_DEPS= +GCC_PREPROCESSOR_OPTS=$DUMP_DEPS $C_DEFINES +C_WARNING_OPTS=$_C_WARNINGS +CXX_WARNING_OPTS=$_CXX_WARNINGS + +# PIE is only valid for executables, while PIC implies a shared library +# `-pie` with a shared library is either ignored or fails to link +when ($PIC == "yes") { + CFLAGS+=-fPIC + LDFLAGS+=-fPIC +} +elsewhen ($PIE == "yes") { + CFLAGS+=-fPIE + LDFLAGS+=-fPIE -pie +} + +CFLAGS+=$_C_FLAGS $DEBUG_INFO_FLAGS $_C_FOPTIONS $C_WARNING_OPTS $GCC_PREPROCESSOR_OPTS $USER_CFLAGS $USER_CFLAGS_GLOBAL +CXXFLAGS+=$CFLAGS $_CXX_STD $CXX_WARNING_OPTS $USER_CXXFLAGS $USER_CXXFLAGS_GLOBAL +CONLYFLAGS+=$USER_CONLYFLAGS $USER_CONLYFLAGS_GLOBAL +CXX_COMPILER=${quo:CXX_COMPILER_UNQUOTED} +NOGCCSTACKCHECK=yes +SFDL_FLAG=$_SFDL_FLAGS -o $SFDL_TMP_OUT +WERROR_FLAG=-Werror +DEBUG_INFO_FLAGS=$_DEBUG_INFO_FLAGS + +when ($NO_WSHADOW == "yes") { + C_WARNING_OPTS += -Wno-shadow +} +when ($NO_COMPILER_WARNINGS == "yes") { + C_WARNING_OPTS = -w + CXX_WARNING_OPTS = -Wno-everything +} +when ($NO_OPTIMIZE == "yes") { + OPTIMIZE = -O0 +} +when ($SAVE_TEMPS == "yes") { + CXXFLAGS += -save-temps +} +when ($NOGCCSTACKCHECK != "yes") { + FSTACK += -fstack-check +} + +# _C_DEBUG_LIGHT=-fdebug-prefix-map=${ARCADIA_BUILD_ROOT}=/-B +# _C_DEBUG_LIGHT_CL=$_C_DEBUG_LIGHT -Xclang -fdebug-compilation-dir -Xclang /tmp +# _C_DEBUG=$_C_DEBUG_LIGHT -fdebug-prefix-map=${ARCADIA_ROOT}=/-S -fdebug-prefix-map=$(TOOL_ROOT)=/-T +# _C_DEBUG_CL=$_C_DEBUG -Xclang -fdebug-compilation-dir -Xclang /tmp +# _YASM_DEBUG_LIGHT=--replace=${ARCADIA_BUILD_ROOT}=/-B +# _YASM_DEBUG=$_YASM_DEBUG_LIGHT --replace=${ARCADIA_ROOT}=/-S --replace=$(TOOL_ROOT)=/-T +# when ($FORCE_CONSISTENT_DEBUG == "yes") { +# when ($CLANG == "yes") { +# CL_DEBUG_INFO=$_C_DEBUG_CL +# } +# otherwise { +# CL_DEBUG_INFO=$_C_DEBUG +# } +# YASM_DEBUG_INFO=$_YASM_DEBUG +# } +# elsewhen ($CONSISTENT_DEBUG == "yes") { +# when ($CLANG == "yes") { +# CL_DEBUG_INFO_DISABLE_CACHE__NO_UID__=$_C_DEBUG_CL +# } +# otherwise { +# CL_DEBUG_INFO_DISABLE_CACHE__NO_UID__=$_C_DEBUG +# } +# YASM_DEBUG_INFO_DISABLE_CACHE__NO_UID__=$_YASM_DEBUG +# } +# elsewhen ($CONSISTENT_DEBUG_LIGHT == "yes") { +# when ($CLANG == "yes") { +# CL_DEBUG_INFO_DISABLE_CACHE__NO_UID__=$_C_DEBUG_LIGHT_CL +# } +# otherwise { +# CL_DEBUG_INFO_DISABLE_CACHE__NO_UID__=$_C_DEBUG_LIGHT +# } +# YASM_DEBUG_INFO_DISABLE_CACHE__NO_UID__=$_YASM_DEBUG_LIGHT +# } +# +# _C_BUILTINS=-Wno-builtin-macro-redefined -D__DATE__="\"""Sep 31 2019""\"" -D__TIME__=\"00:00:00\" +# when ($CLANG == "yes" && $_TC_VERSION_AT_LEAST_10 || $GCC == "yes" && $_TC_VERSION_AT_LEAST_8 == "yes") { +# # XXX does not support non-normalized paths +# _C_BUILTINS+=-fmacro-prefix-map=${ARCADIA_BUILD_ROOT}/= -fmacro-prefix-map=${ARCADIA_ROOT}/= -fmacro-prefix-map=$(TOOL_ROOT)/= +# } +# otherwise { +# # XXX this macro substitution breaks __FILE__ in included sources +# _C_BUILTINS+=-D__FILE__=\"${input;qe;rootrel:SRC}\" +# } +# +# when ($FORCE_CONSISTENT_BUILD == "yes") { +# CL_MACRO_INFO=$_C_BUILTINS +# } +# elsewhen ($CONSISTENT_BUILD == "yes") { +# CL_MACRO_INFO_DISABLE_CACHE__NO_UID__=$_C_BUILTINS +# } + +when ($FORCE_CONSISTENT_DEBUG == "yes") { + when ($CLANG == "yes") { + CL_DEBUG_INFO=-fdebug-prefix-map=${ARCADIA_BUILD_ROOT}=/-B -fdebug-prefix-map=${ARCADIA_ROOT}=/-S -fdebug-prefix-map=$(TOOL_ROOT)=/-T -Xclang -fdebug-compilation-dir -Xclang /tmp + } + otherwise { + CL_DEBUG_INFO=-fdebug-prefix-map=${ARCADIA_BUILD_ROOT}=/-B -fdebug-prefix-map=${ARCADIA_ROOT}=/-S -fdebug-prefix-map=$(TOOL_ROOT)=/-T + } + YASM_DEBUG_INFO=--replace=${ARCADIA_BUILD_ROOT}=/-B --replace=${ARCADIA_ROOT}=/-S --replace=$(TOOL_ROOT)=/-T +} +elsewhen ($CONSISTENT_DEBUG == "yes") { + when ($CLANG == "yes") { + CL_DEBUG_INFO_DISABLE_CACHE__NO_UID__=-fdebug-prefix-map=${ARCADIA_BUILD_ROOT}=/-B -fdebug-prefix-map=${ARCADIA_ROOT}=/-S -fdebug-prefix-map=$(TOOL_ROOT)=/-T -Xclang -fdebug-compilation-dir -Xclang /tmp + } + otherwise { + CL_DEBUG_INFO_DISABLE_CACHE__NO_UID__=-fdebug-prefix-map=${ARCADIA_BUILD_ROOT}=/-B -fdebug-prefix-map=${ARCADIA_ROOT}=/-S -fdebug-prefix-map=$(TOOL_ROOT)=/-T + } + YASM_DEBUG_INFO_DISABLE_CACHE__NO_UID__=--replace=${ARCADIA_BUILD_ROOT}=/-B --replace=${ARCADIA_ROOT}=/-S --replace=$(TOOL_ROOT)=/-T +} +elsewhen ($CONSISTENT_DEBUG_LIGHT == "yes") { + when ($CLANG == "yes") { + CL_DEBUG_INFO_DISABLE_CACHE__NO_UID__=-fdebug-prefix-map=${ARCADIA_BUILD_ROOT}=/-B -Xclang -fdebug-compilation-dir -Xclang /tmp + } + otherwise { + CL_DEBUG_INFO_DISABLE_CACHE__NO_UID__=-fdebug-prefix-map=${ARCADIA_BUILD_ROOT}=/-B + } + YASM_DEBUG_INFO_DISABLE_CACHE__NO_UID__=--replace=${ARCADIA_BUILD_ROOT}=/-B +} + +when ($FORCE_CONSISTENT_BUILD == "yes") { + CL_MACRO_INFO=-Wno-builtin-macro-redefined -D__DATE__=\""Sep 31 2019\"" -D__TIME__=\"00:00:00\" -fmacro-prefix-map=${ARCADIA_BUILD_ROOT}/= -fmacro-prefix-map=${ARCADIA_ROOT}/= -fmacro-prefix-map=$(TOOL_ROOT)/= +} +elsewhen ($CONSISTENT_BUILD == "yes") { + CL_MACRO_INFO_DISABLE_CACHE__NO_UID__=-Wno-builtin-macro-redefined -D__DATE__=\""Sep 31 2019\"" -D__TIME__=\"00:00:00\" -fmacro-prefix-map=${ARCADIA_BUILD_ROOT}/= -fmacro-prefix-map=${ARCADIA_ROOT}/= -fmacro-prefix-map=$(TOOL_ROOT)/= +} + +_CFLAGS_ARCH_I386= +when ($ARCH_I386 == "yes" && $ARCH_I686 != "yes") { + _CFLAGS_ARCH_I386=-march=pentiumpro -mtune=pentiumpro +} + +CFLAGS+=$_CFLAGS_ARCH_I386 + +BC_CFLAGS+=$CFLAGS +BC_CXXFLAGS+=$CXXFLAGS +C_DEFINES+=-D__LONG_LONG_SUPPORTED + +OBJ_CROSS_SUF=$OBJ_SUF$_CROSS_SUFFIX +OBJECT_SUF=$OBJ_SUF$_CROSS_SUFFIX.o +GCC_COMPILE_FLAGS=$EXTRA_C_FLAGS -c -o $_COMPILE_OUTPUTS ${pre=-I:_C__INCLUDE} +EXTRA_COVERAGE_OUTPUT=${output;noauto;hide;suf=${OBJECT_SUF}.gcno:SRC} +CLANG_TIDY_OUTPUT_FILE=${output;noauto;suf=${OBJECT_SUF}.tidyjson:SRC} +YNDEXER_OUTPUT_FILE=${output;noauto;suf=${OBJECT_SUF}.ydx.pb2:SRC} + +when ($DUMP_COMPILER_DEPS == "yes") { + DUMP_DEPS=-MD ${output;hide;noauto;suf=${OBJ_SUF}.o.d:SRC} +} +elsewhen ($DUMP_COMPILER_DEPS_FAST == "yes") { + DUMP_DEPS=-E -M -MF ${output;noauto;suf=${OBJ_SUF}.o.d:SRC} +} + +_COMPILER_TIME_TRACE_GRANULARITY=500 +when ($TIME_TRACE_GRANULARITY && $TIME_TRACE_GRANULARITY != "") { + _COMPILER_TIME_TRACE_GRANULARITY=$TIME_TRACE_GRANULARITY +} + +_COMPILER_TIME_TRACE_FLAGS= +_COMPILER_TIME_TRACE_POSTPROCESS= +when (($TIME_TRACE == "yes" || $COMPILER_TIME_TRACE == "yes") && $CLANG == "yes" && $_TC_VERSION_AT_LEAST_9 == "yes") { + _COMPILER_TIME_TRACE_FLAGS=-ftime-trace -ftime-trace-granularity=$_COMPILER_TIME_TRACE_GRANULARITY + _COMPILER_TIME_TRACE_POSTPROCESS=$YMAKE_PYTHON ${input:"build/scripts/find_time_trace.py"} $_COMPILE_OUTPUTS $_COMPILE_TIME_TRACE_OUTPUTS +} + +_C_CPP_KV_STYLE=${requirements;hide:CC_REQUIREMENTS} ${hide;kv:"p CC"} ${hide;kv:"pc green"} +_CPP_ARGS=\ +$CLANG_TIDY_ARGS \ +$YNDEXER_ARGS \ +$CXX_COMPILER \ +$C_FLAGS_PLATFORM \ +$GCC_COMPILE_FLAGS \ +$CXXFLAGS \ +$CL_MACRO_INFO \ +$CL_MACRO_INFO_DISABLE_CACHE__NO_UID__ \ +$_COMPILER_TIME_TRACE_FLAGS \ +$EXTRA_OUTPUT \ +$SRCFLAGS \ +$_LANG_CFLAGS_VALUE \ +${input:SRC} \ +$TOOLCHAIN_ENV \ +$YNDEXER_OUTPUT \ +&& $_COMPILER_TIME_TRACE_POSTPROCESS \ +$_C_CPP_KV_STYLE + +_C_ARGS=\ +$CLANG_TIDY_ARGS \ +$YNDEXER_ARGS \ +$C_COMPILER \ +$C_FLAGS_PLATFORM \ +$GCC_COMPILE_FLAGS \ +$CFLAGS \ +$CL_MACRO_INFO \ +$CL_MACRO_INFO_DISABLE_CACHE__NO_UID__ \ +$_COMPILER_TIME_TRACE_FLAGS \ +$CONLYFLAGS \ +$EXTRA_OUTPUT \ +$SRCFLAGS \ +${input:SRC} \ +$TOOLCHAIN_ENV \ +$YNDEXER_OUTPUT \ +$_C_CPP_KV_STYLE + +### _SRC_C_NODEPS_CMD is obtained from _C_ARGS by filtering the following elements: +### ${input:SRC} +### $CL_MACRO_INFO +### $CL_MACRO_INFO_DISABLE_CACHE__NO_UID__ +### $CLANG_TIDY_ARGS +### $EXTRA_OUTPUT +### $EXTRA_COVERAGE_OUTPUT +### $SRCFLAGS +### $YNDEXER_ARGS +### $YNDEXER_OUTPUT +### +### $GCC_COMPILE_FLAGS is substituted for $EXTRA_C_FLAGS -c -o ${OUTFILE} ${SRC} ${pre=-I:INC} +_SRC_C_NODEPS_CMD=\ +$C_COMPILER \ +$C_FLAGS_PLATFORM \ +$EXTRA_C_FLAGS -c -o ${OUTFILE} ${SRC} ${pre=-I:INC} \ +$CFLAGS \ +$CONLYFLAGS \ +$TOOLCHAIN_ENV \ +$_C_CPP_KV_STYLE + +_SRC_CPP_CMD=$_CPP_ARGS +_SRC_C_CMD=$_C_ARGS +_SRC_M_CMD=$SRC_c($SRC $SRCFLAGS) +_SRC_MASM_CMD=$_EMPTY_CMD + +# fuzzing configuration +when ($CLANG == "yes") { + when ($_TC_VERSION_AT_LEAST_12 == "yes") { + LIBFUZZER_PATH=contrib/libs/libfuzzer12 + } +} diff --git a/build/conf/compilers/msvc_compiler.conf b/build/conf/compilers/msvc_compiler.conf new file mode 100644 index 0000000000..6667f35c5c --- /dev/null +++ b/build/conf/compilers/msvc_compiler.conf @@ -0,0 +1,294 @@ +_MSVC_MACRO=_WIN32_WINNT +_MSVC_WINDOWS7=0x0601 +_MSVC_WINDOWS8=0x0602 + +_MSVC_WARNS_ENABLED= +# 'expression' : signed/unsigned mismatch +_MSVC_WARNS_ENABLED+=/w14018 +# 'class' : class has virtual functions, but destructor is not virtual +_MSVC_WARNS_ENABLED+=/w14265 +# 'operator' : expression is always false +_MSVC_WARNS_ENABLED+=/w14296 +# missing type specifier - int assumed +_MSVC_WARNS_ENABLED+=/w14431 + +_MSVC_WARNS_AS_ERRORS= +# 'function' undefined; assuming extern returning int +_MSVC_WARNS_AS_ERRORS+=/we4013 + +_MSVC_WARNS_DISABLED= +# conditional expression is constant +_MSVC_WARNS_DISABLED+=/wd4127 +# nonstandard extension used : zero-sized array in struct/union +_MSVC_WARNS_DISABLED+=/wd4200 +# nonstandard extension used : nameless struct/union +_MSVC_WARNS_DISABLED+=/wd4201 +# elements of array will be default initialized +_MSVC_WARNS_DISABLED+=/wd4351 +# 'this' : used in base member initializer list +_MSVC_WARNS_DISABLED+=/wd4355 +# decorated name length exceeded, name was truncated +_MSVC_WARNS_DISABLED+=/wd4503 +# default constructor could not be generated +_MSVC_WARNS_DISABLED+=/wd4510 +# copy constructor could not be generated +_MSVC_WARNS_DISABLED+=/wd4511 +# assignment operator could not be generated +_MSVC_WARNS_DISABLED+=/wd4512 +# check operator precedence for possible error; use parentheses to clarify precedence +_MSVC_WARNS_DISABLED+=/wd4554 +# 'object' can never be instantiated - user defined constructor required +_MSVC_WARNS_DISABLED+=/wd4610 +# assignment within conditional expression +_MSVC_WARNS_DISABLED+=/wd4706 +# forcing value to bool 'true' or 'false' (performance warning) +_MSVC_WARNS_DISABLED+=/wd4800 +# The POSIX name for this item is deprecated +_MSVC_WARNS_DISABLED+=/wd4996 +# function marked as __forceinline not inlined +_MSVC_WARNS_DISABLED+=/wd4714 +# 'TAtomic' : top-level volatile in cast is ignored +_MSVC_WARNS_DISABLED+=/wd4197 +# 'initializing' : conversion from 'int' to 'ui32', signed/unsigned mismatch +_MSVC_WARNS_DISABLED+=/wd4245 +# 'ystd::function<void (uint8_t *)>': structure was padded due to alignment specifier +_MSVC_WARNS_DISABLED+=/wd4324 +# 'register' is no longer a supported storage class +_MSVC_WARNS_DISABLED+=/wd5033 + +_C_WARNINGS_CLANG_CL= +_CXX_WARNINGS_CLANG_CL= +_CXX_WARNINGS_CLANG_CL_2019= +_CXX_WARNINGS_CLANG_CL_2019_IDE_MSVS= +when ($CLANG_CL == "yes") { + _C_WARNINGS_CLANG_CL=\ +-Wno-absolute-value \ +-Wno-bitwise-op-parentheses \ +-Wno-dll-attribute-on-redeclaration \ +-Wno-extern-initializer \ +-Wno-format \ +-Wno-ignored-pragma-optimize \ +-Wno-inconsistent-dllimport \ +-Wno-int-conversion \ +-Wno-int-to-void-pointer-cast \ +-Wno-invalid-noreturn \ +-Wno-logical-op-parentheses \ +-Wno-macro-redefined \ +-Wno-parentheses \ +-Wno-pragma-pack \ +-Wno-tautological-constant-out-of-range-compare \ +-Wno-unknown-argument \ +-Wno-unknown-warning-option + + _CXX_WARNINGS_CLANG_CL=\ +-Woverloaded-virtual \ +-Wno-attributes + # IGNIETFERRO-722 needed for contrib + _CXX_WARNINGS_CLANG_CL+=-Wno-register + + _CXX_WARNINGS_CLANG_CL+=\ +-Wimport-preprocessor-directive-pedantic \ +-Wno-undefined-var-template + + when ($_TC_VERSION_AT_LEAST_2019 == "yes") { + _CXX_WARNINGS_CLANG_CL_2019=\ +-Wno-deprecated-volatile \ +-Wno-deprecated-anon-enum-enum-conversion \ +-Wno-defaulted-function-deleted \ +-Wno-deprecated-enum-enum-conversion \ +-Wno-ambiguous-reversed-operator \ +-Wno-deprecated-enum-float-conversion \ +-Wno-pointer-to-int-cast + } + + when ($IDE_MSVS == "yes") { + _CXX_WARNINGS_CLANG_CL_2019_IDE_MSVS=-Wno-unused-command-line-argument + } +} + +_C_WARNINGS =$_MSVC_WARNS_AS_ERRORS +_C_WARNINGS+=$_MSVC_WARNS_ENABLED +_C_WARNINGS+=$_MSVC_WARNS_DISABLED +_C_WARNINGS+=$_C_WARNINGS_CLANG_CL + +_CXX_WARNINGS = +_CXX_WARNINGS+=$_CXX_WARNINGS_CLANG_CL +_CXX_WARNINGS+=$_CXX_WARNINGS_CLANG_CL_2019 +_CXX_WARNINGS+=$_CXX_WARNINGS_CLANG_CL_2019_IDE_MSVS + +_WINAPI_UNICODE=no + +_DEFINES_ARCH= +when ($ARCH_X86_64 == "yes") { + _DEFINES_ARCH=/D_WIN64 /DWIN64 +} +elsewhen ($ARCH_ARMV7 == "yes") { + _DEFINES_ARCH=/D_ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE /D__arm__ +} + +_DEFINES_WIN32_WINNT=/D$_MSVC_MACRO=$_MSVC_WINDOWS7 + +when ($_WINAPI_UNICODE == "yes") { + _DEFINES_UNICODE=/DUNICODE /D_UNICODE +} +otherwise { + _DEFINES_UNICODE=/D_MBCS +} + +_C_DEFINES=\ +/DARCADIA_ROOT=${ARCADIA_ROOT} \ +/DARCADIA_BUILD_ROOT=${ARCADIA_BUILD_ROOT} \ +/DFAKEID=$CPP_FAKEID \ +/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 \ +/DNOMINMAX \ +/DWIN32_LEAN_AND_MEAN + +_C_DEFINES+=$_DEFINES_ARCH +_C_DEFINES+=$_DEFINES_WIN32_WINNT +_C_DEFINES+=$_DEFINES_UNICODE + +C_DEFINES+=$_C_DEFINES + +_MSVC_FLAGS_CLANG= +_MSVC_FLAGS_CLANG_NO_WARNINGS= +_MSVC_FLAGS_CLANG_ARCH= +_MSVC_FLAGS_CLANG_EQ_2019= +when ($CLANG_CL == "yes") { + # -fcase-insensitive-paths + # Allow <windows.h> to be included via <Windows.h> in case-sensitive file-systems. + # + # -fno-common + # Enable standard-conforming behavior and generate duplicate symbol error in case of duplicated global constants. + # See: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85678#c0 + _MSVC_FLAGS_CLANG=-fcase-insensitive-paths -fno-common + when ($ARCH_X86_64 == "yes") { + _MSVC_FLAGS_CLANG_ARCH=-m64 + } + elsewhen ($ARCH_I386 == "yes") { + _MSVC_FLAGS_CLANG_ARCH=-m32 + } + otherwise { + _MSVC_FLAGS_CLANG_ARCH= + } + + # Some warnings are getting triggered even when NO_COMPILER_WARNINGS is enabled + _MSVC_FLAGS_CLANG_NO_WARNINGS=-Wno-c++11-narrowing -Wno-register + + when ($_TC_VERSION_EXACTLY_2019 == "yes") { + # heretic: на момент коммита в нашей конфигурации указано, что тулчейн clang11-windows - аналог msvc 2019 + # https://a.yandex-team.ru/arc/trunk/arcadia/build/ya.conf.json?rev=r7910792#L2185 + # сам clang11 по дефолту представляется msvc2017 (#define _MSC_VER 1911 + # https://a.yandex-team.ru/arc/trunk/arcadia/contrib/libs/clang11/lib/Driver/ToolChains/MSVC.cpp?rev=r7913127#L1352 + # вручную заставляем его представляться msvc2019 (#define _MSC_VER 1921) + # значение версии взято вот отсюда: + # https://a.yandex-team.ru/arc/trunk/arcadia/contrib/libs/llvm11/include/llvm/Support/Compiler.h?blame=true&rev=r7913127#L89 + _MSVC_FLAGS_CLANG_EQ_2019=-fms-compatibility-version=19.21 + } +} + +_MSVC_FLAGS=/nologo /Zm500 /GR /bigobj /FC /EHs /errorReport:prompt $MSVC_INLINE_FLAG /utf-8 +# enable standard conforming mode +_MSVC_FLAGS+=/permissive- +_MSVC_FLAGS+=$_MSVC_FLAGS_ARCH_OPT +_MSVC_FLAGS+=$_MSVC_FLAGS_CLANG +_MSVC_FLAGS+=$_MSVC_FLAGS_CLANG_ARCH +_MSVC_FLAGS+=$_MSVC_FLAGS_CLANG_NO_WARNINGS +_MSVC_FLAGS+=$_MSVC_FLAGS_CLANG_EQ_2019 +_MSVC_FLAGS+=$_MSVC_FLAGS_INCLUDE + +MSVC_INLINE_OPTIMIZED=yes +when ($MSVC_INLINE_OPTIMIZED == "yes") { + MSVC_INLINE_FLAG=/Zc:inline +} +when ($MSVC_INLINE_OPTIMIZED == "no") { + MSVC_INLINE_FLAG=/Zc:inline- +} + +# Use builtin offsetof implementation +# instead of a crutcy macro defined in ucrt/stddef.h. +# The latter can not be used in constexpr statements. +_CXX_DEFINES=/D_CRT_USE_BUILTIN_OFFSETOF + +_FLAGS_C_ONLY= + +# Provide proper __cplusplus value +# https://devblogs.microsoft.com/cppblog/msvc-now-correctly-reports-__cplusplus/ +_CXX_FLAGS=/Zc:__cplusplus + +_FLAGS_MSVS_ONLY= +DEBUG_INFO_FLAGS=/Z7 +when ($IDE_MSVS == "yes") { + when ($CLANG_CL != "yes") { + _FLAGS_MSVS_ONLY=/FD /MP + } + DEBUG_INFO_FLAGS=/Zi /FS +} + +C_WARNING_OPTS=$_C_WARNINGS +CXX_WARNING_OPTS=$_CXX_WARNINGS + +# https://msdn.microsoft.com/en-us/library/abx4dbyh.aspx +when ($DLL_RUNTIME == "yes") { + _FLAGS_DEBUG_RUNTIME=/MDd + _FLAGS_RELEASE_RUNTIME=/MD +} +otherwise { + _FLAGS_DEBUG_RUNTIME=/MTd + _FLAGS_RELEASE_RUNTIME=/MT +} +CFLAGS_DEBUG=/Ob0 /Od /D_DEBUG $_FLAGS_DEBUG_RUNTIME +CFLAGS_RELEASE=/Ox /Ob2 /Oi /DNDEBUG $_FLAGS_RELEASE_RUNTIME + +MASMFLAGS= +_MASM_IO=/nologo /c /Fo${output;suf=${OBJECT_SUF}:SRC} ${input;msvs_source:SRC} +when ($ARCH_ARMV7) { + _MASM_IO=-o ${output;suf=${OBJECT_SUF}:SRC} ${input;msvs_source:SRC} +} + +OBJ_CROSS_SUF=$OBJ_SUF +OBJECT_SUF=$OBJ_SUF.obj + +CFLAGS+=$_MSVC_FLAGS $_FLAGS_MSVS_ONLY $CFLAGS_PER_TYPE $DEBUG_INFO_FLAGS $C_WARNING_OPTS $C_DEFINES $USER_CFLAGS $USER_CFLAGS_GLOBAL +CXXFLAGS+=$CFLAGS $_STD_CXX $_CXX_FLAGS $_CXX_DEFINES $CXX_WARNING_OPTS $USER_CXXFLAGS $USER_CXXFLAGS_GLOBAL +CONLYFLAGS+=$_FLAGS_C_ONLY $USER_CONLYFLAGS $USER_CONLYFLAGS_GLOBAL + +BC_CFLAGS+=$CFLAGS +BC_CXXFLAGS+=$BC_CFLAGS $CXXFLAGS + +CFLAGS+=$_CFLAGS_UCRT_VC_INCLUDES + +when ($NO_WSHADOW == "yes") { + C_WARNING_OPTS+=/wd4456 /wd4457 +} +when ($NO_COMPILER_WARNINGS == "yes") { + C_WARNING_OPTS=/w + CXX_WARNING_OPTS= +} +when ($NO_OPTIMIZE == "yes") { + OPTIMIZE=/Od +} + +SFDL_FLAG=/E /C /P /TP /Fi$SFDL_TMP_OUT +WERROR_FLAG=/WX + +CL_WRAPPER=${YMAKE_PYTHON} ${input:"build/scripts/fix_msvc_output.py"} cl +ML_WRAPPER=${YMAKE_PYTHON} ${input:"build/scripts/fix_msvc_output.py"} ml +when ($_UNDER_WINE == "yes") { + CL_WRAPPER= + ML_WRAPPER= +} + +_SRC_C_NODEPS_CMD=${TOOLCHAIN_ENV} ${CL_WRAPPER} ${C_COMPILER} /c /Fo${OUTFILE} ${SRC} ${EXTRA_C_FLAGS} ${pre=/I :INC} ${CFLAGS} ${requirements;hide:CC_REQUIREMENTS} ${hide;kv:"soe"} ${hide;kv:"p CC"} ${hide;kv:"pc yellow"} +_SRC_CPP_CMD=${TOOLCHAIN_ENV} ${CL_WRAPPER} ${CXX_COMPILER} /c /Fo$_COMPILE_OUTPUTS ${input;msvs_source:SRC} ${EXTRA_C_FLAGS} ${pre=/I :_C__INCLUDE} ${CXXFLAGS} ${SRCFLAGS} ${_LANG_CFLAGS_VALUE} ${requirements;hide:CC_REQUIREMENTS} ${hide;kv:"soe"} ${hide;kv:"p CC"} ${hide;kv:"pc yellow"} +_SRC_C_CMD=${TOOLCHAIN_ENV} ${CL_WRAPPER} ${C_COMPILER} /c /Fo$_COMPILE_OUTPUTS ${input;msvs_source:SRC} ${EXTRA_C_FLAGS} ${pre=/I :_C__INCLUDE} ${CFLAGS} ${CONLYFLAGS} ${SRCFLAGS} ${requirements;hide:CC_REQUIREMENTS} ${hide;kv:"soe"} ${hide;kv:"p CC"} ${hide;kv:"pc yellow"} +_SRC_M_CMD=$_EMPTY_CMD +_SRC_MASM_CMD=${cwd:ARCADIA_BUILD_ROOT} ${TOOLCHAIN_ENV} ${ML_WRAPPER} ${MASM_COMPILER} ${MASMFLAGS} ${SRCFLAGS} $_MASM_IO ${requirements;hide:CC_REQUIREMENTS} ${kv;hide:"p AS"} ${kv;hide:"pc yellow"} diff --git a/build/conf/java.ymake.conf b/build/conf/java.ymake.conf new file mode 100644 index 0000000000..ed85153c78 --- /dev/null +++ b/build/conf/java.ymake.conf @@ -0,0 +1,179 @@ +YMAKE_JAVA_MODULES=yes +JBUILD_JAVA_MODULES=no + +macro _INPUT_WITH_FLAG(Flag, IN[]) { + .CMD=$_INPUT_WITH_FLAG_IMPL(${pre=$Flag :IN} IN $IN) +} + +macro _INPUT_WITH_FLAG_IMPL(IN{input}[], Args...) { + .CMD=$Args ${input;hide:IN} +} + +macro ACCELEO(XSD{input}[], MTL{input}[], MTL_ROOT="${MODDIR}", LANG{input}[], OUT{output}[], OUT_NOAUTO{output}[], OUTPUT_INCLUDES[], DEBUG?"stdout2stderr":"stderr2stdout") { + .PEERDIR=build/platform/java/jdk $JDK_RESOURCE_PEERDIR + .CMD=${cwd:ARCADIA_BUILD_ROOT} $YMAKE_PYTHON ${input;pre=build/scripts/:DEBUG.py} $JDK_RESOURCE/bin/java -Dfile.encoding=utf8 -classpath ${RUN_JAR_PROG_CP_PRE}${tool:"tools/acceleo"}${RUN_JAR_PROG_CP_SUF} ru.yandex.se.logsng.tool.Cli $_INPUT_WITH_FLAG(--xsd IN $XSD) $_INPUT_WITH_FLAG(--mtl IN $MTL) $_INPUT_WITH_FLAG(--lang IN $LANG) --output-dir $BINDIR --build-root ${ARCADIA_BUILD_ROOT} --source-root ${ARCADIA_ROOT} --mtl-root $MTL_ROOT ${output_include;hide:OUTPUT_INCLUDES} ${output;hide:OUT} ${output;noauto;hide:OUT_NOAUTO} ${kv;hide:"p JV"} ${kv;hide:"pc light-blue"} ${kv;hide:"show_out"} +} + +### @usage: JAVA_LIBRARY() +### +### The module describing java library build. +### +### Documentation: https://wiki.yandex-team.ru/yatool/java/ +module JAVA_LIBRARY: JAR_LIBRARY { + .ALIASES=REQUIREMENTS=JAVA_REQUIREMENTS +} + +### @usage: JAVA_PROGRAM() +### +### The module describing java programs build. +### Output artifacts: .jar and directory with all the jar to the classpath of the formation. +### +### Documentation: https://wiki.yandex-team.ru/yatool/java/ +multimodule JAVA_PROGRAM { + module JAR_RUNABLE: _JAR_RUNABLE { + .ALLOWED=JAVA_RUNTIME_PEERDIR JAVA_RUNTIME_EXCLUDE + # TODO(svidyuk) JAVA_DEPENDENCIES_CONFIGURATION must not be ignored here but there are diagnostics issues in case of ECLUDE in the middle: + # * A -> B -> C -> lib-v1.4 + # | |-> DM(lib-v1.1) + # | |-> EXCLUDE(lib-v1.4) + # | |-> FORBID_CONFLICT_DM_RECENT = OK + # |-> DM(lib-v1.1) + # |-> FORBID_CONFLICT_DM_RECENT = FAIL (because downgrade from v1.4 to v1.1 is detected before understanding that v1.4 was excuded on the examined path) + .IGNORED=RUN_JAVA_PROGRAM JAVA_DEPENDENCIES_CONFIGURATION + .ALIASES=JAVA_RUNTIME_PEERDIR=PEERDIR JAVA_RUNTIME_EXCLUDE=EXCLUDE + .PEERDIRSELF=JAR_COMPILATION + + SET(MODULE_TYPE JAVA_PROGRAM) + } + module JAR_COMPILATION: JAR_LIBRARY { + .IGNORED=JAVA_RUNTIME_PEERDIR JAVA_RUNTIME_EXCLUDE + .ALIASES=JAVA_RUNTIME_PEERDIR=_NOOP_MACRO JAVA_RUNTIME_EXCLUDE=_NOOP_MACRO REQUIREMENTS=JAVA_REQUIREMENTS + .FINAL_TARGET=no + SET(MODULE_TYPE JAVA_PROGRAM) + } +} + +multimodule JUNIT5 { + module JAR_TESTABLE: _JAR_TEST { + .ALLOWED=YT_SPEC + # TODO(svidyuk) JAVA_DEPENDENCIES_CONFIGURATION must not be ignored here but there are diagnostics issues in case of ECLUDE in the middle: + # * A -> B -> C -> lib-v1.4 + # | |-> DM(lib-v1.1) + # | |-> EXCLUDE(lib-v1.4) + # | |-> FORBID_CONFLICT_DM_RECENT = OK + # |-> DM(lib-v1.1) + # |-> FORBID_CONFLICT_DM_RECENT = FAIL (because downgrade from v1.4 to v1.1 is detected before understanding that v1.4 was excuded on the examined path) + .IGNORED=JAVA_SRCS RUN_JAVA_PROGRAM JAVA_DEPENDENCIES_CONFIGURATION + .ALIASES=JAVA_TEST_PEERDIR=PEERDIR JAVA_TEST_EXCLUDE=EXCLUDE + .PEERDIRSELF=JAR_COMPILATION + + SET(MODULE_TYPE JUNIT5) + } + module JAR_COMPILATION: JAR_LIBRARY { + .ALLOWED=YT_SPEC + .ALIASES=JAVA_TEST_PEERDIR=_NOOP_MACRO JAVA_TEST_EXCLUDE=_NOOP_MACRO + .FINAL_TARGET=no + + PEERDIR(devtools/junit5-runner build/platform/java/jacoco-agent) + SET(MODULE_TYPE JUNIT5) + } +} + +multimodule JTEST { + module JAR_TESTABLE: _JAR_TEST { + .ALLOWED=YT_SPEC + # TODO(svidyuk) JAVA_DEPENDENCIES_CONFIGURATION must not be ignored here but there are diagnostics issues in case of ECLUDE in the middle: + # * A -> B -> C -> lib-v1.4 + # | |-> DM(lib-v1.1) + # | |-> EXCLUDE(lib-v1.4) + # | |-> FORBID_CONFLICT_DM_RECENT = OK + # |-> DM(lib-v1.1) + # |-> FORBID_CONFLICT_DM_RECENT = FAIL (because downgrade from v1.4 to v1.1 is detected before understanding that v1.4 was excuded on the examined path) + .IGNORED=JAVA_SRCS RUN_JAVA_PROGRAM JAVA_DEPENDENCIES_CONFIGURATION + .ALIASES=JAVA_TEST_PEERDIR=PEERDIR JAVA_TEST_EXCLUDE=EXCLUDE + .PEERDIRSELF=JAR_COMPILATION + + SET(MODULE_TYPE JTEST) + PEERDIR(devtools/junit-runner) + DEPENDENCY_MANAGEMENT(contrib/java/com/google/code/gson/gson/2.8.6 contrib/java/com/beust/jcommander/1.72 contrib/java/junit/junit/4.12) + } + module JAR_COMPILATION: JAR_LIBRARY { + .ALLOWED=YT_SPEC + .ALIASES=JAVA_TEST_PEERDIR=_NOOP_MACRO JAVA_TEST_EXCLUDE=_NOOP_MACRO + .FINAL_TARGET=no + + SET(MODULE_TYPE JTEST) + DEPENDS(contrib/java/org/sonarsource/scanner/cli/sonar-scanner-cli/2.8) + PEERDIR(build/platform/java/jacoco-agent) + } +} + +multimodule JTEST_FOR { + module JAR_TESTABLE: _JAR_TEST { + .ALLOWED=YT_SPEC + # TODO(svidyuk) JAVA_DEPENDENCIES_CONFIGURATION must not be ignored here but there are diagnostics issues in case of ECLUDE in the middle: + # * A -> B -> C -> lib-v1.4 + # | |-> DM(lib-v1.1) + # | |-> EXCLUDE(lib-v1.4) + # | |-> FORBID_CONFLICT_DM_RECENT = OK + # |-> DM(lib-v1.1) + # |-> FORBID_CONFLICT_DM_RECENT = FAIL (because downgrade from v1.4 to v1.1 is detected before understanding that v1.4 was excuded on the examined path) + .IGNORED=JAVA_SRCS RUN_JAVA_PROGRAM JAVA_DEPENDENCIES_CONFIGURATION + .ALIASES=JAVA_TEST_PEERDIR=PEERDIR JAVA_TEST_EXCLUDE=EXCLUDE + .PEERDIRSELF=JAR_COMPILATION + + SET(MODULE_TYPE JTEST_FOR) + PEERDIR(${UNITTEST_DIR} devtools/junit-runner) + DEPENDENCY_MANAGEMENT(contrib/java/com/google/code/gson/gson/2.8.6 contrib/java/com/beust/jcommander/1.72 contrib/java/junit/junit/4.12) + } + module JAR_COMPILATION: JAR_LIBRARY { + .ALLOWED=YT_SPEC + .ALIASES=JAVA_TEST_PEERDIR=_NOOP_MACRO JAVA_TEST_EXCLUDE=_NOOP_MACRO + .FINAL_TARGET=no + + SET(MODULE_TYPE JTEST_FOR) + DEPENDS(contrib/java/org/sonarsource/scanner/cli/sonar-scanner-cli/2.8) + PEERDIR(devtools/junit-runner build/platform/java/jacoco-agent ${UNITTEST_DIR}) + } +} + +multimodule JAVA_CONTRIB_PROGRAM { + module JAR_RUNABLE: _JAR_RUNABLE { + .IGNORED=JAVA_SRCS RUN_JAR_PROGRAM RUN_JAVA_PROGRAM JAR_RESOURCE SRC_RESOURCE LOCAL_JAR + .PEERDIRSELF=JAR_COMPILATION + + SET(MODULE_TYPE JAVA_PROGRAM) + ENABLE(DISABLE_SCRIPTGEN) + } + module JAR_COMPILATION: JAVA_CONTRIB { + .ALIASES=JAVA_RUNTIME_PEERDIR=_NOOP_MACRO JAVA_RUNTIME_EXCLUDE=_NOOP_MACRO + .FINAL_TARGET=no + } +} + +module _DLL_COMPATIBLE_JAVA_LIBRARY: EXTERNAL_JAVA_LIBRARY { + SET(DONT_RESOLVE_INCLUDES yes) +} + +### @usage: DLL_JAVA() +### +### DLL built using swig for Java. Produces dynamic library and a .jar. +### Dynamic library is treated the same as in the case of PEERDIR from Java to DLL. +### .jar goes on the classpath. +### +### Documentation: https://wiki.yandex-team.ru/yatool/java/#integracijascpp/pythonsborkojj +multimodule DLL_JAVA { + module JNI_DLL: DLL { + .ALIASES=SRCS=_SWIG_LANG_FILTERED_SRCS + SET(SWIG_LANG jni_cpp) + .FINAL_TARGET=no + } + module JAR_COMPILATION: _DLL_COMPATIBLE_JAVA_LIBRARY { + .ALIASES=SRCS=_SWIG_LANG_FILTERED_SRCS PEERDIR=_NOOP_MACRO + .PEERDIRSELF=JNI_DLL + SET(SWIG_LANG jni_java) + PEERDIR+=build/platform/java/jdk + PEERDIR+=$JDK_RESOURCE_PEERDIR + .FINAL_TARGET=yes + } +} diff --git a/build/conf/jbuild.ymake.conf b/build/conf/jbuild.ymake.conf new file mode 100644 index 0000000000..945a7cc979 --- /dev/null +++ b/build/conf/jbuild.ymake.conf @@ -0,0 +1,122 @@ +YMAKE_JAVA_MODULES=no +JBUILD_JAVA_MODULES=yes + +EXTERNAL_JAR_VALUE= +### @usage: EXTERNAL_JAR(library.jar) +### +### Provide an external name for built JAVA_LIBRARY() or JAVA_PROGRAM() +### +### Documentation: https://wiki.yandex-team.ru/yatool/java/#ispolzovanievneshnixmavenbibliotek +macro EXTERNAL_JAR(Args...) { + SET_APPEND(EXTERNAL_JAR_VALUE $ARGS_DELIM $Args) +} + +### @usage: JAVA_LIBRARY() +### +### The module describing java library build. +### +### Documentation: https://wiki.yandex-team.ru/yatool/java/ +module JAVA_LIBRARY: _JAVA_PLACEHOLDER { + SET(MODULE_TYPE JAVA_LIBRARY) +} + +### @usage: JAVA_PROGRAM() +### +### The module describing java programs build. +### Output artifacts: .jar and directory with all the jar to the classpath of the formation. +### +### Documentation: https://wiki.yandex-team.ru/yatool/java/ +module JAVA_PROGRAM: _JAVA_PLACEHOLDER { + .ALIASES=JAVA_RUNTIME_PEERDIR=PEERDIR JAVA_RUNTIME_EXCLUDE=EXCLUDE + SET(MODULE_TYPE JAVA_PROGRAM) +} + +### @usage: JUNIT5() +### +### Java tests module based on JUnit 5 framework. +### +### If requested, build system will scan the source code of the module for the presence of junit tests and run them. +### Output artifacts: a jar, a directory of exhaust tests(if required run the tests) - test logs, system logs testiranja, temporary files, tests, etc. +### +### Documentation: https://wiki.yandex-team.ru/yatool/test/#testynajava +module JUNIT5: _JAVA_PLACEHOLDER { + .ALIASES=JAVA_TEST_PEERDIR=PEERDIR JAVA_TEST_EXCLUDE=EXCLUDE + SET(MODULE_TYPE JUNIT5) + SET(TEST_RUNNER devtools/junit5-runner) + SET(TEST_CLASSPATH_VALUE ${MODDIR} ${TEST_RUNNER}) + # Used as place to add managed dependencies for test execution and take them into account + # during traverses properly. + _RUN_JAVA(TOOL ${TEST_RUNNER} OUT fake.out.java_test_cmd) + + PEERDIR(${TEST_RUNNER}) + PEERDIR(build/platform/java/jacoco-agent) + JAVA_TEST() +} + +### @usage: JTEST() +### +### Java tests module based on JUnit 4 framework. +### +### If requested, build system will scan the source code of the module for the presence of junit tests and run them. +### Output artifacts: a jar, a directory of exhaust tests(if required run the tests) - test logs, system logs testiranja, temporary files, tests, etc. +### +### Documentation: https://wiki.yandex-team.ru/yatool/test/#testynajava +module JTEST: _JAVA_PLACEHOLDER { + .ALLOWED=YT_SPEC + .ALIASES=JAVA_TEST_PEERDIR=PEERDIR JAVA_TEST_EXCLUDE=EXCLUDE + SET(MODULE_TYPE JTEST) + SET(TEST_RUNNER devtools/junit-runner) + SET(TEST_CLASSPATH_VALUE ${MODDIR} ${TEST_RUNNER}) + # Used as place to add managed dependencies for test execution and take them into account + # during traverses properly. + _RUN_JAVA(TOOL ${TEST_RUNNER} OUT fake.out.java_test_cmd) + + # TODO: if <needs_sonar> + DEPENDS(contrib/java/org/sonarsource/scanner/cli/sonar-scanner-cli/2.8) + DEPENDS(${TEST_RUNNER}) + _GHOST_PEERDIR(${TEST_RUNNER}) + PEERDIR(build/platform/java/jacoco-agent) + JAVA_TEST() + + SET_APPEND(_MAKEFILE_INCLUDE_LIKE_DEPS canondata/result.json) +} + +### @usage: JTEST_FOR(ModuleDir) +### +### Convinience java tests module based on JUnit 4 framework for specified library or program. +### +### In contrast to the JTEST, the build system will scan for the presence of the test sources of the module in ModuleDir . As ModuleDir should contain JAVA_PROGRAM or JAVA_LIBRARY . JTEST_FOR also can have its own source, in this case they will be compiled and added to the classpath of a test run. +### Output artifacts: a jar, a directory of exhaust tests(if requested tests are run). +### +### Documentation: https://wiki.yandex-team.ru/yatool/test/#testynajava +module JTEST_FOR: JTEST { + .ALIASES=JAVA_TEST_PEERDIR=PEERDIR JAVA_TEST_EXCLUDE=EXCLUDE + SET(MODULE_TYPE JTEST_FOR) + SET(TEST_CLASSPATH_VALUE ${MODDIR} ${TEST_RUNNER} ${UNITTEST_DIR}) + + PEERDIR($UNITTEST_DIR) + SET(REALPRJNAME jtest) + JAVA_TEST() +} + +module JAVA_CONTRIB_PROGRAM: JAVA_CONTRIB { + SET(MODULE_TYPE JAVA_PROGRAM) + ENABLE(DISABLE_SCRIPTGEN) +} + +### @usage: DLL_JAVA() +### +### DLL built using swig for Java. Produces dynamic library and a .jar. +### Dynamic library is treated the same as in the case of PEERDIR from Java to DLL. +### .jar goes on the classpath. +### +### Documentation: https://wiki.yandex-team.ru/yatool/java/#integracijascpp/pythonsborkojj +module DLL_JAVA: DLL { + .EXTS=.o .obj .jsrc .java .mf + .CMD=SWIG_DLL_JAR_CMD + PEERDIR(build/platform/java/jdk) + PEERDIR+=$JDK_RESOURCE_PEERDIR + + PROPAGATES_MANAGEABLE_PEERS=yes + SET(SWIG_LANG java) +} diff --git a/build/conf/license.conf b/build/conf/license.conf new file mode 100644 index 0000000000..0c43ed4c1d --- /dev/null +++ b/build/conf/license.conf @@ -0,0 +1,380 @@ +LICENSE_EXPRESSION_IMPLICIT_OR=yes +LICENSE_EXPRESSION_IMPLICIT_AND=yes +LICENSE_EXPRESSION= +LICENSE_NAMES= + +MODULE_LICENSES_RESTRICTIONS= +MODULE_LICENSES_RESTRICTION_EXCEPTIONS= +MODULE_LICENSES_RESTRICTION_TYPES= +DEFAULT_MODULE_LICENSE=YandexUncategorized +EXPLICIT_LICENSE_PREFIXES= + +# List of license properties which can be used to restrict transitive dependencies. There are three variables checked for each +# property: +# * LICENSES_<PROP_NAME>_STATIC: list of licenses which propagates this property when linking with code published by one of +# them statically. +# * LICENSES_<PROP_NAME>_DYNAMIC: list of licenses which propagates this property when linking with code published by one of +# them dyamically. +# * LICENSES_<PROP_NAME>: list of licenses which propagates this property regrdless of type of linking with code published by +# one of them. Putting some license into this list is equivalent to putting it into both +# LICENSES_<PROP_NAME>_STATIC and LICENSES_<PROP_NAME>_DYNAMIC lists. +LICENSE_PROPERTIES= \ + FORBIDDEN NDA REQUIRE_DISCLOSURE PERMISSIVE REQUIRE_CITATION SERVICE + +LICENSES_UNATTRIBUTED= \ + AFL-2.0 \ + AML \ + APSL-1.0 \ + ASM-BSD-3-Clause \ + Amazon-SL \ + Artistic-1.0-Perl \ + BCL \ + BSD-3-Clause-Open-MPI \ + BSD-4-Clause-Shortened \ + BSLA \ + Bison-Exception \ + BouncyCastle-MIT \ + Brian-Gladman-3-Clause \ + Bsd-New-Tcpdump \ + Bsd-Original-Uc-1986 \ + CC-BY-1.0 \ + CC-BY-2.0 \ + CC-BY-2.5 \ + CC-BY-3.0 \ + CC-BY-4.0 \ + CC-BY-NC-1.0 \ + CC-BY-NC-2.0 \ + CC-BY-NC-2.5 \ + CC-BY-NC-3.0 \ + CC-BY-NC-ND-1.0 \ + CC-BY-NC-ND-2.0 \ + CC-BY-NC-ND-2.5 \ + CC-BY-NC-ND-3.0 \ + CC-BY-NC-SA-1.0 \ + CC-BY-NC-SA-2.0 \ + CC-BY-NC-SA-2.5 \ + CC-BY-NC-SA-3.0 \ + CC-BY-ND-1.0 \ + CC-BY-ND-2.0 \ + CC-BY-ND-2.5 \ + CC-BY-ND-3.0 \ + CC-BY-SA-1.0 \ + CC-BY-SA-2.0 \ + CC-BY-SA-2.5 \ + CC-BY-SA-3.0 \ + CC-BY-SA-4.0 \ + CDDL \ + CECILL-B \ + Carnegie-Mellon \ + Carnegie-Mellon-Contributors \ + DOC \ + DSO-1.1 \ + EDL-1.0 \ + Elastic-License-2.0 \ + FSFUL \ + FSFULLR \ + Fftpack-2004 \ + GCC-exception-3.1 \ + GDAL \ + GFDL-1.1-or-later \ + GPL-2.0 WITH Classpath-exception-2.0 \ + GPL-2.0 WITH FOSS-exception \ + GPL-2.0-only WITH Mysql-Linking-Exception-2018 \ + GPL-2.0-only WITH Universal-FOSS-exception-1.0 \ + GPL-2.0-or-later WITH Avisynth-C-Interface-Exception \ + GPL-2.0-or-later WITH Bison-Exception-2.0 \ + GPL-2.0-or-later WITH Bison-exception-2.2 \ + GPL-2.0-or-later WITH C-Interface-Exception \ + GPL-2.0-or-later WITH Libtool-exception \ + GPL-2.0-or-later WITH mif-exception \ + Go-License \ + Google-Patent-License-Webm \ + Google-Patent-License-Webrtc \ + HPND \ + HPND-sell-variant \ + HPND-sell-variant \ + HSQLDB-BSD-3-Clause \ + Hdf5 \ + IPL-1.0 \ + Ibm-Dhcp \ + Ietf-trust \ + ImageMagick \ + Info-Zip \ + Intel-Confidential \ + Intel-Material \ + JAMon-BSD-3-Clause \ + LGPL-3.0-or-later WITH ZeroMQ-Exception \ + LPL-1.02 \ + LicenseRef-scancode-bsd-new-nomod \ + LicenseRef-scancode-cc-by-2.0-uk \ + LicenseRef-scancode-cc-devnations-2.0 \ + LicenseRef-scancode-cc-sampling-1.0 \ + LicenseRef-scancode-free-unknown \ + LicenseRef-scancode-generic-cla \ + LicenseRef-scancode-other-copyleft \ + LicenseRef-scancode-other-permissive \ + LicenseRef-scancode-pcre \ + LicenseRef-scancode-proprietary-license \ + LicenseRef-scancode-unknown \ + LicenseRef-scancode-unknown-license-reference \ + LicenseRef-scancode-warranty-disclaimer \ + MirOS \ + Mit-Xfig \ + Mozilla-GC \ + Musl-Exception \ + NAIST-2003 \ + Nvidia-Gov \ + Oracle \ + Oracle-technology \ + PSF-3.7.2 \ + Qhull \ + Quicklz \ + Red-Hat-Attribution \ + Ruby \ + SSPL-1.0 \ + SZIP \ + Sendmail \ + Softsurfer \ + Stlport-4.5 \ + Sunpro \ + TCL \ + TU-Berlin-1.0 \ + Unicode-TOU \ + Universal-FOSS-exception-1.0 \ + Unknown \ + Unlicense \ + Vcalendar \ + Vim \ + X11-Adobe-Dec \ + X11-Hanson \ + X11-XConsortium-Veillard \ + Xfree86-1.0 \ + Xnet \ + jQuery-MIT + +LICENSES_PATCHES_FORBIDDEN= \ + Unicode + +LICENSES_FORBIDDEN= \ + AGPL-3.0-only \ + AGPL-3.0-or-later \ + Artistic-1.0 \ + ${LICENSES_UNATTRIBUTED} + +# Group for proprietary code licenses +LICENSES_NDA= \ + Intel-NDA \ + mimepp \ + OracleOebs \ + Sophos-SDK \ + YandexUncategorized \ + YandexNDA + +# These licenses allow use with opensource code only +LICENSES_REQUIRE_DISCLOSURE= \ + CDDL-1.0 \ + CDDL-1.1 \ + CECILL-2.0 \ + CPL-1.0 \ + EPL-1.0 \ + EPL-2.0 \ + GPL \ + GPL-1.0-only \ + GPL-1.0-or-later \ + GPL-1.0-or-later WITH Linux-syscall-note \ + GPL-1.1 \ + GPL-2.0 \ + GPL-2.0-only \ + GPL-2.0-only WITH GCC-exception-2.0 \ + GPL-2.0-only WITH Linux-syscall-note \ + GPL-2.0-or-later \ + GPL-2.0-or-later WITH GCC-exception-2.0 \ + GPL-2.0-or-later WITH Linux-syscall-note \ + GPL-3.0-only \ + GPL-3.0-or-later \ + GPL-3.0-or-later WITH Bison-exception-2.2 + +LICENSES_REQUIRE_DISCLOSURE_STATIC= \ + LGPL \ + LGPL-1.0-or-later \ + LGPL-2.0-only \ + LGPL-2.0-or-later \ + LGPL-2.0-or-later WITH Libtool-exception \ + LGPL-2.0-or-later WITH Linux-syscall-note \ + LGPL-2.1-only \ + LGPL-2.1-only WITH Linux-syscall-note \ + LGPL-2.1-or-later \ + LGPL-2.1-or-later WITH Linux-syscall-note \ + LGPL-3.0-only \ + LGPL-3.0-or-later + +# These licenses allows any kind of linkage with proprietary code +LICENSES_PERMISSIVE= \ + 0BSD \ + Apache-1.0 \ + Apache-1.1 \ + Apache-2.0 \ + Apache-2.0 WITH LLVM-exception \ + APSL-2.0 \ + Beerware \ + blessing \ + BSL-1.0 \ + BSD \ + BSD-1-Clause \ + BSD-2-Clause \ + BSD-2-Clause-Patent \ + BSD-2-Clause-Views \ + BSD-3-Clause \ + BSD-4-Clause \ + BSD-4-Clause-UC \ + BSD-derived \ + BSD-ORIGINAL-UC-1986 \ + BSD-Source-Code \ + Bsd-Simplified-Darwin \ + Bsd-Unchanged \ + Bsd-Unmodified \ + bzip2-1.0.6 \ + CC0-1.0 \ + CC-PDDC \ + Cmu-Computing-Services \ + CUP-Parser \ + curl \ + Custom-Punycode \ + Facebook-SDK \ + FDK \ + FSFAP \ + FTL \ + H2 \ + IBM-pibs \ + ICU \ + Ietf \ + IJG \ + Intel-Simplified \ + ISC \ + JSON \ + Khronos \ + Libpbm \ + LicenseRef-scancode-bitstream \ + LicenseRef-scancode-ams-fonts \ + Linux-OpenIB \ + Libpng \ + libpng-2.0 \ + libtiff \ + Martin-Birgmeier \ + MIT \ + MIT-0 \ + MIT-CMU \ + MIT-Modern-Variant \ + MIT-Nagy \ + MIT-open-group \ + Mit-Old-Style \ + Mit-Veillard-Variant \ + MPL-1.0 \ + MPL-1.1 \ + MPL-2.0 \ + Minpack \ + NCSA \ + NTP \ + Not-Applicable \ + Nvidia \ + OGC-1.0 \ + OLDAP-2.8 \ + OML \ + OpenSSL \ + PayPal-SDK \ + PCRE \ + PD \ + Public-Domain \ + Public-Domain-US-Govt \ + PHP-3.01 \ + PIL \ + Plexus \ + PostgreSQL \ + Protobuf-License \ + PSF \ + PSF-2.0 \ + Python-2.0 \ + Qhull \ + Repoze-public \ + RSA-MD \ + RSA-MD4 \ + RSA-1990 \ + Sleepycat \ + Snprintf \ + SGI-B-2.0 \ + SMLNJ \ + SSH-short \ + SSLeay \ + Unicode-DFS-2016 \ + Unicode-Icu-58 \ + Unicode-Mappings \ + Unlicense \ + Unrar \ + UPL-1.0 \ + Vertica \ + W3C \ + WTFPL \ + X11 \ + X11-Lucent \ + YandexOpen \ + Zlib \ + zlib-acknowledgement \ + ZPL-2.1 \ + ${LICENSES_PATCHES_FORBIDDEN} + +LICENSES_PERMISSIVE_DYNAMIC= \ + LGPL \ + LGPL-2.0-only \ + LGPL-2.0-or-later \ + LGPL-2.1-only \ + LGPL-2.1-or-later \ + LGPL-3.0-only \ + LGPL-3.0-or-later + +# https://st.yandex-team.ru/ARCADIAWGSUP-34 +CUSTOM_LICENSE_LIBSSH2_AGENT_WIN=Libssh2-Agent-Win + +# TODO: this list is almost empty. needed for DEVRULES-151 +LICENSES_REQUIRE_CITATION= \ + Apache-2.0 \ + Cmu-Computing-Services \ + OpenSSL \ + Spencer-94 \ + ${CUSTOM_LICENSE_LIBSSH2_AGENT_WIN} + +LICENSES_SERVICE= \ + Service-Dll-Harness \ + Service-Prebuilt-Tool \ + Service-Py23-Proxy + +macro _REQUIRE_EXPLICIT_LICENSE(Prefix...) { + SET(EXPLICIT_LICENSE_PREFIXES ${Prefix}) +} + +### @usage: LICENSE(licenses...) +### +### Specify the licenses of the module, separated by spaces. Specifying multiple licenses interpreted as permission to use this +### library satisfying all conditions of any of the listed licenses. +### +### A license must be prescribed for contribs +macro LICENSE(Flags...) { + SET(LICENSE_EXPRESSION $Flags) + SET(LICENSE_NAMES $Flags) +} + +### @usage RESTRICT_LICENSES(ALLOW_ONLY|DENY LicenseProperty...) +### +### Restrict licenses of direct and indirect module dependencies. +### +### ALLOW_ONLY restriction type requires dependent module to have at leas one license without propertis not listed in restrictions +### list. +### +### DENY restriction type forbids dependency on module with no license without any listed propery from the list. +### +### Note: Can be used multiple times on the same module all specified constraints will be checked. +### All macro invocation for the same module must use same constraints type (DENY or ALLOW_ONLY) +macro RESTRICT_LICENSES(TYPE, EXCEPT[], RESTRICTIONS...) { + SET_APPEND(MODULE_LICENSES_RESTRICTION_TYPES $TYPE) + SET_APPEND(MODULE_LICENSES_RESTRICTIONS $RESTRICTIONS) + SET_APPEND(MODULE_LICENSES_RESTRICTION_EXCEPTIONS $EXCEPT) +} diff --git a/build/conf/linkers/ld.conf b/build/conf/linkers/ld.conf new file mode 100644 index 0000000000..655c09dc66 --- /dev/null +++ b/build/conf/linkers/ld.conf @@ -0,0 +1,383 @@ +_LD_FLAGS_1= +_LD_FLAGS_2= +when ($MUSL == "yes") { + _LD_FLAGS_1=-Wl,--no-as-needed + when ($GCC == "yes") { + # MUSL_BFD: musl build uses --no-dynamic-linker linker flag + # which gold doesn't know about. And we can only specify linker + # type, not it's path as we do for Clang through linker selector. + _LD_FLAGS_2=-fuse-ld=bfd + } +} +elsewhen ($OS_LINUX == "yes") { + _LD_FLAGS_1=-ldl -lrt -Wl,--no-as-needed + when ($GCC == "yes") { + _LD_FLAGS_2=-Wl,-Bstatic -latomic -Wl,-Bdynamic + } +} +elsewhen ($OS_ANDROID == "yes") { + _LD_FLAGS_1=-ldl -Wl,--no-as-needed + when ($_DEFAULT_LINKER_ID == "lld" && $_ANDROID_API_LESS_THEN_29 == "yes") { + # https://github.com/android/ndk/issues/1196 + _LD_FLAGS_2=-Wl,--no-rosegment + } +} +elsewhen ($OS_DARWIN == "yes") { + _LD_FLAGS_1=-Wl,-no_deduplicate + when ($CLANG != "yes") { + _LD_FLAGS_2=-Wl,-no_compact_unwind + } +} + +_LD_FLAGS_IOS_MAPSMOBI_ARM= +when ($OS_IOS == "yes" && $MAPSMOBI_BUILD_TARGET == "yes" && $ARCH_ARM) { + _LD_FLAGS_IOS_MAPSMOBI_ARM=-fembed-bitcode -Wl,-bitcode_verify +} + +_LD_FLAGS_PROFILER_TYPE= +when ($_BUILD_PROFILER_TYPE == "gprof") { + _LD_FLAGS_PROFILER_TYPE=-pg +} + +_LD_FLAGS_COVERAGE= +when ($_BUILD_COVERAGE == "yes") { + _LD_FLAGS_COVERAGE=-fprofile-arcs -ftest-coverage +} + +_LD_FLAGS = +_LD_FLAGS+=$_LD_FLAGS_1 +_LD_FLAGS+=$_LD_FLAGS_2 +_LD_FLAGS+=$_LD_FLAGS_IOS_MAPSMOBI_ARM +_LD_FLAGS+=$_LD_FLAGS_PROFILER_TYPE +_LD_FLAGS+=$_LD_FLAGS_COVERAGE +_LD_FLAGS+=$LD_SDK_VERSION + +LDFLAGS+=$USER_LDFLAGS $_LD_FLAGS +LDFLAGS_GLOBAL+= + +_START_GROUP= +_END_GROUP= +START_WHOLE_ARCHIVE_VALUE= +END_WHOLE_ARCHIVE_VALUE= +LD_STRIP_FLAG= +_SONAME_OPTION= +_LD_SRCS_GLOBALS=--start-wa ${rootrel;ext=.a:SRCS_GLOBAL} --end-wa ${rootrel;ext=.o:SRCS_GLOBAL} ${rootrel;ext=.supp:SRCS_GLOBAL} +when ($OS_LINUX == "yes" || $OS_ANDROID == "yes" || $OS_CYGWIN == "yes" || $OS_NONE == "yes") { + _START_GROUP=-Wl,--start-group + _END_GROUP=-Wl,--end-group + START_WHOLE_ARCHIVE_VALUE=-Wl,--whole-archive + END_WHOLE_ARCHIVE_VALUE=-Wl,--no-whole-archive + LD_STRIP_FLAG=-s + _SONAME_OPTION=-soname + _LD_SRCS_GLOBALS=-Wl,--whole-archive ${rootrel;ext=.a:SRCS_GLOBAL} -Wl,--no-whole-archive ${rootrel;ext=.o:SRCS_GLOBAL} ${rootrel;ext=.supp:SRCS_GLOBAL} +} + +when ($_LD_WHOLE_ARCHIVE == "yes") { +} + +when ($OS_DARWIN == "yes" || $OS_IOS == "yes") { + _SONAME_OPTION=-install_name +} + +_LD_LINKER_OUTPUT= +_LD_LINKER_OUTPUT_FLAG=--linker-output ${output;pre=$MODULE_PREFIX;suf=$MODULE_SUFFIX$MODULE_VERSION.linker.txt:REALPRJNAME} + +# Enable section-level DCE (dead code elimination): +# remove whole unused code and data sections +# (needs `-ffunction-sections` and `-fdata-sections` to be useful) +# +# NOTE: CGO linker doesn't seem to support DCE, but shares common LDFLAGS +_LD_DCE_FLAG_GC_SECTIONS= +_LD_DCE_FLAG_PRINT_SECTIONS= +when ($OS_DARWIN == "yes") { + _LD_DCE_FLAG_GC_SECTIONS=-Wl,-dead_strip +} +elsewhen ($OS_LINUX == "yes" || $OS_ANDROID == "yes") { + _LD_DCE_FLAG_GC_SECTIONS=-Wl,--gc-sections + when ($LINKER_DCE_PRINT_SECTIONS == "yes") { + _LD_DCE_FLAG_PRINT_SECTIONS=-Wl,--print-gc-sections + _LD_LINKER_OUTPUT=$_LD_LINKER_OUTPUT_FLAG + } +} +LD_DCE_FLAG = +LD_DCE_FLAG+=$_LD_DCE_FLAG_GC_SECTIONS +LD_DCE_FLAG+=$_LD_DCE_FLAG_PRINT_SECTIONS +DCE_FLAG= + +_LD_ICF_FLAG= +_LD_ICF_FLAG_PRINT_SECTIONS= +when ($_DEFAULT_LINKER_ID == "lld") { + # Enable ICF (identical code folding pass) in safe mode + # https://research.google/pubs/pub36912/ + _LD_ICF_FLAG=-Wl,-icf=safe + when ($LINKER_ICF_PRINT_SECTIONS == "yes") { + _LD_ICF_FLAG_PRINT_SECTIONS=-Wl,--print-icf-sections + _LD_LINKER_OUTPUT=$_LD_LINKER_OUTPUT_FLAG + } +} +LD_ICF_FLAG = +LD_ICF_FLAG+=$_LD_ICF_FLAG +LD_ICF_FLAG+=$_LD_ICF_FLAG_PRINT_SECTIONS +ICF_FLAG= + +STRIP_FLAG= + +C_LIBRARY_PATH= +C_SYSTEM_LIBRARIES_INTERCEPT= + +_LD_THREAD_LIBRARY= +when ($OS_LINUX == "yes" || $OS_DARWIN == "yes") { + _LD_THREAD_LIBRARY=-lpthread +} + +_LD_USE_STDLIB= +when ($_BUILD_COVERAGE == "yes" || $GCOV_COVERAGE == "yes" || $CLANG_COVERAGE == "yes" || $_BUILD_SANITIZED == "yes") { + _LD_USE_STDLIB= +} +elsewhen ($OS_ANDROID == "yes") { + when ($_ANDROID_NDK_VERSION_LESS_THEN_23 == "yes") { + # Preserve old behaviour: specify runtime libs manually + _LD_USE_STDLIB=-nodefaultlibs + } + otherwise { + # Use toolchain defaults to link with libunwind/clang_rt.builtins + _LD_USE_STDLIB=-nostdlib++ + } +} +elsewhen ($OS_LINUX == "yes" || $OS_DARWIN == "yes" || $OS_IOS == "yes") { + _LD_USE_STDLIB=-nodefaultlibs +} + +_C_SYSTEM_LIBRARIES=$_LD_USE_STDLIB $_LD_THREAD_LIBRARY $_LD_SYS_LIB -lc +when ($MUSL == "yes") { + _C_SYSTEM_LIBRARIES=-nostdlib +} +C_SYSTEM_LIBRARIES=$_C_SYSTEM_LIBRARIES + +OBJADDE= + +LD_EXPORT_ALL_DYNAMIC_SYMBOLS_FLAG= +when ($OS_LINUX == "yes" || $OS_ANDROID == "yes") { + LD_EXPORT_ALL_DYNAMIC_SYMBOLS_FLAG=-rdynamic +} + +NO_EXPORT_DYNAMIC_SYMBOLS= +EXPORTS_VALUE=$LD_EXPORT_ALL_DYNAMIC_SYMBOLS_FLAG +when ($EXPORTS_FILE) { + EXPORTS_VALUE=$LD_EXPORT_ALL_DYNAMIC_SYMBOLS_FLAG -Wl,--version-script=${input:EXPORTS_FILE} +} +when ($NO_EXPORT_DYNAMIC_SYMBOLS == "yes") { + EXPORTS_VALUE= +} + +LINKER_SCRIPT_VALUE=${ext=.ld;pre=-T:SRCS_GLOBAL} + +_LINKER_TIME_TRACE_GRANULARITY=500 +when ($TIME_TRACE_GRANULARITY && $TIME_TRACE_GRANULARITY != "") { + _LINKER_TIME_TRACE_GRANULARITY=$TIME_TRACE_GRANULARITY +} + +_LINKER_TIME_TRACE_FLAG= +when (($TIME_TRACE == "yes" || $LINKER_TIME_TRACE == "yes") && $_DEFAULT_LINKER_ID == "lld") { + _LINKER_TIME_TRACE_FLAG=\ +-Wl,--time-trace \ +-Wl,--time-trace-granularity=$_LINKER_TIME_TRACE_GRANULARITY \ +-Wl,--time-trace-file=${output;rootrel;pre=$MODULE_PREFIX;suf=$MODULE_SUFFIX.time_trace.json:REALPRJNAME} +} + +_EXE_FLAGS=\ +$C_FLAGS_PLATFORM \ +$BEFORE_PEERS \ +$_START_GROUP \ +${rootrel:PEERS} \ +$_END_GROUP \ +$AFTER_PEERS \ +$EXPORTS_VALUE \ +$LINKER_SCRIPT_VALUE \ +$LDFLAGS \ +$LDFLAGS_GLOBAL \ +$OBJADDE \ +$OBJADDE_LIB \ +$C_LIBRARY_PATH \ +$C_SYSTEM_LIBRARIES_INTERCEPT \ +$C_SYSTEM_LIBRARIES \ +$STRIP_FLAG \ +$DCE_FLAG \ +$ICF_FLAG \ +$_LINKER_TIME_TRACE_FLAG + +_SONAME_FLAG=-Wl,$_SONAME_OPTION,$_SONAME +_SHARED_FLAG=-shared +_EXEC_SHARED_FLAG= +when ($OS_LINUX == "yes") { + _EXEC_SHARED_FLAG=-pie -fPIE -Wl,--unresolved-symbols=ignore-all -rdynamic +} + +_LD_ENV_STYLE=${cwd:ARCADIA_BUILD_ROOT} $TOOLCHAIN_ENV ${kv;hide:"p LD"} ${requirements;hide:LD_REQUIREMENTS} ${kv;hide:"pc light-blue"} ${kv;hide:"show_out"} + +# Program +GENERATE_MF_CMD=\ +$YMAKE_PYTHON ${input:"build/scripts/generate_mf.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 + +LINK_SCRIPT_EXE_FLAGS= + +REAL_LINK_EXE_CMDLINE =\ +$YMAKE_PYTHON ${input:"build/scripts/link_exe.py"} \ +--source-root $ARCADIA_ROOT +REAL_LINK_EXE_CMDLINE+=$_LD_LINKER_OUTPUT +REAL_LINK_EXE_CMDLINE+=\ +${pre=--whole-archive-peers :WHOLE_ARCHIVE_PEERS} \ +${pre=--whole-archive-libs :_WHOLE_ARCHIVE_LIBS_VALUE_GLOBAL} \ +$_LD_ARCH_FLAG \ +$LINK_SCRIPT_EXE_FLAGS \ +$CXX_COMPILER \ +$_LD_SRCS_GLOBALS \ +$VCS_C_OBJ $AUTO_INPUT -o $TARGET \ +$_EXE_FLAGS \ +$_LD_ENV_STYLE + +REAL_LINK_EXE_TIDY=\ +$YMAKE_PYTHON ${input:"build/scripts/clang_tidy_arch.py"} \ +--build-root $ARCADIA_BUILD_ROOT \ +--source-root $ARCADIA_ROOT \ +--output-file $TARGET \ +$AUTO_INPUT \ +$_LD_ENV_STYLE + +# Executable Shared Library + +REAL_LINK_EXEC_DYN_LIB_CMDLINE =\ +$YMAKE_PYTHON ${input:"build/scripts/link_dyn_lib.py"} \ +--target $TARGET +REAL_LINK_EXEC_DYN_LIB_CMDLINE+=$_LD_LINKER_OUTPUT +REAL_LINK_EXEC_DYN_LIB_CMDLINE+=\ +${pre=--whole-archive-peers :WHOLE_ARCHIVE_PEERS} \ +${pre=--whole-archive-libs :_WHOLE_ARCHIVE_LIBS_VALUE_GLOBAL} \ +$_LD_ARCH_FLAG \ +$LINK_DYN_LIB_FLAGS \ +$CXX_COMPILER \ +$_LD_SRCS_GLOBALS \ +$VCS_C_OBJ $AUTO_INPUT -o $TARGET \ +$_EXEC_SHARED_FLAG \ +$_SONAME_FLAG \ +$_EXE_FLAGS \ +$_LD_ENV_STYLE + +REAL_LINK_EXEC_DYN_LIB=$REAL_LINK_EXEC_DYN_LIB_IMPL($_WHOLE_ARCHIVE_PEERS_VALUE) + +# Shared Library + +LINK_DYN_LIB_FLAGS= + +REAL_LINK_DYN_LIB_CMDLINE =\ +$YMAKE_PYTHON ${input:"build/scripts/link_dyn_lib.py"} \ +--target $TARGET +REAL_LINK_DYN_LIB_CMDLINE+=$_LD_LINKER_OUTPUT +REAL_LINK_DYN_LIB_CMDLINE+=\ +${pre=--whole-archive-peers :WHOLE_ARCHIVE_PEERS} \ +${pre=--whole-archive-libs :_WHOLE_ARCHIVE_LIBS_VALUE_GLOBAL} \ +$_LD_ARCH_FLAG \ +$LINK_DYN_LIB_FLAGS \ +$CXX_COMPILER \ +$_LD_SRCS_GLOBALS \ +$VCS_C_OBJ $AUTO_INPUT -o $TARGET \ +$_SHARED_FLAG \ +$_SONAME_FLAG \ +$_EXE_FLAGS \ +$_LD_ENV_STYLE + +REAL_LINK_DYN_LIB=$REAL_LINK_DYN_LIB_IMPL($_WHOLE_ARCHIVE_PEERS_VALUE) + +_DWARF_COMMAND= +when ($OS_DARWIN == "yes" && $NO_DEBUGINFO != "yes") { + _DWARF_COMMAND=$DWARF_TOOL $TARGET -o ${output;pre=$MODULE_PREFIX$REALPRJNAME.dSYM/Contents/Resources/DWARF/$MODULE_PREFIX:REALPRJNAME} $_LD_ENV_STYLE +} +DWARF_COMMAND=$_DWARF_COMMAND + +_REAL_LINK_EXE=$REAL_LINK_EXE_IMPL($_WHOLE_ARCHIVE_PEERS_VALUE) +_LINK_EXE=$GENERATE_MF && $GENERATE_VCS_C_INFO_NODEP && $REAL_LINK_EXE && $DWARF_COMMAND && $LINK_ADDITIONAL_SECTIONS_COMMAND && $PACK_IOS_CMD +_LINK_DYN_LIB=$GENERATE_MF && $GENERATE_VCS_C_INFO_NODEP && $REAL_LINK_DYN_LIB && $DWARF_COMMAND && $LINK_ADDITIONAL_SECTIONS_COMMAND +when ($TIDY == "yes") { + _REAL_LINK_EXE=$REAL_LINK_EXE_TIDY + _LINK_EXE=$REAL_LINK_EXE + _LINK_DYN_LIB=$REAL_LINK_EXE +} +REAL_LINK_EXE=$_REAL_LINK_EXE +LINK_EXE=$_LINK_EXE +LINK_DYN_LIB=$_LINK_DYN_LIB + +LINK_EXEC_DYN_LIB=\ +$GENERATE_MF && \ +$GENERATE_VCS_C_INFO_NODEP && \ +$REAL_LINK_EXEC_DYN_LIB && \ +$DWARF_COMMAND && \ +$LINK_ADDITIONAL_SECTIONS_COMMAND + +SWIG_DLL_JAR_CMD=\ +$GENERATE_MF && \ +$GENERATE_VCS_C_INFO_NODEP && \ +$REAL_SWIG_DLL_JAR_CMD && \ +$DWARF_COMMAND + +_LD_TAIL_LINK_LIB=$AUTO_INPUT ${requirements;hide:LIB_REQUIREMENTS} ${kv;hide:"p AR"} $TOOLCHAIN_ENV ${kv;hide:"pc light-red"} ${kv;hide:"show_out"} +_LD_ARCHIVER=$YMAKE_PYTHON ${input:"build/scripts/link_lib.py"} ${quo:AR_TOOL} $AR_TYPE $_LD_LLVM_AR_FORMAT $ARCADIA_BUILD_ROOT $_LD_AR_PLUGIN +_LD_LIB_GENERATE_MF=$GENERATE_MF && +when ($TIDY == "yes") { + _LD_ARCHIVER=$YMAKE_PYTHON ${input:"build/scripts/clang_tidy_arch.py"} --source-root $ARCADIA_ROOT --build-root $ARCADIA_BUILD_ROOT --output-file + _LD_LIB_GENERATE_MF= +} +LINK_LIB=$_LD_LIB_GENERATE_MF $_LD_ARCHIVER $TARGET $_LD_TAIL_LINK_LIB +GLOBAL_LINK_LIB=$_LD_ARCHIVER $GLOBAL_TARGET $_LD_TAIL_LINK_LIB + +# "Fat Object" : pre-linked global objects and static library with all dependencies +_LD_LINK_FAT_PREFIX=$GENERATE_MF && $GENERATE_VCS_C_INFO_NODEP && $YMAKE_PYTHON ${input:"build/scripts/link_fat_obj.py"} --build-root $ARCADIA_BUILD_ROOT +_LD_LINK_FAT_SRCS_GLOBALS_WA=$_LD_SRCS_GLOBALS +_LD_LINK_FAT_SRCS_GLOBALS_NO_WA=${rootrel;ext=.a:SRCS_GLOBAL} ${rootrel;ext=.o:SRCS_GLOBAL} + +_LD_LINK_FAT_SUFFIX1=$_LD_ARCH_FLAG \ +-Ya,input $AUTO_INPUT $VCS_C_OBJ \ +-Ya,global_srcs + +_LD_LINK_FAT_SUFFIX2=-Ya,peers $PEERS \ +-Ya,linker $CXX_COMPILER \ +$LDFLAGS_GLOBAL $C_FLAGS_PLATFORM $LD_SDK_VERSION \ +-Ya,archiver $_LD_ARCHIVER \ +$TOOLCHAIN_ENV ${kv;hide:"p LD"} ${requirements;hide:LD_REQUIREMENTS} ${kv;hide:"pc light-blue"} ${kv;hide:"show_out"} + +LINK_FAT_OBJECT=\ +$_LD_LINK_FAT_PREFIX \ +--obj=$TARGET --lib=${output:REALPRJNAME.a} \ +$_LD_LINK_FAT_SUFFIX1 \ +$_LD_LINK_FAT_SRCS_GLOBALS_WA \ +$_LD_LINK_FAT_SUFFIX2 + +LINK_RECURSIVE_LIBRARY=\ +$_LD_LINK_FAT_PREFIX \ +--lib=$TARGET --with-own-obj --with-global-srcs \ +$_LD_LINK_FAT_SUFFIX1 \ +$_LD_LINK_FAT_SRCS_GLOBALS_NO_WA \ +$_LD_LINK_FAT_SUFFIX2 + +LINK_FAT_OBJECT_LIBRARY=\ +$_LD_LINK_FAT_PREFIX \ +--lib=$TARGET $FAT_OBJECT_ARGS $FAT_OBJECT_OUTS \ +$_LD_LINK_FAT_SUFFIX1 \ +$_LD_LINK_FAT_SRCS_GLOBALS_NO_WA \ +$_LD_LINK_FAT_SUFFIX2 + +LIBRT=-lrt +MD5LIB=-lcrypt +LIBRESOLV= +when ($OS_LINUX || $OS_DARWIN || $OS_ANDROID) { + LIBRESOLV=-lresolv +} +PROFFLAG=-pg diff --git a/build/conf/linkers/msvc_linker.conf b/build/conf/linkers/msvc_linker.conf new file mode 100644 index 0000000000..e905024bda --- /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=${YMAKE_PYTHON} ${input:"build/scripts/fix_msvc_output.py"} lib +LINK_WRAPPER=${YMAKE_PYTHON} ${input:"build/scripts/fix_msvc_output.py"} 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"} \ +--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 \ +${requirements;hide:LIB_REQUIREMENTS} ${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"} ${requirements;hide:LD_REQUIREMENTS} ${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"} ${requirements;hide:LD_REQUIREMENTS} ${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"} ${requirements;hide:LD_REQUIREMENTS} ${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"} ${requirements;hide:LD_REQUIREMENTS} ${kv;hide:"pc light-blue"} ${kv;hide:"show_out"} diff --git a/build/conf/opensource.conf b/build/conf/opensource.conf new file mode 100644 index 0000000000..027f6a3e42 --- /dev/null +++ b/build/conf/opensource.conf @@ -0,0 +1,14 @@ +when ($CATBOOST_OPENSOURCE == "yes") {
+ OPENSOURCE=yes
+}
+
+when ($OPENSOURCE) {
+ LOCAL_YDB_DOCKER_PUBLIC_BUILD=yes
+ CATBOOST_OPENSOURCE=yes
+ USE_DYNAMIC_IDN=yes
+ USE_DYNAMIC_AIO=yes
+ USE_DYNAMIC_ICONV=yes
+ USE_ASMLIB=no
+ SO_OUTPUTS=yes
+ UDF_NO_PROBE=yes
+}
diff --git a/build/conf/project_specific/maps/aar.conf b/build/conf/project_specific/maps/aar.conf new file mode 100644 index 0000000000..780ff38984 --- /dev/null +++ b/build/conf/project_specific/maps/aar.conf @@ -0,0 +1,350 @@ + +_GRADLE_FLAGS_VALUE= +### @usage: GRADLE_FLAGS(flags...) # internal +### +### SEt additional flags for gradle +macro GRADLE_FLAGS(FLAGS...) { + SET_APPEND(_GRADLE_FLAGS_VALUE $FLAGS) +} + +### @usage: PROGURAD_RULES(ProguardRuleFiles...) +### +### This macro is strictly prohibited to use outside of mapsmobi project +macro PROGUARD_RULES(RULES...) { + SET_APPEND(_PROGUARD_RULES_GLOBAL $RULES) +} + +### @usage: AARS(Aars...) +### +### This macro is strictly prohibited to use outside of mapsmobi project +macro AARS(DEPS...) { + SET_APPEND(_AARS_GLOBAL $DEPS) +} + +### @usage: MOBILE_DLL() # internal +module MOBILE_DLL: DLL { + .CMD=LINK_MOBILE_DLL + + PEERDIR(build/external_resources/android_sdk) + PEERDIR(build/external_resources/gradle) + PEERDIR(build/platform/java/jdk) + PEERDIR($JDK_RESOURCE_PEERDIR) + + SET(BIN_AAR_DIR $BINDIR/aar) + SET(BIN_TMP_DIR $BINDIR/tmp) +} + +_MOBILE_TEST_APK_AAR_MANIFEST_VALUE= +### @usage: MOBILE_TEST_APK_AAR_MANIFEST(file) # internal +macro MOBILE_TEST_APK_AAR_MANIFEST(FILE) { + SET(_MOBILE_TEST_APK_AAR_MANIFEST_VALUE $FILE) +} + +_MOBILE_TEST_APK_AAR_PROGUARD_RULES_VALUE= +### @usage: MOBILE_TEST_APK_AAR_PROGUARD_RULES(file) # internal +macro MOBILE_TEST_APK_AAR_PROGUARD_RULES(FILE) { + SET(_MOBILE_TEST_APK_AAR_PROGUARD_RULES_VALUE $FILE) +} + +_MOBILE_TEST_APK_AAR_AARS_VALUE= +### @usage: MOBILE_TEST_APK_AAR_AARS(filenames...) # internal +macro MOBILE_TEST_APK_AAR_AARS(AARS...) { + SET_APPEND(_MOBILE_TEST_APK_AAR_AARS_VALUE $AARS) +} + +_MOBILE_TEST_APK_AAR_BUNDLES_VALUE= +### @usage: MOBILE_TEST_APK_AAR_BUNDLES(filenames...) # internal +macro MOBILE_TEST_APK_AAR_BUNDLES(BUNDLES...) { + SET_APPEND(_MOBILE_TEST_APK_AAR_BUNDLES_VALUE $BUNDLES) + BUNDLE_EXTRA_INPUTS($BUNDLES) +} + +_MOBILE_TEST_APK_TEMPLATE_DIR= +### @usage: MOBILE_TEST_APK_TEMPLATE(dir filenames...) # internal +macro MOBILE_TEST_APK_TEMPLATE(TEMPLATE_DIR, INPUTS...) { + SET(_MOBILE_TEST_APK_TEMPLATE_DIR $TEMPLATE_DIR) + BUNDLE_EXTRA_INPUTS(${pre=$TEMPLATE_DIR/:INPUTS}) +} + +_MOBILE_TEST_APK_CMDLINE=\ +$FS_TOOLS md $BIN_TMP_DIR \ +&& $FS_TOOLS md $BINDIR/.android \ +&& $COPY_CMD $GRADLE_DEBUG_STORE_RESOURCE_GLOBAL/debug.keystore $BINDIR/.android/debug.keystore \ +&& $FS_TOOLS md $BINDIR/jni_libs/$ARCH_NAME \ +&& $YMAKE_PYTHON ${input:"build/scripts/extract_asrc.py"} --output $BIN_TMP_DIR --input ${suf=.asrc:PEERS} \ +&& $MOVE_FILE $OUTPUT $BINDIR/jni_libs/$ARCH_NAME/${pre=lib;suf=.so:_MOBILE_TEST_APK_LIBRARY_NAME} \ +&& $FS_TOOLS md $BIN_AAR_DIR \ +&& $YMAKE_PYTHON ${input:"build/scripts/gen_aar_gradle_script.py"} \ +${input;hide:EXTRA_INPUTS} \ +--aidl-dirs $BIN_TMP_DIR/aidl \ +--assets-dirs $BIN_TMP_DIR/assets \ +--java-dirs $BIN_TMP_DIR/src \ +--jni-libs-dirs $BINDIR/jni_libs \ +--res-dirs $BIN_TMP_DIR/res \ +--manifest ${input:_MOBILE_TEST_APK_AAR_MANIFEST_VALUE} \ +--proguard-rules ${input:_MOBILE_TEST_APK_AAR_PROGUARD_RULES_VALUE} ${input:_PROGUARD_RULES_GLOBAL} \ +--aars $_MOBILE_TEST_APK_AAR_AARS_VALUE $_AARS_GLOBAL \ +--bundles $_MOBILE_TEST_APK_AAR_BUNDLES_VALUE \ +--output-dir $BIN_AAR_DIR \ +--bundle-name unittest \ +--maven-repos ${MAPSMOBI_MAVEN_REPO_RESOURCE_GLOBAL} \ +&& ${cwd:BIN_AAR_DIR} ${GRADLE_RESOURCE_GLOBAL}/bin/gradle $_GRADLE_FLAGS_VALUE --no-daemon --offline -g $BIN_GRADLE_USER_HOME_DIR assemble${_BUNDLE_BUILD_TYPE} ${env:"ANDROID_HOME=$ANDROID_SDK_RESOURCE_GLOBAL/android_sdk"} ${env:"JAVA_HOME=$JDK_RESOURCE"} ${env:"ANDROID_SDK_HOME=$BINDIR"} \ +&& $FS_TOOLS md $BIN_APK_DIR \ +&& $FS_TOOLS md $BIN_APK_DIR/res \ +&& $COPY_CMD $_MOBILE_TEST_APK_TEMPLATE_DIR/Manifest.xml $BIN_APK_DIR/Manifest.xml \ +&& $YMAKE_PYTHON ${input:"build/scripts/gen_test_apk_gradle_script.py"} \ +${input;hide:EXTRA_INPUTS} \ +--app-id $REALPRJNAME \ +--assets-dirs $_MOBILE_TEST_APK_ASSETS_DIRS_VALUE \ +--java-dirs $_MOBILE_TEST_APK_TEMPLATE_DIR/java \ +--jni-libs-dirs \ +--res-dirs $BIN_APK_DIR/res $_MOBILE_TEST_APK_TEMPLATE_DIR/res $BIN_TMP_DIR/res \ +--manifest Manifest.xml \ +--aars \ +--output-dir $BIN_APK_DIR \ +--bundle-name $REALPRJNAME \ +--bundles $BIN_AAR_DIR/build/outputs/aar/unittest-${tolower:_BUNDLE_BUILD_TYPE}.aar $_MOBILE_TEST_APK_AAR_BUNDLES_VALUE \ +--library-name $_MOBILE_TEST_APK_LIBRARY_NAME \ +--maven-repos ${MAPSMOBI_MAVEN_REPO_RESOURCE_GLOBAL} \ +&& ${cwd:BIN_APK_DIR} ${GRADLE_RESOURCE_GLOBAL}/bin/gradle $_GRADLE_FLAGS_VALUE --no-daemon --offline -g $BIN_GRADLE_USER_HOME_DIR assembleDebug ${env:"ANDROID_HOME=$ANDROID_SDK_RESOURCE_GLOBAL/android_sdk"} ${env:"JAVA_HOME=$JDK_RESOURCE"} ${env:"ANDROID_SDK_HOME=$BINDIR"} \ +&& $COPY_CMD $BIN_APK_DIR/build/outputs/apk/${tolower:_BUNDLE_BUILD_TYPE}/$REALPRJNAME.apk ${OUTPUT} + +_MOBILE_TEST_APK_EXTRA_INPUTS_VALUE= + +macro _MOBILE_TEST_APK_CMD_IMPL(OUTPUT, EXTRA_INPUTS...) { + .CMD=$_MOBILE_TEST_APK_CMDLINE +} + +_MOBILE_TEST_APK_CMD=$_MOBILE_TEST_APK_CMD_IMPL($TARGET $_BUNDLE_EXTRA_INPUTS_VALUE) + +LINK_MOBILE_TEST_APK=$LINK_DYN_LIB && $_MOBILE_TEST_APK_CMD + +### @usage: MOBILE_TEST_APK() # internal +module MOBILE_TEST_APK: DLL { + .CMD=LINK_MOBILE_TEST_APK + .GLOBAL=_AARS _PROGUARD_RULES + + PEERDIR(build/external_resources/android_sdk) + PEERDIR(build/external_resources/gradle) + PEERDIR(build/platform/java/jdk) + PEERDIR($JDK_RESOURCE_PEERDIR) + + SET(MODULE_PREFIX) + SET(MODULE_SUFFIX .apk) + + SET(BIN_AAR_DIR $BINDIR/aar) + SET(BIN_APK_DIR $BINDIR/apk) + SET(BIN_TMP_DIR $BINDIR/tmp) + SET(BIN_GRADLE_USER_HOME_DIR $BINDIR/gradle) + + SET(_MOBILE_TEST_APK_LIBRARY_NAME unittests) + + when ($OS_ANDROID == "yes") { + when ($ARCH_ARM7 == "yes") { + ARCH_NAME=armeabi-v7a + } + elsewhen ($ARCH_ARM64 == "yes") { + ARCH_NAME=arm64-v8a + } + elsewhen ($ARCH_I386 == "yes") { + ARCH_NAME=x86 + } + elsewhen ($ARCH_X86_64 == "yes") { + ARCH_NAME=x86_64 + } + otherwise { + ARCH_NAME=unsupported + } + } +} + + +### @usage: MOBILE_BOOST_TEST_APK() # internal +module MOBILE_BOOST_TEST_APK: MOBILE_TEST_APK { + PEERDIR(devtools/dummy_arcadia/test/test_apk/template) + PEERDIR(build/external_resources/mapsmobi_maven_repo) + ADD_YTEST($MODULE_PREFIX$REALPRJNAME boost.test) + + MOBILE_TEST_APK_TEMPLATE(${ARCADIA_ROOT}/devtools/dummy_arcadia/test/test_apk/template Manifest.xml java/com/yandex/test/unittests/RunTestsActivity.java res/values/strings.xml) +} + +when ($BT_RELEASE) { + _BUNDLE_BUILD_TYPE=Release +} +otherwise { + _BUNDLE_BUILD_TYPE=Debug +} + +_AAR_EXTRA_INPUTS_VALUE= + +_AAR_MANIFEST_VALUE= +### @usage: AAR_MANIFEST(filename) # internal +macro AAR_MANIFEST(FILE) { + SET(_AAR_MANIFEST_VALUE $FILE) +} + +_AAR_PROGUARD_RULES_VALUE= +### @usage: AAR_PROGUARD_RULES(filename) # internal +macro AAR_PROGUARD_RULES(FILE) { + SET(_AAR_PROGUARD_RULES_VALUE $FILE) +} + +_AAR_AARS_VALUE= +### @usage: AAR_AARS(aars...) # internal +macro AAR_AARS(Aars...) { + SET_APPEND(_AAR_AARS_VALUE $Aars) +} + +_AAR_COMPILE_ONLY_AARS_VALUE= +### @usage: AAR_COMPILE_ONLY_AARS(compile_only_aars...) # internal +macro AAR_COMPILE_ONLY_AARS(Aars...) { + SET_APPEND(_AAR_COMPILE_ONLY_AARS_VALUE $Aars) +} + + +_AAR_AIDL_DIRS_VALUE= +### @usage: AAR_AIDL_SRCS(dir filenames...) # internal +macro AAR_AIDL_SRCS(PREFIX, ABSOLUTE[], FILES...) { + SET_APPEND(_AAR_AIDL_DIRS_VALUE $PREFIX) + SET_APPEND(_AAR_EXTRA_INPUTS_VALUE ${pre=$PREFIX/:FILES} ${ABSOLUTE}) +} + +_AAR_ASSETS_DIRS_VALUE= +### @usage: AAR_ASSETS_SRCS(dir filenames...) # internal +macro AAR_ASSETS_SRCS(PREFIX, ABSOLUTE[], FILES...) { + SET_APPEND(_AAR_ASSETS_DIRS_VALUE $PREFIX) + SET_APPEND(_AAR_EXTRA_INPUTS_VALUE ${pre=$PREFIX/:FILES} ${ABSOLUTE}) +} + +_AAR_BUNDLES_VALUE= +### @usage: AAR_BUNDLES(filenames...) # internal +macro AAR_BUNDLES(BUNDLES...) { + SET_APPEND(_AAR_BUNDLES_VALUE $BUNDLES) + SET_APPEND(_AAR_EXTRA_INPUTS_VALUE $BUNDLES) +} + +_AAR_JNI_LIB_DIRS_VALUE= +### @usage: AAR_JNI_LIBS(dir filenames...) # internal +macro AAR_JNI_LIBS(PREFIX, ABSOLUTE[], FILES...) { + SET_APPEND(_AAR_JNI_LIB_DIRS_VALUE $PREFIX) + SET_APPEND(_AAR_EXTRA_INPUTS_VALUE ${pre=$PREFIX/:FILES} ${ABSOLUTE}) +} + +_AAR_JAVA_DIRS_VALUE= +### @usage: AAR_JAVA_SRCS(dir filenames...) # internal +macro AAR_JAVA_SRCS(PREFIX, ABSOLUTE[], FILES...) { + SET_APPEND(_AAR_JAVA_DIRS_VALUE $PREFIX) + SET_APPEND(_AAR_EXTRA_INPUTS_VALUE ${pre=$PREFIX/:FILES} ${ABSOLUTE}) +} + +_AAR_RES_DIRS_VALUE= +### @usage: AAR_RES_SRCS(dir filenames...) # internal +macro AAR_RES_SRCS(PREFIX, ABSOLUTE[], FILES...) { + SET_APPEND(_AAR_RES_DIRS_VALUE $PREFIX) + SET_APPEND(_AAR_EXTRA_INPUTS_VALUE ${pre=$PREFIX/:FILES} ${ABSOLUTE}) +} + +_AAR_LOCAL_MAVEN_REPO_VALUE= +### @usage: AAR_LOCAL_MAVEN_REPO(repo...) +macro AAR_LOCAL_MAVEN_REPO(REPO...) { + SET_APPEND(_AAR_LOCAL_MAVEN_REPO_VALUE $REPO) +} + +_AAR_GRADLE_SCRIPT_GENERATOR_VALUE= +### @usage: AAR_GRADLE_SCRIPT_GENERATOR(python_script) +macro AAR_GRADLE_SCRIPT_GENERATOR(GENERATOR) { + SET(_AAR_GRADLE_SCRIPT_GENERATOR_VALUE $GENERATOR) +} + +when ($AAR_GENERATE_DOC) { + _AAR_GENERATE_DOC_VALUE=--generate-doc + _AAR_COPY_DOC_VALUE=\ + && ${cwd:BINDIR} $COPY_CMD build/${REALPRJNAME}-javadoc.tar.gz ${output;suf=-javadoc.tar.gz:REALPRJNAME} +} +otherwise { + _AAR_GENERATE_DOC_VALUE= + _AAR_COPY_DOC_VALUE= +} + +when ($AAR_NO_STRIP) { + _AAR_NO_STRIP_VALUE=--do-not-strip +} +otherwise { + _AAR_NO_STRIP_VALUE= +} + +_AAR_CMDLINE=\ +$FS_TOOLS md $BIN_TMP_DIR \ +&& $FS_TOOLS md $BINDIR/.android \ +&& $COPY_CMD $GRADLE_DEBUG_STORE_RESOURCE_GLOBAL/debug.keystore $BINDIR/.android/debug.keystore \ +&& $YMAKE_PYTHON ${input:"build/scripts/extract_asrc.py"} --output $BIN_TMP_DIR --input ${suf=.asrc:PEERS} \ +&& $YMAKE_PYTHON ${input:_AAR_GRADLE_SCRIPT_GENERATOR_VALUE} \ +${input;hide:EXTRA_INPUTS} \ +--aidl-dirs $_AAR_AIDL_DIRS_VALUE $BIN_TMP_DIR/aidl \ +--assets-dirs $_AAR_ASSETS_DIRS_VALUE $BIN_TMP_DIR/assets \ +--java-dirs $_AAR_JAVA_DIRS_VALUE $BIN_TMP_DIR/src \ +--jni-libs-dirs $_AAR_JNI_LIB_DIRS_VALUE $BIN_TMP_DIR/jni_libs \ +--res-dirs $_AAR_RES_DIRS_VALUE $BIN_TMP_DIR/res \ +--manifest ${input:_AAR_MANIFEST_VALUE} \ +--proguard-rules ${input:_AAR_PROGUARD_RULES_VALUE} ${input:_PROGUARD_RULES_GLOBAL} \ +--aars $_AAR_AARS_VALUE $_AARS_GLOBAL \ +--compile-only-aars $_AAR_COMPILE_ONLY_AARS_VALUE \ +--bundles $_AAR_BUNDLES_VALUE \ +--output-dir $BINDIR \ +--bundle-name $REALPRJNAME \ +--peers $PEERS \ +--maven-repos $_AAR_LOCAL_MAVEN_REPO_VALUE \ +$_AAR_GENERATE_DOC_VALUE \ +$_AAR_NO_STRIP_VALUE \ +&& ${cwd:BINDIR} ${GRADLE_RESOURCE_GLOBAL}/bin/gradle $_GRADLE_FLAGS_VALUE --no-daemon --offline -g $BIN_GRADLE_USER_HOME_DIR bundle${_BUNDLE_BUILD_TYPE}Aar ${env:"ANDROID_HOME=$ANDROID_SDK_RESOURCE_GLOBAL/android_sdk"} ${env:"JAVA_HOME=$JDK_RESOURCE"} ${env:"ANDROID_SDK_HOME=$BINDIR"} $VCS_INFO_DISABLE_CACHE__NO_UID__ \ +&& ${cwd:BINDIR} $COPY_CMD build/outputs/aar/${REALPRJNAME}-${tolower:_BUNDLE_BUILD_TYPE}.aar $TARGET \ +$_AAR_COPY_DOC_VALUE \ +&& ${cwd:BINDIR} $COPY_CMD build/${suf=-pom.xml:REALPRJNAME} ${output;suf=-pom.xml:REALPRJNAME} \ +&& ${cwd:BINDIR} $COPY_CMD build/libs/${suf=-sources.jar:REALPRJNAME} ${output;suf=-sources.jar:REALPRJNAME} + +macro _AAR_CMD_IMPL(EXTRA_INPUTS...) { + .CMD=$_AAR_CMDLINE && $GENERATE_MF +} + +AAR_CMD=$_AAR_CMD_IMPL($_AAR_EXTRA_INPUTS_VALUE) + +### @usage: AAR() # internal +module AAR: _BASE_UNIT { + .CMD=AAR_CMD + .GLOBAL=_AARS _PROGUARD_RULES + .PEERDIR_POLICY=as_build_from + .FINAL_TARGET=yes + + SET(MODULE_PREFIX) + SET(MODULE_SUFFIX .aar) + SET(DONT_RESOLVE_INCLUDES yes) + SET(NEED_PLATFORM_PEERDIRS no) + NO_PLATFORM() + + PEERDIR(build/external_resources/android_sdk) + PEERDIR(build/external_resources/gradle) + PEERDIR(build/platform/java/jdk) + PEERDIR($JDK_RESOURCE_PEERDIR) + + SET(BIN_TMP_DIR $BINDIR/tmp) + SET(BIN_GRADLE_USER_HOME_DIR $BINDIR/gradle) +} + +_SECONDARY_OUTPUT_VALUE= + +### @usage: SECONDARY_OUTPUT(filename) # internal +### +### The use of this macro is strictly prohibited!!! +macro SECONDARY_OUTPUT(OUTPUT) { + SET(_SECONDARY_OUTPUT_VALUE $OUTPUT) +} + +_AAR_PROXY_LIBRARY_CMD=$LINK_LIB && $COPY_CMD $_SECONDARY_OUTPUT_VALUE ${input;hide:_SECONDARY_OUTPUT_VALUE} ${output:REALPRJNAME.aar} + +### @usage: AAR_PROXY_LIBRARY() # internal +### +### The use of this module is strictly prohibited!!! +module AAR_PROXY_LIBRARY: _PROXY_LIBRARY { + .ALLOWED=SECONDARY_OUTPUT + .CMD=_AAR_PROXY_LIBRARY_CMD +} diff --git a/build/conf/project_specific/maps/asrc.conf b/build/conf/project_specific/maps/asrc.conf new file mode 100644 index 0000000000..dee6354cbc --- /dev/null +++ b/build/conf/project_specific/maps/asrc.conf @@ -0,0 +1,122 @@ +_BUNDLE_DELIM_JAVA=__DELIM_JAVA__ +_BUNDLE_DELIM_RES=__DELIM_RES__ +_BUNDLE_DELIM_ASSETS=__DELIM_ASSETS__ +_BUNDLE_DELIM_AIDL=__DELIM_AIDL__ + +_BUNDLE_EXTRA_INPUTS_VALUE= +### @usage: BUNDLE_EXTRA_INPUTS(filenames...) # internal +macro BUNDLE_EXTRA_INPUTS(INPUTS...) { + SET_APPEND(_BUNDLE_EXTRA_INPUTS_VALUE $INPUTS) +} + +_BUNDLE_AIDL_SRCS_VALUE= +### @usage: BUNDLE_AIDL_SRCS(dirname filenames...) # internal +macro BUNDLE_AIDL_SRCS(PREFIX, ABSOLUTE[], FILES...) { + SET_APPEND(_BUNDLE_AIDL_SRCS_VALUE $_BUNDLE_DELIM_AIDL $PREFIX ${pre=$PREFIX/:FILES} ${ABSOLUTE}) + BUNDLE_EXTRA_INPUTS(${pre=$PREFIX/:FILES} ${ABSOLUTE}) +} + +_BUNDLE_JAVA_SRCS_VALUE= +### @usage: BUNDLE_JAVA_SRCS(dirname filenames...) # internal +macro BUNDLE_JAVA_SRCS(PREFIX, ABSOLUTE[], FILES...) { + SET_APPEND(_BUNDLE_JAVA_SRCS_VALUE $_BUNDLE_DELIM_JAVA $PREFIX ${pre=$PREFIX/:FILES} ${ABSOLUTE}) + BUNDLE_EXTRA_INPUTS(${pre=$PREFIX/:FILES} ${ABSOLUTE}) +} + +_BUNDLE_RES_SRCS_VALUE= +### @usage: BUNDLE_RES_SRCS(dirname filenames...) # internal +macro BUNDLE_RES_SRCS(PREFIX, ABSOLUTE[], FILES...) { + SET_APPEND(_BUNDLE_RES_SRCS_VALUE $_BUNDLE_DELIM_RES $PREFIX ${pre=$PREFIX/:FILES} ${ABSOLUTE}) + BUNDLE_EXTRA_INPUTS(${pre=$PREFIX/:FILES} ${ABSOLUTE}) +} + +_BUNDLE_ASSETS_SRCS_VALUE= +### @usage: BUNDLE_ASSETS_SRCS(dirname filenames...) # internal +macro BUNDLE_ASSETS_SRCS(PREFIX, ABSOLUTE[], FILES...) { + SET_APPEND(_BUNDLE_ASSETS_SRCS_VALUE $_BUNDLE_DELIM_ASSETS $PREFIX ${pre=$PREFIX/:FILES} ${ABSOLUTE}) + BUNDLE_EXTRA_INPUTS(${pre=$PREFIX/:FILES} ${ABSOLUTE}) +} + +_BUNDLE_SRCS_VALUE=$_BUNDLE_AIDL_SRCS_VALUE $_BUNDLE_ASSETS_SRCS_VALUE $_BUNDLE_JAVA_SRCS_VALUE $_BUNDLE_RES_SRCS_VALUE + +macro _COMPILE_ASRC_IMPL(EXTRA_INPUTS...) { + .CMD=${cwd:ARCADIA_BUILD_ROOT} $YMAKE_PYTHON ${input:"build/scripts/link_asrc.py"} --work $BINDIR --input $_BUNDLE_SRCS_VALUE ${input;hide:EXTRA_INPUTS} --output $TARGET ${kv;hide:"p AC"} $kv;hide:"pc light-blue"} ${kv;hide:"show_out"} +} + +_COMPILE_ASRC=$_COMPILE_ASRC_IMPL($_ASRC_EXTRA_INPUTS_VALUE) + +COMPILE_ASRC_MF=$_COMPILE_ASRC && $GENERATE_MF + +### @usage: ASRC_LIBRARY() # internal +module ASRC_LIBRARY: _BASE_UNIT { + .CMD=COMPILE_ASRC_MF + .ALL_INS_TO_OUT=no + .PEERDIR_POLICY=as_include + .FINAL_TARGET=no + PEERDIR_TAGS=JAVA_PROTO JAVA_IDL + MODULE_TYPE=Library + SET(MODULE_SUFFIX .asrc) + SET(DONT_RESOLVE_INCLUDES yes) + SET(NEED_PLATFORM_PEERDIRS no) + + NO_RUNTIME() +} + +macro _MOBILE_LIBRARY_PREREQUISITES_IMPL(OUTPUT, EXTRA_INPUTS...) { + .CMD=${cwd:ARCADIA_BUILD_ROOT} $YMAKE_PYTHON ${input:"build/scripts/link_asrc.py"} --work $BINDIR --input $_BUNDLE_SRCS_VALUE --output $OUTPUT ${kv;hide:"p AC"} ${kv;hide:"pc lite-blue"} ${kv;hide:"show_out"} +} + +macro _MOBILE_LIBRARY_PREREQUISITES_CMD(OUTPUT, EXTRA_INPUTS...) { + .CMD=${output;hide:OUTPUT} ${input;hide:EXTRA_INPUTS} ${kv;hide:"p AC"} ${kv;hide:"pc lite-blue"} ${kv;hide:"show_out"} $_MOBILE_LIBRARY_PREREQUISITES_IMPL($OUTPUT $EXTRA_INPUTS) +} + +when ($OS_ANDROID == "yes") { + LINK_MOBILE_LIB=$LINK_LIB && $_MOBILE_LIBRARY_PREREQUISITES_CMD(${BINDIR}/$MODULE_PREFIX$REALPRJNAME$MODULE_SUFFIX.asrc $_BUNDLE_EXTRA_INPUTS_VALUE) +} +otherwise { + LINK_MOBILE_LIB=$LINK_LIB +} + +### @usage: MOBILE_LIBRARY() # internal +module MOBILE_LIBRARY: LIBRARY { + .CMD=LINK_MOBILE_LIB + DISABLE(NEED_ADD_FAKE_SRC) +} + +_JSRC_PROXY_MOBILE_LIBRARY_CMDLINE=${cwd:ARCADIA_BUILD_ROOT} $YMAKE_PYTHON ${input:"build/scripts/link_asrc.py"} --work $BINDIR --jsrcs ${ext=.jsrc;tags_in=local:PEERS} --input $_BUNDLE_SRCS_VALUE ${input;hide:EXTRA_INPUTS} --output ${output;pre=$MODULE_PREFIX;suf=$MODULE_SUFFIX.asrc:REALPRJNAME} ${kv;hide:"p AC"} ${kv;hide:"pc lite-blue"} ${kv;hide:"show_out"} + +macro _JSRC_PROXY_MOBILE_LIBRARY_CMD_IMPL(EXTRA_INPUTS...) { + .CMD=$_JSRC_PROXY_MOBILE_LIBRARY_CMDLINE +} + +JSRC_PROXY_MOBILE_LIBRARY_CMD=$LINK_LIB && $_JSRC_PROXY_MOBILE_LIBRARY_CMD_IMPL($_BUNDLE_EXTRA_INPUTS_VALUE) + +### @usage: JSRC_PROXY_MOBILE_LIBRARY() # internal +module JSRC_PROXY_MOBILE_LIBRARY: MOBILE_LIBRARY { + .CMD=JSRC_PROXY_MOBILE_LIBRARY_CMD + .PEERDIR_POLICY=as_build_from + .PROXY=yes + + SET(MODULE_TYPE LIBRARY) + DISABLE(NEED_ADD_FAKE_SRC) + + PEERDIR_TAGS=JAVA_PROTO JAVA_IDL + + SET(BIN_TMP_DIR ${BINDIR}/tmp) + + NO_UTIL() +} + +_MOBILE_DLL_PREREQUISITES_CMDLINE=${cwd:ARCADIA_BUILD_ROOT} $YMAKE_PYTHON ${input:"build/scripts/link_asrc.py"} --work $BINDIR --asrcs ${PEERS.arcs} --input $_BUNDLE_SRCS_VALUE ${input;hide:EXTRA_INPUTS} --output ${output;pre=$MODULE_PREFIX;suf=$MODULE_SUFFIX.asrc:REALPRJNAME} ${kv;hide:"p AC"} ${kv;hide:"pc lite-blue"} ${kv;hide:"show_out"} + +macro _MOBILE_DLL_PREREQUISITES_CMD(EXTRA_INPUTS...) { + .CMD=$_MOBILE_DLL_PREREQUISITES_CMDLINE +} + +when ($OS_ANDROID == "yes") { + LINK_MOBILE_DLL=$LINK_DYN_LIB && $_MOBILE_DLL_PREREQUISITES_CMD($_BUNDLE_EXTRA_INPUTS_VALUE) +} +otherwise { + LINK_MOBILE_DLL=$LINK_DYN_LIB +} + diff --git a/build/conf/project_specific/maps/mapkit.conf b/build/conf/project_specific/maps/mapkit.conf new file mode 100644 index 0000000000..d64b41f72a --- /dev/null +++ b/build/conf/project_specific/maps/mapkit.conf @@ -0,0 +1,283 @@ +MAPKIT_IDL_INCLUDES= +macro MAPKIT_ADDINCL(Dirs...) { + ADDINCL(${pre=FOR idl :Dirs}) + SET_APPEND(MAPKIT_IDL_INCLUDES $Dirs) +} + +### @usage: MAPS_IDL_ADDINCL(dirnames...) # internal +### +### Warpper for MAPKIT_ADDINCL macro which is used for mobile mapkit build +macro MAPS_IDL_ADDINCL(Dirs...) { + MAPKIT_ADDINCL($Dirs) +} + +### @usage: _MAPKITIDL_PROXY(args...) # internal +### +### Proxy macro for MAPKITIDL which adds PEERDIR to YMAKE resources +macro _MAPKITIDL_PROXY(Args...) { + MAPKITIDL($Args) + ENABLE(USE_YMAKE_RESOURCE) + SET_APPEND(_MAKEFILE_INCLUDE_LIKE_TEXT_DEPS ${ext=idl:Args}) +} + +MAPS_IDL_FILTER= + +### @usage: MAPS_IDL_SRCS(filenames...) # internal +### +### Warpper for MAPKITIDL macro which is used for mobile mapkit build +macro MAPS_IDL_SRCS(Srcs...) { + _MAPKITIDL_PROXY($Srcs ${MAPS_IDL_FILTER}) +} + +### @usage: MAPS_IDL_GLOBAL_SRCS(filenames...) # internal +### +### Warpper for MAPKITIDL macro which is used for mobile mapkit build +macro MAPS_IDL_GLOBAL_SRCS(Srcs...) { + _MAPKITIDL_PROXY(GLOBAL_OUTPUTS $Srcs ${MAPS_IDL_FILTER}) +} + +### @usage: MAPSMOBI_SRCS(filenames...) # internal +### +### Make all source files listed as GLOBAL or not (depending on the value of +### MAPSMOBI_USE_SRCS_GLOBAL). Be careful since the value of +### MAPSMOBI_USE_SRCS_GLOBAL matters! If the value of this variable is equal to +### GLOBAL then call to MAPSMOBI_SRCS() macro behaves like call to +### GLOBAL_SRCS() macro otherwise the value of MAPSMOBI_USE_SRCS_GLOBAL is +### treated as a file name and a call to MAPSMOBI_SRCS() macro behaves like a +### call to SRCS() macro with additional argument which is the value of +### MAPSMOBI_USE_SRCS_GLOBAL variable +macro MAPSMOBI_SRCS(FILES...) { + ALL_SRCS(${MAPSMOBI_USE_SRCS_GLOBAL} $FILES) +} + +### @usage: EXPORT_MAPKIT_PROTO() # internal deprecated +### +### This macro is a temporary one and should be changed to EXPORT_YMAPS_PROTO +### when transition of mapsmobi to arcadia is finished +macro EXPORT_MAPKIT_PROTO() { + PROTO_NAMESPACE(GLOBAL maps/mapsmobi/external/proto) +} + +BEFORE_PEERS= +AFTER_PEERS= +when ($MAPKIT_WHOLE_ARCHIVE == "yes") { + when($OS_LINUX) { + BEFORE_PEERS += $START_WHOLE_ARCHIVE_VALUE + AFTER_PEERS += $END_WHOLE_ARCHIVE_VALUE + } + elsewhen($OS_DARWIN) { + LDFLAGS+=-Wl,-all_load + } +} + +### @usage: MAPKIT_ENABLE_WHOLE_ARCHIVE() # internal deprecated +### +### This macro is strictly prohibited to use outside of mapsmobi project +macro MAPKIT_ENABLE_WHOLE_ARCHIVE() { + ENABLE(MAPKIT_WHOLE_ARCHIVE) +} + +### @usage: MAPS_IDL_LIBRARY() +### +### Definition of multimodule that builds various variants of libraries. +### The particular variant is selected based on where PEERDIR to IDL_LIBRARY comes from. +### Now supported 2 variants: C++, Java +### Java version is not really a library but an archive of generated Java sources +multimodule MAPS_IDL_LIBRARY { + module CPP_IDL: LIBRARY { + .ALIASES=SRCS=MAPS_IDL_SRCS GLOBAL_SRCS=MAPS_IDL_GLOBAL_SRCS ADDINCL=MAPKIT_ADDINCL MAPSMOBI_SRCS=MAPS_IDL_SRCS + SET(PEERDIR_TAGS CPP_IDL CPP_PROTO __EMPTY__) + SET(MAPS_IDL_FILTER) + ENABLE(CPP_IDL) + NO_UTIL() + + when ($OS_IOS == "yes") { + CFLAGS+=-fobjc-arc + } + } + + module JAVA_IDL: JSRC_LIBRARY { + .ALIASES=SRCS=MAPS_IDL_SRCS GLOBAL_SRCS=MAPS_IDL_SRCS ADDINCL=MAPKIT_ADDINCL MAPSMOBI_SRCS=MAPS_IDL_SRCS + .IGNORED=CPP_ADDINCL + SET(PEERDIR_TAGS JAVA_IDL JAVA_PROTO) + SET(MAPS_IDL_FILTER FILTER .java) + ENABLE(JAVA_IDL) + } +} + +### @usage: MAPSMOBI_COLLECT_ASSETS_FILES(varname [dir]) # internal +### +### This macro is strictly prohibited to use outside of mapsmobi project +macro MAPSMOBI_COLLECT_ASSETS_FILES(VAR, DIR="") { + _GLOB($VAR ${suf=/:DIR}**/*) + RESTRICT_PATH(maps/mobile maps/automotive MSG This macro is for use in mapsmobi projects) +} + +### @usage: MAPSMOBI_COLLECT_AIDL_FILES(varname [dir]) # internal +### +### This macro is strictly prohibited to use outside of mapsmobi project +macro MAPSMOBI_COLLECT_AIDL_FILES(VAR, DIR="") { + _GLOB($VAR ${suf=/:DIR}**/*.aidl) + RESTRICT_PATH(maps/mobile maps/automotive MSG This macro is for use in mapsmobi projects) +} + +### @usage: MAPSMOBI_COLLECT_JAVA_FILES(varname [dir]) # internal +### +### This macro is strictly prohibited to use outside of mapsmobi project +macro MAPSMOBI_COLLECT_JAVA_FILES(VAR, DIR="") { + _GLOB($VAR ${suf=/:DIR}**/*.java) + RESTRICT_PATH(maps/mobile maps/automotive MSG This macro is for use in mapsmobi projects) +} + +### @usage: MAPSMOBI_COLLECT_JNI_LIBS_FILES(varname [dir]) # internal +### +### This macro is strictly prohibited to use outside of mapsmobi project +macro MAPSMOBI_COLLECT_JNI_LIBS_FILES(VAR, DIR="") { + _GLOB($VAR ${suf=/:DIR}**/*.so) + RESTRICT_PATH(maps/mobile maps/automotive MSG This macro is for use in mapsmobi projects) +} + +### @usage: MAPSMOBI_COLLECT_RES_FILES(varname [dir]) # internal +### +### This macro is strictly prohibited to use outside of mapsmobi project +macro MAPSMOBI_COLLECT_RES_FILES(VAR, DIR="") { + _GLOB($VAR ${suf=/:DIR}**/*.(xml|png)) + RESTRICT_PATH(maps/mobile maps/automotive MSG This macro is for use in mapsmobi projects) +} + +### @usage: MAPSMOBI_COLLECT_TPL_FILES(varname [dir]) # internal +### +### This macro is strictly prohibited to use outside of mapsmobi project +macro MAPSMOBI_COLLECT_TPL_FILES(VAR, DIR="") { + _GLOB($VAR ${suf=/:DIR}**/*.tpl) + RESTRICT_PATH(tools/idl MSG This macro is for use in mapsmobi projects) +} + +### @usage: MAPS_GARDEN_COLLECT_MODULE_TRAITS(varnamei dir) # internal +### +### This macro is strictly prohibited to use outside of maps/garden project +macro MAPS_GARDEN_COLLECT_MODULE_TRAITS(VAR, DIR) { + _GLOB($VAR $DIR/*/module_traits.json) + RESTRICT_PATH(maps/garden/sdk/module_traits/tests/module_traits_bundle MSG This macro is for use in maps/garden project) +} + +# mapsmobi build configuration + +MAPSMOBI_FAKEID=${FAKEID}_r8609790 +MAPSMOBI_BUILD= +YANDEX_EXPORT= +YRT_EXPORT= +MAPSMOBI_CPP_PROTO_PLUGINS= +STATIC_STL= +EXPORT_ALL_SYMBOLS= +when ($MAPSMOBI_BUILD_HOST || $MAPSMOBI_BUILD_TARGET) { + MAPSMOBI_BUILD=yes +} +when ($MAPSMOBI_BUILD) { + CFLAGS+=-DMOBILE_BUILD ${hide:MAPSMOBI_FAKEID} + MAPKIT_BASE_PROTO_PACKAGE=yandex.maps.proto + MAPKIT_PROTO_ROOT=maps/doc/proto + MAPKIT_IDL_FRAMEWORK=maps/mobile/libs/idl_frameworks +} +when ($MAPSMOBI_BUILD_TARGET) { + ALLOCATOR=FAKE + USE_VANILLA_PROTOC=yes + PROTOBUF_LITE=yes + CPP_PROTO_PLUGINS=lite${pre=,:MAPSMOBI_CPP_PROTO_PLUGINS}: + when ($OPENSOURCE != "yes") { + SYSINCL+=build/yandex_specific/sysincl/mapsmobi.yml + } + + CFLAGS+=-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1 -DBOOST_CB_DISABLE_DEBUG -DBOOST_COROUTINES_NO_DEPRECATION_WARNING -DYANDEX_EXPORT=${YANDEX_EXPORT} -DYRT_EXPORT=${YRT_EXPORT} +} +when ($MAPSMOBI_BUILD_TARGET && $OS_ANDROID) { + JDK_VERSION=8 + MAPSMOBI_CPP_PROTO_PLUGINS="dllexport_decl=YANDEX_EXPORT" + YANDEX_EXPORT=__attribute__((visibility(\"default\"))) + CFLAGS+=-fvisibility=hidden + + when ($MAPS_MOBILE_EXPORT_CPP_API) { + LDFLAGS+=-lc++_shared + CFLAGS+=-DZLIB_DLL + CFLAGS+=-DPROTOBUF_USE_DLLS -DLIBPROTOBUF_EXPORTS + CFLAGS+=-DPNG_IMPEXP=${YANDEX_EXPORT} + CFLAGS+=-DBOOST_ALL_DYN_LINK + CFLAGS+=-DBOOST_SYMBOL_EXPORT=${YANDEX_EXPORT} + DYNAMIC_BOOST=yes + } + otherwise { + STATIC_STL=yes + YANDEX_EXPORT= + CFLAGS+=-DBOOST_SYMBOL_EXPORT= + CFLAGS+=-DBOOST_SYMBOL_VISIBLE= + LDFLAGS+=-lc++_static -Wl,--exclude-libs,ALL -static-libstdc++ + USE_GLOBAL_CMD=no + } + + when ($EXPORT_ALL_SYMBOLS) { + CFLAGS+=-fvisibility=default + } + + when ($NO_DEBUGINFO != "yes" && $REDUCED_DEBUGINFO) { + CFLAGS+=-g1 + } + + CFLAGS+=-DANDROID -fpic -ffunction-sections -funwind-tables -fstack-protector -no-canonical-prefixes -Wa,--noexecstack + CFLAGS+=-Qunused-arguments -Wno-unused-function -Wno-pessimizing-move -Wno-missing-field-initializers -Wno-missing-braces -Wno-unused-parameter -Wno-vexing-parse -Wno-sign-compare -Wno-deprecated-declarations + + LDFLAGS+=-lc -lm -llog -Bsymbolic -Wl,-z,noexecstack -Qunused-arguments -Wl,-z,relro -Wl,-z,now -Wl,--no-undefined + + when ($BT_RELEASE || $BT_RELWITHDEBINFO) { + CFLAGS+=-fomit-frame-pointer -fvisibility-inlines-hidden -ffunction-sections -fdata-sections + LDFLAGS+=-Wl,--gc-sections -Wl,--build-id + } + + when ($ARCH_ARM7) { + CFLAGS+=-mfloat-abi=softfp + #Android clang overaligns some float types which causes NEON programs to fail on old Android versions. So we disable NEON. + #See https://github.com/android/ndk/issues/640 for more information + CFLAGS+=-mfpu=vfpv3-d16 + } + elsewhen ($ARCH_ARM64) { + } + elsewhen ($ARCH_I386) { + CFLAGS+=-fstrict-aliasing -mstackrealign -DTLS_STACK_PROTECTOR + } + elsewhen ($ARCH_X86_64) { + CFLAGS+=-fstrict-aliasing -mstackrealign -march=x86-64 -msse4.2 -mpopcnt -m64 -DTLS_STACK_PROTECTOR + } + otherwise { + PEERDIR+=__unsupported_architecture_for_android__ + } +} +when ($MAPSMOBI_BUILD_TARGET && $OS_DARWIN) { + QT_REQUIRED=yes + LDFLAGS+=-lc++ + CFLAGS+=-DBOOST_SYMBOL_EXPORT= + CFLAGS+=-DBOOST_SYMBOL_VISIBLE= +} +when ($MAPSMOBI_BUILD_TARGET && $OS_IOS) { + CFLAGS+=-DIOS -stdlib=libc++ -fvisibility=hidden + CFLAGS+=-DBOOST_SYMBOL_EXPORT= + CFLAGS+=-DBOOST_SYMBOL_VISIBLE= + when ($MAPS_MOBILE_EXPORT_OBJC_API) { + YRT_EXPORT=__attribute__((visibility(\"default\"))) + } +} +when ($MAPSMOBI_BUILD_TARGET && $OS_LINUX) { + when ($NO_GRAPHICS != "yes") { + QT_REQUIRED=yes + OPENGL_REQUIRED=yes + } + OS_SDK=ubuntu-16 + PIC=yes + LDFLAGS+=-lstdc++ -lgcc_s + CFLAGS+=-DBOOST_SYMBOL_EXPORT= + CFLAGS+=-DBOOST_SYMBOL_VISIBLE= +} +when ($MAPSMOBI_BUILD_TARGET && $OS_YOCTO) { + QT_REQUIRED=yes + PIC=yes + CFLAGS+=-DBOOST_SYMBOL_EXPORT= + CFLAGS+=-DBOOST_SYMBOL_VISIBLE= +} diff --git a/build/conf/project_specific/maps/sproto.conf b/build/conf/project_specific/maps/sproto.conf new file mode 100644 index 0000000000..1a62563fc1 --- /dev/null +++ b/build/conf/project_specific/maps/sproto.conf @@ -0,0 +1,21 @@ +### @usage: EXPORT_YMAPS_PROTO() # maps-specific +### +### Maps-specific .proto handling: IMPORT_YMAPS_PROTO() + maps protobuf namespace. +macro EXPORT_YMAPS_PROTO() { + PROTO_NAMESPACE(GLOBAL maps/doc/proto) +} + +macro _YMAPS_GENERATE_SPROTO_HEADER(File) { + .CMD=${cwd;rootdir;input:File} ${tool:"maps/libs/sproto/sprotoc"} -I=./$PROTO_NAMESPACE -I=$ARCADIA_ROOT/$PROTO_NAMESPACE -I=$ARCADIA_BUILD_ROOT -I=$PROTOBUF_PATH --sproto_out=$ARCADIA_BUILD_ROOT/$PROTO_NAMESPACE ${input;rootrel:File} ${output;hide;norel;nopath;noext:File.sproto.h} ${kv;hide:"p PB"} ${kv;hide:"pc yellow"} + .PEERDIR=maps/libs/sproto +} + +### @usage: YMAPS_SPROTO(ProtoFiles...) # maps-specific +### +### Maps-specific .proto handling: generate .sproto.h files using maps/libs/sproto/sprotoc. +macro YMAPS_SPROTO(FILES...) { + SET(PROTO_HEADER_EXTS .pb.h .sproto.h) + foreach (FILE : $FILES) { + [.proto]=$_YMAPS_GENERATE_SPROTO_HEADER($FILE) + } +} diff --git a/build/conf/project_specific/other.conf b/build/conf/project_specific/other.conf new file mode 100644 index 0000000000..602ed5cfa3 --- /dev/null +++ b/build/conf/project_specific/other.conf @@ -0,0 +1,11 @@ +# Catboost +BUILD_CATBOOST_SCRIPT=build/scripts/build_catboost.py +### @usage: BUILD_CATBOOST(cbmodel cbname) +### +### Generate catboost model and access code. +### cbmodel - CatBoost model file name (*.cmb). +### cbname - name for a variable (of NCatboostCalcer::TCatboostCalcer type) to be available in CPP code. +### CatBoost specific macro. +macro BUILD_CATBOOST(CbModel, CbName) { + .CMD=$YMAKE_PYTHON ${input:BUILD_CATBOOST_SCRIPT} build_cb_f $ARCADIA_ROOT $ARCH_TOOL ${input:CbModel} $CbName ${output;chksum;pre=cb.:CbName.cpp} ${output;hide;pre=CB_External_;suf=.rodata:CbName} ${output_include;hide:"kernel/catboost/catboost_calcer.h"} ${kv;hide:"p CB"} ${kv;hide:"pc yellow"} +} diff --git a/build/conf/project_specific/yql_udf.conf b/build/conf/project_specific/yql_udf.conf new file mode 100644 index 0000000000..badaf36687 --- /dev/null +++ b/build/conf/project_specific/yql_udf.conf @@ -0,0 +1,261 @@ +when ($SANITIZER_TYPE || $USE_ARCADIA_PYTHON == "no" || $UDF_NO_PROBE == "yes" || $MUSL == "yes" || $TIDY == "yes") { + YQL_UDF_LINK_CMD=$LINK_DYN_LIB + YQL_UDF_LINK_PRG_CMD=$LINK_EXEC_DYN_LIB +} +otherwise { + YQL_UDF_LINK_CMD=$LINK_DYN_LIB && ${tool:"yql/tools/udf_probe"} $TARGET ${kv;hide:"p UD"} + YQL_UDF_LINK_PRG_CMD=$LINK_EXEC_DYN_LIB && ${tool:"yql/tools/udf_probe"} $TARGET ${kv;hide:"p UD"} +} + +### @usage: UDF_BASE(name [EXPORTS symlist_file] [PREFIX prefix]) #internal +### +### The base logic of all UDF extension modules (User-Defined Functions). +### Processing EXPORTS and PREFIX is the same as for DLL. +### +### https://wiki.yandex-team.ru/robot/manual/kiwi/userguide/#polzovatelskiefunkciiudftriggerykwcalc +module UDF_BASE: DLL_UNIT { + PRINT_MODULE_TYPE(UDF $REALPRJNAME) + + when ($MSVC != "yes" && $DARWIN != "yes") { + LDFLAGS+= -Wl,-Bsymbolic + } +} + +### @usage: UDF(name [EXPORTS symlist_file] [PREFIX prefix]) # deprecated +### +### The KiWi UDF module. +### Processing EXPORTS and PREFIX is the same as for DLL. +### +### https://wiki.yandex-team.ru/robot/manual/kiwi/userguide/#polzovatelskiefunkciiudftriggerykwcalc +module UDF: UDF_BASE { + PEERDIR(yweb/robot/kiwi/kwcalc/udflib) +} + +### @usage: UDF_LIB([name]) # deprecated +### +### The LIBRARY module for KiWi UDF, so has default PEERDIR to yweb/robot/kiwi/kwcalc/udflib. +module UDF_LIB: LIBRARY { + PEERDIR(yweb/robot/kiwi/kwcalc/udflib) +} + +UDF_NO_PROBE="no" +### @usage: UDF_NO_PROBE() +### +### Disable UDF import check at build stage +macro UDF_NO_PROBE() { + ENABLE(UDF_NO_PROBE) +} + +### @usage: YQL_UDF_TEST([name]) +### +### The module to test YQL C++ UDF. +### +### Documentation: https://yql.yandex-team.ru/docs/yt/libraries/testing/ +### Documentation about the Arcadia test system: https://wiki.yandex-team.ru/yatool/test/ +module YQL_UDF_TEST: PY2TEST { + PEERDIR(yql/library/udf_test) + PEERDIR(yt/python/client_lite) + + DEPENDS(yql/tools/astdiff) + DEPENDS(yql/tools/udf_resolver) + DEPENDS(yql/tools/yqlrun) + DATA(arcadia/ydb/library/yql/mount) + DATA(arcadia/yql/cfg/tests) +} + +### @usage: _ADD_YQL_UDF_DEPS() +### +### Add all needed PEERDIRs to a YQL_UDF. +### +### https://yql.yandex-team.ru/docs/yt/udf/cpp/ +macro _ADD_YQL_UDF_DEPS() { + PEERDIR(ydb/library/yql/public/udf) + PEERDIR(ydb/library/yql/public/udf/support) +} + +### @usage: _MAKE_YQL_UDF() +### +### Make module definition an YQL UDF: add all needed dependencies, properties and flags +### +### https://yql.yandex-team.ru/docs/yt/udf/cpp/ +macro _MAKE_YQL_UDF() { + _ADD_YQL_UDF_DEPS() + SET_APPEND(USER_CXXFLAGS -DBUILD_UDF) + # For Windows using declspecs + DEFAULT(YQL_UDF_EXPORT ${ARCADIA_ROOT}/ydb/library/yql/public/udf/udfs_exports.exports) + + when ($WINDOWS == "yes") { + YQL_UDF_EXPORT= + } + + SET(EXPORTS_FILE $YQL_UDF_EXPORT) +} + +### @usage: YQL_UDF_MODULE(name) +### +### The extension module for YQL with C++ UDF (User Defined Function YQL) +### +### https://yql.yandex-team.ru/docs/yt/udf/cpp/ +module YQL_UDF_MODULE: UDF_BASE { + .CMD=YQL_UDF_LINK_CMD + _MAKE_YQL_UDF() + PROVIDES(YqlServicePolicy) +} + +module _YQL_UDF_PROGRAM_BASE: SO_PROGRAM { + .CMD=YQL_UDF_LINK_PRG_CMD + _MAKE_YQL_UDF() +} + +### @usage: YQL_UDF(name) +### +### User-defined function for YQL +### +### Multimodule which is YQL_UDF_MODULE when built directly or referred by BUNDLE and DEPENDS macros. +### If used by PEERDIRs it is usual static LIBRARY with default YQL dependencies, allowing code reuse between UDFs. +### +### @see: [YQL_UDF_MODULE()](#module_YQL_UDF_MODULE) +multimodule YQL_UDF { + module YQL_UDF_SHARED: YQL_UDF_MODULE { + NO_CLANG_TIDY() + } + module YQL_UDF_STATIC: _DLL_COMPATIBLE_LIBRARY { + .ALIASES=SRCS=GLOBAL_SRCS + OBJ_SUF=.udfs + _ADD_YQL_UDF_DEPS() + # disable credits generation for static library + SET(CREDITS_FLAGS) + when ($MSVC == "yes" || $CYGWIN == "yes") { + MODULE_SUFFIX=.static.lib + } + } +} + +### @usage: YQL_ABI_VERSION(major minor release)) +### +### Specifying the supported ABI for YQL_UDF. +### +### @see: [YQL_UDF()](#multimodule_YQL_UDF) +macro YQL_ABI_VERSION(Major, Minor, Patch) { + YQL_ABI_FLAGS=-DUDF_ABI_VERSION_MAJOR=$Major -DUDF_ABI_VERSION_MINOR=$Minor -DUDF_ABI_VERSION_PATCH=$Patch + SET_APPEND(USER_CXXFLAGS $YQL_ABI_FLAGS) +} + +### @usage: YQL_LAST_ABI_VERSION() +### +### Use the last ABI for YQL_UDF +### +macro YQL_LAST_ABI_VERSION() { + YQL_ABI_FLAGS=-DUSE_CURRENT_UDF_ABI_VERSION + SET_APPEND(USER_CXXFLAGS $YQL_ABI_FLAGS) +} + +### @usage: YQL_PYTHON_UDF(name) +### +### Definition of the extension module for YQL with Python 2.x UDF (User Defined Function for YQL). +### Unlike YQL_UDF this is plain DLL module, so PEERDIRs to it are not allowed. +### +### https://yql.yandex-team.ru/docs/yt/udf/python/ +module YQL_PYTHON_UDF: YQL_UDF_MODULE { + .IGNORED=USE_PYTHON2 + .RESTRICTED=PYTHON3_ADDINCL USE_PYTHON3 PYTHON2_ADDINCL + + USE_PYTHON2() + _ARCADIA_PYTHON_ADDINCL() + PEERDIR(build/platform/python/ldflags) + PEERDIR(library/python/type_info) + + DEFAULT(YQL_PYTHON_UDF_EXPORT ${ARCADIA_ROOT}/yql/udfs/common/python/python_udf/python_udfs_exports.exports) + + when ($WINDOWS == "yes") { + YQL_PYTHON_UDF_EXPORT= + } + + ### FIXME: XXX the statement below uncoditionally set EXPORTS_FILE (due to incorrect behaviour of old ConfReader + ###when ($USE_ARCADIA_PYTHON == "yes") SET(EXPORTS_FILE $YQL_PYTHON_UDF_EXPORT) + SET(EXPORTS_FILE $YQL_PYTHON_UDF_EXPORT) +} + +### @usage: YQL_PYTHON_UDF_PROGRAM(name) +### +### Definition of the extension module for YQL with Python 2.x UDF (User Defined Function for YQL). +### Unlike YQL_UDF this is plain DLL module, so PEERDIRs to it are not allowed. +### +### https://yql.yandex-team.ru/docs/yt/udf/python/ +module YQL_PYTHON_UDF_PROGRAM: _YQL_UDF_PROGRAM_BASE { + .IGNORED=USE_PYTHON2 + .RESTRICTED=PYTHON3_ADDINCL USE_PYTHON3 PYTHON2_ADDINCL + USE_PYTHON2() + _ARCADIA_PYTHON_ADDINCL() + PEERDIR(build/platform/python/ldflags) + PEERDIR(library/python/type_info) + + DEFAULT(YQL_PYTHON_UDF_EXPORT ${ARCADIA_ROOT}/yql/udfs/common/python/python_udf/python_udfs_exports.exports) + + when ($WINDOWS == "yes") { + YQL_PYTHON_UDF_EXPORT= + } + + ### FIXME: XXX the statement below uncoditionally set EXPORTS_FILE (due to incorrect behaviour of old ConfReader + ###when ($USE_ARCADIA_PYTHON == "yes") SET(EXPORTS_FILE $YQL_PYTHON_UDF_EXPORT) + SET(EXPORTS_FILE $YQL_PYTHON_UDF_EXPORT) +} + +### @usage: YQL_PYTHON3_UDF(name) +### +### The extension module for YQL with Python 3.x UDF (User Defined Function for YQL). +### Unlike YQL_UDF this is plain DLL module, so PEERDIRs to it are not allowed. +### +### Documentation: https://yql.yandex-team.ru/docs/yt/udf/python/ +module YQL_PYTHON3_UDF: YQL_UDF_MODULE { + .RESTRICTED=PYTHON2_ADDINCL PYTHON3_ADDINCL USE_PYTHON2 USE_PYTHON3 + _ARCADIA_PYTHON3_ADDINCL() + PEERDIR(build/platform/python/ldflags) + PEERDIR(library/python/type_info) + + DEFAULT(YQL_PYTHON_UDF_EXPORT ${ARCADIA_ROOT}/yql/udfs/common/python/python_udf/python_udfs_exports.exports) + + when ($WINDOWS == "yes") { + YQL_PYTHON_UDF_EXPORT= + } + + ### FIXME: XXX the statement below uncoditionally set EXPORTS_FILE (due to incorrect behaviour of old ConfReader + ###when ($USE_ARCADIA_PYTHON == "yes") SET(EXPORTS_FILE $YQL_PYTHON_UDF_EXPORT) + SET(EXPORTS_FILE $YQL_PYTHON_UDF_EXPORT) +} + +macro _MAKE_YQL_PYTHON_UDF_TEST() { + PEERDIR(library/python/pytest) + DEPENDS(yql/tools/run_python_udf) + SETUP_PYTEST_BIN(RUNNER_BIN $(BUILD_ROOT)/yql/tools/run_python_udf/run_python_udf) +} + +### @usage: YQL_PYTHON_UDF_TEST(name) +### +### The Python test for Python YQL UDF (Python User Defined Function for YQL). The code should be a proper YQL_PYTHON_UDF. +### +### This module will basically build itself as UDF and run as test using yql/tools/run_python_udf/run_python_udf tool. +### +### Documentation: https://yql.yandex-team.ru/docs/yt/udf/python/ +### +### @example: https://a.yandex-team.ru/arc/trunk/arcadia/yql/udfs/test/simple/ya.make +### +### @see: [YQL_PYTHON_UDF()](#module_YQL_PYTHON_UDF) +module YQL_PYTHON_UDF_TEST: YQL_PYTHON_UDF { + _MAKE_YQL_PYTHON_UDF_TEST() + SET_APPEND(_MAKEFILE_INCLUDE_LIKE_DEPS canondata/result.json) +} + +### @usage: YQL_PYTHON3_UDF_TEST(name) +### +### The Python test for Python 3.x YQL UDF (User Defined Function for YQL). The code should be a proper YQL_PYTHON3_UDF. +### +### This module will basically build itself as UDF and run as test using yql/tools/run_python_udf/run_python_udf tool. +### +### Documentation: https://yql.yandex-team.ru/docs/yt/udf/python/ +### +### @see: [YQL_PYTHON3_UDF()](#module_YQL_PYTHON3_UDF) +module YQL_PYTHON3_UDF_TEST: YQL_PYTHON3_UDF { + _MAKE_YQL_PYTHON_UDF_TEST() + SET_APPEND(_MAKEFILE_INCLUDE_LIKE_DEPS canondata/result.json) +} diff --git a/build/conf/rules.conf b/build/conf/rules.conf new file mode 100644 index 0000000000..51bf1baa52 --- /dev/null +++ b/build/conf/rules.conf @@ -0,0 +1,43 @@ +PEERDIRS_RULES_PATH=\ + build/rules/junk.policy \ + build/rules/go/contrib.policy \ + build/rules/go/vendor.policy \ + build/rules/contrib_deprecated.policy \ + build/rules/contrib_python.policy \ + build/rules/contrib_restricted.policy \ + build/rules/contrib_deps.policy \ + build/rules/library_deps.policy \ + build/rules/library_deprecated.policy \ + build/rules/passport.policy \ + build/rules/yt.policy \ + build/rules/catboost.policy \ + build/rules/maps/maps.policy \ + build/rules/taxi.policy \ + build/rules/yp.policy \ + build/rules/alice.policy \ + build/rules/kikimr.policy \ + build/rules/yadi.policy + +CHECK_INTERNAL=yes +INTERNAL_EXCEPTIONS=\ + contrib \ + search/begemot/rules/internal \ + mssngr/router/lib/protos/internal \ + mssngr/router/lib/registry/method/internal \ + cv/imageproc/ocr/api/mobile_c/internal \ + kernel/ugc/security/lib/internal \ + maps/mobile/libs/mapkit/internal + +_BLACKLISTS= +when ($DISABLE_BLACKLIST == "yes") { + _BLACKLISTS= +} +elsewhen ($CUSTOM_BLACKLIST != "") { + _BLACKLISTS=$CUSTOM_BLACKLIST +} +elsewhen ($AUTOCHECK == "yes" || $TEST_BLACKLIST_AUTOCHECK == "yes") { + _BLACKLISTS+=build/rules/autocheck.blacklist +} +otherwise { + _BLACKLISTS+=build/rules/local.blacklist +} diff --git a/build/conf/settings.conf b/build/conf/settings.conf new file mode 100644 index 0000000000..4329f3233a --- /dev/null +++ b/build/conf/settings.conf @@ -0,0 +1,155 @@ +GLOBAL_SRCS_IN_RESULTS=yes +JSON_CACHE_IS_ATTACHED=yes +USE_ADDINCL_WITHOUT_FOR_AS_ADDINCL_FOR_C=yes +LANGS_REQUIRE_BUILD_AND_SRC_ROOTS=c asm cython proto flatc swig ydl nlg + +# NOTE! Only foldable vars should be listed here +_FOLDABLE_VARS_=\ + CL_WRAPPER \ + END_WHOLE_ARCHIVE_VALUE \ + LD_SDK_VERSION \ + LD_STRIP_FLAG \ + LIB_WRAPPER \ + LINK_EXE_FLAGS_DEBUG \ + LINK_EXE_FLAGS_RELEASE \ + LINK_IMPLIB \ + LINK_LIB_FLAGS \ + LINK_STDLIBS \ + LINK_WRAPPER \ + LINK_WRAPPER_DYNLIB \ + ML_WRAPPER \ + START_WHOLE_ARCHIVE_VALUE \ + _CFLAGS_ARCH_I386 \ + _CFLAGS_UCRT_VC_INCLUDES \ + _COMPILER_TIME_TRACE_FLAGS \ + _COMPILER_TIME_TRACE_GRANULARITY \ + _COMPILER_TIME_TRACE_POSTPROCESS \ + _CPP_ARGS \ + _CROSS_SUFFIX \ + _CXX_DEFINES \ + _CXX_FLAGS \ + _CXX_STD \ + _CXX_WARNINGS \ + _CXX_WARNINGS_CLANG \ + _CXX_WARNINGS_CLANG_CL \ + _CXX_WARNINGS_CLANG_CL_2019 \ + _CXX_WARNINGS_CLANG_CL_2019_IDE_MSVS \ + _CXX_WARNINGS_GCC_7 \ + _C_ARGS \ + _C_CPP_KV_STYLE \ + _C_DEFINES \ + _C_DEFINES_ANDROID \ + _C_DEFINES_ANDROID_OTHERWISE \ + _C_DEFINES_CLANG_LINUX_X86_64 \ + _C_DEFINES_GNU_SOURCE \ + _C_DEFINES_IOS \ + _C_DEFINES_NDEBUG \ + _C_DEFINES_WITH_VALGRIND \ + _C_FLAGS \ + _C_FLAGS_ARCH \ + _C_FLAGS_ARCH_OPT \ + _C_FLAGS_FAST_DEBUG \ + _C_FLAGS_PROFILER \ + _C_FLAGS_RELEASE \ + _C_FOPTIONS \ + _C_FOPTIONS_ALIGNED_ALLOCATION \ + _C_FOPTIONS_CLANG_10 \ + _C_FOPTIONS_CLANG_10_LINUX \ + _C_FOPTIONS_COLOR \ + _C_FOPTIONS_COVERAGE \ + _C_FOPTIONS_DEBUG \ + _C_FOPTIONS_GCC \ + _C_FOPTIONS_INIT_ARRAY \ + _C_FOPTIONS_IOS \ + _C_FOPTIONS_MAPSMOBI_ARM \ + _C_FOPTIONS_PROFILER \ + _C_FOPTIONS_RELEASE \ + _C_SYSTEM_LIBRARIES \ + _C_WARNINGS \ + _C_WARNINGS_CLANG \ + _C_WARNINGS_CLANG_CL \ + _DEBUG_INFO_FLAGS \ + _DEFINES_ARCH \ + _DEFINES_UNICODE \ + _DEFINES_WIN32_WINNT \ + _DWARF_COMMAND \ + _END_GROUP \ + _EXEC_SHARED_FLAG \ + _EXE_FLAGS \ + _FLAGS_COMMON \ + _FLAGS_COMMON_DEBUG \ + _FLAGS_COMMON_IDE_MSVS \ + _FLAGS_COMMON_LIBPATHS \ + _FLAGS_C_ONLY \ + _FLAGS_DEBUG_ONLY \ + _FLAGS_DEBUG_ONLY_CLANG_CL \ + _FLAGS_DEBUG_ONLY_DEBUG \ + _FLAGS_DEBUG_RUNTIME \ + _FLAGS_IGNORE \ + _FLAGS_MACHINE \ + _FLAGS_MSVS_ONLY \ + _FLAGS_RELEASE_ONLY \ + _FLAGS_RELEASE_ONLY_DEBUG \ + _FLAGS_RELEASE_RUNTIME \ + _LD_ARCHIVER \ + _LD_ARCH_FLAG \ + _LD_AR_PLUGIN \ + _LD_DCE_FLAG_GC_SECTIONS \ + _LD_DCE_FLAG_PRINT_SECTIONS \ + _LD_ENV_STYLE \ + _LD_FLAGS \ + _LD_FLAGS_1 \ + _LD_FLAGS_2 \ + _LD_FLAGS_COVERAGE \ + _LD_FLAGS_IOS_MAPSMOBI_ARM \ + _LD_FLAGS_PROFILER_TYPE \ + _LD_FLAGS_SIZE_OPTIMIZED \ + _LD_ICF_FLAG \ + _LD_ICF_FLAG_PRINT_SECTIONS \ + _LD_LIB_GENERATE_MF \ + _LD_LINKER_OUTPUT\ + _LD_LINKER_OUTPUT_FLAG \ + _LD_LINK_FAT_PREFIX \ + _LD_LINK_FAT_SRCS_GLOBALS_NO_WA \ + _LD_LINK_FAT_SRCS_GLOBALS_WA \ + _LD_LINK_FAT_SUFFIX1 \ + _LD_LINK_FAT_SUFFIX2 \ + _LD_LLVM_AR_FORMAT \ + _LD_SRCS_GLOBALS \ + _LD_SYS_LIB \ + _LD_TAIL_LINK_LIB \ + _LD_THREAD_LIBRARY \ + _LD_USE_STDLIB \ + _LINKER_TIME_TRACE_FLAG \ + _LINKER_TIME_TRACE_GRANULARITY \ + _LINK_EXTRA_OUTPUT \ + _MASM_IO \ + _MSVC_ARCH \ + _MSVC_FLAGS \ + _MSVC_FLAGS_ARCH_OPT \ + _MSVC_FLAGS_CLANG \ + _MSVC_FLAGS_CLANG_ARCH \ + _MSVC_FLAGS_CLANG_EQ_2019 \ + _MSVC_FLAGS_CLANG_NO_WARNINGS \ + _MSVC_FLAGS_INCLUDE \ + _MSVC_HEAD_LINK_LIB \ + _MSVC_MACRO \ + _MSVC_SRCS_GLOBALS \ + _MSVC_TAIL_LINK_LIB \ + _MSVC_TC_KIT_LIBS \ + _MSVC_TC_VC_ROOT \ + _MSVC_WARNS_AS_ERRORS \ + _MSVC_WARNS_DISABLED \ + _MSVC_WARNS_ENABLED \ + _MSVC_WINDOWS7 \ + _MSVC_WINDOWS8 \ + _OPTIMIZE_RELEASE \ + _SFDL_FLAGS \ + _SHARED_FLAG \ + _SONAME_FLAG \ + _SONAME_OPTION \ + _START_GROUP \ + _STD_CXX \ + _WINAPI_UNICODE \ + +# end of _FOLDABLE_VARS list diff --git a/build/conf/sysincl.conf b/build/conf/sysincl.conf new file mode 100644 index 0000000000..60e641e2db --- /dev/null +++ b/build/conf/sysincl.conf @@ -0,0 +1,61 @@ +SYSINCL= +SYSINCL+=build/sysincl/libc-to-compat.yml +SYSINCL+=build/sysincl/libc-to-nothing.yml +SYSINCL+=build/sysincl/stl-to-nothing.yml +SYSINCL+=build/sysincl/linux.yml +SYSINCL+=build/sysincl/windows.yml +SYSINCL+=build/sysincl/darwin.yml +SYSINCL+=build/sysincl/intrinsic.yml +SYSINCL+=build/sysincl/nvidia.yml +SYSINCL+=build/sysincl/misc.yml +SYSINCL+=build/sysincl/unsorted.yml + +when ($USE_LOCAL_SWIG == "yes") { + SYSINCL+=build/sysincl/swig-to-nothing.yml +} +otherwise { + SYSINCL+=build/sysincl/swig.yml +} + +when ($USE_SYSTEM_JDK) { + SYSINCL+=build/sysincl/system-jdk.yml +} + +when ($OPENSOURCE != "yes") { + SYSINCL+=build/yandex_specific/sysincl/speechkit.yml + SYSINCL+=build/yandex_specific/sysincl/sophos.yml + SYSINCL+=build/yandex_specific/sysincl/misc.yml + SYSINCL+=build/yandex_specific/sysincl/taxi.yml +} + +when ($MUSL == "yes") { + SYSINCL+=build/sysincl/libc-to-musl.yml + SYSINCL+=build/sysincl/linux-musl.yml +} + +when ($OS_WINDOWS == "yes") { + SYSINCL+=build/sysincl/misc-win.yml + when ($OPENSOURCE !="yes") { + SYSINCL+=build/yandex_specific/sysincl/misc-win.yml + } +} + +when ($OS_ANDROID == "yes") { + SYSINCL+=build/sysincl/android.yml +} + +when ($OS_LINUX != "yes") { + SYSINCL+=build/sysincl/linux-headers.yml +} + +when ($OS_LINUX != "yes" || $CATBOOST_OPENSOURCE == "yes") { + SYSINCL+=build/sysincl/ibdrv.yml +} + +when ($WITH_VALGRIND == "yes") { + SYSINCL+=build/sysincl/valgrind.yml +} + +when ($OS_LINUX == "yes" && $OS_SDK == "ubuntu-12") { + SYSINCL+=build/sysincl/linux-ubuntu-12.yml +} diff --git a/build/conf/toolchains/gnu_toolchain.conf b/build/conf/toolchains/gnu_toolchain.conf new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/build/conf/toolchains/gnu_toolchain.conf diff --git a/build/conf/toolchains/msvc_toolchain.conf b/build/conf/toolchains/msvc_toolchain.conf new file mode 100644 index 0000000000..6b4d6b5c45 --- /dev/null +++ b/build/conf/toolchains/msvc_toolchain.conf @@ -0,0 +1,7 @@ +# TODO(somov): Заглушка для тех мест, где C_FLAGS_PLATFORM используется +# для любых платформ. Нужно унифицировать с GnuToolchain. +C_FLAGS_PLATFORM= + +when ($_UNDER_WINE == "yes") { + WINE_ENV=${env:"WINEPREFIX_SUFFIX=4.0"} +} diff --git a/build/conf/ts.conf b/build/conf/ts.conf new file mode 100644 index 0000000000..8fc221c3ca --- /dev/null +++ b/build/conf/ts.conf @@ -0,0 +1,105 @@ +NODEJS_ROOT=$NODEJS_RESOURCE_GLOBAL +NODEJS_BIN=$NODEJS_ROOT/node +PNPM_ROOT=$PNPM_RESOURCE_GLOBAL +PNPM_SCRIPT=$PNPM_ROOT/pnpm.js +TSC_ROOT=$TS_COMPILER_RESOURCE_GLOBAL/typescript +TSC_SCRIPT=$TSC_ROOT/lib/tsc.js +NOTS_TOOL=${tool:"tools/nots"} +NOTS_TOOL_BASE_ARGS=--build-root $ARCADIA_BUILD_ROOT --bindir $BINDIR --curdir $CURDIR --nodejs-bin $NODEJS_BIN + +NPM_CONTRIBS_PATH=devtools/dummy_arcadia/ts/contribs + +### @usage: NPM_CONTRIBS() # internal +### +### Defines special module that provides contrib tarballs from internal npm registry. +### Should be used only with `NODE_MODULES` macro. +### +### @see [FROM_NPM_LOCKFILES()](#macro_FROM_NPM_LOCKFILES) +### @see [NODE_MODULES()](#macro_NODE_MODULES) +module NPM_CONTRIBS: _BASE_UNIT { + .CMD=TOUCH_UNIT + .PEERDIR_POLICY=as_build_from + .FINAL_TARGET=no + .ALLOWED=FROM_NPM_LOCKFILES + .RESTRICTED=PEERDIR + + SET(MODULE_TAG NPM_CONTRIBS) + + MODULE_SUFFIX=.fake + + _BARE_MODULE() +} + +### @usage: FROM_NPM_LOCKFILES(LOCKFILES...) # internal +### +### Defines lockfile list for `NPM_CONTRIBS` module. +### +### @see [NPM_CONTRIBS()](#module_NPM_CONTRIBS) +macro FROM_NPM_LOCKFILES(LOCKFILES...) { + SET_APPEND(_MAKEFILE_INCLUDE_LIKE_DEPS $LOCKFILES) + # See implementation in build/plugins/nots.py + _FROM_NPM_LOCKFILES($LOCKFILES) +} + +### @usage: FROM_NPM(NAME VERSION SKY_ID INTEGRITY INTEGRITY_ALGO TARBALL_PATH) +macro FROM_NPM(NAME, VERSION, SKY_ID, INTEGRITY, INTEGRITY_ALGO, TARBALL_PATH) { + .CMD=${cwd:BINDIR} $YMAKE_PYTHON ${input:"build/scripts/fetch_from_npm.py"} ${input;hide:"build/scripts/fetch_from.py"} ${input;hide:"build/scripts/sky.py"} --name $NAME --version $VERSION --sky-id $SKY_ID --integrity $INTEGRITY --integrity-algorithm $INTEGRITY_ALGO --copy-to ${output:TARBALL_PATH} ${requirements;hide:"network:full"} ${kv;hide:"p NP"} ${kv;hide:"pc yellow"} +} + +### @usage: NODE_MODULES() +### +### Materializes `node_modules.tar` bundle according to the module's lockfile. +### +### @see [NPM_CONTRIBS()](#module_NPM_CONTRIBS) +macro NODE_MODULES() { + # See implementation in build/plugins/nots.py +} + +_NODE_MODULES_INPUTS= + +macro _NODE_MODULES(IN{input}[], OUT{output}[]) { + PEERDIR($NPM_CONTRIBS_PATH) + SET(_NODE_MODULES_INPUTS \${input;hide:node_modules.tar}) + + .CMD=${cwd:BINDIR} $NOTS_TOOL create-node-modules $NOTS_TOOL_BASE_ARGS --pnpm-script $PNPM_SCRIPT --contribs $NPM_CONTRIBS_PATH ${input;hide:IN} ${output;global;hide:OUT} ${kv;hide:"p NM"} ${kv;hide:"pc yellow"} +} + +module _TS_BASE_UNIT: _BASE_UNIT { + SET(MODULE_TAG TS) + SET(PEERDIR_TAGS TS NPM_CONTRIBS) + + PEERDIR(build/platform/nodejs) + PEERDIR(build/external_resources/pnpm) + PEERDIR(build/external_resources/typescript) + + MODULE_SUFFIX=.fake + + _BARE_MODULE() +} + +TS_CONFIG_PATH=tsconfig.json + +TS_COMPILE=${cwd:BINDIR} $NOTS_TOOL compile-ts $NOTS_TOOL_BASE_ARGS --tsc-script $TSC_SCRIPT --config ${input:TS_CONFIG_PATH} $_NODE_MODULES_INPUTS ${output;hide:"package.json"} ${kv;hide:"p FE"} ${kv;hide:"pc yellow"} && $TOUCH_UNIT + +### @usage: TS_LIBRARY([name]) +### +### The TypeScript/JavaScript library module, compiles TypeScript sources to JavaScript. +### Build results are JavaScript files, typings and source mappings (depending on local tsconfig.json settings). +### +### @see [NODE_MODULES()](#macro_NODE_MODULES) +### @example +### +### TS_LIBRARY() +### SRCS(src/index.ts) +### NODE_MODULES() +### END() +### +module TS_LIBRARY : _TS_BASE_UNIT { + .CMD=TS_COMPILE + .FINAL_TARGET=yes + .PEERDIR_POLICY=as_build_from + + SET_APPEND(_MAKEFILE_INCLUDE_LIKE_DEPS ${CURDIR}/${TS_CONFIG_PATH} ${CURDIR}/package.json) + + _TS_CONFIGURE($TS_CONFIG_PATH) +} |