genbindings.sh 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. #!/bin/bash
  2. if [ -z $1 ]; then
  3. echo "*** Please pass an argument which means plugin name. ***"
  4. exit 1
  5. fi
  6. PLUGIN_NAME="$1"
  7. PLUGIN_ROOT="$2"
  8. CXX_GENERATOR_ROOT="$3"
  9. INI_NAME="$PLUGIN_NAME.ini"
  10. OUTPUT_FILENAME="jsb_"$PLUGIN_NAME"_auto"
  11. echo "--------------"
  12. echo "plugin name: $PLUGIN_NAME"
  13. echo "ini filename: $INI_NAME"
  14. echo "output filename: $OUTPUT_FILENAME"
  15. echo "--------------"
  16. # exit this script if any commmand fails
  17. set -e
  18. # read user.cfg if it exists and is readable
  19. _CFG_FILE=$(dirname "$0")"/user.cfg"
  20. if [ -f "$_CFG_FILE" ]
  21. then
  22. [ -r "$_CFG_FILE" ] || die "Fatal Error: $_CFG_FILE exists but is unreadable"
  23. . "$_CFG_FILE"
  24. fi
  25. # paths
  26. if [ -z "${NDK_ROOT+aaa}" ]; then
  27. # ... if NDK_ROOT is not set, use "$HOME/bin/android-ndk"
  28. NDK_ROOT="$HOME/bin/android-ndk"
  29. fi
  30. if [ -z "${CLANG_ROOT+aaa}" ]; then
  31. # ... if CLANG_ROOT is not set, use "$NDK_ROOT/toolchains/llvm-3.3/prebuilt/darwin-x86_64"
  32. CLANG_ROOT="$NDK_ROOT/toolchains/llvm-3.4/prebuilt/darwin-x86_64"
  33. fi
  34. if [ -z "${PYTHON_BIN+aaa}" ]; then
  35. # ... if PYTHON_BIN is not set, use "/usr/bin/python2.7"
  36. PYTHON_BIN="/usr/bin/python2.7"
  37. fi
  38. # find current dir
  39. DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
  40. # paths with defaults hardcoded to relative paths
  41. if [ -z "${PLUGINX_ROOT+aaa}" ]; then
  42. PLUGINX_ROOT="$DIR/../.."
  43. fi
  44. if [ -z "${CXX_GENERATOR_ROOT+aaa}" ]; then
  45. CXX_GENERATOR_ROOT="$DIR/../../../tools/bindings-generator"
  46. fi
  47. if [ -z "${TOJS_ROOT+aaa}" ]; then
  48. TO_JS_ROOT="$DIR/tojs"
  49. fi
  50. echo "Paths"
  51. echo " NDK_ROOT: $NDK_ROOT"
  52. echo " CLANG_ROOT: $CLANG_ROOT"
  53. echo " PYTHON_BIN: $PYTHON_BIN"
  54. echo " PLUGINX_ROOT: $PLUGINX_ROOT"
  55. echo " CXX_GENERATOR_ROOT: $CXX_GENERATOR_ROOT"
  56. echo " TO_JS_ROOT: $TO_JS_ROOT"
  57. # write userconf.ini
  58. _CONF_INI_FILE="$PWD/userconf.ini"
  59. if [ -f "$_CONF_INI_FILE" ]
  60. then
  61. rm "$_CONF_INI_FILE"
  62. fi
  63. _CONTENTS=""
  64. _CONTENTS+="[DEFAULT]"'\n'
  65. _CONTENTS+="androidndkdir=$NDK_ROOT"'\n'
  66. _CONTENTS+="clangllvmdir=$CLANG_ROOT"'\n'
  67. _CONTENTS+="pluginxdir=$PLUGINX_ROOT"'\n'
  68. _CONTENTS+="cxxgeneratordir=$CXX_GENERATOR_ROOT"'\n'
  69. echo
  70. echo "generating userconf.ini..."
  71. echo ---
  72. echo -e "$_CONTENTS"
  73. echo -e "$_CONTENTS" > "$_CONF_INI_FILE"
  74. echo ---
  75. # Generate bindings for plugin-x $PLUGIN_NAME
  76. echo "Generating bindings for plugin-x $PLUGIN_NAME..."
  77. set -x
  78. mv $CXX_GENERATOR_ROOT/targets/spidermonkey/conversions.yaml $CXX_GENERATOR_ROOT/targets/spidermonkey/conversions.yaml.backup
  79. cp conversions.yaml $CXX_GENERATOR_ROOT/targets/spidermonkey
  80. LD_LIBRARY_PATH=${CXX_GENERATOR_ROOT}/libclang \
  81. $PYTHON_BIN ${CXX_GENERATOR_ROOT}/generator.py -t spidermonkey ${TO_JS_ROOT}/$INI_NAME -s $PLUGIN_NAME -o $PLUGINX_ROOT/jsbindings/auto -n $OUTPUT_FILENAME
  82. mv $CXX_GENERATOR_ROOT/targets/spidermonkey/conversions.yaml.backup $CXX_GENERATOR_ROOT/targets/spidermonkey/conversions.yaml
  83. # modify the include file
  84. # #include "cocos2d_specifics.hpp" -->
  85. # #include "jsb_pluginx_spidermonkey_specifics.h"
  86. # #include "jsb_pluginx_basic_conversions.h"
  87. ./modify_include.sed $PLUGINX_ROOT/jsbindings/auto/$OUTPUT_FILENAME.cpp > $PLUGINX_ROOT/jsbindings/auto/$OUTPUT_FILENAME.cpp.origin
  88. mv $PLUGINX_ROOT/jsbindings/auto/$OUTPUT_FILENAME.cpp.origin $PLUGINX_ROOT/jsbindings/auto/$OUTPUT_FILENAME.cpp