diff options
| author | dimdim11 <[email protected]> | 2024-05-30 13:41:26 +0300 |
|---|---|---|
| committer | dimdim11 <[email protected]> | 2024-05-30 13:56:25 +0300 |
| commit | 3341663f8c8348c0468b52bedd03615866cb5e9e (patch) | |
| tree | c858dae9fb6936defc78b32a50be3b410f907e49 | |
| parent | 1ff4836687e9ab394d8483e7187ab460583a214d (diff) | |
Continue merge cmake and jinja generator
ae553e8c277c98241e7ae89f693ae7e7b3dc5c98
29 files changed, 653 insertions, 224 deletions
diff --git a/build/conf/bison_lex.conf b/build/conf/bison_lex.conf index 54ceaa458ad..641871bf622 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=build/induced/by_bison .CMD=${tool:"contrib/tools/bison"} $BISON_FLAGS --m4=${tool:"contrib/tools/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"' && 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' + .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"' && target_macroses-ITEM && target_macroses-macro target_bison_parser && target_macroses-args 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} && 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 && platform_vars-LEX_FLAGS ${quo:LEX_FLAGS} + .SEM=target_flex_lexers ${tool;hide:_FLEX_TOOL} ${output;hide;suf=${OBJ_SUF}.o:SRC} ${input:SRC} && target_macroses-ITEM && target_macroses-macro target_flex_lexers && target_macroses-args ${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 9c7ddb47d5d..adb8cb85044 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 && 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"} + .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} && target_macroses-ITEM && target_macroses-macro target_fbs_source && target_macroses-args 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/opensource.conf b/build/conf/opensource.conf index 8e8ba81db59..dfdd63c3357 100644 --- a/build/conf/opensource.conf +++ b/build/conf/opensource.conf @@ -83,9 +83,10 @@ CMAKE_TARGET_ARTEFACT_RENAME_RULES= ### 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) + SET(CMAKE_TARGET_ARTEFACT_RENAME_RULES && set_target_property OUTPUT_NAME $REALPRJNAME && target_properties-ITEM && target_properties-name OUTPUT_NAME && target_properties-value $REALPRJNAME) } macro ALLOCATOR_IMPL() { SET(CPP_LIBRARY_INDUCED_SEM_PROPERTY target_allocator) + SET(CPP_LIBRARY_INDUCED_LINKS allocators) } diff --git a/build/conf/project_specific/yql_udf.conf b/build/conf/project_specific/yql_udf.conf index e292905a7a8..e89211294be 100644 --- a/build/conf/project_specific/yql_udf.conf +++ b/build/conf/project_specific/yql_udf.conf @@ -185,7 +185,7 @@ multimodule YQL_UDF { module YQL_UDF_SHARED: YQL_UDF_MODULE { .SEM=UDF_SHARED_SEM CMAKE_TARGET_NAME=${REALPRJNAME}.dyn - CMAKE_TARGET_ARTEFACT_RENAME_RULES=&& set_target_property OUTPUT_NAME $REALPRJNAME + CMAKE_TARGET_ARTEFACT_RENAME_RULES=&& set_target_property OUTPUT_NAME $REALPRJNAME && target_properties-ITEM && target_properties-name OUTPUT_NAME && target_properties-value $REALPRJNAME NO_CLANG_TIDY() } module YQL_UDF_STATIC: _DLL_COMPATIBLE_LIBRARY { @@ -206,7 +206,7 @@ multimodule YQL_UDF_YDB { module YQL_UDF_SHARED: YQL_UDF_YDB_MODULE { .SEM=UDF_SHARED_SEM CMAKE_TARGET_NAME=${REALPRJNAME}.dyn - CMAKE_TARGET_ARTEFACT_RENAME_RULES=&& set_target_property OUTPUT_NAME $REALPRJNAME + CMAKE_TARGET_ARTEFACT_RENAME_RULES=&& set_target_property OUTPUT_NAME $REALPRJNAME && target_properties-ITEM && target_properties-name OUTPUT_NAME && target_properties-value $REALPRJNAME NO_CLANG_TIDY() } module YQL_UDF_STATIC: _DLL_COMPATIBLE_LIBRARY { diff --git a/build/conf/project_specific/yt.conf b/build/conf/project_specific/yt.conf index 215e0470092..d0c5cc95120 100644 --- a/build/conf/project_specific/yt.conf +++ b/build/conf/project_specific/yt.conf @@ -1,5 +1,5 @@ macro GENERATE_YT_RECORD(Yaml, OUTPUT_INCLUDES[]) { .CMD=${tool:"yt/yt/tools/record_codegen"} --input ${input:Yaml} --output-root $ARCADIA_BUILD_ROOT --output-cpp ${output;norel;noext;suf=.record.cpp:Yaml} ${output;hide;norel;noext;suf=.record.h:Yaml} ${pre=--output-include :OUTPUT_INCLUDES} ${output_include;hide:OUTPUT_INCLUDES} ${output_include;hide:"yt/yt/client/table_client/record_codegen_deps.h"} ${kv;hide:"p RC"} - .SEM=find_package Python3 && add_custom_command OUTPUT ${output;norel;noext;suf=.record.cpp:Yaml} ${output;norel;noext;suf=.record.h:Yaml} DEPENDS ${input:Yaml} ${input:"yt/yt/tools/record_codegen/__main__.py"} ${input:"yt/python/yt/record_codegen_helpers/__init__.py"} COMMAND ${CMAKE_COMMAND} -E env "PYTHONPATH=$ENV{PYTHONPATH}:${ARCADIA_ROOT}/yt/python/yt" ${Python3_EXECUTABLE} ${input:"yt/yt/tools/record_codegen/__main__.py"} --input ${input:Yaml} --output-root $ARCADIA_BUILD_ROOT --output-cpp ${output;norel;noext;suf=.record.cpp:Yaml} ${pre=--output-include :OUTPUT_INCLUDES} ${output;hide;norel;noext;suf=.record.h:Yaml} + .SEM=find_package Python3 && packages-ITEM && packages-name Python3 && mpackages-ITEM && mpackages-name Python3 && add_custom_command OUTPUT ${output;norel;noext;suf=.record.cpp:Yaml} ${output;norel;noext;suf=.record.h:Yaml} DEPENDS ${input:Yaml} ${input:"yt/yt/tools/record_codegen/__main__.py"} ${input:"yt/python/yt/record_codegen_helpers/__init__.py"} COMMAND ${CMAKE_COMMAND} -E env "PYTHONPATH=$ENV{PYTHONPATH}:${ARCADIA_ROOT}/yt/python/yt" ${Python3_EXECUTABLE} ${input:"yt/yt/tools/record_codegen/__main__.py"} --input ${input:Yaml} --output-root $ARCADIA_BUILD_ROOT --output-cpp ${output;norel;noext;suf=.record.cpp:Yaml} ${pre=--output-include :OUTPUT_INCLUDES} ${output;hide;norel;noext;suf=.record.h:Yaml} && target_commands-ITEM && target_commands-macro add_custom_command && target_commands-args OUTPUT ${output;norel;noext;suf=.record.cpp:Yaml} ${output;norel;noext;suf=.record.h:Yaml} DEPENDS ${input:Yaml} ${input:"yt/yt/tools/record_codegen/__main__.py"} ${input:"yt/python/yt/record_codegen_helpers/__init__.py"} COMMAND ${CMAKE_COMMAND} -E env "PYTHONPATH=$ENV{PYTHONPATH}:${ARCADIA_ROOT}/yt/python/yt" ${Python3_EXECUTABLE} ${input:"yt/yt/tools/record_codegen/__main__.py"} --input ${input:Yaml} --output-root $ARCADIA_BUILD_ROOT --output-cpp ${output;norel;noext;suf=.record.cpp:Yaml} ${pre=--output-include :OUTPUT_INCLUDES} ${output;hide;norel;noext;suf=.record.h:Yaml} PEERDIR(yt/yt/client) } diff --git a/build/conf/proto.conf b/build/conf/proto.conf index 427fff04d1d..6f64e887758 100644 --- a/build/conf/proto.conf +++ b/build/conf/proto.conf @@ -193,7 +193,7 @@ macro JAVA_PROTO_PLUGIN(NAME, TOOL, DEPS[]) { } macro _ADD_SEM_PROP_IF_NON_EMPTY(Prop, Args...) { - .SEM=${pre=&& set_target_property $Prop :Args} + .SEM=${pre=&& set_target_property $Prop :Args} ${pre=&& target_properties-ITEM && target_properties-name $Prop && target_properties-value :Args} } # tag:proto tag:java-specific @@ -208,7 +208,7 @@ macro WITH_KOTLIN_GRPC() { # tag:proto tag:cpp-specific macro _ADD_CPP_PROTO_OUT(Suf) { - .SEM=append_target_property PROTOC_EXTRA_OUTS $Suf ${output;hide;suf=.o:Suf} $_ADD_SEM_PROP_IF_NON_EMPTY(PROTO_NAMESPACE $PROTO_NAMESPACE) + .SEM=append_target_property PROTOC_EXTRA_OUTS $Suf && protoc_extra_outs $Suf ${output;hide;suf=.o:Suf} $_ADD_SEM_PROP_IF_NON_EMPTY(PROTO_NAMESPACE $PROTO_NAMESPACE) SET_APPEND(CPP_PROTO_OUTS \${output;norel;nopath;noext;suf=$Suf:File}) # XXX fix variable expansion in plugins @@ -225,7 +225,7 @@ CPP_PROTOBUF_PEERS= ### Define protoc plugin for C++ with given Name that emits code into regular outputs ### using Tool. Extra dependencies are passed via DEPS. macro CPP_PROTO_PLUGIN0(NAME, TOOL, DEPS[], EXTRA_OUT_FLAG="") { - .SEM=target_proto_plugin $NAME ${tool;rootrel:TOOL} ${output;hide;suf=.fake.o:NAME} + .SEM=target_proto_plugin $NAME ${tool;rootrel:TOOL} ${output;hide;suf=.fake.o:NAME} && target_macroses-ITEM && target_macroses-macro target_proto_plugin && target_macroses-args $NAME ${tool;rootrel:TOOL} ${output;hide;suf=.fake.o:NAME} SET_APPEND(CPP_PROTO_OPTS $_PROTO_PLUGIN_ARGS_BASE($NAME $TOOL $EXTRA_OUT_FLAG)) # XXX fix variable expansion in plugins @@ -384,11 +384,15 @@ 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 \ +_SEM_CPP_PROTO_CMD=target_proto_messages PRIVATE ${input:File} \ + && target_options-privates-ITEM && target_options-privates-option target_proto_messages && target_options-privates-args ${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 + && target_macroses-ITEM && target_macroses-macro target_proto_outs && target_macroses-args --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 \ + && target_macroses-ITEM && target_macroses-macro target_proto_addincls && target_macroses-args ./$PROTO_NAMESPACE $ARCADIA_ROOT/$PROTO_NAMESPACE ${_PROTO__INCLUDE} $ARCADIA_BUILD_ROOT $PROTOBUF_PATH # tag:proto macro _CPP_PROTO_CMD(File) { @@ -403,11 +407,15 @@ macro _CPP_VANILLA_PROTO_CMD(File) { .PEERDIR=contrib/libs/protobuf_std } -_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 \ +_SEM_CPP_EV_CMD=target_ev_messages PRIVATE ${input:File} \ + && target_options-privates-ITEM && target_options-privates-option target_ev_messages && target_options-privates-args ${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 + && target_macroses-ITEM && target_macroses-macro target_proto_outs && target_macroses-args --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 \ + && target_macroses-ITEM && target_macroses-macro target_proto_addincls && target_macroses-args ./$PROTO_NAMESPACE $ARCADIA_ROOT/$PROTO_NAMESPACE ${_PROTO__INCLUDE} $ARCADIA_BUILD_ROOT $PROTOBUF_PATH $ARCADIA_ROOT/library/cpp/eventlog # tag:proto macro _CPP_EVLOG_CMD(File) { diff --git a/build/conf/swig.conf b/build/conf/swig.conf index 27819f10a89..b4885283c13 100644 --- a/build/conf/swig.conf +++ b/build/conf/swig.conf @@ -46,7 +46,7 @@ _EXPLICIT_SWIG_JAVA_SOURCES= _EXPLICIT_SWIG_IFACE_SOURCES= macro _EXPORT_JAVA_BINDINGS(JavaSrcs...) { SET_APPEND(_EXPLICIT_SWIG_JAVA_SOURCES ${input:JavaSrcs}) - .SEM=find_package SWIG COMPONENTS java && find_package Java && include UseSWIG && include UseJava ${input;hide:JavaSrcs} ${output;hide;pre=$_HASH_HELPER($Args):".o"} + .SEM=find_package SWIG COMPONENTS java && find_package Java && packages-ITEM && packages-name SWIG && packages-components java && mpackages-ITEM && mpackages-name SWIG && mpackages-components java && packages-ITEM && packages-name Java && mpackages-ITEM && mpackages-name Java && include UseSWIG && include UseJava && includes UseSWIG && includes UseJava ${input;hide:JavaSrcs} ${output;hide;pre=$_HASH_HELPER($Args):".o"} } macro _EXPORT_SWIG_SOURCES(SwigSrcs...) { SET_APPEND(_EXPLICIT_SWIG_IFACE_SOURCES ${input:SwigSrcs}) @@ -65,12 +65,19 @@ macro _JNI_JAVA_SWIG_SRCS(Srcs...) { SWIG_JNI_BINDINGS_SEM= \ add_swig_jni_library ${MODDIR} ${REALPRJNAME}-cpp GEN_JAVA_FILES_LIST ${"$"}{CMAKE_CURRENT_BINARY_DIR}/swig_gen_java.lst SOURCES ${_EXPLICIT_SWIG_IFACE_SOURCES} && \ set_target_property OUTPUT_NAME $REALPRJNAME && \ + target_properties-ITEM && target_properties-name OUTPUT_NAME && target_properties-value $REALPRJNAME && \ ${VCS_INFO_SEM} && \ target_include_directories PUBLIC $_C__INCLUDE_GLOBAL && \ + target_options-publics-ITEM && target_options-publics-option target_include_directories && target_options-publics-args $_C__INCLUDE_GLOBAL && \ target_include_directories PRIVATE $_C__INCLUDE_OWNED && \ + target_options-privates-ITEM && target_options-privates-option target_include_directories && target_options-privates-args $_C__INCLUDE_OWNED && \ target_compile_options PRIVATE $USER_CFLAGS $USER_CXXFLAGS $_SEM_EXTRA_CXX_FLAGS && target_compile_options PUBLIC $USER_CFLAGS_GLOBAL_RAW $USER_CXXFLAGS_GLOBAL_RAW && \ + target_options-privates-ITEM && target_options-privates-option target_compile_options && target_options-privates-args $USER_CFLAGS $USER_CXXFLAGS $_SEM_EXTRA_CXX_FLAGS && \ + target_options-publics-ITEM && target_options-publics-option target_compile_options && target_options-publics-args $USER_CFLAGS_GLOBAL_RAW $USER_CXXFLAGS_GLOBAL_RAW && \ target_link_options PRIVATE $LDFLAGS_GLOBAL_RAW $LDFLAGS $OBJADDE_LIB $OBJADDE_LIB_GLOBAL $OBJADDE && \ - add_jar ${REALPRJNAME} SOURCES $_EXPLICIT_SWIG_JAVA_SOURCES @${"$"}{CMAKE_CURRENT_BINARY_DIR}/swig_gen_java.lst ${hide:TARGET} + target_options-privates-ITEM && target_options-privates-option target_link_options && target_options-privates-args $LDFLAGS $OBJADDE_LIB $OBJADDE_LIB_GLOBAL $OBJADDE && \ + add_jar ${REALPRJNAME} SOURCES $_EXPLICIT_SWIG_JAVA_SOURCES @${"$"}{CMAKE_CURRENT_BINARY_DIR}/swig_gen_java.lst ${hide:TARGET} && \ + target_commands-ITEM && target_commands-macro add_jar && target_commands-args ${REALPRJNAME} SOURCES $_EXPLICIT_SWIG_JAVA_SOURCES @${"$"}{CMAKE_CURRENT_BINARY_DIR}/swig_gen_java.lst ${hide:TARGET} ### @usage: DLL_JAVA() ### diff --git a/build/export_generators/cmake/conanfile.jinja b/build/export_generators/cmake/conanfile.jinja index da69d8c062b..c0aa10d1426 100644 --- a/build/export_generators/cmake/conanfile.jinja +++ b/build/export_generators/cmake/conanfile.jinja @@ -35,4 +35,4 @@ cmake_paths {%- endfor -%} {%- endif %} -{%- include "[generator]/debug.jinja" ignore missing -%} +{%- include "[generator]/debug_conan.jinja" ignore missing -%} diff --git a/build/export_generators/cmake/debug_conan.jinja b/build/export_generators/cmake/debug_conan.jinja new file mode 100644 index 00000000000..2a0b382e024 --- /dev/null +++ b/build/export_generators/cmake/debug_conan.jinja @@ -0,0 +1,21 @@ +{%- 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 c74db38d6b6..b89f0bd16d7 100644 --- a/build/export_generators/cmake/dir_cmake_lists.jinja +++ b/build/export_generators/cmake/dir_cmake_lists.jinja @@ -1,41 +1,11 @@ {%- include '[generator]/disclaimer.jinja' %} {% include 'prologue.cmake' ignore missing -%} -{%- for package in packages -%} -find_package({{ package[0] }} REQUIRED -{%- if package[1]|length > 0 %} COMPONENTS -{%- for component in package[1] %} - {{ component }} -{% endfor -%} -{%- endif -%} -) -{% endfor -%} +{%- include "[generator]/dir_packages.jinja" -%} +{%- include "[generator]/dir_tools.jinja" -%} +{%- include "[generator]/dir_includes.jinja" -%} +{%- include "[generator]/dir_macroses.jinja" -%} +{%- include "[generator]/dir_targets.jinja" -%} -{%- if includes is defined -%} -{%- for incl in includes -%} -include({{ incl }}) -{% endfor -%} -{%- endif -%} - -{%- for subdir in subdirs -%} -add_subdirectory({{ subdir }}) -{% endfor -%} - -{%- for dir_macro in dir_macros %} -{{ dir_macro[0] }}( -{%- for value in dir_macro[1] %} - {{ value }} -{%- endfor %} -) -{% endfor -%} - -{%- if target is defined -%} -{%- include '[generator]/target_cmake_lists.jinja' -%} -{%- endif -%} -{%- if extra_targets is defined -%} -{%- for target in extra_targets -%} -{%- include '[generator]/target_cmake_lists.jinja' -%} -{%- endfor -%} -{%- endif -%} {%- include 'epilogue.cmake' ignore missing -%} {%- include "[generator]/debug.jinja" ignore missing -%} diff --git a/build/export_generators/cmake/dir_includes.jinja b/build/export_generators/cmake/dir_includes.jinja new file mode 100644 index 00000000000..f49dedaf1c6 --- /dev/null +++ b/build/export_generators/cmake/dir_includes.jinja @@ -0,0 +1,11 @@ +{%- if includes is defined %} +{% for incl in includes -%} +include({{ incl }}) +{% endfor -%} +{%- endif -%} + +{%- if subdirs|length %} +{% for subdir in subdirs -%} +add_subdirectory({{ subdir }}) +{% endfor -%} +{%- endif -%} diff --git a/build/export_generators/cmake/dir_macroses.jinja b/build/export_generators/cmake/dir_macroses.jinja new file mode 100644 index 00000000000..e52de0ce925 --- /dev/null +++ b/build/export_generators/cmake/dir_macroses.jinja @@ -0,0 +1,15 @@ +{%- if dir_macroses is defined -%} +{%- for dir_macros in dir_macroses -%} +{%- if dir_macros.macro == "set_vars" -%} +{%- for set_var in dir_macros.args %} +set({{ set_var|replace("=", ' ') }}) +{% endfor -%} +{% else %} +{{ dir_macros.macro }}( +{%- for arg in dir_macros.args %} + {{ arg }} +{%- endfor %} +) +{% endif -%} +{%- endfor -%} +{%- endif -%} diff --git a/build/export_generators/cmake/dir_packages.jinja b/build/export_generators/cmake/dir_packages.jinja new file mode 100644 index 00000000000..d3898bcf10d --- /dev/null +++ b/build/export_generators/cmake/dir_packages.jinja @@ -0,0 +1,26 @@ +{%- set packages = [] -%} +{%- if (target.packages is defined) and (target.packages|length) -%} +{%- set packages = packages + target.packages -%} +{%- endif -%} +{%- if (target.mpackages is defined) and (target.mpackages|length) -%} +{%- if packages|length -%} +{#- Skip duplicating packages -#} +{%- set mpackages = target.mpackages|rejectattr('name', 'in', packages|map(attribute='name')) -%} +{%- if mpackages|length -%} +{%- set packages = packages + mpackages -%} +{%- endif -%} +{%- else -%} +{%- set packages = packages + target.mpackages -%} +{%- endif -%} +{%- endif -%} +{%- if packages|length -%} +{%- for package in packages -%} +find_package({{ package.name }} REQUIRED +{%- if package.components|length %} COMPONENTS +{%- for component in package.components %} + {{ component }} +{% endfor -%} +{%- endif -%} +) +{% endfor -%} +{%- endif -%} diff --git a/build/export_generators/cmake/dir_targets.jinja b/build/export_generators/cmake/dir_targets.jinja new file mode 100644 index 00000000000..be0e5fe0e56 --- /dev/null +++ b/build/export_generators/cmake/dir_targets.jinja @@ -0,0 +1,79 @@ +{%- macro MacrosesWithMergeArgs(target_name, list_of_dict, macro_suffix, macro_field, args_field) -%} +{%- set macros = list_of_dict|map(attribute=macro_field)|unique -%} +{%- for macro in macros -%} +{%- set args = list_of_dict|selectattr(macro_field, 'eq', macro)|map(attribute=args_field)|sum -%} +{%- if args|length %} +{{ macro }}({{ target_name }}{{ macro_suffix }} +{%- for arg in args %} + {{ arg }} +{%- endfor %} +) +{% endif %} +{%- endfor -%} +{%- endmacro -%} + +{%- macro Macroses(target_name, list_of_dict, macro_field, args_field, excludes) -%} +{%- set macros = list_of_dict|map(attribute=macro_field)|unique -%} +{%- for macro in macros -%} +{%- if (excludes|length == 0) or not (macro in excludes) -%} +{%- set merge_args = list_of_dict|selectattr(macro_field, 'eq', macro)|selectattr('merge_args') -%} +{%- if merge_args|length %} +{{ MacrosesWithMergeArgs(target_name, list_of_dict|selectattr(macro_field, 'eq', macro), '', macro_field, args_field) }} +{%- else -%} +{%- set macroses = list_of_dict|selectattr(macro_field, 'eq', macro) -%} +{%- for macros in macroses %} +{{ macros.macro }}({{ target_name }}{{ macro_suffix }} +{%- if macros.args|length %} +{%- for arg in macros.args %} + {{ arg }} +{%- endfor %} +{% endif -%} +) +{% endfor -%} +{%- endif -%} +{%- endif -%} +{%- endfor -%} +{%- endmacro -%} + +{%- macro RenderTargetOptions(target_name, prefix, options, only_option, exclude_options) -%} +{%- if only_option != "" -%} +{%- set selected_options = options|selectattr('option', 'eq', only_option) -%} +{%- elif exclude_options|length -%} +{%- set selected_options = options|rejectattr('option', 'in', exclude_options) -%} +{%- else -%} +{%- set selected_options = options -%} +{%- endif -%} +{%- if selected_options|length -%} +{{ MacrosesWithMergeArgs(target_name, selected_options, prefix, 'option', 'args') }} +{%- endif -%} +{%- endmacro -%} + + +{%- macro TargetOptions(target_name, is_fake_module, target_options, only_option, exclude_options) -%} +{%- if (target_options.interfaces is defined) -%} +{{ RenderTargetOptions(target_name, ' INTERFACE', target_options.interfaces, only_option, exclude_options) }} +{%- endif -%} + +{%- if (target_options.publics is defined) -%} +{%- if is_fake_module -%} +{%- set prefix = ' INTERFACE' -%} +{%- else -%} +{%- set prefix = ' PUBLIC' -%} +{%- endif -%} +{{ RenderTargetOptions(target_name, prefix, target_options.publics, only_option, exclude_options) }} +{%- endif -%} + +{%- if not(is_fake_module) and (target_options.privates is defined) -%} +{{ RenderTargetOptions(target_name, ' PRIVATE', target_options.privates, only_option, exclude_options) }} +{%- endif -%} +{%- endmacro -%} + +{%- if target is defined -%} +{%- set current_target = target -%} +{%- include '[generator]/target_cmake_lists.jinja' -%} +{%- endif -%} +{%- if extra_targets is defined -%} +{%- for current_target in extra_targets -%} +{%- include '[generator]/target_cmake_lists.jinja' -%} +{%- endfor -%} +{%- endif -%} diff --git a/build/export_generators/cmake/dir_tools.jinja b/build/export_generators/cmake/dir_tools.jinja new file mode 100644 index 00000000000..6b1bede90b9 --- /dev/null +++ b/build/export_generators/cmake/dir_tools.jinja @@ -0,0 +1,13 @@ +{%- if tools is defined -%} +{%- for tool in tools -%} +{%- set path_and_name = rsplit(tool, "/", 2) -%} +{%- set toolPath = path_and_name[0] -%} +{%- set toolName = path_and_name[1] %} +get_built_tool_path( + TOOL_{{ toolName }}_bin + TOOL_{{ toolName }}_dependency + {{ toolPath }} + {{ toolName }} +) +{% endfor -%} +{%- endif -%} diff --git a/build/export_generators/cmake/generator.toml b/build/export_generators/cmake/generator.toml index fefde9e0b28..9089f552c6e 100644 --- a/build/export_generators/cmake/generator.toml +++ b/build/export_generators/cmake/generator.toml @@ -1,3 +1,6 @@ +source_root_replacer = "${PROJECT_SOURCE_DIR}" +binary_root_replacer = "${PROJECT_BINARY_DIR}" + [platforms] linux="CMAKE_SYSTEM_NAME STREQUAL \"Linux\" AND CMAKE_SYSTEM_PROCESSOR STREQUAL \"x86_64\" AND NOT HAVE_CUDA" linux-x86_64="CMAKE_SYSTEM_NAME STREQUAL \"Linux\" AND CMAKE_SYSTEM_PROCESSOR STREQUAL \"x86_64\" AND NOT HAVE_CUDA" @@ -77,6 +80,8 @@ conan_import="skip" conan_options="skip" add_language="skip" set_global_flags="skip" +find_package="skip" +include="skip" # Really used attributes conan-requires="sorted_set" @@ -101,9 +106,145 @@ platform_vars-FBS_CPP_FLAGS="str" platform_vars-COMMON_PROTOC_FLAGS="str" [attrs.dir] +# DEPRECATED - Skipped old hardcoded-cmake attributes +curdir_masm_flags="skip" +set_vars="skip" + +# Really used attributes +dir_macroses="list" +dir_macroses-ITEM="dict" +dir_macroses-macro="str" +dir_macroses-args="list" [attrs.target] -is_interface="bool" +# DEPRECATED - Skipped old hardcoded-cmake attributes +set_target_property="skip" + +# DEPRECATED - target multiple calls macroses +generate_enum_serilization="skip" +target_joined_source="skip" +target_ragel_lexers="skip" +target_fbs_source="skip" +target_flex_lexers="skip" +target_bison_parser="skip" +target_yasm_source="skip" +target_rodata_sources="skip" +target_sources_custom="skip" +vcs_info="skip" +resources="skip" +llvm_compile_c="skip" +llvm_compile_cxx="skip" + +# DEPRECATED - target unique calls macroses +target_cuda_flags="skip" +target_cuda_cflags="skip" +target_proto_outs="skip" +target_proto_addincls="skip" +use_export_script="skip" +target_cython_options="skip" +target_cython_include_directories="skip" +set_python_type_for_cython="skip" +target_proto_plugin="skip" + +# DEPRECATED - target options +target_compile_options="skip" +target_include_directories="skip" +target_link_options="skip" +target_ev_messages="skip" +target_proto_messages="skip" +target_sources="skip" +target_cuda_sources="skip" +target_cython_sources="skip" +library_fake_marker="skip" + +# DEPRECATED - target commands +add_custom_command="skip" +add_test="skip" +add_yunittest="skip" +set_yunittest_property="skip" +copy_file="skip" +configure_file="skip" +run_antlr="skip" +set_property="skip" +add_jar="skip" +set_property_escaped="skip" +set_yunittest_property_escaped="skip" + +# Really used attributes +is_fake_module="bool" + +# Module packages (not induced, applied in current module only) +mpackages="list" +mpackages-ITEM="dict" +mpackages-name="str" +mpackages-components="list" + +target_properties="list" +target_properties-ITEM="dict" +target_properties-name="str" +target_properties-value="list" +protoc_extra_outs="list" + +target_options="dict" +target_options-interfaces="list" +target_options-interfaces-ITEM="dict" +target_options-interfaces-option="str" +target_options-interfaces-args="list" +target_options-publics="list" +target_options-publics-ITEM="dict" +target_options-publics-option="str" +target_options-publics-args="list" +target_options-privates="list" +target_options-privates-ITEM="dict" +target_options-privates-option="str" +target_options-privates-args="list" + +target_commands="list" +target_commands-ITEM="dict" +target_commands-macro="str" +target_commands-args="list" +target_commands-args_escaped="list" + +target_macroses="list" +target_macroses-ITEM="dict" +target_macroses-macro="str" +target_macroses-args="list" +target_macroses-merge_args="flag" + +add_test_requirements="list" +add_ytest_requirements="list" + +[attrs.induced] +# DEPRECATED - target options +consumer_link_library="skip" +target_allocator="skip" + +# Induced packages +packages="list" +packages-ITEM="dict" +packages-name="str" +packages-components="list" + +# Induced link libraries +link-interfaces="list" +link-publics="list" +link-privates="list" +allocators="list" + +[[rules]] +attrs=["packages-name=AIO"] +copy=["cmake/FindAIO.cmake"] +add_values=[{attr="includes", values=["cmake/FindAIO.cmake"]}] + +[[rules]] +attrs=["packages-name=IDN"] +copy=["cmake/FindIDN.cmake"] +add_values=[{attr="includes", values=["cmake/FindIDN.cmake"]}] + +[[rules]] +attrs=["packages-name=JNITarget"] +copy=["cmake/FindJNITarget.cmake"] +add_values=[{attr="includes", values=["cmake/FindJNITarget.cmake"]}] [[rules]] attrs=["run_antlr"] @@ -120,23 +261,8 @@ add_values=[{attr="includes", values=["cmake/bison.cmake"]}] [[rules]] attrs=[ - "conan_add_remote", - "conan_check", - "conan_cmake_autodetect", - "conan_cmake_configure", - "conan_cmake_detect_unix_libcxx", - "conan_cmake_detect_vs_runtime", - "conan_cmake_generate_conanfile", - "conan_cmake_install", - "conan_cmake_run", - "conan_cmake_settings", - "conan_cmake_setup_conanfile", - "conan_config_install", - "conan_load_buildinfo", - "conan_parse_arguments", "conan-requires", "conan-tool_requires", - "old_conan_cmake_install", ] copy=["cmake/conan.cmake"] add_values=[{attr="includes", values=["cmake/conan.cmake"]}] @@ -145,9 +271,9 @@ add_values=[{attr="includes", values=["cmake/conan.cmake"]}] attrs=[ "target_ev_messages", "target_proto_messages", - "target_proto_plugin", - "target_proto_outs", - "target_proto_addincls", + "target_macroses-macro=target_proto_plugin", + "target_macroses-macro=target_proto_outs", + "target_macroses-macro=target_proto_addincls", ] copy=[ "cmake/protobuf.cmake", @@ -158,18 +284,15 @@ add_values=[{attr="includes", values=["cmake/protobuf.cmake"]}] [[rules]] attrs=[ "add_global_library_for", - "archive", - "resources_file", - "generate_enum_serilization", - "copy", - "target_joined_source", - "target_ragel_lexers", - "target_yasm_source", - "vcs_info", - "target_sources_custom", - "use_export_script", - "add_yunittest", - "set_yunittest_property", + "target_macroses-macro=generate_enum_serilization", + "target_macroses-macro=target_joined_source", + "target_macroses-macro=target_ragel_lexers", + "target_macroses-macro=target_yasm_source", + "target_macroses-macro=vcs_info", + "target_macroses-macro=target_sources_custom", + "target_macroses-macro=use_export_script", + "target_commands-macro=add_yunittest", + "target_commands-macro=set_yunittest_property", ] copy=[ "cmake/common.cmake", @@ -181,19 +304,19 @@ add_values=[{attr="includes", values=["cmake/common.cmake"]}] [[rules]] attrs=[ - "llvm_compile_c", - "llvm_compile_cxx", + "target_macroses-macro=llvm_compile_c", + "target_macroses-macro=llvm_compile_cxx", ] copy=["cmake/llvm-tools.cmake"] add_values=[{attr="includes", values=["cmake/llvm-tools.cmake"]}] [[rules]] -attrs=["curdir_masm_flags"] +attrs=["dir_macroses-macro=curdir_masm_flags"] copy=["cmake/masm.cmake"] add_values=[{attr="includes", values=["cmake/masm.cmake"]}] [[rules]] -attrs=["target_fbs_source"] +attrs=["target_macroses-macro=target_fbs_source"] copy=["cmake/fbs.cmake"] add_values=[{attr="includes", values=["cmake/fbs.cmake"]}] @@ -217,24 +340,24 @@ add_values=[{attr="includes", values=["cmake/shared_libs.cmake"]}] [[rules]] attrs=[ - "target_cuda_flags", - "target_cuda_cflags", + "target_macroses-macro=target_cuda_flags", + "target_macroses-macro=target_cuda_cflags", "target_cuda_sources" ] copy=["cmake/cuda.cmake"] add_values=[{attr="includes", values=["cmake/cuda.cmake"]}] [[rules]] -attrs=["target_rodata_sources"] +attrs=["target_macroses-macro=target_rodata_sources"] copy=["cmake/archive.cmake"] add_values=[{attr="includes", values=["cmake/archive.cmake"]}] [[rules]] attrs=[ "target_cython_sources", - "target_cython_options", - "target_cython_include_directories", - "set_python_type_for_cython", + "target_macroses-macro=target_cython_options", + "target_macroses-macro=target_cython_include_directories", + "target_macroses-macro=set_python_type_for_cython", ] copy=["cmake/cython.cmake"] add_values=[{attr="includes", values=["cmake/cython.cmake"]}] @@ -242,7 +365,7 @@ add_values=[{attr="includes", values=["cmake/cython.cmake"]}] [[rules]] attrs=[ "swig_add_library", - "add_jar" + "target_commands-macro=add_jar" ] copy=[ "cmake/swig.cmake", diff --git a/build/export_generators/cmake/target_cmake_lists.jinja b/build/export_generators/cmake/target_cmake_lists.jinja index 39ff17e076b..a6b84bbcf44 100644 --- a/build/export_generators/cmake/target_cmake_lists.jinja +++ b/build/export_generators/cmake/target_cmake_lists.jinja @@ -1,77 +1,18 @@ -{%- set macro = target.macro -%} -{%- set name = target.name -%} +{%- set macro = current_target.macro -%} +{%- set name = current_target.name -%} +{%- set macro_args = current_target.macro_args -%} {{ macro }}({{ name }} -{%- if target.is_interface %} INTERFACE{%- endif -%} -{%- set macro_args = target.macro_args -%} +{%- if current_target.is_fake_module %} INTERFACE{%- endif -%} {%- if macro_args|length > 0 %} {%- for arg in macro_args %} {{ arg }} {% endfor -%} {%- endif -%} ) -{% for property in target.properties -%} -set_property(TARGET {{ name }} PROPERTY {{ property[0] }} -{%- for value in property[1] %} - {{ value }} -{%- endfor %} -) -{% endfor -%} - -{%- for attribute in target.attributes -%} - -{%- if attribute[1].iface is defined %} -{{ attribute[0] }}({{ name }} INTERFACE -{%- for val in attribute[1].iface %} - {{ val }} -{%- endfor %} -) -{% endif -%} - -{%- if attribute[1].pub is defined %} -{{ attribute[0] }}({{ name }} PUBLIC -{%- for val in attribute[1].pub %} - {{ val }} -{%- endfor %} -) -{% endif -%} - -{%- if attribute[1].priv is defined %} -{{ attribute[0] }}({{ name }} PRIVATE -{%- for val in attribute[1].priv %} - {{ val }} -{%- endfor %} -) -{% endif -%} - -{%- endfor -%} - -{%- for dir_macro in target.target_dir_macros %} -{{ dir_macro[0] }}( -{%- for value in dir_macro[1] %} - {{ value }} -{%- endfor %} -) -{% endfor -%} - -{%- for target_macro in target.target_macros %} -{{ target_macro[0] }}({{ name }} -{%- if target_macro[1]|length > 0 -%} -{%- for value in target_macro[1] %} - {{ value }} -{%- endfor %} -{% endif -%} -) -{% endfor -%} - -{%- set dependencies = target.dependencies -%} -{%- if dependencies|length > 0 %} - -if(NOT CMAKE_CROSSCOMPILING) - add_dependencies({{ name }} -{%- for dep in dependencies %} - {{ dep }} -{%- endfor %} -) -endif() -{%- endif %} +{% include "[generator]/target_properties.jinja" -%} +{%- include "[generator]/target_options.jinja" -%} +{%- include "[generator]/target_commands.jinja" -%} +{%- include "[generator]/target_macroses.jinja" -%} +{%- include "[generator]/target_requirements.jinja" -%} +{%- include "[generator]/target_tools.jinja" -%} diff --git a/build/export_generators/cmake/target_commands.jinja b/build/export_generators/cmake/target_commands.jinja new file mode 100644 index 00000000000..677b84d1659 --- /dev/null +++ b/build/export_generators/cmake/target_commands.jinja @@ -0,0 +1,19 @@ +{%- if current_target.target_commands is defined -%} +{%- for target_command in current_target.target_commands %} +{{ target_command.macro }}( +{%- if target_command.args|length -%} +{%- for arg in target_command.args %} + {{ arg }} +{%- endfor -%} +{%- endif %} +{%- if target_command.args_escaped|length %} + " +{%- for arg_escaped in target_command.args_escaped -%} +{{ arg_escaped|replace('\\', '\\\\')|replace('"', '\\"')|replace(';', '\\;') }} +{%- if not loop.last -%};{%- endif -%} +{%- endfor -%} +" +{%- endif %} +) +{% endfor -%} +{%- endif -%} diff --git a/build/export_generators/cmake/target_links.jinja b/build/export_generators/cmake/target_links.jinja new file mode 100644 index 00000000000..ce082a704fe --- /dev/null +++ b/build/export_generators/cmake/target_links.jinja @@ -0,0 +1,74 @@ +{%- set interfaces = [] -%} +{%- set publics = [] -%} +{%- set privates = [] -%} +{%- set allocators = [] -%} +{%- set add_interfaces = current_target.link|map(attribute='interfaces')|sum -%} +{%- if add_interfaces|length -%} +{%- set interfaces = interfaces + add_interfaces -%} +{%- endif -%} +{%- if current_target.is_fake_module -%} +{%- set add_interfaces = current_target.link|map(attribute='publics')|sum -%} +{%- if add_interfaces|length -%} +{%- set interfaces = interfaces + add_interfaces -%} +{%- endif -%} +{%- else -%} +{%- set add_publics = current_target.link|map(attribute='publics')|sum -%} +{%- if add_publics|length -%} +{%- set publics = publics + add_publics -%} +{%- endif -%} +{%- if (current_target.macro == "add_global_library_for") and (target.link|length) -%} +{%- set add_publics = target.link|map(attribute='publics')|sum -%} +{%- if add_publics|length -%} +{%- set publics = publics + add_publics -%} +{%- endif -%} +{%- endif -%} +{%- set add_privates = current_target.link|map(attribute='privates')|sum -%} +{%- if add_privates|length -%} +{%- set privates = privates + add_privates -%} +{%- endif -%} +{%- endif -%} +{%- if (current_target.allocators is defined) and (current_target.allocators|length) -%} +{%- if (macro == "add_executable") or (macro == "add_library" and ("SHARED" in macro_args)) -%} +{#- support allocators -#} +{%- set allocators = allocators + current_target.allocators|sum -%} +{%- else -%} +{#- not supported allocators -#} +{%- if current_target.is_fake_module -%} +{%- set interfaces = interfaces + current_target.allocators|sum -%} +{%- else -%} +{%- set publics = publics + current_target.allocators|sum -%} +{%- endif -%} +{%- endif -%} +{%- endif -%} + +{%- if interfaces|length %} +target_link_libraries({{ name }} INTERFACE +{%- for interface in interfaces %} + {{ interface }} +{%- endfor %} +) +{% endif -%} + +{%- if publics|length %} +target_link_libraries({{ name }} PUBLIC +{%- for public in publics %} + {{ public }} +{%- endfor %} +) +{% endif -%} + +{%- if privates|length %} +target_link_libraries({{ name }} PRIVATE +{%- for private in privates %} + {{ private }} +{%- endfor %} +) +{% endif -%} + +{%- if allocators|length %} +target_allocator({{ name }} +{%- for allocator in allocators %} + {{ allocator }} +{%- endfor %} +) +{% endif -%} diff --git a/build/export_generators/cmake/target_macroses.jinja b/build/export_generators/cmake/target_macroses.jinja new file mode 100644 index 00000000000..d1d9a317f16 --- /dev/null +++ b/build/export_generators/cmake/target_macroses.jinja @@ -0,0 +1,19 @@ +{%- if (current_target.target_macroses is defined) and (current_target.target_macroses|length) -%} +{%- set ONE_CALL_MACROSES = [ 'target_cuda_flags', 'target_cuda_cflags', 'target_proto_outs', 'target_proto_addincls', 'use_export_script', 'target_cython_options', 'target_cython_include_directories', 'set_python_type_for_cython' ] -%} +{#- Apply one call macroses (apply only first found macros) -#} +{%- for ONE_CALL_MACRO in ONE_CALL_MACROSES -%} +{%- set macroses = current_target.target_macroses|selectattr('macro', 'eq', ONE_CALL_MACRO) -%} +{%- if macroses|length -%} +{%- set target_macros = macroses|first -%} +{%- if target_macros.args|length %} +{{ target_macros.macro }}({{ name }} +{%- for arg in target_macros.args %} + {{ arg }} +{%- endfor %} +) +{% endif -%} +{%- endif -%} +{%- endfor -%} +{#- Apply macroses called any times (concat all args and make one call) -#} +{{ Macroses(name, current_target.target_macroses, 'macro', 'args', ONE_CALL_MACROSES) }} +{%- endif -%} diff --git a/build/export_generators/cmake/target_options.jinja b/build/export_generators/cmake/target_options.jinja new file mode 100644 index 00000000000..b6e2570f04e --- /dev/null +++ b/build/export_generators/cmake/target_options.jinja @@ -0,0 +1,15 @@ +{%- set OPTIONS_ORDER_BEFORE_LINKS = ['target_compile_options', 'target_include_directories'] -%} +{%- set OPTIONS_ORDER_AFTER_LINKS = ['target_link_options'] -%} + +{%- for OPTION in OPTIONS_ORDER_BEFORE_LINKS -%} +{{ TargetOptions(name, current_target.is_fake_module, current_target.target_options, OPTION, []) }} +{%- endfor -%} + +{%- include "[generator]/target_links.jinja" -%} + +{%- for OPTION in OPTIONS_ORDER_AFTER_LINKS -%} +{{ TargetOptions(name, current_target.is_fake_module, current_target.target_options, OPTION, []) }} +{%- endfor -%} + +{#- Then all other options -#} +{{ TargetOptions(name, current_target.is_fake_module, current_target.target_options, "", OPTIONS_ORDER_BEFORE_LINKS + OPTIONS_ORDER_AFTER_LINKS) }} diff --git a/build/export_generators/cmake/target_properties.jinja b/build/export_generators/cmake/target_properties.jinja new file mode 100644 index 00000000000..e906c0008ab --- /dev/null +++ b/build/export_generators/cmake/target_properties.jinja @@ -0,0 +1,15 @@ +{% for property in current_target.properties -%} +set_property(TARGET {{ name }} PROPERTY {{ property.name }} +{%- for value in property.value %} + {{ value }} +{%- endfor %} +) +{% endfor -%} + +{%- if (current_target.protoc_extra_outs is defined) and (current_target.protoc_extra_outs|length) -%} +set_property(TARGET {{ name }} PROPERTY PROTOC_EXTRA_OUTS +{%- for protoc_extra_out in current_target.protoc_extra_outs %} + {{ protoc_extra_out }} +{%- endfor %} +) +{% endif -%} diff --git a/build/export_generators/cmake/target_requirements.jinja b/build/export_generators/cmake/target_requirements.jinja new file mode 100644 index 00000000000..1b4058023b6 --- /dev/null +++ b/build/export_generators/cmake/target_requirements.jinja @@ -0,0 +1,21 @@ +{%- macro Requirements(dir_macro, requirements) -%} +{%- set cpu_reqs = requirements|select('startsWith', 'cpu:') -%} +{%- if cpu_reqs|length -%} +{%- set cpu_req = cpu_reqs|first -%} +{{ dir_macro }}( + TEST + {{ requirements[0] }} + PROPERTY + PROCESSORS + {{ cpu_req|replace('cpu:', '') }} +) +{% endif -%} +{%- endmacro -%} + +{%- if current_target.add_test_requirements is defined %} +{{ Requirements('set_property', current_target.add_test_requirements) }} +{%- endif -%} + +{%- if current_target.add_ytest_requirements is defined %} +{{ Requirements('set_yunittest_property', current_target.add_ytest_requirements) }} +{%- endif -%} diff --git a/build/export_generators/cmake/target_tools.jinja b/build/export_generators/cmake/target_tools.jinja new file mode 100644 index 00000000000..489dfd4ef9d --- /dev/null +++ b/build/export_generators/cmake/target_tools.jinja @@ -0,0 +1,13 @@ +{%- set tools = current_target.tools -%} +{%- if tools|length %} + +if(NOT CMAKE_CROSSCOMPILING) + add_dependencies({{ name }} +{%- for tool in tools %} +{%- set path_and_name = rsplit(tool, "/", 2) -%} +{%- set toolName = path_and_name[1] %} + {{ toolName }} +{%- endfor %} + ) +endif() +{% endif -%} diff --git a/build/export_generators/gradle/settings.gradle.kts.jinja b/build/export_generators/gradle/settings.gradle.kts.jinja index 9a22c7f6b5e..5b16b159d85 100644 --- a/build/export_generators/gradle/settings.gradle.kts.jinja +++ b/build/export_generators/gradle/settings.gradle.kts.jinja @@ -1,4 +1,4 @@ -rootProject.name = "{{projectName}}" +rootProject.name = "{{project_name}}" {% for subdir in subdirs -%} include("{{ subdir | replace("/", ":") }}") diff --git a/build/export_generators/ide-gradle/build.gradle.kts.jinja b/build/export_generators/ide-gradle/build.gradle.kts.jinja index fbca52659bb..c9a4845b60c 100644 --- a/build/export_generators/ide-gradle/build.gradle.kts.jinja +++ b/build/export_generators/ide-gradle/build.gradle.kts.jinja @@ -91,7 +91,7 @@ repositories { } -val project_root="{%- if exportRoot.startswith(arcadiaRoot + '/') -%}{{ arcadiaRoot }}{%- else -%}{{ exportRoot }}{%- endif -%}" +val project_root="{%- if export_root.startswith(arcadia_root + '/') -%}{{ arcadia_root }}{%- else -%}{{ export_root }}{%- endif -%}" {% if mainClass -%} application { @@ -116,7 +116,7 @@ configurations.testImplementation { isTransitive = false } -{% if hasTest -%} +{% if has_test -%} val testsJar by tasks.registering(Jar::class) { dependsOn(JavaPlugin.COMPILE_TEST_JAVA_TASK_NAME) archiveClassifier.set("tests") 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 4818553a408..9a930779d4f 100644 --- a/build/export_generators/ide-gradle/build.gradle.kts.proto.jinja +++ b/build/export_generators/ide-gradle/build.gradle.kts.proto.jinja @@ -37,7 +37,7 @@ sourceSets { } } -val project_root="{%- if exportRoot.startswith(arcadiaRoot + '/') -%}{{ arcadiaRoot }}{%- else -%}{{ exportRoot }}{%- endif -%}" +val project_root="{%- if export_root.startswith(arcadia_root + '/') -%}{{ arcadia_root }}{%- else -%}{{ export_root }}{%- endif -%}" java { withSourcesJar() diff --git a/build/export_generators/ide-gradle/settings.gradle.kts.jinja b/build/export_generators/ide-gradle/settings.gradle.kts.jinja index 508faae2452..da32f75ab17 100644 --- a/build/export_generators/ide-gradle/settings.gradle.kts.jinja +++ b/build/export_generators/ide-gradle/settings.gradle.kts.jinja @@ -1,9 +1,9 @@ -rootProject.name = "{{ projectName }}" +rootProject.name = "{{ project_name }}" {% for subdir in subdirs -%} {%- set classname = subdir | replace("/", ":") -%} include(":{{ classname }}") -project(":{{ classname }}").projectDir = file("{{ exportRoot }}/{{ subdir }}") +project(":{{ classname }}").projectDir = file("{{ export_root }}/{{ subdir }}") {% endfor -%} {%- include "[generator]/debug.jinja" ignore missing -%} diff --git a/build/ymake.core.conf b/build/ymake.core.conf index ae9afff897b..9b70e8a09ef 100644 --- a/build/ymake.core.conf +++ b/build/ymake.core.conf @@ -479,7 +479,7 @@ macro CHECK_DEPENDENT_DIRS(TYPE, ALL?"UNUSED":"", PEERDIRS?"PEERDIRS":"ALL", RES macro _RESOURCE_SEM(INPUTS[], KEYS[]) { SET(RESOURCE_OUTPUT ${hash:INPUTS}.cpp) - .SEM=resources ${output;global:RESOURCE_OUTPUT} INPUTS ${input:INPUTS} KEYS $KEYS ${hide;tool:"tools/rescompiler/bin"} + .SEM=resources ${output;global:RESOURCE_OUTPUT} INPUTS ${input:INPUTS} KEYS $KEYS ${hide;tool:"tools/rescompiler/bin"} && target_macroses-ITEM && target_macroses-macro resources && target_macroses-args ${output;global:RESOURCE_OUTPUT} INPUTS ${input:INPUTS} KEYS $KEYS ${hide;tool:"tools/rescompiler/bin"} } # tag:built-in @@ -1219,14 +1219,19 @@ module _BASE_PROGRAM: _LINK_UNIT { } } -VCS_INFO_SEM=vcs_info ${hide;input:"build/scripts/vcs_info.py"} ${hide;input:"build/scripts/c_templates/svn_interface.c"} ${hide;input:"build/scripts/c_templates/svnversion.h"} +VCS_INFO_SEM=vcs_info ${hide;input:"build/scripts/vcs_info.py"} ${hide;input:"build/scripts/c_templates/svn_interface.c"} ${hide;input:"build/scripts/c_templates/svnversion.h"} && target_macroses-ITEM && target_macroses-macro vcs_info && target_macroses-args ${hide;input:"build/scripts/vcs_info.py"} ${hide;input:"build/scripts/c_templates/svn_interface.c"} ${hide;input:"build/scripts/c_templates/svnversion.h"} CPP_PROGRAM_SEM=add_executable $MODDIR $CMAKE_TARGET_NAME ${hide:TARGET} ${hide:AUTO_INPUT} $CMAKE_TARGET_ARTEFACT_RENAME_RULES \ && ${VCS_INFO_SEM} \ && target_link_options PRIVATE $LDFLAGS_GLOBAL_RAW $LDFLAGS $OBJADDE_LIB $OBJADDE_LIB_GLOBAL $OBJADDE \ + && target_options-privates-ITEM && target_options-privates-option target_link_options && target_options-privates-args $LDFLAGS_GLOBAL_RAW $LDFLAGS $OBJADDE_LIB $OBJADDE_LIB_GLOBAL $OBJADDE \ && target_include_directories PRIVATE $_C__INCLUDE_OWNED \ + && target_options-privates-ITEM && target_options-privates-option target_include_directories && target_options-privates-args $_C__INCLUDE_OWNED \ && target_compile_options PRIVATE $USER_CFLAGS $USER_CXXFLAGS $_SEM_EXTRA_CXX_FLAGS \ + && target_options-privates-ITEM && target_options-privates-option target_compile_options && target_options-privates-args $USER_CFLAGS $USER_CXXFLAGS $_SEM_EXTRA_CXX_FLAGS \ && target_compile_options PRIVATE $USER_CFLAGS_GLOBAL_RAW $USER_CXXFLAGS_GLOBAL_RAW \ - && target_sources PRIVATE ${MODULE_EXPLICIT_HEADERS} + && target_options-privates-ITEM && target_options-privates-option target_compile_options && target_options-privates-args $USER_CFLAGS_GLOBAL_RAW $USER_CXXFLAGS_GLOBAL_RAW \ + && target_sources PRIVATE ${MODULE_EXPLICIT_HEADERS} \ + && target_options-privates-ITEM && target_options-privates-option target_sources && target_options-privates-args ${MODULE_EXPLICIT_HEADERS} ### @usage: PROGRAM([progname]) ### ### Regular program module. @@ -1305,11 +1310,15 @@ _TEST_TIMEOUT_SEM= _TEST_PARTITION_SEM= UNITTEST_SEM=$CPP_PROGRAM_SEM \ && set_property TARGET $REALPRJNAME PROPERTY SPLIT_FACTOR $_TEST_SPLIT_FACTOR_SEM \ + && target_commands-ITEM && target_commands-macro set_property && target_commands-args TARGET $REALPRJNAME PROPERTY SPLIT_FACTOR $_TEST_SPLIT_FACTOR_SEM \ $_TEST_PARTITION_SEM \ && add_yunittest NAME $REALPRJNAME TEST_TARGET $REALPRJNAME TEST_ARG --print-before-suite --print-before-test --fork-tests --print-times --show-fails \ + && target_commands-ITEM && target_commands-macro add_yunittest && target_commands-args NAME $REALPRJNAME TEST_TARGET $REALPRJNAME TEST_ARG --print-before-suite --print-before-test --fork-tests --print-times --show-fails \ && set_yunittest_property TEST $REALPRJNAME PROPERTY LABELS $TEST_SIZE_NAME $FILTER_ONLY_TEST_TAGS \ + && target_commands-ITEM && target_commands-macro set_yunittest_property && target_commands-args TEST $REALPRJNAME PROPERTY LABELS $TEST_SIZE_NAME $FILTER_ONLY_TEST_TAGS \ && add_ytest_requirements $REALPRJNAME $DEFAULT_REQUIREMENTS $TEST_REQUIREMENTS_VALUE \ && set_yunittest_property_escaped TEST $REALPRJNAME PROPERTY ENVIRONMENT $TEST_ENV_VALUE \ + && target_commands-ITEM && target_commands-macro set_yunittest_property && target_commands-args TEST $REALPRJNAME PROPERTY ENVIRONMENT && target_commands-args_escaped $TEST_ENV_VALUE \ $_TEST_TIMEOUT_SEM # tag:test @@ -1333,11 +1342,11 @@ module UNITTEST: _BASE_UNITTEST { _TEST_SPLIT_FACTOR_SEM=10 } when ($TEST_PARTITION == "MODULO") { - _TEST_PARTITION_SEM=&& set_property TARGET $REALPRJNAME PROPERTY SPLIT_TYPE $TEST_PARTITION \ + _TEST_PARTITION_SEM=&& set_property TARGET $REALPRJNAME PROPERTY SPLIT_TYPE $TEST_PARTITION && target_commands-ITEM && target_commands-macro set_property && target_commands-args TARGET $REALPRJNAME PROPERTY SPLIT_TYPE $TEST_PARTITION \ } } when ($TEST_TIMEOUT) { - _TEST_TIMEOUT_SEM=&& set_yunittest_property TEST $REALPRJNAME PROPERTY TIMEOUT $TEST_TIMEOUT + _TEST_TIMEOUT_SEM=&& set_yunittest_property TEST $REALPRJNAME PROPERTY TIMEOUT $TEST_TIMEOUT && target_commands-ITEM && target_commands-macro set_yunittest_property && target_commands-args TEST $REALPRJNAME PROPERTY TIMEOUT $TEST_TIMEOUT } } @@ -1362,9 +1371,12 @@ module UNITTEST_WITH_CUSTOM_ENTRY_POINT: _BASE_UNITTEST { GTEST_SEM=$CPP_PROGRAM_SEM \ && add_test NAME $REALPRJNAME COMMAND $REALPRJNAME \ + && target_commands-ITEM && target_commands-macro add_test && target_commands-args NAME $REALPRJNAME COMMAND $REALPRJNAME \ && set_property TEST $REALPRJNAME PROPERTY LABELS $TEST_SIZE_NAME $FILTER_ONLY_TEST_TAGS \ + && target_commands-ITEM && target_commands-macro set_property && target_commands-args TEST $REALPRJNAME PROPERTY LABELS $TEST_SIZE_NAME $FILTER_ONLY_TEST_TAGS \ && add_test_requirements $REALPRJNAME $DEFAULT_REQUIREMENTS $TEST_REQUIREMENTS_VALUE \ && set_property_escaped TEST $REALPRJNAME PROPERTY ENVIRONMENT $TEST_ENV_VALUE \ + && target_commands-ITEM && target_commands-macro set_property && target_commands-args TEST $REALPRJNAME PROPERTY ENVIRONMENT && target_commands-args_escaped $TEST_ENV_VALUE \ $_TEST_TIMEOUT_SEM # tag:cpp-specific tag:test @@ -1382,7 +1394,7 @@ module GTEST: _BASE_UNITTEST { ADD_YTEST($MODULE_PREFIX$REALPRJNAME gunittest) when ($TEST_TIMEOUT) { - _TEST_TIMEOUT_SEM=&& set_property TEST $REALPRJNAME PROPERTY TIMEOUT $TEST_TIMEOUT + _TEST_TIMEOUT_SEM=&& set_property TEST $REALPRJNAME PROPERTY TIMEOUT $TEST_TIMEOUT && target_commands-ITEM && target_commands-macro set_property && target_commands-args TEST $REALPRJNAME PROPERTY TIMEOUT $TEST_TIMEOUT } } @@ -1716,7 +1728,9 @@ module Y_BENCHMARK: PROGRAM { GBENCH_SEM=$CPP_PROGRAM_SEM \ && add_test NAME $REALPRJNAME COMMAND $REALPRJNAME \ + && target_commands-ITEM && target_commands-macro add_test && target_commands-args NAME $REALPRJNAME COMMAND $REALPRJNAME \ && set_property TEST $REALPRJNAME PROPERTY LABELS SMALL $FILTER_ONLY_TEST_TAGS \ + && target_commands-ITEM && target_commands-macro set_property && target_commands-args TEST $REALPRJNAME PROPERTY LABELS SMALL $FILTER_ONLY_TEST_TAGS \ && add_test_requirements $REALPRJNAME $DEFAULT_REQUIREMENTS $TEST_REQUIREMENTS_VALUE \ $_TEST_TIMEOUT_SEM @@ -1830,22 +1844,35 @@ module _LIBRARY: _BASE_UNIT { } CPP_LIBRARY_INDUCED_SEM_PROPERTY=consumer_link_library +CPP_LIBRARY_INDUCED_LINKS=link-publics 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} \ + && is_fake_module ${FAKE_MODULE} \ && ${CPP_LIBRARY_INDUCED_SEM_PROPERTY} PUBLIC $CMAKE_LINK_TARGET \ + && ${CPP_LIBRARY_INDUCED_LINKS} $CMAKE_LINK_TARGET \ && target_include_directories PUBLIC $_C__INCLUDE_GLOBAL \ + && target_options-publics-ITEM && target_options-publics-option target_include_directories && target_options-publics-args $_C__INCLUDE_GLOBAL \ && target_include_directories PRIVATE $_C__INCLUDE_OWNED \ + && target_options-privates-ITEM && target_options-privates-option target_include_directories && target_options-privates-args $_C__INCLUDE_OWNED \ && target_compile_options PRIVATE $USER_CFLAGS $USER_CXXFLAGS $_SEM_EXTRA_CXX_FLAGS \ + && target_options-privates-ITEM && target_options-privates-option target_compile_options && target_options-privates-args $USER_CFLAGS $USER_CXXFLAGS $_SEM_EXTRA_CXX_FLAGS \ && target_compile_options PUBLIC $USER_CFLAGS_GLOBAL_RAW $USER_CXXFLAGS_GLOBAL_RAW \ + && target_options-publics-ITEM && target_options-publics-option target_compile_options && target_options-publics-args $USER_CFLAGS_GLOBAL_RAW $USER_CXXFLAGS_GLOBAL_RAW \ && target_link_options INTERFACE $LDFLAGS_GLOBAL_RAW \ + && target_options-interfaces-ITEM && target_options-interfaces-option target_link_options && target_options-interfaces-args $LDFLAGS_GLOBAL_RAW \ && add_language C && add_language CXX \ && project_languages C && project_languages CXX \ - && target_sources PRIVATE ${MODULE_EXPLICIT_HEADERS} + && target_sources PRIVATE ${MODULE_EXPLICIT_HEADERS} \ + && target_options-privates-ITEM && target_options-privates-option target_sources && target_options-privates-args ${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 \ + && target_options-publics-ITEM && target_options-publics-option target_include_directories && target_options-publics-args $_C__INCLUDE_GLOBAL \ && target_include_directories PRIVATE $_C__INCLUDE_OWNED \ + && target_options-privates-ITEM && target_options-privates-option target_include_directories && target_options-privates-args $_C__INCLUDE_OWNED \ && target_compile_options PRIVATE $USER_CFLAGS $USER_CXXFLAGS $_SEM_EXTRA_CXX_FLAGS \ - && target_compile_options PUBLIC $USER_CFLAGS_GLOBAL_RAW $USER_CXXFLAGS_GLOBAL_RAW + && target_options-privates-ITEM && target_options-privates-option target_compile_options && target_options-privates-args $USER_CFLAGS $USER_CXXFLAGS $_SEM_EXTRA_CXX_FLAGS \ + && target_compile_options PUBLIC $USER_CFLAGS_GLOBAL_RAW $USER_CXXFLAGS_GLOBAL_RAW \ + && target_options-publics-ITEM && target_options-publics-option target_compile_options && target_options-publics-args $USER_CFLAGS_GLOBAL_RAW $USER_CXXFLAGS_GLOBAL_RAW CMAKE_FIND_PKG= CMAKE_LINK_TARGET=$REALPRJNAME @@ -1874,15 +1901,15 @@ module LIBRARY: _LIBRARY { .ARGS_PARSER=Base when ($CMAKE_PACKAGE_COMPONENT != "") { - CMAKE_FIND_PKG_COMP=COMPONENTS $CMAKE_PACKAGE_COMPONENT + CMAKE_FIND_PKG_COMP=COMPONENTS $CMAKE_PACKAGE_COMPONENT && packages-components $CMAKE_PACKAGE_COMPONENT && mpackages-components $CMAKE_PACKAGE_COMPONENT } when ($CMAKE_PACKAGE != "") { - CMAKE_FIND_PKG=find_package $CMAKE_PACKAGE $CMAKE_FIND_PKG_COMP - CPP_LIBRARY_SEM=$CMAKE_FIND_PKG && ${CPP_LIBRARY_INDUCED_SEM_PROPERTY} PUBLIC $CMAKE_LINK_TARGET $CONAN_REQUIRE $CONAN_OPTS_SEM && IGNORED + CMAKE_FIND_PKG=packages-ITEM && packages-name $CMAKE_PACKAGE && mpackages-ITEM && mpackages-name $CMAKE_PACKAGE && find_package $CMAKE_PACKAGE $CMAKE_FIND_PKG_COMP + CPP_LIBRARY_SEM=$CMAKE_FIND_PKG && ${CPP_LIBRARY_INDUCED_SEM_PROPERTY} PUBLIC $CMAKE_LINK_TARGET && ${CPP_LIBRARY_INDUCED_LINKS} $CMAKE_LINK_TARGET $CONAN_REQUIRE $CONAN_OPTS_SEM && IGNORED } when ($CONAN_REFERENCE != "") { CONAN_REQUIRE=&& conan_require $CONAN_REFERENCE - CPP_LIBRARY_SEM=$CMAKE_FIND_PKG && ${CPP_LIBRARY_INDUCED_SEM_PROPERTY} PUBLIC $CMAKE_LINK_TARGET $CONAN_REQUIRE $CONAN_OPTS_SEM && IGNORED + CPP_LIBRARY_SEM=$CMAKE_FIND_PKG && ${CPP_LIBRARY_INDUCED_SEM_PROPERTY} PUBLIC $CMAKE_LINK_TARGET && ${CPP_LIBRARY_INDUCED_LINKS} $CMAKE_LINK_TARGET $CONAN_REQUIRE $CONAN_OPTS_SEM && IGNORED } when ($CONAN_PKG_OPTS != "") { CONAN_OPTS_SEM=&& conan_options $CONAN_PKG_OPTS && conan-options $CONAN_PKG_OPTS @@ -1964,15 +1991,15 @@ module RESOURCES_LIBRARY: _BARE_UNIT { SET(PEERDIR_TAGS RESOURCE_LIB) when ($CMAKE_PACKAGE_COMPONENT != "") { - CMAKE_FIND_PKG_COMP=COMPONENTS $CMAKE_PACKAGE_COMPONENT + CMAKE_FIND_PKG_COMP=COMPONENTS $CMAKE_PACKAGE_COMPONENT && packages-components $CMAKE_PACKAGE_COMPONENT && mpackages-components $CMAKE_PACKAGE_COMPONENT } when ($CMAKE_PACKAGE != "") { - CMAKE_FIND_PKG=find_package $CMAKE_PACKAGE $CMAKE_FIND_PKG_COMP - RESOURCES_LIBRARY_SEM=$CMAKE_FIND_PKG && ${CPP_LIBRARY_INDUCED_SEM_PROPERTY} PUBLIC $CMAKE_LINK_TARGET $CONAN_REQUIRE $CONAN_OPTS_SEM && IGNORED + CMAKE_FIND_PKG=packages-ITEM && packages-name $CMAKE_PACKAGE && mpackages-ITEM && mpackages-name $CMAKE_PACKAGE && find_package $CMAKE_PACKAGE $CMAKE_FIND_PKG_COMP + RESOURCES_LIBRARY_SEM=$CMAKE_FIND_PKG && ${CPP_LIBRARY_INDUCED_SEM_PROPERTY} PUBLIC $CMAKE_LINK_TARGET && ${CPP_LIBRARY_INDUCED_LINKS} $CMAKE_LINK_TARGET $CONAN_REQUIRE $CONAN_OPTS_SEM && IGNORED } when ($CONAN_REFERENCE != "") { CONAN_REQUIRE=&& conan_require $CONAN_REFERENCE - RESOURCES_LIBRARY_SEM=$CMAKE_FIND_PKG && ${CPP_LIBRARY_INDUCED_SEM_PROPERTY} PUBLIC $CMAKE_LINK_TARGET $CONAN_REQUIRE $CONAN_OPTS_SEM && IGNORED + RESOURCES_LIBRARY_SEM=$CMAKE_FIND_PKG && ${CPP_LIBRARY_INDUCED_SEM_PROPERTY} PUBLIC $CMAKE_LINK_TARGET && ${CPP_LIBRARY_INDUCED_LINKS} $CMAKE_LINK_TARGET $CONAN_REQUIRE $CONAN_OPTS_SEM && IGNORED } when ($CONAN_PKG_OPTS != "") { CONAN_OPTS_SEM=&& conan_options $CONAN_PKG_OPTS && conan-options $CONAN_PKG_OPTS @@ -1985,7 +2012,9 @@ module RESOURCES_LIBRARY: _BARE_UNIT { 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_options-privates-ITEM && target_options-privates-option target_include_directories && target_options-privates-args $_C__INCLUDE_OWNED \ && target_compile_options PRIVATE $USER_CFLAGS $USER_CXXFLAGS $_SEM_EXTRA_CXX_FLAGS \ + && target_options-privates-ITEM && target_options-privates-option target_compile_options && target_options-privates-args $USER_CFLAGS $USER_CXXFLAGS $_SEM_EXTRA_CXX_FLAGS \ && set_global_flags FAT_OBJECT_PREFIX ${MODULE_PREFIX} \ && set_global_flags FAT_OBJECT_SUFFIX ${MODULE_SUFFIX} \ && platform_vars-FAT_OBJECT_PREFIX ${quo:MODULE_PREFIX} \ @@ -2042,10 +2071,15 @@ module FAT_OBJECT: LIBRARY { RECURSIVE_LIBRARY_SEM=add_recursive_library ${MODDIR} ${CMAKE_TARGET_NAME} ${hide:TARGET} ${hide:AUTO_INPUT} ${CMAKE_TARGET_ARTEFACT_RENAME_RULES} \ && target_include_directories PUBLIC $_C__INCLUDE_GLOBAL \ + && target_options-publics-ITEM && target_options-publics-option target_include_directories && target_options-publics-args $_C__INCLUDE_GLOBAL \ && target_include_directories PRIVATE $_C__INCLUDE_OWNED \ + && target_options-privates-ITEM && target_options-privates-option target_include_directories && target_options-privates-args $_C__INCLUDE_OWNED \ && target_compile_options PRIVATE $USER_CFLAGS $USER_CXXFLAGS $_SEM_EXTRA_CXX_FLAGS \ + && target_options-privates-ITEM && target_options-privates-option target_compile_options && target_options-privates-args $USER_CFLAGS $USER_CXXFLAGS $_SEM_EXTRA_CXX_FLAGS \ && target_compile_options PUBLIC $USER_CFLAGS_GLOBAL_RAW $USER_CXXFLAGS_GLOBAL_RAW \ - && target_link_options INTERFACE $LDFLAGS_GLOBAL_RAW + && target_options-publics-ITEM && target_options-publics-option target_compile_options && target_options-publics-args $USER_CFLAGS_GLOBAL_RAW $USER_CXXFLAGS_GLOBAL_RAW \ + && target_link_options INTERFACE $LDFLAGS_GLOBAL_RAW \ + && target_options-interfaces-ITEM && target_options-interfaces-option target_link_options && target_options-interfaces-args $LDFLAGS_GLOBAL_RAW ### @usage: RECURSIVE_LIBRARY() ### @@ -2068,7 +2102,7 @@ _SONAME= _EXPORT_SCRIPT_SEM= _CLEAN_TEXTREL= macro _ADD_DYNLYB_SEM(Libname) { - .SEM=add_shared_library ${MODDIR} ${Libname} ${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 $_SEM_EXTRA_CXX_FLAGS && target_compile_options PUBLIC $USER_CFLAGS_GLOBAL_RAW $USER_CXXFLAGS_GLOBAL_RAW && target_link_options PRIVATE $LDFLAGS_GLOBAL_RAW $LDFLAGS $OBJADDE_LIB $OBJADDE_LIB_GLOBAL $OBJADDE && ${VCS_INFO_SEM} $_EXPORT_SCRIPT_SEM + .SEM=add_shared_library ${MODDIR} ${Libname} ${hide:TARGET} ${hide:AUTO_INPUT} && target_include_directories PUBLIC $_C__INCLUDE_GLOBAL && target_options-publics-ITEM && target_options-publics-option target_include_directories && target_options-publics-args $_C__INCLUDE_GLOBAL && target_include_directories PRIVATE $_C__INCLUDE_OWNED && target_options-privates-ITEM && target_options-privates-option target_include_directories && target_options-privates-args $_C__INCLUDE_OWNED && target_compile_options PRIVATE $USER_CFLAGS $USER_CXXFLAGS $_SEM_EXTRA_CXX_FLAGS && target_options-privates-ITEM && target_options-privates-option target_compile_options && target_options-privates-args $USER_CFLAGS $USER_CXXFLAGS $_SEM_EXTRA_CXX_FLAGS && target_compile_options PUBLIC $USER_CFLAGS_GLOBAL_RAW $USER_CXXFLAGS_GLOBAL_RAW && target_options-publics-ITEM && target_options-publics-option target_compile_options && target_options-publics-args $USER_CFLAGS_GLOBAL_RAW $USER_CXXFLAGS_GLOBAL_RAW && target_link_options PRIVATE $LDFLAGS_GLOBAL_RAW $LDFLAGS $OBJADDE_LIB $OBJADDE_LIB_GLOBAL $OBJADDE && target_options-privates-ITEM && target_options-privates-option target_link_options && target_options-privates-args $LDFLAGS_GLOBAL_RAW $LDFLAGS $OBJADDE_LIB $OBJADDE_LIB_GLOBAL $OBJADDE && ${VCS_INFO_SEM} $_EXPORT_SCRIPT_SEM } CPP_DYN_LIBRARY_SEM=$_ADD_DYNLYB_SEM($CMAKE_TARGET_NAME) $CMAKE_TARGET_ARTEFACT_RENAME_RULES @@ -2097,7 +2131,7 @@ module DLL_UNIT: _LINK_UNIT { SET(MODULE_LANG CPP) when ($EXPORTS_FILE) { - _EXPORT_SCRIPT_SEM=&& use_export_script ${input:EXPORTS_FILE} + _EXPORT_SCRIPT_SEM=&& use_export_script ${input:EXPORTS_FILE} && target_macroses-ITEM && target_macroses-macro use_export_script && target_macroses-args ${input:EXPORTS_FILE} } when ($MSVC == "yes" || $CYGWIN == "yes") { @@ -2652,7 +2686,7 @@ _COPY_FILE_CONTEXT= macro _COPY_FILE_IMPL(TEXT[], AUTO_DST="", NOAUTO_DST="", OUTPUT_INCLUDES[], INDUCED_DEPS[], OUTPUT_INCLUDES_INP[], FILE...) { .CMD=$COPY_CMD ${input:FILE} ${input;context=TEXT:TEXT} ${output:AUTO_DST} ${noauto;output:NOAUTO_DST} ${output_include;hide:OUTPUT_INCLUDES} ${output_include;from_input;hide:OUTPUT_INCLUDES_INP} $INDUCED_DEPS ${hide;kv:"p CP"} ${hide;kv:"pc light-cyan"} - .SEM=copy_file ${input:FILE} ${output:AUTO_DST} ${noauto;output:NOAUTO_DST} + .SEM=copy_file ${input:FILE} ${output:AUTO_DST} ${noauto;output:NOAUTO_DST} && target_commands-ITEM && target_commands-macro copy_file && target_commands-args ${input:FILE} ${output:AUTO_DST} ${noauto;output:NOAUTO_DST} } ### @usage: COPY_FILE(File Destination [AUTO] [OUTPUT_INCLUDES Deps...]) @@ -2816,7 +2850,7 @@ macro SIZE(Type) { ### You should specify file name with the extension as Out. Further processing will be done according this extension. macro JOIN_SRCS(Out, Src...) { .CMD=$YMAKE_PYTHON3 ${input:"build/scripts/gen_join_srcs.py"} ${hide;input:"build/scripts/process_command_files.py"} ${output:Out} --ya-start-command-file ${input;rootrel:Src} --ya-end-command-file ${output_include;from_input;hide:Src} ${hide;kv:"p JS"} ${hide;kv:"pc magenta"} - .SEM=target_joined_source $Out ${input:Src} ${hide;output;suf=.o:Out} ${hide;input:"build/scripts/gen_join_srcs.py"} ${hide;input:"build/scripts/process_command_files.py"} + .SEM=target_joined_source $Out ${input:Src} ${hide;output;suf=.o:Out} ${hide;input:"build/scripts/gen_join_srcs.py"} ${hide;input:"build/scripts/process_command_files.py"} && target_macroses-ITEM && target_macroses-macro target_joined_source && target_macroses-args $Out ${input:Src} ${hide;output;suf=.o:Out} ${hide;input:"build/scripts/gen_join_srcs.py"} ${hide;input:"build/scripts/process_command_files.py"} _CONDITIONAL_SRCS($TIDY_VALUE $Src) } @@ -2980,7 +3014,7 @@ macro SET_COMPILE_OUTPUTS_MODIFIERS(NOREL?";norel":"") { ### @usage: _ADD_EXTRA_FLAGS_IMPL([GENERATE] Args...) # internal ### Generate prefix = " && set_property SOURCE ${input:SRC} APPEND PROPERTY COMPILE_OPTIONS " before $Args when GENERATE ### is specified in the list of actual arguments -macro _ADD_EXTRA_FLAGS_IMPL(GENERATE?" && set_property SOURCE ${input:SRC} APPEND PROPERTY COMPILE_OPTIONS ":"", Args...) { +macro _ADD_EXTRA_FLAGS_IMPL(GENERATE?" && set_property SOURCE ${input:SRC} APPEND PROPERTY COMPILE_OPTIONS && target_commands-ITEM && target_commands-macro set_property && target_commands-args SOURCE ${input:SRC} APPEND PROPERTY COMPILE_OPTIONS ":"", Args...) { .SEM=$GENERATE $Args } @@ -3018,12 +3052,12 @@ when (($ARCH_AARCH64 || $ARCH_ARM || $ARCH_PPC64LE || $ARCH_RISCV32) == "yes") { # tag:src-processing macro _SRC("rodata", SRC, SRCFLAGS...) { .CMD=$RODATA_COMPILE ${hide;kv:"p RD"} ${hide;kv:"pc light-green"} - .SEM=target_rodata_sources PRIVATE ${input:SRC} ${hide;output;suf=${OBJ_SUF}.o:SRC} ${hide;input:"build/scripts/rodata2cpp.py"} + .SEM=target_rodata_sources PRIVATE ${input:SRC} ${hide;output;suf=${OBJ_SUF}.o:SRC} ${hide;input:"build/scripts/rodata2cpp.py"} && target_macroses-ITEM && target_macroses-macro target_rodata_sources && target_macroses-args PRIVATE ${input:SRC} ${hide;output;suf=${OBJ_SUF}.o:SRC} ${hide;input:"build/scripts/rodata2cpp.py"} } 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 && project_languages ASM + .SEM=target_sources PRIVATE ${input:SRC} ${hide;output;suf=${OBJ_SUF}.o:SRC} $_ADD_EXTRA_FLAGS($SRCFLAGS) && target_options-privates-ITEM && target_options-privates-option target_sources && target_options-privates-args ${input:SRC} ${hide;output;suf=${OBJ_SUF}.o:SRC} && add_language ASM && project_languages ASM } # tag:src-processing @@ -3089,7 +3123,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} ${hide;kv:"p R6"} ${hide;kv:"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"' && 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"} + .SEM=target_ragel_lexers PRIVATE ${input:SRC} ${hide;output;suf=${OBJ_SUF}.o:SRC} $RAGEL6_FLAGS ${SRCFLAGS} && target_macroses-ITEM && target_macroses-macro target_ragel_lexers && target_macroses-args 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 $S/" && conan-tool_requires ragel/6.10 && conan-imports 'bin, ragel* -> ./bin' ${hide;input:"build/scripts/run_tool.py"} } # tag:src-processing @@ -3126,7 +3160,7 @@ macro _SRC("cfgproto", SRC, SRCFLAGS...) { macro _SRC("pyx", SRC, SRCFLAGS...) { # Copy-paste from BUILDWITH_CYTHON .CMD=$RUN_CYTHON_SCRIPT $CYTHON_OPTIONS --cplus ${CYTHON_CPP_OUTPUT_INCLUDES} ${pre=-I:_CYTHON__INCLUDE} ${input:SRC} -o ${output;tobindir;suf=${OBJ_SUF}.cpp:SRC} $CYTHON_OUTPUT_INCLUDES ${SRCFLAGS} ${hide;kv:"p CY"} ${hide;kv:"pc yellow"} - .SEM=target_cython_sources PRIVATE ${input:Src} ${hide;output;tobindir:Src.fake.o} && target_cython_options $CYTHON_OPTIONS --cplus ${SRCFLAGS} ${CYTHON_CPP_OUTPUT_INCLUDES} && target_cython_include_directories $_CYTHON__INCLUDE && set_python_type_for_cython $PYTHON_TYPE_FOR_CYTHON + .SEM=target_cython_sources PRIVATE ${input:Src} ${hide;output;tobindir:Src.fake.o} && target_options-privates-ITEM && target_options-privates-option target_cython_sources && target_options-privates-args ${input:Src} ${hide;output;tobindir:Src.fake.o} && target_cython_options $CYTHON_OPTIONS --cplus ${SRCFLAGS} ${CYTHON_CPP_OUTPUT_INCLUDES} && target_macroses-ITEM && target_macroses-macro target_cython_options && target_macroses-args $CYTHON_OPTIONS --cplus ${SRCFLAGS} ${CYTHON_CPP_OUTPUT_INCLUDES} && target_cython_include_directories $_CYTHON__INCLUDE && target_macroses-ITEM && target_macroses-macro target_cython_include_directories && target_macroses-args $_CYTHON__INCLUDE && set_python_type_for_cython $PYTHON_TYPE_FOR_CYTHON && target_macroses-ITEM && target_macroses-macro set_python_type_for_cython && target_macroses-args $PYTHON_TYPE_FOR_CYTHON .ADDINCL=FOR cython contrib/tools/cython/Cython/Includes } @@ -3161,42 +3195,42 @@ macro _SRC("f", SRC, SRCFLAGS...) { # tag:src-processing macro _SRC("cpp", SRC, SRCFLAGS...) { .CMD=$_SRC_CPP_CMD_NEW - .SEM=target_sources PRIVATE ${input:SRC} ${hide;output;suf=${OBJ_SUF}.o:SRC} $_ADD_EXTRA_FLAGS($SRCFLAGS) + .SEM=target_sources PRIVATE ${input:SRC} ${hide;output;suf=${OBJ_SUF}.o:SRC} && target_options-privates-ITEM && target_options-privates-option target_sources && target_options-privates-args ${input:SRC} ${hide;output;suf=${OBJ_SUF}.o:SRC} $_ADD_EXTRA_FLAGS($SRCFLAGS) .STRUCT_CMD=yes } # tag:src-processing macro _SRC("cxx", SRC, SRCFLAGS...) { .CMD=$_SRC_CPP_CMD_NEW - .SEM=target_sources PRIVATE ${input:SRC} ${hide;output;suf=${OBJ_SUF}.o:SRC} $_ADD_EXTRA_FLAGS($SRCFLAGS) + .SEM=target_sources PRIVATE ${input:SRC} ${hide;output;suf=${OBJ_SUF}.o:SRC} && target_options-privates-ITEM && target_options-privates-option target_sources && target_options-privates-args ${input:SRC} ${hide;output;suf=${OBJ_SUF}.o:SRC} $_ADD_EXTRA_FLAGS($SRCFLAGS) .STRUCT_CMD=yes } # tag:src-processing macro _SRC("cc", SRC, SRCFLAGS...) { .CMD=$_SRC_CPP_CMD_NEW - .SEM=target_sources PRIVATE ${input:SRC} ${hide;output;suf=${OBJ_SUF}.o:SRC} $_ADD_EXTRA_FLAGS($SRCFLAGS) + .SEM=target_sources PRIVATE ${input:SRC} ${hide;output;suf=${OBJ_SUF}.o:SRC} && target_options-privates-ITEM && target_options-privates-option target_sources && target_options-privates-args ${input:SRC} ${hide;output;suf=${OBJ_SUF}.o:SRC} $_ADD_EXTRA_FLAGS($SRCFLAGS) .STRUCT_CMD=yes } # tag:src-processing macro _SRC("auxcpp", SRC, SRCFLAGS...) { .CMD=$_SRC_CPP_CMD_NEW_FORCED - .SEM=target_sources PRIVATE ${input:SRC} ${hide;output;suf=${OBJ_SUF}.o:SRC} $_ADD_EXTRA_FLAGS($_FORCE_CPP_FLAGS $SRCFLAGS) + .SEM=target_sources PRIVATE ${input:SRC} ${hide;output;suf=${OBJ_SUF}.o:SRC} && target_options-privates-ITEM && target_options-privates-option target_sources && target_options-privates-args ${input:SRC} ${hide;output;suf=${OBJ_SUF}.o:SRC} $_ADD_EXTRA_FLAGS($_FORCE_CPP_FLAGS $SRCFLAGS) .STRUCT_CMD=yes } # tag:src-processing macro _SRC("C", SRC, SRCFLAGS...) { .CMD=$_SRC_CPP_CMD_NEW - .SEM=target_sources PRIVATE ${input:SRC} ${hide;output;suf=${OBJ_SUF}.o:SRC} $_ADD_EXTRA_FLAGS($SRCFLAGS) + .SEM=target_sources PRIVATE ${input:SRC} ${hide;output;suf=${OBJ_SUF}.o:SRC} && target_options-privates-ITEM && target_options-privates-option target_sources && target_options-privates-args ${input:SRC} ${hide;output;suf=${OBJ_SUF}.o:SRC} $_ADD_EXTRA_FLAGS($SRCFLAGS) .STRUCT_CMD=yes } # tag:src-processing macro _SRC("c", SRC, SRCFLAGS...) { .CMD=$_SRC_C_CMD_NEW - .SEM=target_sources PRIVATE ${input:SRC} ${hide;output;suf=${OBJ_SUF}.o:SRC} $_ADD_EXTRA_FLAGS($SRCFLAGS $USER_CONLYFLAGS $USER_CONLYFLAGS_GLOBAL) + .SEM=target_sources PRIVATE ${input:SRC} ${hide;output;suf=${OBJ_SUF}.o:SRC} && target_options-privates-ITEM && target_options-privates-option target_sources && target_options-privates-args ${input:SRC} ${hide;output;suf=${OBJ_SUF}.o:SRC} $_ADD_EXTRA_FLAGS($SRCFLAGS $USER_CONLYFLAGS $USER_CONLYFLAGS_GLOBAL) .STRUCT_CMD=yes } @@ -3205,15 +3239,19 @@ macro _SRC("m", SRC, SRCFLAGS...) { .CMD=$_SRC(c $SRC $SRCFLAGS) } -MASM_SEM=target_sources PRIVATE ${input:SRC} ${hide;output;suf=${OBJ_SUF}.o:SRC} \ - && curdir_masm_flags ${MASMFLAGS} +MASM_SEM=target_sources PRIVATE ${input:SRC} ${hide;output;suf=${OBJ_SUF}.o:SRC} \ + && target_options-privates-ITEM && target_options-privates-option target_sources && target_options-privates-args ${input:SRC} ${hide;output;suf=${OBJ_SUF}.o:SRC} \ + && curdir_masm_flags ${MASMFLAGS} \ + && dir_macroses-ITEM && dir_macroses-macro curdir_masm_flags && dir_macroses-args ${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"} \ + && target_macroses-ITEM && target_macroses-macro target_yasm_source && target_macroses-args 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 \ && 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"} \ + && target_macroses-ITEM && target_macroses-macro target_yasm_source && target_macroses-args 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 \ && 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 \ @@ -3260,7 +3298,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} && 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 + .SEM=target_cuda_sources PRIVATE ${input:SRC} ${hide;output;suf=${OBJ_SUF}.o:SRC} && target_options-privates-ITEM && target_options-privates-option target_cuda_sources && target_options-privates-args ${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_macroses-ITEM && target_macroses-macro target_cuda_flags && target_macroses-args $CUDA_NVCC_FLAGS && target_cuda_cflags $USER_CXXFLAGS $SRCFLAGS $_SEM_EXTRA_CXX_FLAGS && target_macroses-ITEM && target_macroses-macro target_cuda_cflags && target_macroses-args $USER_CXXFLAGS $SRCFLAGS $_SEM_EXTRA_CXX_FLAGS .PEERDIR=$_SRC_CU_PEERDIR } @@ -3541,12 +3579,12 @@ macro SRCS(FILES...) { # tag:c-specific macro _SRC_C_CUSTOM_FLAGS(SRC, COMPILE_OUT_SUFFIX, CUSTOM_FLAGS...) { .CMD=$_SRC_c($SRC COMPILE_OUT_SUFFIX ${COMPILE_OUT_SUFFIX} ${CUSTOM_FLAGS}) - .SEM=target_sources_custom $COMPILE_OUT_SUFFIX SRCS ${input:SRC} ${hide;output;suf=${COMPILE_OUT_SUFFIX}.o:SRC} CUSTOM_FLAGS $CUSTOM_FLAGS $USER_CONLYFLAGS $USER_CONLYFLAGS_GLOBAL + .SEM=target_sources_custom $COMPILE_OUT_SUFFIX SRCS ${input:SRC} ${hide;output;suf=${COMPILE_OUT_SUFFIX}.o:SRC} CUSTOM_FLAGS $CUSTOM_FLAGS $USER_CONLYFLAGS $USER_CONLYFLAGS_GLOBAL && target_macroses-ITEM && target_macroses-macro target_sources_custom && target_macroses-args $COMPILE_OUT_SUFFIX SRCS ${input:SRC} ${hide;output;suf=${COMPILE_OUT_SUFFIX}.o:SRC} CUSTOM_FLAGS $CUSTOM_FLAGS $USER_CONLYFLAGS $USER_CONLYFLAGS_GLOBAL } macro _SRC_CPP_CUSTOM_FLAGS(SRC, COMPILE_OUT_SUFFIX, CUSTOM_FLAGS...) { .CMD=$_SRC_cpp($SRC COMPILE_OUT_SUFFIX ${COMPILE_OUT_SUFFIX} ${CUSTOM_FLAGS}) - .SEM=target_sources_custom $COMPILE_OUT_SUFFIX SRCS ${input:SRC} ${hide;output;suf=${COMPILE_OUT_SUFFIX}.o:SRC} CUSTOM_FLAGS $CUSTOM_FLAGS + .SEM=target_sources_custom $COMPILE_OUT_SUFFIX SRCS ${input:SRC} ${hide;output;suf=${COMPILE_OUT_SUFFIX}.o:SRC} CUSTOM_FLAGS $CUSTOM_FLAGS && target_macroses-ITEM && target_macroses-macro target_sources_custom && target_macroses-args $COMPILE_OUT_SUFFIX SRCS ${input:SRC} ${hide;output;suf=${COMPILE_OUT_SUFFIX}.o:SRC} CUSTOM_FLAGS $CUSTOM_FLAGS } @@ -3760,7 +3798,7 @@ macro SRC_C_NO_LTO(FILE, FLAGS...) { ### Generates .cpp file from .pyx. macro BUILDWITH_CYTHON_CPP(Src, Options...) { .CMD=$RUN_CYTHON_SCRIPT $CYTHON_OPTIONS ${Options} --cplus ${CYTHON_CPP_OUTPUT_INCLUDES} ${pre=-I:_CYTHON__INCLUDE} ${input:Src} -o ${output;tobindir;suf=${OBJ_SUF}.cpp:Src} $CYTHON_OUTPUT_INCLUDES ${hide;kv:"p CY"} ${hide;kv:"pc yellow"} - .SEM=target_cython_sources PRIVATE ${input:Src} ${hide;output;tobindir:Src.fake.o} && target_cython_options $CYTHON_OPTIONS ${Options} --cplus ${CYTHON_CPP_OUTPUT_INCLUDES} && target_cython_include_directories $_CYTHON__INCLUDE && set_python_type_for_cython $PYTHON_TYPE_FOR_CYTHON + .SEM=target_cython_sources PRIVATE ${input:Src} ${hide;output;tobindir:Src.fake.o} && target_options-privates-ITEM && target_options-privates-option target_cython_sources && target_options-privates-args ${input:Src} ${hide;output;tobindir:Src.fake.o} && target_cython_options $CYTHON_OPTIONS ${Options} --cplus ${CYTHON_CPP_OUTPUT_INCLUDES} && target_macroses-ITEM && target_macroses-macro target_cython_options && target_macroses-args $CYTHON_OPTIONS ${Options} --cplus ${CYTHON_CPP_OUTPUT_INCLUDES} && target_cython_include_directories $_CYTHON__INCLUDE && target_macroses-ITEM && target_macroses-macro target_cython_include_directories && target_macroses-args $_CYTHON__INCLUDE && set_python_type_for_cython $PYTHON_TYPE_FOR_CYTHON && target_macroses-ITEM && target_macroses-macro set_python_type_for_cython && target_macroses-args $PYTHON_TYPE_FOR_CYTHON ADDINCL(FOR cython contrib/tools/cython/Cython/Includes) } @@ -3771,7 +3809,7 @@ macro BUILDWITH_CYTHON_CPP(Src, Options...) { ### If Dep changes the .cpp file will be re-generated. macro _BUILDWITH_CYTHON_CPP_DEP(Src, Dep, Options...) { .CMD=$RUN_CYTHON_SCRIPT $CYTHON_OPTIONS ${Options} --cplus ${CYTHON_CPP_OUTPUT_INCLUDES} ${pre=-I:_CYTHON__INCLUDE} ${input:Src} ${hide;input:Dep} -o ${output;tobindir;suf=${OBJ_SUF}.cpp:Src} $CYTHON_OUTPUT_INCLUDES ${hide;kv:"p CY"} ${hide;kv:"pc yellow"} - .SEM=target_cython_sources PRIVATE ${input:Src} ${hide;input:Dep} ${hide;output;tobindir:Src.fake.o} && target_cython_options $CYTHON_OPTIONS ${Options} --cplus ${CYTHON_CPP_OUTPUT_INCLUDES} && target_cython_include_directories $_CYTHON__INCLUDE && set_python_type_for_cython $PYTHON_TYPE_FOR_CYTHON + .SEM=target_cython_sources PRIVATE ${input:Src} ${hide;input:Dep} ${hide;output;tobindir:Src.fake.o} && target_options-privates-ITEM && target_options-privates-option target_cython_sources && target_options-privates-args ${input:Src} ${hide;input:Dep} ${hide;output;tobindir:Src.fake.o} && target_cython_options $CYTHON_OPTIONS ${Options} --cplus ${CYTHON_CPP_OUTPUT_INCLUDES} && target_macroses-ITEM && target_macroses-macro target_cython_options && target_macroses-args $CYTHON_OPTIONS ${Options} --cplus ${CYTHON_CPP_OUTPUT_INCLUDES} && target_cython_include_directories $_CYTHON__INCLUDE && target_macroses-ITEM && target_macroses-macro target_cython_include_directories && target_macroses-args $_CYTHON__INCLUDE && set_python_type_for_cython $PYTHON_TYPE_FOR_CYTHON && target_macroses-ITEM && target_macroses-macro set_python_type_for_cython && target_macroses-args $PYTHON_TYPE_FOR_CYTHON ADDINCL(FOR cython contrib/tools/cython/Cython/Includes) } @@ -3791,7 +3829,7 @@ macro _BUILDWITH_CYTHON_CPP_H(Src, Dep, Options...) { ### Generates .c file from .pyx. macro BUILDWITH_CYTHON_C(Src, Options...) { .CMD=$RUN_CYTHON_SCRIPT $CYTHON_OPTIONS ${Options} ${pre=-I:_CYTHON__INCLUDE} ${input:Src} -o ${output;tobindir;suf=${OBJ_SUF}.c:Src} $CYTHON_OUTPUT_INCLUDES ${hide;kv:"p CY"} ${hide;kv:"pc yellow"} - .SEM=target_cython_sources PRIVATE ${input:Src} ${hide;output;tobindir:Src.fake.o} && target_cython_options $CYTHON_OPTIONS ${Options} ${CYTHON_OUTPUT_INCLUDES} && target_cython_include_directories $_CYTHON__INCLUDE && set_python_type_for_cython $PYTHON_TYPE_FOR_CYTHON + .SEM=target_cython_sources PRIVATE ${input:Src} ${hide;output;tobindir:Src.fake.o} && target_options-privates-ITEM && target_options-privates-option target_cython_sources && target_options-privates-args ${input:Src} ${hide;output;tobindir:Src.fake.o} && target_cython_options $CYTHON_OPTIONS ${Options} ${CYTHON_OUTPUT_INCLUDES} && target_macroses-ITEM && target_macroses-macro target_cython_options && target_macroses-args $CYTHON_OPTIONS ${Options} ${CYTHON_OUTPUT_INCLUDES} && target_cython_include_directories $_CYTHON__INCLUDE && target_macroses-ITEM && target_macroses-macro target_cython_include_directories && target_macroses-args $_CYTHON__INCLUDE && set_python_type_for_cython $PYTHON_TYPE_FOR_CYTHON && target_macroses-ITEM && target_macroses-macro set_python_type_for_cython && target_macroses-args $PYTHON_TYPE_FOR_CYTHON ADDINCL(FOR cython contrib/tools/cython/Cython/Includes) } @@ -3802,7 +3840,7 @@ macro BUILDWITH_CYTHON_C(Src, Options...) { ### If Dep changes the .c file will be re-generated. macro _BUILDWITH_CYTHON_C_DEP(Src, Dep, Options...) { .CMD=$RUN_CYTHON_SCRIPT $CYTHON_OPTIONS ${Options} ${pre=-I:_CYTHON__INCLUDE} ${input:Src} ${hide;input:Dep} -o ${output;tobindir;suf=${OBJ_SUF}.c:Src} $CYTHON_OUTPUT_INCLUDES ${hide;kv:"p CY"} ${hide;kv:"pc yellow"} - .SEM=target_cython_sources PRIVATE ${input:Src} ${hide;input:Dep} ${hide;output;tobindir:Src.fake.o} && target_cython_options $CYTHON_OPTIONS ${Options} ${CYTHON_OUTPUT_INCLUDES} && target_cython_include_directories $_CYTHON__INCLUDE && set_python_type_for_cython $PYTHON_TYPE_FOR_CYTHON + .SEM=target_cython_sources PRIVATE ${input:Src} ${hide;input:Dep} ${hide;output;tobindir:Src.fake.o} && target_options-privates-ITEM && target_options-privates-option target_cython_sources && target_options-privates-args ${input:Src} ${hide;input:Dep} ${hide;output;tobindir:Src.fake.o} && target_cython_options $CYTHON_OPTIONS ${Options} ${CYTHON_OUTPUT_INCLUDES} && target_macroses-ITEM && target_macroses-macro target_cython_options && target_macroses-args $CYTHON_OPTIONS ${Options} ${CYTHON_OUTPUT_INCLUDES} && target_cython_include_directories $_CYTHON__INCLUDE && target_macroses-ITEM && target_macroses-macro target_cython_include_directories && target_macroses-args $_CYTHON__INCLUDE && set_python_type_for_cython $PYTHON_TYPE_FOR_CYTHON && target_macroses-ITEM && target_macroses-macro set_python_type_for_cython && target_macroses-args $PYTHON_TYPE_FOR_CYTHON ADDINCL(FOR cython contrib/tools/cython/Cython/Includes) } @@ -3875,7 +3913,7 @@ macro _PY3_COMPILE_BYTECODE(SrcX, Src, Dst) { } macro _ARCHIVE_SEM_HELPER(FLAGS[], OUT, Files...) { - .SEM=add_custom_command OUTPUT ${OUT} DEPENDS $ARCH_TOOL ${join= :Files} COMMAND $ARCH_TOOL $FLAGS ${join=\: :Files}: -o ${OUT} + .SEM=add_custom_command OUTPUT ${OUT} DEPENDS $ARCH_TOOL ${join= :Files} COMMAND $ARCH_TOOL $FLAGS ${join=\: :Files}: -o ${OUT} && target_commands-ITEM && target_commands-macro add_custom_command && target_commands-args OUTPUT ${OUT} DEPENDS $ARCH_TOOL ${join= :Files} COMMAND $ARCH_TOOL $FLAGS ${join=\: :Files}: -o ${OUT} } ### @usage: ARCHIVE_ASM(NAME archive_name files...) @@ -3907,7 +3945,7 @@ macro PIRE_INLINE(FILES...) { ### Example: https://wiki.yandex-team.ru/yatool/howtowriteyamakefiles/#a1ispolzujjtekomanduarchive macro ARCHIVE(NAME="", DONTCOMPRESS?"-p":"", Files...) { .CMD=$ARCH_TOOL -q -x $DONTCOMPRESS ${input;join=\: :Files}: -o ${output;addincl;noauto:NAME} ${hide;kv:"p AR"} ${hide;kv:"pc light-red"} - .SEM=$_ARCHIVE_SEM_HELPER(${output;addincl;noauto:NAME} ${input:Files} FLAGS -q -x $DONTCOMPRESS) && target_sources PRIVATE $BINDIR/$NAME + .SEM=$_ARCHIVE_SEM_HELPER(${output;addincl;noauto:NAME} ${input:Files} FLAGS -q -x $DONTCOMPRESS) && target_sources PRIVATE $BINDIR/$NAME && target_options-privates-ITEM && target_options-privates-option target_sources && target_options-privates-args $BINDIR/$NAME } ### @usage: ARCHIVE_BY_KEYS(archive_name key [DONT_COMPRESS] files...) @@ -4003,7 +4041,7 @@ macro CFG_VARS() { ### Used implicitly for .in-files processing. macro CONFIGURE_FILE(Src, Dst) { .CMD=$YMAKE_PYTHON ${input:"build/scripts/configure_file.py"} ${input:Src} ${output;addincl:Dst} $CFG_VARS ${hide;kv:"p CF"} ${hide;kv:"pc yellow"} - .SEM=set_vars ${CFG_VARS} && configure_file $S/${input;rootrel:Src} $B/${output;addincl;rootrel:Dst} + .SEM=set_vars ${CFG_VARS} && dir_macroses-ITEM && dir_macroses-macro set_vars && dir_macroses-args ${CFG_VARS} && configure_file $S/${input;rootrel:Src} $B/${output;addincl;rootrel:Dst} && target_commands-ITEM && target_commands-macro configure_file && target_commands-args $S/${input;rootrel:Src} $B/${output;addincl;rootrel:Dst} } # tag:flags @@ -4281,7 +4319,7 @@ macro _LUAJIT_OPENRESTY_OBJDUMP(Src, OUT="") { ### Documentation: https://wiki.yandex-team.ru/yatool/HowToWriteYaMakeFiles/ macro GENERATE_ENUM_SERIALIZATION(File) { .CMD=$ENUM_PARSER_TOOL ${input:File} --include-path ${input;rootrel:File} --output ${output;suf=_serialized.cpp:File} ${output_include;from_input;hide:File} ${output_include;hide:"util/generic/serialized_enum.h"} ${hide;kv:"p EN"} ${hide;kv:"pc yellow"} - .SEM=generate_enum_serilization ${input:File} ${hide;output;suf=_serialized.o:File} INCLUDE_HEADERS ${input;rootrel:File} ${hide;tool:"tools/enum_parser/enum_parser"} + .SEM=generate_enum_serilization ${input:File} ${hide;output;suf=_serialized.o:File} INCLUDE_HEADERS ${input;rootrel:File} ${hide;tool:"tools/enum_parser/enum_parser"} && target_macroses-ITEM && target_macroses-macro generate_enum_serilization && target_macroses-args ${input:File} ${hide;output;suf=_serialized.o:File} INCLUDE_HEADERS ${input;rootrel:File} ${hide;tool:"tools/enum_parser/enum_parser"} PEERDIR(tools/enum_parser/enum_serialization_runtime) } @@ -4293,7 +4331,7 @@ macro GENERATE_ENUM_SERIALIZATION(File) { ### Documentation: https://wiki.yandex-team.ru/yatool/HowToWriteYaMakeFiles/ macro GENERATE_ENUM_SERIALIZATION_WITH_HEADER(File) { .CMD=$ENUM_PARSER_TOOL ${input:File} --include-path ${input;rootrel:File} --output ${output;suf=_serialized.cpp:File} --header ${output;suf=_serialized.h:File} ${output_include;from_input;hide:File} ${hide;kv:"p EN"} ${hide;kv:"pc yellow"} - .SEM=generate_enum_serilization ${input:File} ${hide;output;suf=_serialized.o:File} GEN_HEADER ${output;suf=_serialized.h:File} INCLUDE_HEADERS ${input;rootrel:File} ${hide;tool:"tools/enum_parser/enum_parser"} + .SEM=generate_enum_serilization ${input:File} ${hide;output;suf=_serialized.o:File} GEN_HEADER ${output;suf=_serialized.h:File} INCLUDE_HEADERS ${input;rootrel:File} ${hide;tool:"tools/enum_parser/enum_parser"} && target_macroses-ITEM && target_macroses-macro generate_enum_serilization && target_macroses-args ${input:File} ${hide;output;suf=_serialized.o:File} GEN_HEADER ${output;suf=_serialized.h:File} INCLUDE_HEADERS ${input;rootrel:File} ${hide;tool:"tools/enum_parser/enum_parser"} PEERDIR(tools/enum_parser/enum_serialization_runtime) } @@ -4542,7 +4580,7 @@ macro DECLARE_IN_DIRS(var_prefix, PATTERN, SRCDIR="", RECURSIVE?"**/":"", EXCLUD ### Note that Tool is always built for the host platform, so be careful to provide that tool can be built for all Arcadia major host platforms (Linux, MacOS and Windows). macro RUN_PROGRAM(Tool, IN{input}[], IN_NOPARSE{input}[], OUT{output}[], OUT_NOAUTO{output}[], TOOL{tool}[], OUTPUT_INCLUDES[], INDUCED_DEPS[], IN_DEPS[], STDOUT="", STDOUT_NOAUTO="", CWD="", ENV[], Args...) { .CMD=${cwd:CWD} ${env:ENV} ${tool:Tool} $Args ${hide;input:IN} ${input;context=TEXT;hide:IN_NOPARSE} ${hide;input:IN_DEPS} ${output_include;hide:OUTPUT_INCLUDES} $INDUCED_DEPS ${hide;tool:TOOL} ${hide;output:OUT} ${hide;noauto;output:OUT_NOAUTO} ${output;stdout:STDOUT} ${output;stdout;noauto:STDOUT_NOAUTO} ${hide;kv:"p PR"} ${hide;kv:"pc yellow"} ${hide;kv:"show_out"} - .SEM=add_custom_command $_SET_ENV_FOR_CUSTOM_COMMAND($ENV) OUTPUT ${output:OUT} ${noauto;output:OUT_NOAUTO} ${output:STDOUT} ${noauto;output:STDOUT_NOAUTO} DEPENDS ${input:IN} ${input;context=TEXT:IN_NOPARSE} ${tool:Tool} ${tool:TOOL} ${pre=WORKING_DIRECTORY :CWD} COMMAND ${tool:Tool} $Args ${pre=> :STDOUT} ${pre=> :STDOUT_NOAUTO} $_TARGET_SOURCES_FOR_HEADERS($OUT $OUT_NOAUTO $STDOUT $STDOUT_NOAUTO) + .SEM=add_custom_command $_SET_ENV_FOR_CUSTOM_COMMAND($ENV) OUTPUT ${output:OUT} ${noauto;output:OUT_NOAUTO} ${output:STDOUT} ${noauto;output:STDOUT_NOAUTO} DEPENDS ${input:IN} ${input;context=TEXT:IN_NOPARSE} ${tool:Tool} ${tool:TOOL} ${pre=WORKING_DIRECTORY :CWD} COMMAND ${tool:Tool} $Args ${pre=> :STDOUT} ${pre=> :STDOUT_NOAUTO} $_TARGET_SOURCES_FOR_HEADERS($OUT $OUT_NOAUTO $STDOUT $STDOUT_NOAUTO) && target_commands-ITEM && target_commands-macro add_custom_command && target_commands-args $_SET_ENV_FOR_CUSTOM_COMMAND($ENV) OUTPUT ${output:OUT} ${noauto;output:OUT_NOAUTO} ${output:STDOUT} ${noauto;output:STDOUT_NOAUTO} DEPENDS ${input:IN} ${input;context=TEXT:IN_NOPARSE} ${tool:Tool} ${tool:TOOL} ${pre=WORKING_DIRECTORY :CWD} COMMAND ${tool:Tool} $Args ${pre=> :STDOUT} ${pre=> :STDOUT_NOAUTO} $_TARGET_SOURCES_FOR_HEADERS($OUT $OUT_NOAUTO $STDOUT $STDOUT_NOAUTO) } # tag:lua-specific @@ -4593,7 +4631,7 @@ macro RUN_LUA(ScriptPath, IN{input}[], IN_NOPARSE{input}[], OUT{output}[], OUT_N ### ${CURDIR} and ${BINDIR} which are expanded where the outputs are used. macro RUN_PYTHON3(ScriptPath, IN{input}[], IN_NOPARSE{input}[], OUT{output}[], OUT_NOAUTO{output}[], TOOL{tool}[], OUTPUT_INCLUDES[], INDUCED_DEPS[], STDOUT="", STDOUT_NOAUTO="", CWD="", ENV[], Args...) { .CMD=${cwd:CWD} ${env:ENV} $YMAKE_PYTHON3 ${input:ScriptPath} $Args ${hide;input:IN} ${input;context=TEXT;hide:IN_NOPARSE} ${output_include;hide:OUTPUT_INCLUDES} $INDUCED_DEPS ${hide;tool:TOOL} ${hide;output:OUT} ${hide;noauto;output:OUT_NOAUTO} ${output;stdout:STDOUT} ${output;stdout;noauto:STDOUT_NOAUTO} ${hide;kv:"p PY"} ${hide;kv:"pc yellow"} ${hide;kv:"show_out"} - .SEM=find_package Python3 && add_custom_command $_SET_ENV_FOR_CUSTOM_COMMAND($ENV) OUTPUT ${output:OUT} ${noauto;output:OUT_NOAUTO} ${output:STDOUT} ${noauto;output:STDOUT_NOAUTO} DEPENDS ${input:IN} ${input;context=TEXT:IN_NOPARSE} ${input:ScriptPath} ${tool:TOOL} ${pre=WORKING_DIRECTORY :CWD} COMMAND Python3::Interpreter ${input:ScriptPath} $Args ${pre=> :STDOUT} ${pre=> :STDOUT_NOAUTO} $_TARGET_SOURCES_FOR_HEADERS($OUT $OUT_NOAUTO $STDOUT $STDOUT_NOAUTO) + .SEM=find_package Python3 && packages-ITEM && packages-name Python3 && mpackages-ITEM && mpackages-name Python3 && add_custom_command $_SET_ENV_FOR_CUSTOM_COMMAND($ENV) OUTPUT ${output:OUT} ${noauto;output:OUT_NOAUTO} ${output:STDOUT} ${noauto;output:STDOUT_NOAUTO} DEPENDS ${input:IN} ${input;context=TEXT:IN_NOPARSE} ${input:ScriptPath} ${tool:TOOL} ${pre=WORKING_DIRECTORY :CWD} COMMAND Python3::Interpreter ${input:ScriptPath} $Args ${pre=> :STDOUT} ${pre=> :STDOUT_NOAUTO} $_TARGET_SOURCES_FOR_HEADERS($OUT $OUT_NOAUTO $STDOUT $STDOUT_NOAUTO) && target_commands-ITEM && target_commands-macro add_custom_command && target_commands-args $_SET_ENV_FOR_CUSTOM_COMMAND($ENV) OUTPUT ${output:OUT} ${noauto;output:OUT_NOAUTO} ${output:STDOUT} ${noauto;output:STDOUT_NOAUTO} DEPENDS ${input:IN} ${input;context=TEXT:IN_NOPARSE} ${input:ScriptPath} ${tool:TOOL} ${pre=WORKING_DIRECTORY :CWD} COMMAND Python3::Interpreter ${input:ScriptPath} $Args ${pre=> :STDOUT} ${pre=> :STDOUT_NOAUTO} $_TARGET_SOURCES_FOR_HEADERS($OUT $OUT_NOAUTO $STDOUT $STDOUT_NOAUTO) } # tag:java-specific @@ -4714,7 +4752,7 @@ macro CLANG_EMIT_AST_CXX(Input, Output, Opts...) { ### Note: Output name is used as is, no extension added. macro LLVM_COMPILE_CXX(Input, Output, Opts...) { .CMD=$YMAKE_PYTHON ${input:"build/scripts/clang_wrapper.py"} $WINDOWS ${CLANG_BC_ROOT}/bin/clang++ ${pre=-I:_C__INCLUDE} $BC_CXXFLAGS $C_FLAGS_PLATFORM -Wno-unknown-warning-option $LLVM_OPTS ${NO_LTO_CFLAGS} -emit-llvm -c ${input:Input} -o ${noauto;output:Output} $Opts ${hide;kv:"p BC"} ${hide;kv:"pc light-green"} - .SEM=llvm_compile_cxx ${input:Input} ${noauto;output:Output} ${"${CLANGPLUSPLUS}"} -Wno-unknown-warning-option $LLVM_OPTS ${NO_LTO_CFLAGS} -emit-llvm ${Opts} + .SEM=llvm_compile_cxx ${input:Input} ${noauto;output:Output} ${"${CLANGPLUSPLUS}"} -Wno-unknown-warning-option $LLVM_OPTS ${NO_LTO_CFLAGS} -emit-llvm ${Opts} && target_macroses-ITEM && target_macroses-macro llvm_compile_cxx && target_macroses-args ${input:Input} ${noauto;output:Output} ${"${CLANGPLUSPLUS}"} -Wno-unknown-warning-option $LLVM_OPTS ${NO_LTO_CFLAGS} -emit-llvm ${Opts} when ($CLANG_BC_ROOT == "") { _OK = no } @@ -4728,7 +4766,7 @@ macro LLVM_COMPILE_CXX(Input, Output, Opts...) { ### Note: Output name is used as is, no extension added. macro LLVM_COMPILE_C(Input, Output, Opts...) { .CMD=$YMAKE_PYTHON ${input:"build/scripts/clang_wrapper.py"} $WINDOWS ${CLANG_BC_ROOT}/bin/clang ${pre=-I:_C__INCLUDE} $BC_CFLAGS $C_FLAGS_PLATFORM $LLVM_OPTS ${NO_LTO_CFLAGS} -emit-llvm -c ${input:Input} -o ${noauto;output:Output} $Opts ${hide;kv:"p BC"} ${hide;kv:"pc light-green"} - .SEM=llvm_compile_c ${input:Input} ${noauto;output:Output} ${"${CLANGC}"} -Wno-unknown-warning-option $LLVM_OPTS ${NO_LTO_CFLAGS} -emit-llvm ${Opts} + .SEM=llvm_compile_c ${input:Input} ${noauto;output:Output} ${"${CLANGC}"} -Wno-unknown-warning-option $LLVM_OPTS ${NO_LTO_CFLAGS} -emit-llvm ${Opts} && target_macroses-ITEM && target_macroses-macro llvm_compile_c && target_macroses-args ${input:Input} ${noauto;output:Output} ${"${CLANGC}"} -Wno-unknown-warning-option $LLVM_OPTS ${NO_LTO_CFLAGS} -emit-llvm ${Opts} when ($CLANG_BC_ROOT == "") { _OK = no } @@ -4765,7 +4803,7 @@ macro BPF_STATIC(Input, Output, Opts...) { ### Note: Output name is used as is, no extension added. macro LLVM_COMPILE_LL(Input, Output, Opts...) { .CMD=${CLANG_BC_ROOT}/bin/llvm-as ${input:Input} -o ${noauto;output:Output} ${hide;kv:"p BC"} ${hide;kv:"pc light-green"} - .SEM=add_custom_command OUTPUT ${noauto;output:Output} DEPENDS ${input:Input} COMMAND ${LLVMAS} ${input:Input} -o ${noauto;output:Output} + .SEM=add_custom_command OUTPUT ${noauto;output:Output} DEPENDS ${input:Input} COMMAND ${LLVMAS} ${input:Input} -o ${noauto;output:Output} && target_commands-ITEM && target_commands-macro add_custom_command && target_commands-args OUTPUT ${noauto;output:Output} DEPENDS ${input:Input} COMMAND ${LLVMAS} ${input:Input} -o ${noauto;output:Output} PEERDIR(build/platform/clang) } @@ -4775,7 +4813,7 @@ macro LLVM_COMPILE_LL(Input, Output, Opts...) { ### Note: Unlike many other macros output argument goes first. Output name is used as is, no extension added. macro LLVM_LINK(Output, Inputs...) { .CMD=${CLANG_BC_ROOT}/bin/llvm-link ${input:Inputs} -o ${noauto;output:Output} ${hide;kv:"p LD"} ${hide;kv:"pc light-red"} - .SEM=add_custom_command OUTPUT ${noauto;output:Output} DEPENDS ${input:Inputs} COMMAND ${LLVMLINK} ${input:Inputs} -o ${noauto;output:Output} + .SEM=add_custom_command OUTPUT ${noauto;output:Output} DEPENDS ${input:Inputs} COMMAND ${LLVMLINK} ${input:Inputs} -o ${noauto;output:Output} && target_commands-ITEM && target_commands-macro add_custom_command && target_commands-args OUTPUT ${noauto;output:Output} DEPENDS ${input:Inputs} COMMAND ${LLVMLINK} ${input:Inputs} -o ${noauto;output:Output} PEERDIR(build/platform/clang) } @@ -4785,7 +4823,7 @@ macro LLVM_LINK(Output, Inputs...) { ### Note: Output name is used as is, no extension added. macro LLVM_OPT(Input, Output, Opts...) { .CMD=$YMAKE_PYTHON ${input:"build/scripts/llvm_opt_wrapper.py"} ${CLANG_BC_ROOT}/bin/opt ${input:Input} -o ${noauto;output:Output} $Opts ${hide;kv:"p OP"} ${hide;kv:"pc yellow"} - .SEM=add_custom_command OUTPUT ${noauto;output:Output} DEPENDS ${input:Input} COMMAND ${LLVMOPT} ${input:Input} -o ${noauto;output:Output} $Opts + .SEM=add_custom_command OUTPUT ${noauto;output:Output} DEPENDS ${input:Input} COMMAND ${LLVMOPT} ${input:Input} -o ${noauto;output:Output} $Opts && target_commands-ITEM && target_commands-macro add_custom_command && target_commands-args OUTPUT ${noauto;output:Output} DEPENDS ${input:Input} COMMAND ${LLVMOPT} ${input:Input} -o ${noauto;output:Output} $Opts PEERDIR(build/platform/clang) } @@ -4796,7 +4834,7 @@ macro LLVM_OPT(Input, Output, Opts...) { ### Note: Output name is calculated as concatenation of Src name and platform specific object file extension. macro LLVM_LLC(Src, Opts...) { .CMD=${tool:LLVM_LLC_TOOL} ${input:Src} --filetype obj -o ${output;suf=$OBJECT_SUF;noauto:Src} $Opts ${hide;kv:"p LC"} ${hide;kv:"pc yellow"} - .SEM=add_custom_command OUTPUT ${output;suf=$OBJECT_SUF;noauto:Src} DEPENDS ${input:Src} COMMAND ${LLVMLLC} --filetype obj ${input:Src} -o ${output;suf=$OBJECT_SUF;noauto:Src} $Opts + .SEM=add_custom_command OUTPUT ${output;suf=$OBJECT_SUF;noauto:Src} DEPENDS ${input:Src} COMMAND ${LLVMLLC} --filetype obj ${input:Src} -o ${output;suf=$OBJECT_SUF;noauto:Src} $Opts && target_commands-ITEM && target_commands-macro add_custom_command && target_commands-args OUTPUT ${output;suf=$OBJECT_SUF;noauto:Src} DEPENDS ${input:Src} COMMAND ${LLVMLLC} --filetype obj ${input:Src} -o ${output;suf=$OBJECT_SUF;noauto:Src} $Opts PEERDIR(build/platform/clang) } @@ -4939,7 +4977,7 @@ macro ASM_PREINCLUDE(PREINCLUDES...) { ### Macro to invoke ANTLR3 generator (general case) macro RUN_ANTLR(IN[], IN_NOPARSE[], OUT[], OUT_NOAUTO[], OUTPUT_INCLUDES[], INDUCED_DEPS[], CWD="", Args...) { _RUN_JAVA(-jar ${input:"contrib/java/antlr/antlr3/antlr.jar"} $Args IN $IN IN_NOPARSE $IN_NOPARSE OUT $OUT OUT_NOAUTO $OUT_NOAUTO OUTPUT_INCLUDES $OUTPUT_INCLUDES INDUCED_DEPS $INDUCED_DEPS ${pre=CWD :CWD}) - .SEM=run_antlr OUTPUT ${output:OUT} ${noauto;output:OUT_NOAUTO} DEPENDS ${input:IN} ${pre=WORKING_DIRECTORY :CWD} ANTLER_ARGS $Args + .SEM=run_antlr OUTPUT ${output:OUT} ${noauto;output:OUT_NOAUTO} DEPENDS ${input:IN} ${pre=WORKING_DIRECTORY :CWD} ANTLER_ARGS $Args && target_commands-ITEM && target_commands-macro run_antlr && target_commands-args OUTPUT ${output:OUT} ${noauto;output:OUT_NOAUTO} DEPENDS ${input:IN} ${pre=WORKING_DIRECTORY :CWD} ANTLER_ARGS $Args } ### @usage: RUN_ANTLR4(Args...) |
