1find_package (Nodejs) 2 3include_directories ( 4 ${NODE_INCLUDE_DIRS} 5 ${CMAKE_CURRENT_SOURCE_DIR}/.. 6) 7 8# SWIG treats SWIG_FLAGS as a list and not a string so semicolon seperation is 9# required. This hardcodes V8_VERSION to be <10 but I assume that's not going 10# to be a problem for a little while! SWIG uses a padded SWIG_V8 version which 11# we hack together from our findnode module. 12set (V8_VERSION_HEX 0x0${V8_VERSION_MAJOR}${V8_VERSION_MINOR}${V8_VERSION_PATCH}) 13string (LENGTH "${V8_VERSION_HEX}" V8_VERSION_HEX_length) 14while (V8_VERSION_HEX_length LESS 8) 15 set (V8_VERSION_HEX "${V8_VERSION_HEX}0") 16 message (DEBUG " - Padded V8 version to match SWIG format") 17 string (LENGTH "${V8_VERSION_HEX}" V8_VERSION_HEX_length) 18endwhile () 19 20set_property (SOURCE mraajs.i PROPERTY SWIG_FLAGS "-node" 21 "-I${CMAKE_BINARY_DIR}/src" "-DV8_VERSION=${V8_VERSION_HEX}") 22set_source_files_properties (mraajs.i PROPERTIES CPLUSPLUS ON) 23 24swig_add_module (mraajs javascript mraajs.i ${mraa_LIB_SRCS}) 25swig_link_libraries (mraajs ${NODE_LIBRARIES} ${mraa_LIBS}) 26 27set_target_properties (mraajs PROPERTIES 28 COMPILE_FLAGS "${CMAKE_CXX_FLAGS} -DBUILDING_NODE_EXTENSION -DSWIGJAVASCRIPT=${SWIG_FOUND}" 29 PREFIX "" 30 OUTPUT_NAME mraa 31 SUFFIX ".node" 32) 33 34if (${V8_VERSION_MAJOR} GREATER 3) 35 message (INFO " - Using V8 version > 3 so requiring C++11 compiler") 36 # Node 0.12.x V8 engine major version is '3'. 37 # Node 2.1.0 V8 engine major version is '4'. 38 set_property (TARGET mraajs PROPERTY CXX_STANDARD 11) 39 set_property (TARGET mraajs PROPERTY CXX_STANDARD_REQUIRED ON) 40endif () 41 42macro (mraa_CREATE_INSTALL_PACKAGE_JSON generated_file install_location) 43 configure_file (${generated_file}.cmake ${CMAKE_CURRENT_BINARY_DIR}/${generated_file} @ONLY) 44 install (FILES ${CMAKE_CURRENT_BINARY_DIR}/${generated_file} DESTINATION ${install_location}) 45endmacro (mraa_CREATE_INSTALL_PACKAGE_JSON) 46mraa_create_install_package_json (package.json lib/node_modules/mraa) 47 48macro (mraa_CREATE_BINDING_GYP generated_file) 49 set (mraa_LIB_SRCS_GYP "") 50 set (mraa_NPM_SRCS ${mraa_LIB_SRCS_NOAUTO} 51 ${mraa_LIB_ARM_SRCS_NOAUTO} 52 ${mraa_LIB_X86_SRCS_NOAUTO} 53 ) 54 foreach (srcfile ${mraa_NPM_SRCS}) 55 file (RELATIVE_PATH rel ${CMAKE_SOURCE_DIR} ${srcfile}) 56 set (mraa_LIB_SRCS_GYP "'${rel}',\n${mraa_LIB_SRCS_GYP}") 57 endforeach (srcfile) 58 foreach (includedir ${mraa_LIB_INCLUDE_DIRS}) 59 file (RELATIVE_PATH rel ${CMAKE_SOURCE_DIR} ${includedir}) 60 set (mraa_LIB_INCLUDE_DIRS_GYP "'${rel}',\n${mraa_LIB_INCLUDE_DIRS_GYP}") 61 endforeach (includedir) 62 configure_file (${generated_file}.cmake ${CMAKE_CURRENT_BINARY_DIR}/${generated_file} @ONLY) 63endmacro (mraa_CREATE_BINDING_GYP) 64mraa_create_binding_gyp (binding.gyp) 65 66add_custom_target (npmpkg) 67add_custom_command (TARGET npmpkg POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy 68 ${CMAKE_CURRENT_BINARY_DIR}/mraajsJAVASCRIPT_wrap.cxx ${CMAKE_SOURCE_DIR}/src 69 COMMAND ${CMAKE_COMMAND} -E copy 70 ${CMAKE_BINARY_DIR}/src/version.c ${CMAKE_SOURCE_DIR}/src 71 COMMAND ${CMAKE_COMMAND} -E copy 72 ${CMAKE_CURRENT_BINARY_DIR}/package.json ${CMAKE_SOURCE_DIR} 73 COMMAND sed -i "'s/mraa.node/build\\/Release\\/mraa.node/'" 74 ${CMAKE_SOURCE_DIR}/package.json 75 COMMAND ${CMAKE_COMMAND} -E copy 76 ${CMAKE_CURRENT_BINARY_DIR}/binding.gyp ${CMAKE_SOURCE_DIR} 77 COMMAND ${CMAKE_COMMAND} -E copy 78 ${CMAKE_SOURCE_DIR}/docs/npm.md ${CMAKE_SOURCE_DIR}/READMEFIRST) 79add_dependencies (npmpkg mraajs) 80 81if (BUILDDOC) 82 find_package(Yuidoc) 83 if (YUIDOC_FOUND) 84 add_custom_target(jsdoc ALL 85 COMMAND ${CMAKE_SOURCE_DIR}/doxygen2jsdoc/docgen.js -m mraa i xml/ -o jsdoc -c ${CMAKE_CURRENT_SOURCE_DIR}/doxygen2jsdoc_custom.json --strict -h 86 COMMAND ${YUIDOC_EXECUTABLE} -C --no-sort --helpers ${CMAKE_SOURCE_DIR}/doxygen2jsdoc/generators/yuidoc/tmpl/mraa/helper.js --themedir ${CMAKE_SOURCE_DIR}/doxygen2jsdoc/generators/yuidoc/tmpl/mraa -o html/node jsdoc/yuidoc/mraa 87 COMMAND ${CMAKE_SOURCE_DIR}/doxygen2jsdoc/tolower.js -i html/node 88 WORKING_DIRECTORY ${CMAKE_BINARY_DIR} 89 DEPENDS doc 90 COMMENT "Generating API documentation with Yuidoc" VERBATIM 91 ) 92 else () 93 message (INFO " - Failed to find Yuidoc. node.js API doc will not be generated") 94 endif () 95endif () 96 97install (FILES ${CMAKE_CURRENT_BINARY_DIR}/mraa.node 98 DESTINATION lib/node_modules/mraa) 99