2016-01-21 13:19:23 -08:00
find_package ( Nodejs REQUIRED )
2014-04-08 18:43:26 +01:00
2014-04-30 10:50:44 +01:00
include_directories (
2016-01-21 14:17:53 -08:00
$ { N O D E J S _ I N C L U D E _ D I R S }
2014-04-08 18:43:26 +01:00
$ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / . .
)
2015-03-18 12:20:54 +00:00
# SWIG treats SWIG_FLAGS as a list and not a string so semicolon seperation is
# required. This hardcodes V8_VERSION to be <10 but I assume that's not going
2015-11-11 13:47:43 +00:00
# to be a problem for a little while! SWIG uses a padded SWIG_V8 version which
# we hack together from our findnode module.
set ( V8_VERSION_HEX 0x0 ${ V8_VERSION_MAJOR } ${ V8_VERSION_MINOR } ${ V8_VERSION_PATCH } )
string ( LENGTH "${V8_VERSION_HEX}" V8_VERSION_HEX_length )
while ( V8_VERSION_HEX_length LESS 8 )
set ( V8_VERSION_HEX "${V8_VERSION_HEX}0" )
2016-03-07 14:49:14 +00:00
message ( STATUS "INFO - Padded V8 version to match SWIG format" )
2015-11-11 13:47:43 +00:00
string ( LENGTH "${V8_VERSION_HEX}" V8_VERSION_HEX_length )
endwhile ( )
2015-03-18 12:20:54 +00:00
set_property ( SOURCE mraajs.i PROPERTY SWIG_FLAGS "-node"
2015-11-11 13:47:43 +00:00
" - I $ { C M A K E _ B I N A R Y _ D I R } / s r c " " - D V 8 _ V E R S I O N = $ { V 8 _ V E R S I O N _ H E X } " )
2014-06-24 17:24:54 +01:00
set_source_files_properties ( mraajs.i PROPERTIES CPLUSPLUS ON )
2014-04-08 18:43:26 +01:00
2016-02-25 13:22:47 -08:00
swig_add_module ( mraajs javascript mraajs.i )
swig_link_libraries ( mraajs mraa )
2014-04-08 18:43:26 +01:00
2014-06-24 17:24:54 +01:00
set_target_properties ( mraajs PROPERTIES
2016-01-23 16:35:20 +03:00
C O M P I L E _ F L A G S " - D B U I L D I N G _ N O D E _ E X T E N S I O N - D S W I G J A V A S C R I P T = $ { S W I G _ F O U N D } "
2014-04-08 18:43:26 +01:00
P R E F I X " "
2014-06-25 17:49:27 +01:00
O U T P U T _ N A M E m r a a
2014-06-10 20:16:39 +01:00
S U F F I X " . n o d e "
2014-04-08 18:43:26 +01:00
)
2015-10-01 22:32:45 +03:00
2016-03-07 14:49:14 +00:00
message ( STATUS "INFO - swig Version ${SWIG_VERSION}" )
message ( STATUS "INFO - CXX compiler Version ${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION}" )
2016-01-23 16:35:20 +03:00
2015-10-01 22:32:45 +03:00
if ( ${ V8_VERSION_MAJOR } GREATER 3 )
2016-03-07 14:49:14 +00:00
message ( STATUS "INFO - Using V8 version > 3 so requiring C++11 compiler" )
2015-10-01 22:32:45 +03:00
# Node 0.12.x V8 engine major version is '3'.
# Node 2.1.0 V8 engine major version is '4'.
set_property ( TARGET mraajs PROPERTY CXX_STANDARD 11 )
set_property ( TARGET mraajs PROPERTY CXX_STANDARD_REQUIRED ON )
2016-02-12 11:38:50 +00:00
if ( CMAKE_VERSION VERSION_LESS "3.1" )
2016-03-07 14:49:14 +00:00
message ( SEND_ERROR "Need to use CMAKE version 3.1+, but it is ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}.${CMAKE_PATCH_VERSION}, using a workaround." )
2016-02-12 11:38:50 +00:00
if ( CMAKE_COMPILER_IS_GNUCXX )
if ( CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.7" )
2016-03-07 14:49:14 +00:00
message ( FATAL_ERROR "GNU gcc compiler is also too old (need 4.7+, but ${CMAKE_CXX_COMPILER_VERSION}) and does not support C++11 standard." )
2016-02-12 11:38:50 +00:00
endif ( )
set ( MRAA_CXX11_WORKAROUND_OPTION "-std=gnu++11" )
else ( )
set ( MRAA_CXX11_WORKAROUND_OPTION "-std=c++11" )
endif ( )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${MRAA_CXX11_WORKAROUND_OPTION} " )
endif ( )
2015-10-01 22:32:45 +03:00
endif ( )
2014-11-24 11:19:05 +00:00
macro ( mraa_CREATE_INSTALL_PACKAGE_JSON generated_file install_location )
configure_file ( ${ generated_file } .cmake ${ CMAKE_CURRENT_BINARY_DIR } / ${ generated_file } @ONLY )
install ( FILES ${ CMAKE_CURRENT_BINARY_DIR } / ${ generated_file } DESTINATION ${ install_location } )
endmacro ( mraa_CREATE_INSTALL_PACKAGE_JSON )
mraa_create_install_package_json ( package.json lib/node_modules/mraa )
2014-06-04 12:06:04 +01:00
2014-11-24 15:18:53 +00:00
macro ( mraa_CREATE_BINDING_GYP generated_file )
set ( mraa_LIB_SRCS_GYP "" )
2015-07-24 13:07:00 +00:00
set ( mraa_NPM_SRCS ${ mraa_LIB_SRCS_NOAUTO }
$ { m r a a _ L I B _ A R M _ S R C S _ N O A U T O }
$ { m r a a _ L I B _ X 8 6 _ S R C S _ N O A U T O }
)
foreach ( srcfile ${ mraa_NPM_SRCS } )
2014-11-24 15:18:53 +00:00
file ( RELATIVE_PATH rel ${ CMAKE_SOURCE_DIR } ${ srcfile } )
set ( mraa_LIB_SRCS_GYP "'${rel}',\n${mraa_LIB_SRCS_GYP}" )
endforeach ( srcfile )
foreach ( includedir ${ mraa_LIB_INCLUDE_DIRS } )
file ( RELATIVE_PATH rel ${ CMAKE_SOURCE_DIR } ${ includedir } )
set ( mraa_LIB_INCLUDE_DIRS_GYP "'${rel}',\n${mraa_LIB_INCLUDE_DIRS_GYP}" )
endforeach ( includedir )
configure_file ( ${ generated_file } .cmake ${ CMAKE_CURRENT_BINARY_DIR } / ${ generated_file } @ONLY )
endmacro ( mraa_CREATE_BINDING_GYP )
mraa_create_binding_gyp ( binding.gyp )
add_custom_target ( npmpkg )
add_custom_command ( TARGET npmpkg POST_BUILD COMMAND ${ CMAKE_COMMAND } -E copy
2014-11-24 18:03:36 +00:00
$ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } / m r a a j s J A V A S C R I P T _ w r a p . c x x $ { C M A K E _ S O U R C E _ D I R } / s r c
C O M M A N D $ { C M A K E _ C O M M A N D } - E c o p y
$ { C M A K E _ B I N A R Y _ D I R } / s r c / v e r s i o n . c $ { C M A K E _ S O U R C E _ D I R } / s r c
C O M M A N D $ { C M A K E _ C O M M A N D } - E c o p y
$ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } / p a c k a g e . j s o n $ { C M A K E _ S O U R C E _ D I R }
2014-12-01 13:59:47 +00:00
C O M M A N D s e d - i " ' s / m r a a . n o d e / b u i l d \ \ / R e l e a s e \ \ / m r a a . n o d e / ' "
$ { C M A K E _ S O U R C E _ D I R } / p a c k a g e . j s o n
2014-11-24 18:03:36 +00:00
C O M M A N D $ { C M A K E _ C O M M A N D } - E c o p y
$ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } / b i n d i n g . g y p $ { C M A K E _ S O U R C E _ D I R }
C O M M A N D $ { C M A K E _ C O M M A N D } - E c o p y
$ { C M A K E _ S O U R C E _ D I R } / d o c s / n p m . m d $ { C M A K E _ S O U R C E _ D I R } / R E A D M E F I R S T )
2014-11-24 15:18:53 +00:00
add_dependencies ( npmpkg mraajs )
2015-06-01 15:16:42 +01:00
if ( BUILDDOC )
find_package ( Yuidoc )
if ( YUIDOC_FOUND )
add_custom_target ( jsdoc ALL
C O M M A N D $ { C M A K E _ S O U R C E _ D I R } / d o x y g e n 2 j s d o c / d o c g e n . j s - m m r a a i x m l / - o j s d o c - c $ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / d o x y g e n 2 j s d o c _ c u s t o m . j s o n - - s t r i c t - h
C O M M A N D $ { Y U I D O C _ E X E C U T A B L E } - C - - n o - s o r t - - h e l p e r s $ { C M A K E _ S O U R C E _ D I R } / d o x y g e n 2 j s d o c / g e n e r a t o r s / y u i d o c / t m p l / m r a a / h e l p e r . j s - - t h e m e d i r $ { C M A K E _ S O U R C E _ D I R } / d o x y g e n 2 j s d o c / g e n e r a t o r s / y u i d o c / t m p l / m r a a - o h t m l / n o d e j s d o c / y u i d o c / m r a a
C O M M A N D $ { C M A K E _ S O U R C E _ D I R } / d o x y g e n 2 j s d o c / t o l o w e r . j s - i h t m l / n o d e
W O R K I N G _ D I R E C T O R Y $ { C M A K E _ B I N A R Y _ D I R }
D E P E N D S d o c
C O M M E N T " G e n e r a t i n g A P I d o c u m e n t a t i o n w i t h Y u i d o c " V E R B A T I M
)
else ( )
2016-03-07 14:49:14 +00:00
message ( STATUS "INFO - Failed to find Yuidoc. node.js API doc will not be generated" )
2015-06-01 15:16:42 +01:00
endif ( )
endif ( )
2014-11-24 11:19:05 +00:00
install ( FILES ${ CMAKE_CURRENT_BINARY_DIR } /mraa.node
2014-06-25 17:49:27 +01:00
D E S T I N A T I O N l i b / n o d e _ m o d u l e s / m r a a )