aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhiddenpath <hiddenpath@yandex-team.com>2023-08-22 11:29:21 +0300
committerhiddenpath <hiddenpath@yandex-team.com>2023-08-22 12:10:26 +0300
commitb83892f362596c907029f97068a54d1c8b8c0fb4 (patch)
treebf006f929fd6e2b6136877817d7e2bed0f990e66
parentf10bc4e5bd07c8e5293d63f09e50e0d5f8e2902f (diff)
downloadydb-b83892f362596c907029f97068a54d1c8b8c0fb4.tar.gz
Make libclang.rt_profile depends on sources again
-rw-r--r--build/conf/go.conf29
-rw-r--r--build/conf/linkers/ld.conf24
-rw-r--r--build/scripts/copy_clang_profile_rt.py38
-rw-r--r--build/scripts/ya.make1
-rw-r--r--build/ymake.core.conf26
5 files changed, 110 insertions, 8 deletions
diff --git a/build/conf/go.conf b/build/conf/go.conf
index 9e338c3d4f..664ebd95cc 100644
--- a/build/conf/go.conf
+++ b/build/conf/go.conf
@@ -235,10 +235,26 @@ macro _GO_LINK_TEST_IMPL(CGO_FILES[], EXTRA_INPUTS[], EXTRA_TEXT_INPUTS[], GO_TE
}
# tag:go-specific
-GO_LINK_LIB=$GENERATE_MF && $_GO_LINK_LIB_IMPL($_GO_SRCS_VALUE CGO_FILES $_CGO_SRCS_VALUE EXTRA_TEXT_INPUTS $_GO_EMBED_INPUTS)
-GO_LINK_EXE=$GENERATE_MF && $GENERATE_VCS_C_INFO_NODEP && $GENERATE_VCS_GO_INFO_NODEP && $_GO_LINK_EXE_IMPL($_GO_SRCS_VALUE CGO_FILES $_CGO_SRCS_VALUE EXTRA_TEXT_INPUTS $_GO_EMBED_INPUTS)
-GO_LINK_TEST=$GENERATE_VCS_C_INFO_NODEP && $GENERATE_VCS_GO_INFO_NODEP && $_GO_LINK_TEST_IMPL($_GO_SRCS_VALUE CGO_FILES $_CGO_SRCS_VALUE EXTRA_TEXT_INPUTS $_GO_EMBED_INPUTS GO_TEST_FILES $_GO_TEST_SRCS_VALUE GO_XTEST_FILES $_GO_XTEST_SRCS_VALUE)
-GO_LINK_DLL=$GO_LINK_EXE && $COPY_CMD $BINDIR/_cgo_export.h ${output;pre=${MODULE_PREFIX};suf=.h:REALPRJNAME}
+GO_LINK_LIB=
+GO_LINK_LIB+=$GENERATE_MF
+GO_LINK_LIB+=&& $_GO_LINK_LIB_IMPL($_GO_SRCS_VALUE CGO_FILES $_CGO_SRCS_VALUE EXTRA_TEXT_INPUTS $_GO_EMBED_INPUTS)
+
+GO_LINK_EXE=
+GO_LINK_EXE+=$GENERATE_MF
+GO_LINK_EXE+=&& $GENERATE_VCS_C_INFO_NODEP
+GO_LINK_EXE+=&& $GENERATE_VCS_GO_INFO_NODEP
+GO_LINK_EXE+=&& $COPY_PROFILE_RUNTIME
+GO_LINK_EXE+=&& $_GO_LINK_EXE_IMPL($_GO_SRCS_VALUE CGO_FILES $_CGO_SRCS_VALUE EXTRA_TEXT_INPUTS $_GO_EMBED_INPUTS)
+
+GO_LINK_TEST=
+GO_LINK_TEST+=$GENERATE_VCS_C_INFO_NODEP
+GO_LINK_TEST+=&& $GENERATE_VCS_GO_INFO_NODEP
+GO_LINK_TEST+=&& $COPY_PROFILE_RUNTIME
+GO_LINK_TEST+=&& $_GO_LINK_TEST_IMPL($_GO_SRCS_VALUE CGO_FILES $_CGO_SRCS_VALUE EXTRA_TEXT_INPUTS $_GO_EMBED_INPUTS GO_TEST_FILES $_GO_TEST_SRCS_VALUE GO_XTEST_FILES $_GO_XTEST_SRCS_VALUE)
+
+GO_LINK_DLL=
+GO_LINK_DLL+=$GO_LINK_EXE
+GO_LINK_DLL+=&& $COPY_CMD $BINDIR/_cgo_export.h ${output;pre=${MODULE_PREFIX};suf=.h:REALPRJNAME}
# tag:go-specific
CGO_ENABLED=yes
@@ -849,6 +865,11 @@ module GO_PROGRAM: _GO_BASE_UNIT {
when ($HARDENING == "yes") {
_GO_BUILDMODE=++buildmode=pie
}
+
+ when ($NEED_PROFILE_RUNTIME == "yes") {
+ LDFLAGS+=-resource-dir=contrib/libs/clang-rt
+ PEERDIR+=contrib/libs/clang14-rt/lib/profile
+ }
}
# tag:go-specific
diff --git a/build/conf/linkers/ld.conf b/build/conf/linkers/ld.conf
index 090328de1d..e2cf0d0b2e 100644
--- a/build/conf/linkers/ld.conf
+++ b/build/conf/linkers/ld.conf
@@ -191,8 +191,8 @@ 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+=\
+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 \
@@ -271,8 +271,24 @@ otherwise {
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
+
+_LINK_EXE=
+_LINK_EXE+=$GENERATE_MF
+_LINK_EXE+=&& $GENERATE_VCS_C_INFO_NODEP
+_LINK_EXE+=&& $COPY_PROFILE_RUNTIME
+_LINK_EXE+=&& $REAL_LINK_EXE
+_LINK_EXE+=&& $DWARF_COMMAND
+_LINK_EXE+=&& $LINK_ADDITIONAL_SECTIONS_COMMAND
+_LINK_EXE+=&& $PACK_IOS_CMD
+
+_LINK_DYN_LIB=
+_LINK_DYN_LIB+=$GENERATE_MF
+_LINK_DYN_LIB+=&& $GENERATE_VCS_C_INFO_NODEP
+_LINK_DYN_LIB+=&& $COPY_PROFILE_RUNTIME
+_LINK_DYN_LIB+=&& $REAL_LINK_DYN_LIB
+_LINK_DYN_LIB+=&& $DWARF_COMMAND
+_LINK_DYN_LIB+=&& $LINK_ADDITIONAL_SECTIONS_COMMAND
+
when ($TIDY == "yes") {
_REAL_LINK_EXE=$REAL_LINK_EXE_TIDY
_LINK_EXE=$REAL_LINK_EXE
diff --git a/build/scripts/copy_clang_profile_rt.py b/build/scripts/copy_clang_profile_rt.py
new file mode 100644
index 0000000000..1e5cd9c56a
--- /dev/null
+++ b/build/scripts/copy_clang_profile_rt.py
@@ -0,0 +1,38 @@
+import optparse
+import os
+import shutil
+
+import process_command_files as pcf
+
+CLANG_RT_VERSION = 14
+
+def copy_clang_rt_profile(cmd, build_root, arch) -> None:
+ profile_rt_lib = None
+ resource_dir = None
+
+ for arg in cmd:
+ if arg.startswith(f'contrib/libs/clang{CLANG_RT_VERSION}-rt/lib/profile/libclang_rt.profile'):
+ profile_rt_lib = arg
+ if arg.startswith('-resource-dir='):
+ resource_dir = arg[len('-resource-dir='):]
+
+ profile_rt_path = os.path.join(build_root, profile_rt_lib)
+ profile_name = os.path.basename(profile_rt_path)
+
+ dst_dir = os.path.join(build_root, resource_dir, 'lib/{}'.format(arch.lower()))
+ os.makedirs(dst_dir, exist_ok=True)
+ shutil.copy(profile_rt_path, os.path.join(dst_dir, profile_name))
+
+
+def parse_args():
+ parser = optparse.OptionParser()
+ parser.disable_interspersed_args()
+ parser.add_option('--build-root')
+ parser.add_option('--arch')
+ return parser.parse_args()
+
+
+if __name__ == '__main__':
+ opts, args = parse_args()
+ args = pcf.skip_markers(args)
+ copy_clang_rt_profile(args, opts.build_root, opts.arch)
diff --git a/build/scripts/ya.make b/build/scripts/ya.make
index 69a7bd572d..5448ec7db8 100644
--- a/build/scripts/ya.make
+++ b/build/scripts/ya.make
@@ -102,6 +102,7 @@ ELSEIF(PY3)
TEST_SRCS(
build_info_gen.py
+ copy_clang_profile_rt.py
gen_yql_python_udf.py
)
ENDIF()
diff --git a/build/ymake.core.conf b/build/ymake.core.conf
index 5f8582ae76..d336b2abab 100644
--- a/build/ymake.core.conf
+++ b/build/ymake.core.conf
@@ -132,6 +132,27 @@ otherwise {
TIDY_VALUE=
}
+# tag:profile
+NEED_PROFILE_RUNTIME=no
+when ($BUILD_TYPE == "PROFILE" || $BUILD_TYPE == "COVERAGE" || ($CLANG_COVERAGE && $CLANG_COVERAGE != "no") || $GCOV_COVERAGE == "yes") {
+ when($CLANG && ($TARGET_PLATFORM == "LINUX" || $TARGET_PLATFORM == "DARWIN")) {
+ NEED_PROFILE_RUNTIME=yes
+ }
+}
+
+when ($NEED_PROFILE_RUNTIME == "yes") {
+ COPY_PROFILE_RUNTIME=\
+ $YMAKE_PYTHON3 ${input:"build/scripts/copy_clang_profile_rt.py"} \
+ --arch $TARGET_PLATFORM \
+ --build-root $ARCADIA_BUILD_ROOT --
+ COPY_PROFILE_RUNTIME+=\
+ ${rootrel:PEERS} \
+ $LDFLAGS
+}
+otherwise {
+ COPY_PROFILE_RUNTIME=
+}
+
# tag:codenav
when ($CODENAVIGATION && $NOCODENAVIGATION != "yes") {
PY_PROGRAM_LINK_EXE=$LINK_EXE ${kv;hide:"pyndex $TARGET"}
@@ -935,6 +956,11 @@ module _LINK_UNIT: _BASE_UNIT {
PEERDIR += contrib/libs/cxxsupp
}
+ when ($NEED_PROFILE_RUNTIME == "yes") {
+ LDFLAGS+=-resource-dir=contrib/libs/clang-rt
+ PEERDIR+=contrib/libs/clang14-rt/lib/profile
+ }
+
when ($USE_LIBCXXRT == "yes") {
PEERDIR += contrib/libs/cxxsupp/libcxxrt
}