aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsvidyuk <svidyuk@yandex-team.ru>2022-04-13 09:27:11 +0300
committersvidyuk <svidyuk@yandex-team.ru>2022-04-13 09:27:11 +0300
commitc4847818d8a382f7a09aa3b3d998fcd2148e8779 (patch)
tree43c96ff4f9b0c0af6621a20e6490ab70f22c83d5
parent212c9e2367f2392b02e60c5f2f873871032617ee (diff)
downloadydb-c4847818d8a382f7a09aa3b3d998fcd2148e8779.tar.gz
Resolution for cmake target names conflicts
DEVTOOLS-9035 ref:2d37e3e9223ccf599361560aa5b1cfae6f0aa6c0
-rw-r--r--build/conf/opensource.conf34
-rw-r--r--build/ymake.core.conf27
2 files changed, 39 insertions, 22 deletions
diff --git a/build/conf/opensource.conf b/build/conf/opensource.conf
index 9d84163f10..83c23d1421 100644
--- a/build/conf/opensource.conf
+++ b/build/conf/opensource.conf
@@ -18,3 +18,37 @@ when ($OPENSOURCE) {
HAVE_MKL=no
USE_MKL=no
}
+
+# Extra macros to control how cmake export works
+
+CMAKE_PACKAGE=
+CMAKE_PACKAGE_COMPONENT=
+CMAKE_PACKAGE_TARGET=
+CONAN_REFERENCE=
+CONAN_PKG_OPTS=
+### @usage: OPENSOURCE_EXPORT_REPLACEMENT(CMAKE PkgName CMAKE_TARGET PkgName::PkgTarget CONAN ConanRef CMAKE_COMPONENT OptCmakePkgComponent)
+###
+### Use specified conan/system pacakcge when exporting cmake build scripts for arcadia C++ project
+### for opensource publication.
+macro OPENSOURCE_EXPORT_REPLACEMENT(CMAKE[], CMAKE_TARGET[], CMAKE_COMPONENET[], CONAN[], CONAN_OPTIONS[]) {
+ SET(CMAKE_PACKAGE $CMAKE)
+ SET(CMAKE_PACKAGE_COMPONENT $CMAKE_COMPONENET)
+ SET(CMAKE_LINK_TARGET $CMAKE_TARGET)
+ SET(CONAN_REFERENCE $CONAN)
+ SET(CONAN_PKG_OPTS $CONAN_OPTIONS)
+}
+
+CMAKE_TARGET_NAME=$REALPRJNAME
+CMAKE_TARGET_ARTEFACT_RENAME_RULES=
+### @usage CMAKE_EXPORTED_TARGET_NAME(Name)
+###
+### Forces to use the name given as cmake target name without changing the name of output artefact.
+### This macro should be used to resolve target name conflicts in exported cmake project when
+### changing module name is not applicable. For example both CUDA and non-CUDA py modules for
+### catboost should have same name lib_catboost.so and both of them are defined as PY_ANY_MODULE(_catboost).
+### adding CMAKE_EXPORTED_TARGET_NAME(_catboost_non_cuda) to the non CUDA module ya.make file
+### changes exported cmake target name but preserve generated artefact file name.
+macro CMAKE_EXPORTED_TARGET_NAME(Name) {
+ SET(CMAKE_TARGET_NAME $Name)
+ SET(CMAKE_TARGET_ARTEFACT_RENAME_RULES && set_target_property OUTPUT_NAME $REALPRJNAME)
+}
diff --git a/build/ymake.core.conf b/build/ymake.core.conf
index ed28722c9d..a35ea5f154 100644
--- a/build/ymake.core.conf
+++ b/build/ymake.core.conf
@@ -1736,7 +1736,7 @@ module _BASE_PROGRAM: _LINK_UNIT {
}
}
-CPP_PROGRAM_SEM=add_executable $MODDIR $REALPRJNAME ${hide:TARGET} ${hide:AUTO_INPUT} \
+CPP_PROGRAM_SEM=add_executable $MODDIR $CMAKE_TARGET_NAME ${hide:TARGET} ${hide:AUTO_INPUT} $CMAKE_TARGET_ARTEFACT_RENAME_RULES \
&& vcs_info \
&& target_link_options PRIVATE $LDFLAGS $OBJADDE_LIB $OBJADDE \
&& target_include_directories PRIVATE $_C__INCLUDE_OWNED \
@@ -2496,7 +2496,7 @@ module _LIBRARY: _BASE_UNIT {
}
}
-CPP_LIBRARY_SEM=add_library ${MODDIR} $REALPRJNAME ${hide:TARGET} ${hide:AUTO_INPUT} \
+CPP_LIBRARY_SEM=add_library ${MODDIR} $CMAKE_TARGET_NAME ${hide:TARGET} ${hide:AUTO_INPUT} $CMAKE_TARGET_ARTEFACT_RENAME_RULES \
&& library_fake_marker FAKE_MODULE ${FAKE_MODULE} \
&& consumer_link_library PUBLIC $CMAKE_LINK_TARGET \
&& target_include_directories PUBLIC $_C__INCLUDE_GLOBAL \
@@ -2505,7 +2505,7 @@ CPP_LIBRARY_SEM=add_library ${MODDIR} $REALPRJNAME ${hide:TARGET} ${hide:AUTO_IN
&& target_compile_options PUBLIC $USER_CFLAGS_GLOBAL_RAW $USER_CXXFLAGS_GLOBAL_RAW \
&& target_link_options INTERFACE $LDFLAGS_GLOBAL_RAW \
&& add_language C && add_language CXX
-CPP_OBJ_LIBRARY_SEM=add_global_library_for ${MODDIR} ${suf=.global:REALPRJNAME} $REALPRJNAME ${hide:GLOBAL_TARGET} ${hide:AUTO_INPUT} \
+CPP_OBJ_LIBRARY_SEM=add_global_library_for ${MODDIR} ${suf=.global:CMAKE_TARGET_NAME} $CMAKE_TARGET_NAME ${hide:GLOBAL_TARGET} ${hide:AUTO_INPUT} \
&& target_include_directories PUBLIC $_C__INCLUDE_GLOBAL \
&& target_include_directories PRIVATE $_C__INCLUDE_OWNED \
&& target_compile_options PRIVATE $USER_CFLAGS $USER_CXXFLAGS \
@@ -2637,7 +2637,7 @@ otherwise {
LINK_FAT_OBJECT_CMD=$LINK_FAT_OBJECT_LIBRARY
}
-FAT_OBJECT_SEM=add_fat_object ${MODDIR} ${REALPRJNAME} ${hide:TARGET} ${hide:AUTO_INPUT} \
+FAT_OBJECT_SEM=add_fat_object ${MODDIR} ${CMAKE_TARGET_NAME} ${hide:TARGET} ${hide:AUTO_INPUT} ${CMAKE_TARGET_ARTEFACT_RENAME_RULES} \
&& target_include_directories PRIVATE $_C__INCLUDE_OWNED \
&& target_compile_options PRIVATE $USER_CFLAGS $USER_CXXFLAGS \
&& set_global_flags FAT_OBJECT_PREFIX ${MODULE_PREFIX} \
@@ -2694,7 +2694,7 @@ _EXPORT_SCRIPT_SEM=
macro _ADD_DYNLYB_SEM(Libname) {
.SEM=add_library ${MODDIR} ${Libname} SHARED ${hide:TARGET} ${hide:AUTO_INPUT} && target_include_directories PUBLIC $_C__INCLUDE_GLOBAL && target_include_directories PRIVATE $_C__INCLUDE_OWNED && target_compile_options PRIVATE $USER_CFLAGS $USER_CXXFLAGS && target_compile_options PUBLIC $USER_CFLAGS_GLOBAL_RAW $USER_CXXFLAGS_GLOBAL_RAW && vcs_info $_EXPORT_SCRIPT_SEM
}
-CPP_DYN_LIBRARY_SEM=$_ADD_DYNLYB_SEM($REALPRJNAME)
+CPP_DYN_LIBRARY_SEM=$_ADD_DYNLYB_SEM($CMAKE_TARGET_NAME) $CMAKE_TARGET_ARTEFACT_RENAME_RULES
### @usage: DLL_UNIT # internal
###
@@ -9250,23 +9250,6 @@ macro ORIGINAL_SOURCE(Source) {
ENABLE(UNUSED_MACRO)
}
-CMAKE_PACKAGE=
-CMAKE_PACKAGE_COMPONENT=
-CMAKE_PACKAGE_TARGET=
-CONAN_REFERENCE=
-CONAN_PKG_OPTS=
-### @usage: OPENSOURCE_EXPORT_REPLACEMENT(CMAKE PkgName CMAKE_TARGET PkgName::PkgTarget CONAN ConanRef CMAKE_COMPONENT OptCmakePkgComponent)
-###
-### Use specified conan/system pacakcge when exporting cmake build scripts for arcadia C++ project
-### for opensource publication.
-macro OPENSOURCE_EXPORT_REPLACEMENT(CMAKE[], CMAKE_TARGET[], CMAKE_COMPONENET[], CONAN[], CONAN_OPTIONS[]) {
- SET(CMAKE_PACKAGE $CMAKE)
- SET(CMAKE_PACKAGE_COMPONENT $CMAKE_COMPONENET)
- SET(CMAKE_LINK_TARGET $CMAKE_TARGET)
- SET(CONAN_REFERENCE $CONAN)
- SET(CONAN_PKG_OPTS $CONAN_OPTIONS)
-}
-
# tag:licence
CREDITS_FILE_EXTRA_EXT=
CREDITS_FLAGS=