GenerateScriptBindings.cmake 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. # Outputs:
  2. # BS_GENERATED_ENGINE_H_FILES
  3. # BS_GENERATED_ENGINE_CPP_FILES
  4. # BS_GENERATED_EDITOR_H_FILES
  5. # BS_GENERATED_EDITOR_CPP_FILES
  6. # BS_GENERATED_ENGINE_CS_FILES
  7. # BS_GENERATED_EDITOR_CS_FILES
  8. set(BS_SCRIPT_PARSER_INCLUDE_DIRS "")
  9. set(BS_SCRIPT_PARSER_H_FILES "")
  10. function(prepend var prefix)
  11. SET(listVar "")
  12. FOREACH(f ${ARGN})
  13. LIST(APPEND listVar "${prefix}/${f}")
  14. ENDFOREACH(f)
  15. SET(${var} "${listVar}" PARENT_SCOPE)
  16. endfunction()
  17. function(addForGeneration name)
  18. set(BS_SCRIPT_PARSER_INCLUDE_DIRS ${BS_SCRIPT_PARSER_INCLUDE_DIRS} "${name}" PARENT_SCOPE)
  19. include(${name}/CMakeSources.cmake)
  20. string(TOUPPER ${name} LIBNAME)
  21. set(H_FILES "")
  22. FOREACH(f ${BS_${LIBNAME}_SRC})
  23. IF("${f}" MATCHES ".*\\.h" AND NOT "${f}" MATCHES "Win32|Linux")
  24. LIST(APPEND H_FILES ${f})
  25. ENDIF()
  26. ENDFOREACH(f)
  27. set(ABS_H_FILES "")
  28. prepend(ABS_H_FILES ${CMAKE_CURRENT_SOURCE_DIR}/${name} ${H_FILES})
  29. set(BS_SCRIPT_PARSER_H_FILES ${BS_SCRIPT_PARSER_H_FILES} ${ABS_H_FILES} PARENT_SCOPE)
  30. endfunction()
  31. set(BS_GENERATED_CPP_OUTPUT_DIR ${PROJECT_BINARY_DIR}/Generated)
  32. set(BS_GENERATED_CS_ENGINE_OUTPUT_DIR ${PROJECT_SOURCE_DIR}/MBansheeEngine/Generated)
  33. set(BS_GENERATED_CS_EDITOR_OUTPUT_DIR ${PROJECT_SOURCE_DIR}/MBansheeEditor/Generated)
  34. if(GENERATE_SCRIPT_BINDINGS)
  35. addForGeneration(BansheeUtility)
  36. addForGeneration(BansheeCore)
  37. addForGeneration(BansheeEngine)
  38. addForGeneration(BansheeEditor)
  39. addForGeneration(SBansheeEngine)
  40. addForGeneration(SBansheeEditor)
  41. set(BS_SCRIPT_PARSER_INCLUDE_DIRS
  42. ${BS_SCRIPT_PARSER_INCLUDE_DIRS}
  43. "BansheeMono"
  44. "BansheeUtility/ThirdParty")
  45. list(REMOVE_DUPLICATES BS_SCRIPT_PARSER_INCLUDE_DIRS)
  46. list(REMOVE_DUPLICATES BS_SCRIPT_PARSER_H_FILES)
  47. prepend(BS_INCLUDE_DIRS "-I${PROJECT_SOURCE_DIR}" ${BS_SCRIPT_PARSER_INCLUDE_DIRS})
  48. # Generate a single .cpp file including all headers
  49. set(BS_GLOBAL_FILE_CONTENTS "")
  50. FOREACH(f ${BS_SCRIPT_PARSER_H_FILES})
  51. LIST(APPEND BS_GLOBAL_FILE_CONTENTS "#include \"${f}\"\n")
  52. ENDFOREACH(f)
  53. file(WRITE ${BS_GENERATED_CPP_OUTPUT_DIR}/toParse.cpp ${BS_GLOBAL_FILE_CONTENTS})
  54. endif()
  55. find_package(BansheeSBGen)
  56. if(BansheeSBGen_FOUND)
  57. if(GENERATE_SCRIPT_BINDINGS)
  58. set(BS_GSB_COMMAND ${BansheeSBGen_EXECUTABLE_PATH}
  59. ${BS_GENERATED_CPP_OUTPUT_DIR}/toParse.cpp
  60. -output-cpp ${BS_GENERATED_CPP_OUTPUT_DIR}
  61. -output-cs-engine ${BS_GENERATED_CS_ENGINE_OUTPUT_DIR}
  62. -output-cs-editor ${BS_GENERATED_CS_EDITOR_OUTPUT_DIR}
  63. -- ${BS_INCLUDE_DIRS}
  64. -std=c++14
  65. -DBS_STATIC_LIB
  66. -DBS_SBGEN
  67. -w
  68. )
  69. if(APPLE)
  70. list(APPEND BS_GSB_COMMAND
  71. -isystem /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1)
  72. list(APPEND BS_GSB_COMMAND -stdlib=libc++)
  73. endif()
  74. message(STATUS "Generating script bindings, please wait...")
  75. execute_process(
  76. COMMAND ${BS_GSB_COMMAND}
  77. WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
  78. RESULT_VARIABLE SBGEN_RETURN_VALUE
  79. )
  80. if (NOT SBGEN_RETURN_VALUE EQUAL 0)
  81. message(FATAL_ERROR "Failed to generate script bindings.")
  82. else()
  83. message(STATUS "...scripting binding generation OK.")
  84. endif()
  85. endif()
  86. file(GLOB BS_GENERATED_ENGINE_H_FILES ${BS_GENERATED_CPP_OUTPUT_DIR}/Engine/Include/*)
  87. file(GLOB BS_GENERATED_ENGINE_CPP_FILES ${BS_GENERATED_CPP_OUTPUT_DIR}/Engine/Source/*)
  88. file(GLOB BS_GENERATED_EDITOR_H_FILES ${BS_GENERATED_CPP_OUTPUT_DIR}/Editor/Include/*)
  89. file(GLOB BS_GENERATED_EDITOR_CPP_FILES ${BS_GENERATED_CPP_OUTPUT_DIR}/Editor/Source/*)
  90. endif()