diff options
author | dimdim11 <dimdim11@yandex-team.com> | 2024-05-15 23:03:15 +0300 |
---|---|---|
committer | dimdim11 <dimdim11@yandex-team.com> | 2024-05-15 23:11:41 +0300 |
commit | efb3665db25f0dac8df031b5ca5df8b55bdf5ce6 (patch) | |
tree | 55f2cacc288da9ddd714252eb9aaed66317c9b8f | |
parent | 95043960ea8ba262f5b0bc21f57f1a0ec2958cca (diff) | |
download | ydb-efb3665db25f0dac8df031b5ca5df8b55bdf5ce6.tar.gz |
CMake generator based on Jinja generator
99902937b544f5d8150a5c6132861e1bb52d3ced
23 files changed, 192 insertions, 84 deletions
diff --git a/build/conf/bison_lex.conf b/build/conf/bison_lex.conf index e8b980b4de..4fbce40991 100644 --- a/build/conf/bison_lex.conf +++ b/build/conf/bison_lex.conf @@ -134,7 +134,7 @@ macro USE_OLD_FLEX() { macro _SRC("y", SRC, SRCFLAGS...) { .PEERDIR=contrib/tools/bison/bison/induced .CMD=${tool:"contrib/tools/bison/bison"} $BISON_FLAGS --m4=${tool:"contrib/tools/bison/m4"} $_BISON_HEADER ${hide:_BISON_GEN_EXT} -o ${nopath;output;suf=$_BISON_GEN_EXT:SRC} ${input:SRC} ${SRCFLAGS} ${kv;hide:"p YC"} ${kv;hide:"pc light-green"} && $_BISON_PP - .SEM=target_bison_parser PRIVATE ${input:SRC} ${output;nopath;noext;hide;suf=${OBJ_SUF}.o:SRC} ${nopath;noext;output;hide:SRC.h} ${nopath;noext;output;addincl;hide:SRC.h} && set_global_flags BISON_FLAGS $BISON_FLAGS && conan_require_tool m4/1.4.19 && conan_import '"bin, m4* -> ./bin/m4/bin"' && conan_require_tool bison/3.8.2 && conan_import '"bin, bison* -> ./bin/bison/bin"' && conan_import '"res, * -> ./bin/bison/res"' + .SEM=target_bison_parser PRIVATE ${input:SRC} ${output;nopath;noext;hide;suf=${OBJ_SUF}.o:SRC} ${nopath;noext;output;hide:SRC.h} ${nopath;noext;output;addincl;hide:SRC.h} && set_global_flags BISON_FLAGS $BISON_FLAGS && conan_require_tool m4/1.4.19 && conan_import '"bin, m4* -> ./bin/m4/bin"' && conan_require_tool bison/3.8.2 && conan_import '"bin, bison* -> ./bin/bison/bin"' && conan_import '"res, * -> ./bin/bison/res"' && platform_vars-BISON_FLAGS ${quo:BISON_FLAGS} && conan-tool_requires m4/1.4.19 && conan-imports 'bin, m4* -> ./bin/m4/bin' && conan-tool_requires bison/3.8.2 && conan-imports 'bin, bison* -> ./bin/bison/bin' && conan-imports 'res, * -> ./bin/bison/res' } macro _SRC("ypp", SRC, SRCFLAGS...) { @@ -146,7 +146,7 @@ macro _SRC("ypp", SRC, SRCFLAGS...) { macro _SRC("l", SRC, SRCFLAGS...) { .CMD=$_FLEX_TOOL $LEX_FLAGS ${SRCFLAGS} $_FLEX_HEADER ${hide:_FLEX_GEN_EXT} -o${output;suf=$_FLEX_GEN_EXT:SRC} ${output_include;hide:"util/system/compiler.h"} ${input:SRC} ${kv;hide:"p LX"} ${kv;hide:"pc yellow"} .ADDINCL=$_FLEX_TOOL_DIR - .SEM=target_flex_lexers ${tool;hide:_FLEX_TOOL} ${output;hide;suf=${OBJ_SUF}.o:SRC} ${input:SRC} && set_global_flags LEX_FLAGS $LEX_FLAGS + .SEM=target_flex_lexers ${tool;hide:_FLEX_TOOL} ${output;hide;suf=${OBJ_SUF}.o:SRC} ${input:SRC} && set_global_flags LEX_FLAGS $LEX_FLAGS && platform_vars-LEX_FLAGS ${quo:LEX_FLAGS} } # tag:src-processing diff --git a/build/conf/fbs.conf b/build/conf/fbs.conf index 000ec9a1eb..9c7ddb47d5 100644 --- a/build/conf/fbs.conf +++ b/build/conf/fbs.conf @@ -39,7 +39,7 @@ _GO_FLATC_IMPORTS=\ # tag:fbs tag:cpp-specific macro _CPP_FLATC_CMD(SRC, SRCFLAGS...) { .CMD=${cwd:ARCADIA_BUILD_ROOT} $YMAKE_PYTHON3 ${input:"build/scripts/cpp_flatc_wrapper.py"} ${tool:FLATC} --no-warnings --cpp --keep-prefix --gen-mutable --schema -b --yandex-maps-iter --gen-object-api --filename-suffix .fbs ${FLATC_FLAGS_VALUE} ${pre=-I :_FLATC__INCLUDE} -o ${output;main;norel:SRC.h} ${output;hide;norel:SRC.cpp} ${input:SRC} ${output;hide;noext;norel:SRC.iter.fbs.h} ${output;noauto;hide;noext;norel:SRC.bfbs} ${kv;hide:"p FL"} ${kv;hide:"pc light-green"} ${hide:FBS_FAKEID} - .SEM=target_fbs_source PRIVATE ${input:SRC} ${FLATC_FLAGS_VALUE} ${pre=-I :_FLATC__INCLUDE} ${output;hide;norel:SRC.h} ${output;hide;norel:SRC.cpp} ${output;hide;noext;norel:SRC.iter.fbs.h} ${output;noauto;hide;noext;norel:SRC.bfbs} ${hide;tool:FLATC} && set_global_flags FBS_CPP_FLAGS --no-warnings --cpp --keep-prefix --gen-mutable --schema -b --yandex-maps-iter --gen-object-api --filename-suffix .fbs ${input;hide:"build/scripts/cpp_flatc_wrapper.py"} + .SEM=target_fbs_source PRIVATE ${input:SRC} ${FLATC_FLAGS_VALUE} ${pre=-I :_FLATC__INCLUDE} ${output;hide;norel:SRC.h} ${output;hide;norel:SRC.cpp} ${output;hide;noext;norel:SRC.iter.fbs.h} ${output;noauto;hide;noext;norel:SRC.bfbs} ${hide;tool:FLATC} && set_global_flags FBS_CPP_FLAGS --no-warnings --cpp --keep-prefix --gen-mutable --schema -b --yandex-maps-iter --gen-object-api --filename-suffix .fbs && platform_vars-FBS_CPP_FLAGS "--no-warnings --cpp --keep-prefix --gen-mutable --schema -b --yandex-maps-iter --gen-object-api --filename-suffix .fbs" ${input;hide:"build/scripts/cpp_flatc_wrapper.py"} .PEERDIR=contrib/libs/flatbuffers } diff --git a/build/conf/proto.conf b/build/conf/proto.conf index ebd1641b4a..28c894d260 100644 --- a/build/conf/proto.conf +++ b/build/conf/proto.conf @@ -385,6 +385,7 @@ macro YT_ORM_PROTO_YSON(OUT_OPTS[], Files...) { _SEM_CPP_PROTO_CMD=target_proto_messages PRIVATE ${input:File} $CPP_PROTO_OUTS_SEM ${output;hide;suf=${OBJ_SUF}.pb.o:File} $DEFAULT_PROTOC_TOOLS \ && set_global_flags COMMON_PROTOC_FLAGS \ + && platform_vars-COMMON_PROTOC_FLAGS "" \ && target_proto_outs --cpp_out=$ARCADIA_BUILD_ROOT/$PROTO_NAMESPACE $PROTOC_STYLEGUIDE_OUT \ && target_proto_addincls ./$PROTO_NAMESPACE $ARCADIA_ROOT/$PROTO_NAMESPACE ${_PROTO__INCLUDE} $ARCADIA_BUILD_ROOT $PROTOBUF_PATH @@ -403,6 +404,7 @@ macro _CPP_VANILLA_PROTO_CMD(File) { _SEM_CPP_EV_CMD=target_ev_messages PRIVATE ${input:File} $CPP_EV_OUTS_SEM ${output;hide;suf=${OBJ_SUF}.pb.o:File} ${hide;tool:"tools/event2cpp/bin"} $DEFAULT_PROTOC_TOOLS \ && set_global_flags COMMON_PROTOC_FLAGS \ + && platform_vars-COMMON_PROTOC_FLAGS "" \ && target_proto_outs --cpp_out=$ARCADIA_BUILD_ROOT/$PROTO_NAMESPACE $PROTOC_STYLEGUIDE_OUT --event2cpp_out=$ARCADIA_BUILD_ROOT/$PROTO_NAMESPACE \ && target_proto_addincls ./$PROTO_NAMESPACE $ARCADIA_ROOT/$PROTO_NAMESPACE ${_PROTO__INCLUDE} $ARCADIA_BUILD_ROOT $PROTOBUF_PATH $ARCADIA_ROOT/library/cpp/eventlog diff --git a/build/export_generators/cmake/common_cmake_lists.jinja b/build/export_generators/cmake/common_cmake_lists.jinja deleted file mode 100644 index c70ae05632..0000000000 --- a/build/export_generators/cmake/common_cmake_lists.jinja +++ /dev/null @@ -1,10 +0,0 @@ -{% include '[generator]/disclaimer.jinja' %} - -{% set platforms_count = platform_names|length -%} -{% if platforms_count > 0 -%} -{% for i in range(platforms_count) %} -{% if i != 0 %}else{% endif %}if ({{ platforms[platform_names[i]] }}) - include(CMakeLists.{{ platform_names[i] }}.txt) -{%- endfor %} -endif() -{% endif -%} diff --git a/build/export_generators/cmake/conanfile.jinja b/build/export_generators/cmake/conanfile.jinja index 120c42d095..da69d8c062 100644 --- a/build/export_generators/cmake/conanfile.jinja +++ b/build/export_generators/cmake/conanfile.jinja @@ -1,20 +1,38 @@ [requires] -{% for package in conan_packages -%} +{%- if conan.requires is defined -%} +{%- for package in conan.requires %} {{ package }} -{% endfor %} +{%- endfor -%} +{%- endif %} + [tool_requires] -{% for package in conan_tool_packages -%} +{%- if conan.tool_requires is defined -%} +{%- for package in conan.tool_requires %} {{ package }} -{% endfor %} +{%- endfor -%} +{%- endif %} + [options] -{% for option in conan_options -%} +{%- if conan.options is defined -%} +{%- for option in conan.options %} {{ option }} -{% endfor %} +{%- endfor -%} +{%- endif %} + [imports] -{% for imp in conan_imports -%} -{{ imp }} -{% endfor %} +{%- if conan.imports is defined -%} +{%- for import_ in conan.imports %} +{{ import_ }} +{%- endfor -%} +{%- endif %} + [generators] cmake_find_package cmake_paths +{%- if conan.generators is defined -%} +{%- for generator in conan.generators %} +{{ generator }} +{%- endfor -%} +{%- endif %} +{%- include "[generator]/debug.jinja" ignore missing -%} diff --git a/build/export_generators/cmake/debug.jinja b/build/export_generators/cmake/debug.jinja new file mode 100644 index 0000000000..28226878ba --- /dev/null +++ b/build/export_generators/cmake/debug.jinja @@ -0,0 +1,25 @@ +{%- if dump_sems is defined %} + +#[===[ +vvvvvv SEMANTICS +{#- replace(' ', ' ') is workaround, else `split` function in C++ receive invalid input -#} +{%- set lines = split(dump_sems|replace(' ', ' '), '\n') -%} +{%- for line in lines %} +{{ line }} +{%- endfor %} +^^^^^^ SEMANTICS +]===] +{%- endif -%} + +{%- if dump_attrs is defined %} + +#[===[ +vvvvvv ATTRIBUTES +{#- replace(' ', ' ') is workaround, else `split` function in C++ receive invalid input -#} +{%- set lines = split(dump_attrs|replace(' ', ' '), '\n') -%} +{%- for line in lines %} +{{ line }} +{%- endfor %} +^^^^^^ ATTRIBUTES +]===] +{%- endif -%} diff --git a/build/export_generators/cmake/dir_cmake_lists.jinja b/build/export_generators/cmake/dir_cmake_lists.jinja index 93afa70506..c74db38d6b 100644 --- a/build/export_generators/cmake/dir_cmake_lists.jinja +++ b/build/export_generators/cmake/dir_cmake_lists.jinja @@ -38,3 +38,4 @@ add_subdirectory({{ subdir }}) {%- endfor -%} {%- endif -%} {%- include 'epilogue.cmake' ignore missing -%} +{%- include "[generator]/debug.jinja" ignore missing -%} diff --git a/build/export_generators/cmake/generator.toml b/build/export_generators/cmake/generator.toml index da256b5a96..96d21b0314 100644 --- a/build/export_generators/cmake/generator.toml +++ b/build/export_generators/cmake/generator.toml @@ -42,26 +42,26 @@ copy=[ [targets.EMPTY] template={ path="dir_cmake_lists.jinja", dest="CMakeLists{PLATFORM}.txt" } -merge_platform_template={ path="common_cmake_lists.jinja", dest="CMakeLists.txt" } +merge_platform_template={ path="merge_platforms_cmake_lists.jinja", dest="CMakeLists.txt" } [targets.add_executable] template={ path="dir_cmake_lists.jinja", dest="CMakeLists{PLATFORM}.txt" } -merge_platform_template={ path="common_cmake_lists.jinja", dest="CMakeLists.txt" } +merge_platform_template={ path="merge_platforms_cmake_lists.jinja", dest="CMakeLists.txt" } [targets.add_global_library_for] is_extra_target = true [targets.add_library] template={ path="dir_cmake_lists.jinja", dest="CMakeLists{PLATFORM}.txt" } -merge_platform_template={ path="common_cmake_lists.jinja", dest="CMakeLists.txt" } +merge_platform_template={ path="merge_platforms_cmake_lists.jinja", dest="CMakeLists.txt" } [targets.add_shared_library] template={ path="dir_cmake_lists.jinja", dest="CMakeLists{PLATFORM}.txt" } -merge_platform_template={ path="common_cmake_lists.jinja", dest="CMakeLists.txt" } +merge_platform_template={ path="merge_platforms_cmake_lists.jinja", dest="CMakeLists.txt" } [targets.add_fat_object] template={ path="dir_cmake_lists.jinja", dest="CMakeLists{PLATFORM}.txt" } -merge_platform_template={ path="common_cmake_lists.jinja", dest="CMakeLists.txt" } +merge_platform_template={ path="merge_platforms_cmake_lists.jinja", dest="CMakeLists.txt" } [targets.add_recursive_library] is_extra_target = true @@ -70,12 +70,35 @@ is_extra_target = true is_extra_target = true [attrs.root] -project_name="str" -project_language_list="list" -platform_vars="list" -includes="sorted_set" -use_conan="bool" +# DEPRECATED - Skipped old hardcoded-cmake attributes +conan_require="skip" +conan_require_tool="skip" +conan_import="skip" +conan_options="skip" +add_language="skip" +set_global_flags="skip" + +# Really used attributes +conan-requires="sorted_set" +conan-tool_requires="sorted_set" +conan-imports="sorted_set" +conan-options="set" +conan-generators="sorted_set" + +project_languages="set" vanilla_protobuf="flag" +includes="set" + +[attrs.platform] +platform_vars-FAT_OBJECT_PREFIX="str" +platform_vars-FAT_OBJECT_SUFFIX="str" +platform_vars-RAGEL_FLAGS="str" +platform_vars-YASM_FLAGS="str" +platform_vars-CMAKE_CUDA_STANDARD="str" +platform_vars-BISON_FLAGS="str" +platform_vars-LEX_FLAGS="str" +platform_vars-FBS_CPP_FLAGS="str" +platform_vars-COMMON_PROTOC_FLAGS="str" [attrs.dir] @@ -111,8 +134,8 @@ attrs=[ "conan_config_install", "conan_load_buildinfo", "conan_parse_arguments", - "conan_require", - "conan_require_tool", + "conan-requires", + "conan-tool_requires", "old_conan_cmake_install", ] copy=["cmake/conan.cmake"] diff --git a/build/export_generators/cmake/merge_platforms_cmake_lists.jinja b/build/export_generators/cmake/merge_platforms_cmake_lists.jinja new file mode 100644 index 0000000000..627bfc17e7 --- /dev/null +++ b/build/export_generators/cmake/merge_platforms_cmake_lists.jinja @@ -0,0 +1,11 @@ +{% include '[generator]/disclaimer.jinja' %} + +{% if platform_names|length -%} +{%- for platform_name in platform_names %} +{% if not loop.first %}else{% endif %}if ({{ platform_conditions[platform_name] }}) + include(CMakeLists.{{ platform_name }}.txt) +{%- endfor %} +endif() + +{% endif -%} +{%- include "[generator]/debug.jinja" ignore missing -%} diff --git a/build/export_generators/cmake/root_cmake_lists.jinja b/build/export_generators/cmake/root_cmake_lists.jinja index be7bad4a09..838e0f3f7b 100644 --- a/build/export_generators/cmake/root_cmake_lists.jinja +++ b/build/export_generators/cmake/root_cmake_lists.jinja @@ -1,13 +1,21 @@ {% include '[generator]/disclaimer.jinja' %} cmake_minimum_required(VERSION 3.15) -project({{project_name}} LANGUAGES{% for value in project_language_list %} {{value}}{% endfor %}) +project({{ project_name }} LANGUAGES +{%- for project_language in project_languages -%} +{%- if project_language == "ASM" -%} +{% set has_asm = true %} +{%- else %} {{ project_language }} +{%- endif -%} +{%- if has_asm %} ASM +{%- endif -%} +{%- endfor -%}) set(BUILD_SHARED_LIBS Off) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_EXTENSIONS Off) -set({{project_name}}_MAX_LINK_JOBS 5 CACHE STRING "Maximum parallel link jobs for Ninja generator") -set_property(GLOBAL PROPERTY JOB_POOLS link_jobs=${{ '{' }}{{project_name}}_MAX_LINK_JOBS{{ '}' }}) +set({{ project_name }}_MAX_LINK_JOBS 5 CACHE STRING "Maximum parallel link jobs for Ninja generator") +set_property(GLOBAL PROPERTY JOB_POOLS link_jobs=${{ '{' }}{{ project_name }}_MAX_LINK_JOBS{{ '}' }}) set(CMAKE_JOB_POOL_LINK link_jobs) list(APPEND CMAKE_MODULE_PATH ${{ '{' }}PROJECT_BINARY_DIR{{ '}' }} ${{ '{' }}PROJECT_SOURCE_DIR{{ '}' }}/cmake) @@ -26,7 +34,7 @@ include(cmake/global_vars.cmake) include({{ incl }}) {% endfor -%} {% endif -%} -{% if use_conan %} +{% if conan.requires or conan.tool_requires %} if (CMAKE_CROSSCOMPILING) include(${PROJECT_BINARY_DIR}/conan_paths.cmake) else() @@ -45,13 +53,14 @@ endif(){% endif %} {%- if vanilla_protobuf %} set(vanilla_protobuf "yes") -{%- endif %} - -{% set platforms_count = platform_names|length -%} -{% if platforms_count > 0 -%} -{% for i in range(platforms_count) -%} -{% if i != 0 %}else{% endif %}if ({{ platforms[platform_names[i]] }}) - include(CMakeLists.{{ platform_names[i] }}.txt) -{% endfor -%} +{%- endif -%} + +{%- if platform_names|length %} +{% for platform_name in platform_names %} +{% if not loop.first %}else{% endif %}if ({{ platform_conditions[platform_name] }}) + include(CMakeLists.{{ platform_name }}.txt) +{%- endfor %} endif() -{% endif %} + +{% endif -%} +{%- include "[generator]/debug.jinja" ignore missing -%} diff --git a/build/export_generators/cmake/root_global_vars.jinja b/build/export_generators/cmake/root_global_vars.jinja index 4299a3004e..171b94ebce 100644 --- a/build/export_generators/cmake/root_global_vars.jinja +++ b/build/export_generators/cmake/root_global_vars.jinja @@ -1,12 +1,18 @@ -{% include '[generator]/disclaimer.jinja' %} +{% include '[generator]/disclaimer.jinja' -%} -{% set platforms_count = platform_names|length -%} -{% if platforms_count > 0 -%} -{% for i in range(platforms_count) %} -{% if i != 0 %}else{% endif %}if ({{ platforms[platform_names[i]] }}) -{%- for var in platform_vars[i] %} - set({% for arg in var %}{{arg}}{% if not loop.last %} {% endif %}{% endfor %}) -{%- endfor %} +{% if platform_names|length -%} +{%- for platform_name in platform_names %} +{% if not loop.first %}else{% endif %}if ({{ platform_conditions[platform_name] }}) +{%- if platform_attrs[platform_name].platform_vars is defined -%} +{%- set platform_vars = platform_attrs[platform_name].platform_vars -%} +{%- set platform_var_names = keys(platform_vars) -%} +{% for platform_var_name in platform_var_names %} + set({{ platform_var_name }} {{ platform_vars[platform_var_name] }}) +{%- endfor -%} +{%- endif -%} {%- endfor %} endif() + {% endif %} + +{%- include "[generator]/debug.jinja" ignore missing -%} diff --git a/build/export_generators/gradle/build.gradle.kts.jinja b/build/export_generators/gradle/build.gradle.kts.jinja index dc03546f70..cea40219c0 100644 --- a/build/export_generators/gradle/build.gradle.kts.jinja +++ b/build/export_generators/gradle/build.gradle.kts.jinja @@ -41,6 +41,9 @@ dependencies { {% endif -%} {% for library in target.consumer -%} {% set classpath = library.classpath -%} +{% if classpath|replace('"','') == classpath -%} +{% set classpath = '"' + classpath + '"' -%} +{% endif -%} {% if mainClass -%} {% if library.excludes.consumer is defined %} implementation({{ classpath }}) { @@ -60,6 +63,9 @@ dependencies { {% for extra_target in extra_targets -%} {% for library in extra_target.consumer -%} {% set classpath = library.classpath -%} +{% if classpath|replace('"','') == classpath -%} +{% set classpath = '"' + classpath + '"' -%} +{% endif -%} testImplementation({{ classpath }}) {% endfor -%} {% endfor -%} diff --git a/build/export_generators/gradle/build.gradle.kts.proto.jinja b/build/export_generators/gradle/build.gradle.kts.proto.jinja index 654a53dd53..1d84696c13 100644 --- a/build/export_generators/gradle/build.gradle.kts.proto.jinja +++ b/build/export_generators/gradle/build.gradle.kts.proto.jinja @@ -27,8 +27,12 @@ java { } dependencies { -{%- for library in target.consumer %} - api({{ library.classpath }}) +{%- for library in target.consumer -%} +{% set classpath = library.classpath -%} +{% if classpath|replace('"','') == classpath -%} +{% set classpath = '"' + classpath + '"' -%} +{% endif %} + api({{ classpath }}) {%- endfor %} {% if target.proto_namespace %} protobuf(files(File(buildProtoDir, "{{ target.proto_namespace }}"))) diff --git a/build/export_generators/hardcoded-cmake/dir_cmake_lists.jinja b/build/export_generators/hardcoded-cmake/dir_cmake_lists.jinja index 792be63865..93afa70506 100644 --- a/build/export_generators/hardcoded-cmake/dir_cmake_lists.jinja +++ b/build/export_generators/hardcoded-cmake/dir_cmake_lists.jinja @@ -37,10 +37,4 @@ add_subdirectory({{ subdir }}) {%- include '[generator]/target_cmake_lists.jinja' -%} {%- endfor -%} {%- endif -%} -{# DEPRECATED - targets will be removed after release #} -{%- if targets is defined -%} -{%- for target in targets -%} -{%- include '[generator]/target_cmake_lists.jinja' -%} -{%- endfor -%} -{%- endif -%} {%- include 'epilogue.cmake' ignore missing -%} diff --git a/build/export_generators/ide-gradle/build.gradle.kts.jinja b/build/export_generators/ide-gradle/build.gradle.kts.jinja index 24ce43d266..fbca52659b 100644 --- a/build/export_generators/ide-gradle/build.gradle.kts.jinja +++ b/build/export_generators/ide-gradle/build.gradle.kts.jinja @@ -168,14 +168,18 @@ dependencies { {%- if library.prebuilt and library.jar and (library.type != "contrib" or build_contribs) %} implementation(files("$project_root/{{ library.jar }}")) {%- else -%} +{%- set classpath = library.classpath -%} +{%- if classpath|replace('"','') == classpath -%} +{%- set classpath = '"' + classpath + '"' -%} +{%- endif -%} {%- if library.type != "contrib" %} {%- if library.testdep %} implementation(project(path = ":{{ library.testdep | replace("/", ":") }}", configuration = "testArtifacts")) {%- else %} - implementation({{ library.classpath }}) + implementation({{ classpath }}) {%- endif -%} {%- else %} - api({{ library.classpath }}) + api({{ classpath }}) {%- endif -%} {%- if library.excludes.consumer is defined %} { {% for exclude in library.excludes.consumer if exclude.classpath -%} @@ -193,10 +197,14 @@ dependencies { {%- if library.prebuilt and library.jar and (library.type != "contrib" or build_contribs) %} testImplementation(files("$project_root/{{ library.jar }}")) {%- else -%} +{%- set classpath = library.classpath -%} +{%- if classpath|replace('"','') == classpath -%} +{%- set classpath = '"' + classpath + '"' -%} +{%- endif %} {%- if library.type != "contrib" and library.testdep %} testImplementation(project(path = ":{{ library.testdep | replace("/", ":") }}", configuration = "testArtifacts")) {%- else %} - testImplementation({{ library.classpath }}) + testImplementation({{ classpath }}) {%- endif -%} {%- if library.excludes.consumer is defined %} { {% for exclude in library.excludes.consumer if exclude.classpath -%} diff --git a/build/export_generators/ide-gradle/build.gradle.kts.proto.jinja b/build/export_generators/ide-gradle/build.gradle.kts.proto.jinja index 4b330c2d57..4818553a40 100644 --- a/build/export_generators/ide-gradle/build.gradle.kts.proto.jinja +++ b/build/export_generators/ide-gradle/build.gradle.kts.proto.jinja @@ -68,11 +68,15 @@ dependencies { {%- if library.prebuilt and library.jar and (library.type != "contrib" or target.handler.build_contribs) %} implementation(files("$project_root/{{ library.jar }}")) {%- else -%} +{%- set classpath = library.classpath -%} +{%- if classpath|replace('"','') == classpath -%} +{%- set classpath = '"' + classpath + '"' -%} +{%- endif %} {%- if library.type != "contrib" %} implementation {%- else %} api -{%- endif -%}({{ library.classpath }}) +{%- endif -%}({{ classpath }}) {%- if library.excludes.consumer is defined %} { {% for exclude in library.excludes.consumer -%} {% set classpath = exclude.classpath|replace('"','') -%} diff --git a/build/ymake.core.conf b/build/ymake.core.conf index ea6ae5043b..a84445cd36 100644 --- a/build/ymake.core.conf +++ b/build/ymake.core.conf @@ -1836,6 +1836,7 @@ CPP_LIBRARY_SEM=add_library ${MODDIR} $CMAKE_TARGET_NAME ${hide:TARGET} ${hide:A && 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 \ + && project_languages C && project_languages CXX \ && target_sources PRIVATE ${MODULE_EXPLICIT_HEADERS} 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 \ @@ -1881,7 +1882,7 @@ module LIBRARY: _LIBRARY { CPP_LIBRARY_SEM=$CMAKE_FIND_PKG && ${CPP_LIBRARY_INDUCED_SEM_PROPERTY} PUBLIC $CMAKE_LINK_TARGET $CONAN_REQUIRE $CONAN_OPTS_SEM && IGNORED } when ($CONAN_PKG_OPTS != "") { - CONAN_OPTS_SEM=&& conan_options $CONAN_PKG_OPTS + CONAN_OPTS_SEM=&& conan_options $CONAN_PKG_OPTS && conan-options $CONAN_PKG_OPTS } when ($OPENSOURCE_EXPORT == "no") { CPP_LIBRARY_SEM=IGNORED @@ -1971,7 +1972,7 @@ module RESOURCES_LIBRARY: _BARE_UNIT { RESOURCES_LIBRARY_SEM=$CMAKE_FIND_PKG && ${CPP_LIBRARY_INDUCED_SEM_PROPERTY} PUBLIC $CMAKE_LINK_TARGET $CONAN_REQUIRE $CONAN_OPTS_SEM && IGNORED } when ($CONAN_PKG_OPTS != "") { - CONAN_OPTS_SEM=&& conan_options $CONAN_PKG_OPTS + CONAN_OPTS_SEM=&& conan_options $CONAN_PKG_OPTS && conan-options $CONAN_PKG_OPTS } MODULE_SUFFIX=.pkg.fake @@ -1983,7 +1984,9 @@ FAT_OBJECT_SEM=add_fat_object ${MODDIR} ${CMAKE_TARGET_NAME} ${hide:TARGET} ${hi && target_include_directories PRIVATE $_C__INCLUDE_OWNED \ && target_compile_options PRIVATE $USER_CFLAGS $USER_CXXFLAGS $_SEM_EXTRA_CXX_FLAGS \ && set_global_flags FAT_OBJECT_PREFIX ${MODULE_PREFIX} \ - && set_global_flags FAT_OBJECT_SUFFIX ${MODULE_SUFFIX} + && set_global_flags FAT_OBJECT_SUFFIX ${MODULE_SUFFIX} \ + && platform_vars-FAT_OBJECT_PREFIX ${quo:MODULE_PREFIX} \ + && platform_vars-FAT_OBJECT_SUFFIX ${quo:MODULE_SUFFIX} ### Do not turn visibility=hidden symbos into static symbos of partially linked object file ### @@ -2990,7 +2993,7 @@ _EMPTY_CMD= macro _SRC("swg", SRC, SRCFLAGS...) { .CMD=${_SWIG_CMD} .PEERDIR=${_SWIG_PEERDIR} - .SEM=conan_require_tool swig/4.0.2 && conan_import '"bin, *swig* -> ./bin"' ${hide;input:SRC} ${_SWIG_SEM_TO_MODULE_LINK} + .SEM=conan_require_tool swig/4.0.2 && conan_import '"bin, *swig* -> ./bin"' && conan-tool_requires swig/4.0.2 && conan-imports 'bin, *swig* -> ./bin' ${hide;input:SRC} ${_SWIG_SEM_TO_MODULE_LINK} } RODATA_SYMBOL_PREFIX= @@ -3016,7 +3019,7 @@ macro _SRC("rodata", SRC, SRCFLAGS...) { macro _SRS_S_ASM(SRC, SRCFLAGS...) { .CMD=$C_COMPILER_OLD $C_FLAGS_PLATFORM $CFLAGS $SFLAGS $SRCFLAGS -c -o ${output:SRC.o} ${input:SRC} $TOOLCHAIN_ENV ${pre=-I:_C__INCLUDE} - .SEM=target_sources PRIVATE ${input:SRC} ${hide;output;suf=${OBJ_SUF}.o:SRC} $_ADD_EXTRA_FLAGS($SRCFLAGS) && add_language ASM + .SEM=target_sources PRIVATE ${input:SRC} ${hide;output;suf=${OBJ_SUF}.o:SRC} $_ADD_EXTRA_FLAGS($SRCFLAGS) && add_language ASM && project_languages ASM } # tag:src-processing @@ -3082,7 +3085,7 @@ macro _SRC("asp", SRC, SRCFLAGS...) { # tag:src-processing macro _SRC("rl6", SRC, SRCFLAGS...) { .CMD=$RUN_NO_SANITIZE ${tool:"contrib/tools/ragel6"} $RAGEL6_FLAGS ${SRCFLAGS} -L -I${ARCADIA_ROOT} -o ${output;nopath;noext;defext=.rl6.cpp:SRC} ${input:SRC} ${kv;hide:"p R6"} ${kv;hide:"pc yellow"} - .SEM=target_ragel_lexers PRIVATE ${input:SRC} ${hide;output;suf=${OBJ_SUF}.o:SRC} $RAGEL6_FLAGS ${SRCFLAGS} && set_global_flags RAGEL_FLAGS -L -I $S/ && conan_require_tool ragel/6.10 && conan_import '"bin, ragel* -> ./bin"' ${hide;input:"build/scripts/run_tool.py"} + .SEM=target_ragel_lexers PRIVATE ${input:SRC} ${hide;output;suf=${OBJ_SUF}.o:SRC} $RAGEL6_FLAGS ${SRCFLAGS} && set_global_flags RAGEL_FLAGS -L -I $S/ && conan_require_tool ragel/6.10 && conan_import '"bin, ragel* -> ./bin"' && platform_vars-RAGEL_FLAGS "-L -I ${PROJECT_SOURCE_DIR}/" && conan-tool_requires ragel/6.10 && conan-imports 'bin, ragel* -> ./bin' ${hide;input:"build/scripts/run_tool.py"} } # tag:src-processing @@ -3202,12 +3205,16 @@ MASM_SEM=target_sources PRIVATE ${input:SRC} ${hide;output;suf=${OBJ_SUF}.o:SRC} && curdir_masm_flags ${MASMFLAGS} YASM_SEM=target_yasm_source PRIVATE ${input:SRC} ${hide;output;suf=${OBJ_SUF}.o:SRC} $YASM_FLAGS ${pre=-I :_ASM__INCLUDE} $SRCFLAGS ${pre=-P :PREINCLUDES} ${hide;input:"build/scripts/run_tool.py"} \ && set_global_flags YASM_FLAGS -f ${_YASM_FMT_VALUE}${HARDWARE_ARCH} $_YASM_PLATFORM_FLAGS_VALUE -D ${pre=_;suf=_:HARDWARE_TYPE} -D_YASM_ $ASM_PREFIX_VALUE $_YASM_PREDEFINED_FLAGS_VALUE \ - && add_language ASM \ - && conan_require_tool yasm/1.3.0 && conan_import '"bin, *yasm* -> ./bin"' && conan_import '"bin, ytasm* -> ./bin"' + && platform_vars-YASM_FLAGS "-f ${_YASM_FMT_VALUE}${HARDWARE_ARCH} $_YASM_PLATFORM_FLAGS_VALUE -D ${pre=_;suf=_:HARDWARE_TYPE} -D _YASM_ $ASM_PREFIX_VALUE $_YASM_PREDEFINED_FLAGS_VALUE" \ + && add_language ASM && project_languages ASM \ + && conan_require_tool yasm/1.3.0 && conan_import '"bin, *yasm* -> ./bin"' && conan_import '"bin, ytasm* -> ./bin"' \ + && conan-tool_requires yasm/1.3.0 && conan-imports 'bin, *yasm* -> ./bin' && conan-imports 'bin, ytasm* -> ./bin' ASM_SEM=target_yasm_source PRIVATE ${input:SRC} ${hide;output;suf=${OBJ_SUF}.o:SRC} $YASM_FLAGS ${pre=-I :_ASM__INCLUDE} $SRCFLAGS ${hide;input:"build/scripts/run_tool.py"} \ && set_global_flags YASM_FLAGS -f ${_YASM_FMT_VALUE}${HARDWARE_ARCH} $_YASM_PLATFORM_FLAGS_VALUE -D ${pre=_;suf=_:HARDWARE_TYPE} -D_YASM_ $ASM_PREFIX_VALUE $_YASM_PREDEFINED_FLAGS_VALUE \ - && add_language ASM \ - && conan_require_tool yasm/1.3.0 && conan_import '"bin, *yasm* -> ./bin"' && conan_import '"bin, ytasm* -> ./bin"' + && platform_vars-YASM_FLAGS "-f ${_YASM_FMT_VALUE}${HARDWARE_ARCH} $_YASM_PLATFORM_FLAGS_VALUE -D ${pre=_;suf=_:HARDWARE_TYPE} -D _YASM_ $ASM_PREFIX_VALUE $_YASM_PREDEFINED_FLAGS_VALUE" \ + && add_language ASM && project_languages ASM \ + && conan_require_tool yasm/1.3.0 && conan_import '"bin, *yasm* -> ./bin"' && conan_import '"bin, ytasm* -> ./bin"' \ + && conan-tool_requires yasm/1.3.0 && conan-imports 'bin, *yasm* -> ./bin' && conan-imports 'bin, ytasm* -> ./bin' # tag:src-processing macro _SRC("masm", SRC, SRCFLAGS...) { .CMD=$_SRC_masm($SRC $SRCFLAGS) @@ -3249,7 +3256,7 @@ otherwise { # tag:src-processing macro _SRC("cu", SRC, SRCFLAGS...) { .CMD=$_SRC_CU_CMD - .SEM=target_cuda_sources PRIVATE ${input:SRC} ${hide;output;suf=${OBJ_SUF}.o:SRC} && set_global_flags CMAKE_CUDA_STANDARD ${NVCC_STD_VER} && target_cuda_flags $CUDA_NVCC_FLAGS && target_cuda_cflags $USER_CXXFLAGS $SRCFLAGS $_SEM_EXTRA_CXX_FLAGS + .SEM=target_cuda_sources PRIVATE ${input:SRC} ${hide;output;suf=${OBJ_SUF}.o:SRC} && set_global_flags CMAKE_CUDA_STANDARD ${NVCC_STD_VER} && platform_vars-CMAKE_CUDA_STANDARD ${quo:NVCC_STD_VER} && target_cuda_flags $CUDA_NVCC_FLAGS && target_cuda_cflags $USER_CXXFLAGS $SRCFLAGS $_SEM_EXTRA_CXX_FLAGS .PEERDIR=$_SRC_CU_PEERDIR } diff --git a/contrib/libs/libiconv/ya.make b/contrib/libs/libiconv/ya.make index 6c6e4898be..5fb2655c64 100644 --- a/contrib/libs/libiconv/ya.make +++ b/contrib/libs/libiconv/ya.make @@ -18,7 +18,7 @@ IF (EXPORT_CMAKE) CMAKE_TARGET Iconv::Iconv CONAN - libiconv/1.15 + libiconv/1.15 "&& conan-requires" libiconv/1.15 CONAN_OPTIONS libiconv:shared=True ) diff --git a/contrib/libs/linux-headers/ya.make b/contrib/libs/linux-headers/ya.make index 7a7d74a66a..ac195d21a8 100644 --- a/contrib/libs/linux-headers/ya.make +++ b/contrib/libs/linux-headers/ya.make @@ -35,7 +35,7 @@ IF (OPENSOURCE_REPLACE_LINUX_HEADERS AND EXPORT_CMAKE) OPENSOURCE_EXPORT_REPLACEMENT( CMAKE linux-headers-generic CMAKE_TARGET linux-headers-generic::linux-headers-generic - CONAN linux-headers-generic/${OPENSOURCE_REPLACE_LINUX_HEADERS} + CONAN linux-headers-generic/${OPENSOURCE_REPLACE_LINUX_HEADERS} "&& conan-requires" linux-headers-generic/${OPENSOURCE_REPLACE_LINUX_HEADERS} ) ELSE() diff --git a/contrib/libs/openssl/crypto/ya.make b/contrib/libs/openssl/crypto/ya.make index c6e9d82018..d5d764f331 100644 --- a/contrib/libs/openssl/crypto/ya.make +++ b/contrib/libs/openssl/crypto/ya.make @@ -19,7 +19,7 @@ IF (OPENSOURCE_REPLACE_OPENSSL) CMAKE OpenSSL CMAKE_PACKAGE_COMPONENT Crypto CMAKE_TARGET OpenSSL::Crypto - CONAN openssl/${OPENSOURCE_REPLACE_OPENSSL} + CONAN openssl/${OPENSOURCE_REPLACE_OPENSSL} "&& conan-requires" openssl/${OPENSOURCE_REPLACE_OPENSSL} ) ENDIF() # IF (OPENSOURCE_REPLACE_OPENSSL) diff --git a/contrib/libs/openssl/ya.make b/contrib/libs/openssl/ya.make index 802b2c76c3..faec0b51eb 100644 --- a/contrib/libs/openssl/ya.make +++ b/contrib/libs/openssl/ya.make @@ -11,7 +11,7 @@ IF (OPENSOURCE_REPLACE_OPENSSL AND EXPORT_CMAKE) OPENSOURCE_EXPORT_REPLACEMENT( CMAKE OpenSSL CMAKE_TARGET OpenSSL::OpenSSL - CONAN openssl/${OPENSOURCE_REPLACE_OPENSSL} + CONAN openssl/${OPENSOURCE_REPLACE_OPENSSL} "&& conan-requires" openssl/${OPENSOURCE_REPLACE_OPENSSL} ) ELSE() diff --git a/contrib/libs/protobuf/ya.make b/contrib/libs/protobuf/ya.make index b8ba3c36fc..0909d6b3b4 100644 --- a/contrib/libs/protobuf/ya.make +++ b/contrib/libs/protobuf/ya.make @@ -20,7 +20,7 @@ IF (OPENSOURCE_REPLACE_PROTOBUF AND EXPORT_CMAKE) OPENSOURCE_EXPORT_REPLACEMENT( CMAKE Protobuf CMAKE_TARGET protobuf::libprotobuf protobuf::libprotoc - CONAN protobuf/${OPENSOURCE_REPLACE_PROTOBUF} "&& conan_require_tool" protobuf/${OPENSOURCE_REPLACE_PROTOBUF} "&& conan_import \"bin, protoc* -> ./bin\" && vanilla_protobuf" + CONAN protobuf/${OPENSOURCE_REPLACE_PROTOBUF} "&& conan-requires" protobuf/${OPENSOURCE_REPLACE_PROTOBUF} "&& conan_require_tool" protobuf/${OPENSOURCE_REPLACE_PROTOBUF} "&& conan-tool_requires" protobuf/${OPENSOURCE_REPLACE_PROTOBUF} "&& conan_import \"bin, protoc* -> ./bin\" && conan-imports \"bin, protoc* -> ./bin\" && vanilla_protobuf" ) ELSE() diff --git a/contrib/libs/protoc/ya.make b/contrib/libs/protoc/ya.make index 927ead0dbd..518ae0c171 100644 --- a/contrib/libs/protoc/ya.make +++ b/contrib/libs/protoc/ya.make @@ -18,7 +18,7 @@ IF (OPENSOURCE_REPLACE_PROTOBUF AND EXPORT_CMAKE) OPENSOURCE_EXPORT_REPLACEMENT( CMAKE Protobuf CMAKE_TARGET protobuf::libprotobuf protobuf::libprotoc - CONAN protobuf/${OPENSOURCE_REPLACE_PROTOBUF} "&& conan_require_tool" protobuf/${OPENSOURCE_REPLACE_PROTOBUF} "&& conan_import \"bin, protoc* -> ./bin\" && vanilla_protobuf" + CONAN protobuf/${OPENSOURCE_REPLACE_PROTOBUF} "&& conan-requires" protobuf/${OPENSOURCE_REPLACE_PROTOBUF} "&& conan_require_tool" protobuf/${OPENSOURCE_REPLACE_PROTOBUF} "&& conan-tool_requires" protobuf/${OPENSOURCE_REPLACE_PROTOBUF} "&& conan_import \"bin, protoc* -> ./bin\" && conan-imports \"bin, protoc* -> ./bin\" && vanilla_protobuf" ) ELSE() |