swig.conf 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. USE_LOCAL_SWIG=no
  2. SWIG_TOOL=no
  3. SWIG_LIBRARY=no
  4. _SWIG_PYTHON_ADDINCLS=
  5. _SWIG_PERL_ADDINCLS=
  6. _SWIG_JNI_ADDINCLS=
  7. when ($USE_LOCAL_SWIG == "no") {
  8. _SWIG_TOOL=${tool:"contrib/tools/swig"}
  9. _SWIG_LIBRARY_ABS=$ARCADIA_ROOT/$_SWIG_LIBRARY
  10. _SWIG_LIBRARY=contrib/tools/swig/Lib
  11. _SWIG_PYTHON_ADDINCLS=FOR swig ${_SWIG_LIBRARY}/python FOR swig ${_SWIG_LIBRARY}
  12. _SWIG_PERL_ADDINCLS=FOR swig ${_SWIG_LIBRARY}/perl5 FOR swig ${_SWIG_LIBRARY}
  13. _SWIG_JNI_ADDINCLS=FOR swig ${_SWIG_LIBRARY}/java FOR swig $_SWIG_LIBRARY
  14. }
  15. otherwise {
  16. when ($SWIG_TOOL != "no") {
  17. _SWIG_TOOL=$SWIG_TOOL
  18. }
  19. otherwise {
  20. _SWIG_TOOL=${USE_LOCAL_SWIG}/bin/swig
  21. }
  22. when ($SWIG_LIBRARY != "no") {
  23. _SWIG_LIBRARY_ABS=$SWIG_LIBRARY
  24. }
  25. elsewhen ($OS_WINDOWS == "yes") {
  26. _SWIG_LIBRARY_ABS=${USE_LOCAL_SWIG}/bin/Lib
  27. }
  28. otherwise {
  29. _SWIG_LIBRARY_ABS=${USE_LOCAL_SWIG}/share/swig
  30. }
  31. }
  32. SWIG_IMPLICIT_INCLUDES = swig.swg go.swg java.swg perl5.swg python.swg
  33. _SWIG_CMD=$_SWIG_PYTHON_CMD
  34. _SWIG_ADDINCLS=$_SWIG_PYTHON_ADDINCLS
  35. _SWIG_PEERDIR=$_SWIG_PYTHON_PEERDIR
  36. _SWIG_SEM_TO_MODULE_LINK=${output;hide;suf=.o:SRC}
  37. _SWIG_PYTHON_CMD=${_SWIG_TOOL} -module ${REALPRJNAME} -cpperraswarn -c++ -python -interface ${MODULE_PREFIX}${REALPRJNAME} -o ${output;noext;main;suf=_wrap.swg.cpp:SRC} ${output;noauto;add_to_outs;hide;tobindir;suf=.py:REALPRJNAME} -outdir ${BINDIR} ${pre=-I:_SWIG__INCLUDE} ${input:SRC} ${kv;hide:"p SW"} ${kv;hide:"pc yellow"}
  38. _SWIG_PYTHON_PEERDIR=
  39. _SWIG_PERL_CMD=${_SWIG_TOOL} -c++ -cpperraswarn -module ${REALPRJNAME} -shadow -perl -o ${output;noext;main;suf=_wrap.swg.cpp:SRC} ${output;noauto;add_to_outs;hide;tobindir;suf=.pm:REALPRJNAME} -outdir ${ARCADIA_BUILD_ROOT}/${MODDIR} ${pre=-I:_SWIG__INCLUDE} ${input:SRC} ${kv;hide:"p SW"} ${kv;hide:"pc yellow"}
  40. _SWIG_PERL_PEERDIR=build/platform/perl
  41. _SWIG_JNI_CPP_CMD=$YMAKE_PYTHON3 ${input:"build/scripts/jni_swig.py"} --swig ${_SWIG_TOOL} --default-module ${nopath;noext:SRC} --src ${input:SRC} --out-header ${output;main;noext;suf=_wrap.swg.h:SRC} --package-by-file ru/yandex/${input;rootrel:SRC} -- ${pre=-I:_SWIG__INCLUDE} -o ${output;noext;suf=_wrap.swg.cpp:SRC} ${kv;hide:"p SW"} ${kv;hide:"pc yellow"}
  42. _SWIG_JNI_JAVA_CMD=$YMAKE_PYTHON3 ${input:"build/scripts/jni_swig.py"} --swig ${_SWIG_TOOL} --default-module ${nopath;noext:SRC} --src ${input:SRC} --package-by-file ru/yandex/${input;rootrel:SRC} --jsrc ${output;main;suf=.jsrc:SRC} -- ${pre=-I:_SWIG__INCLUDE} -o ${BINDIR}/unused.cpp ${kv;hide:"p SW"} ${kv;hide:"pc yellow"}
  43. _SWIG_JNI_CMD=$YMAKE_PYTHON3 ${input:"build/scripts/jni_swig.py"} --swig ${_SWIG_TOOL} --default-module ${nopath;noext:SRC} --src ${input:SRC} --out-header ${output;main;noext;suf=_wrap.swg.h:SRC} --package-by-file ru/yandex/${input;rootrel:SRC} --jsrc ${output;suf=.jsrc:SRC} -- ${pre=-I:_SWIG__INCLUDE} -o ${output;noext;suf=_wrap.swg.cpp:SRC} ${kv;hide:"p SW"} ${kv;hide:"pc yellow"}
  44. _SWIG_JNI_PEERDIR=contrib/libs/jdk
  45. REAL_SWIG_DLL_JAR_CMD=$GENERATE_VCS_JAVA_INFO_NODEP && ${cwd:ARCADIA_BUILD_ROOT} $YMAKE_PYTHON ${input:"build/scripts/build_dll_and_java.py"} $JAVA_SWIG_DELIM $REAL_LINK_DYN_LIB $JAVA_SWIG_DELIM $COMPILE_JAVA $JAVA_SWIG_DELIM $AUTO_INPUT $JAVA_SWIG_DELIM $TARGET $JAVA_SWIG_DELIM ${output;suf=.jar:REALPRJNAME} $JAVA_SWIG_DELIM ${output;suf=-sources.jar:REALPRJNAME} $JAVA_SWIG_DELIM $ARCADIA_BUILD_ROOT $ARCADIA_ROOT
  46. when ($USE_SYSTEM_JDK == "yes" || $OS_ANDROID == "yes") {
  47. _SWIG_JNI_PEERDIR=
  48. }
  49. # tag:python-processing tag:internal
  50. ### @usage: _SWIG_PYTHON_CPP(Src, DstSubPrefix) # internal
  51. ###
  52. ### Run swig on Src to produce DstSubPrefix.py and DstSubPrefix_swg.cpp that
  53. ### provides DstSubPrefix_swg python module.
  54. macro _SWIG_PYTHON_CPP(Src, DstSubPrefix) {
  55. .CMD=$_SWIG_TOOL -I$ARCADIA_BUILD_ROOT -I$ARCADIA_ROOT -I$_SWIG_LIBRARY_ABS/python -I$_SWIG_LIBRARY_ABS -c++ -python -module ${nopath:DstSubPrefix} -interface ${nopath;suf=_swg:DstSubPrefix} -o ${output;suf=.swg.cpp:DstSubPrefix} ${input:Src} ${output;noauto;hide;suf=.py:DstSubPrefix} ${kv;hide:"p SW"} ${kv;hide:"pc yellow"}
  56. .ADDINCL=$_SWIG_PYTHON_ADDINCLS
  57. }
  58. # tag:python-processing tag:internal
  59. ### @usage: _SWIG_PYTHON_C(Src, DstSubPrefix) # internal
  60. ###
  61. ### Like _SWIG_PYTHON_CPP but generate DstSubPrefix_swg.c.
  62. macro _SWIG_PYTHON_C(Src, DstSubPrefix) {
  63. .CMD=$_SWIG_TOOL -I$ARCADIA_BUILD_ROOT -I$ARCADIA_ROOT -I$_SWIG_LIBRARY_ABS/python -I$_SWIG_LIBRARY_ABS -python -module ${nopath:DstSubPrefix} -interface ${nopath;suf=_swg:DstSubPrefix} -o ${output;suf=.swg.c:DstSubPrefix} ${input:Src} ${output;noauto;hide;suf=.py:DstSubPrefix} ${kv;hide:"p SW"} ${kv;hide:"pc yellow"}
  64. .ADDINCL=$_SWIG_PYTHON_ADDINCLS
  65. }
  66. _EXPLICIT_SWIG_JAVA_SOURCES=
  67. _EXPLICIT_SWIG_IFACE_SOURCES=
  68. macro _EXPORT_JAVA_BINDINGS(JavaSrcs...) {
  69. SET_APPEND(_EXPLICIT_SWIG_JAVA_SOURCES ${input:JavaSrcs})
  70. .SEM=find_package SWIG COMPONENTS java && find_package Java && find_package JNI && include UseSWIG && include UseJava ${input;hide:JavaSrcs} ${output;hide;pre=$_HASH_HELPER($Args):".o"}
  71. }
  72. macro _EXPORT_SWIG_SOURCES(SwigSrcs...) {
  73. SET_APPEND(_EXPLICIT_SWIG_IFACE_SOURCES ${input:SwigSrcs})
  74. }
  75. macro _JNI_CPP_SWIG_SRCS(Srcs...) {
  76. SRCS(${ext=.cpp:Srcs} ${ext=.swg:Srcs})
  77. _EXPORT_JAVA_BINDINGS(${ext=.java:Srcs})
  78. _EXPORT_SWIG_SOURCES(${ext=.swg:Srcs})
  79. }
  80. macro _JNI_JAVA_SWIG_SRCS(Srcs...) {
  81. SRCS(${ext=.java:Srcs} ${ext=.swg:Srcs})
  82. }
  83. SWIG_JNI_BINDINGS_SEM= \
  84. add_swig_jni_library ${MODDIR} ${REALPRJNAME}-cpp GEN_JAVA_FILES_LIST ${"$"}{CMAKE_CURRENT_BINARY_DIR}/swig_gen_java.lst SOURCES ${_EXPLICIT_SWIG_IFACE_SOURCES} && \
  85. set_target_property OUTPUT_NAME $REALPRJNAME && \
  86. ${VCS_INFO_SEM} && \
  87. target_include_directories PUBLIC $_C__INCLUDE_GLOBAL && \
  88. target_include_directories PRIVATE $_C__INCLUDE_OWNED && \
  89. target_compile_options PRIVATE $USER_CFLAGS $USER_CXXFLAGS $_SEM_EXTRA_CXX_FLAGS && target_compile_options PUBLIC $USER_CFLAGS_GLOBAL_RAW $USER_CXXFLAGS_GLOBAL_RAW && \
  90. target_link_options PRIVATE $LDFLAGS_GLOBAL_RAW $LDFLAGS $OBJADDE_LIB $OBJADDE && \
  91. add_jar ${REALPRJNAME} SOURCES $_EXPLICIT_SWIG_JAVA_SOURCES @${"$"}{CMAKE_CURRENT_BINARY_DIR}/swig_gen_java.lst ${hide:TARGET}
  92. ### @usage: DLL_JAVA()
  93. ###
  94. ### DLL built using swig for Java. Produces dynamic library and a .jar.
  95. ### Dynamic library is treated the same as in the case of PEERDIR from Java to DLL.
  96. ### .jar goes on the classpath.
  97. ###
  98. ### Documentation: https://wiki.yandex-team.ru/yatool/java/#integracijascpp/pythonsborkojj
  99. multimodule DLL_JAVA {
  100. module JNI_DLL: DLL {
  101. .ALIASES=SRCS=_JNI_CPP_SWIG_SRCS
  102. .FINAL_TARGET=no
  103. .SEM=SWIG_JNI_BINDINGS_SEM
  104. SWIG_LANG=jni_cpp
  105. }
  106. module JAR_COMPILATION: EXTERNAL_JAVA_LIBRARY {
  107. .ARGS_PARSER=DLL
  108. .ALIASES=SRCS=_JNI_JAVA_SWIG_SRCS PEERDIR=_NOOP_MACRO
  109. .PEERDIRSELF=JNI_DLL
  110. PEERDIR+=build/platform/java/jdk
  111. PEERDIR+=$JDK_RESOURCE_PEERDIR
  112. SET(DONT_RESOLVE_INCLUDES yes)
  113. .FINAL_TARGET=yes
  114. SWIG_LANG=jni_java
  115. _SWIG_CMD=$_SWIG_JNI_JAVA_CMD
  116. _SWIG_ADDINCLS=$_SWIG_JNI_ADDINCLS
  117. _SWIG_PEERDIR=$_SWIG_JNI_PEERDIR
  118. _SWIG_SEM_TO_MODULE_LINK=${output;hide;suf=.jsrc:SRC}
  119. }
  120. }