summaryrefslogtreecommitdiffstats
path: root/src/uscxml/plugins/datamodel/CMakeLists.txt
blob: 2d1a9288415c32a2c20dbc5ce1ce9117d58f0c04 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
# NULL datamodel (not useful as plugin)

set(USCXML_DATAMODELS "null ${USCXML_DATAMODELS}")
file(GLOB NULL_DATAMODEL
	null/*.cpp
	null/*.h
)
if (BUILD_AS_PLUGINS)
	source_group("Null" FILES ${NULL_DATAMODEL})
	add_library(
		datamodel_null SHARED 
		${NULL_DATAMODEL}
	"../Plugins.cpp")
	target_link_libraries(datamodel_null uscxml)
	set_target_properties(datamodel_null PROPERTIES FOLDER "Plugins//DataModel")
	set_target_properties(datamodel_null PROPERTIES COMPILE_FLAGS "-DPLUMA_EXPORTS")
	set_target_properties(datamodel_null PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib/plugins")
else()		
	list (APPEND USCXML_FILES ${NULL_DATAMODEL})
endif()

if (JSC_FOUND)
	set(USCXML_DATAMODELS "ecmascript(JSC) ${USCXML_DATAMODELS}")
	# JavaScriptCore ecmascript datamodel
	file(GLOB JSC_DATAMODEL
		ecmascript/JavaScriptCore/*.cpp
		ecmascript/JavaScriptCore/*.h
		ecmascript/*.cpp
		ecmascript/*.h
	)
	if (BUILD_AS_PLUGINS)
		source_group("JavaScriptCore" FILES ${JSC_DATAMODEL})
		add_library(
			datamodel_jsc SHARED 
			${JSC_DATAMODEL}
		"../Plugins.cpp")
		target_link_libraries(datamodel_jsc uscxml ${JSC_LIBRARY})
		set_target_properties(datamodel_jsc PROPERTIES FOLDER "Plugins//DataModel")
		set_target_properties(datamodel_jsc PROPERTIES COMPILE_FLAGS "-DPLUMA_EXPORTS")
		set_target_properties(datamodel_jsc PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib/plugins")
	else()		
		list (APPEND USCXML_FILES ${JSC_DATAMODEL})
		list (APPEND USCXML_OPT_LIBS ${JSC_LIBRARY})
	endif()
endif()


if (V8_FOUND)
	set(USCXML_DATAMODELS "ecmascript(V8) ${USCXML_DATAMODELS}")
	# JavaScriptCore ecmascript datamodel
	file(GLOB V8_DATAMODEL
		ecmascript/v8/${V8_VERSION}/*.cpp
		ecmascript/v8/${V8_VERSION}/*.h
		ecmascript/*.cpp
		ecmascript/*.h
	)
	if (BUILD_AS_PLUGINS)
		source_group("V8" FILES ${V8_DATAMODEL})

		add_library(
			datamodel_v8 SHARED 
			${V8_DATAMODEL}
		"../Plugins.cpp")
		target_link_libraries(datamodel_v8 uscxml ${V8_LIBRARY})
		set_target_properties(datamodel_v8 PROPERTIES FOLDER "Plugins//DataModel")
		set_target_properties(datamodel_v8 PROPERTIES COMPILE_FLAGS "-DPLUMA_EXPORTS")
		set_target_properties(datamodel_v8 PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib/plugins")
	else()
		list (APPEND USCXML_FILES ${V8_DATAMODEL})
		list (APPEND USCXML_OPT_LIBS ${V8_LIBRARY})
	endif()
endif()


if (LUA_FOUND AND WITH_DM_LUA)
	set(USCXML_DATAMODELS "lua ${USCXML_DATAMODELS}")
	# Lua ecmascript datamodel
	file(GLOB LUA_DATAMODEL
		lua/*.cpp
		lua/*.h
	)
	if (BUILD_AS_PLUGINS)
		source_group("" FILES ${LUA_DATAMODEL})
		add_library(datamodel_lua SHARED ${LUA_DATAMODEL} "../Plugins.cpp")
		target_link_libraries(datamodel_lua 
			uscxml
			${LUA_LIBRARIES}
		)
		set_target_properties(datamodel_lua PROPERTIES FOLDER "Plugins//DataModel")
		set_target_properties(datamodel_lua PROPERTIES COMPILE_FLAGS "-DPLUMA_EXPORTS")
		set_target_properties(datamodel_lua PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib/plugins")
	else()
		list (APPEND USCXML_FILES ${LUA_DATAMODEL})
		list (APPEND USCXML_OPT_LIBS ${LUA_LIBRARY})
	endif()
endif()

if (WITH_DM_C89)
	set(USCXML_DATAMODELS "c89 ${USCXML_DATAMODELS}")
	# Lua ecmascript datamodel
	file(GLOB_RECURSE C89_DATAMODEL
		c89/*.cpp
		c89/*.c
		c89/*.h
	)
	if (BUILD_AS_PLUGINS)
		source_group("" FILES ${C89_DATAMODEL})
		add_library(datamodel_c89 SHARED ${C89_DATAMODEL} "../Plugins.cpp")
		target_link_libraries(datamodel_c89 
			uscxml
		)
		set_target_properties(datamodel_c89 PROPERTIES FOLDER "Plugins//DataModel")
		set_target_properties(datamodel_c89 PROPERTIES COMPILE_FLAGS "-DPLUMA_EXPORTS")
		set_target_properties(datamodel_c89 PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib/plugins")
	else()
		list (APPEND USCXML_FILES ${C89_DATAMODEL})
	endif()
endif()

if (WITH_DM_PROMELA)
	set(USCXML_DATAMODELS "promela ${USCXML_DATAMODELS}")
	# Lua ecmascript datamodel
	file(GLOB_RECURSE PROMELA_DATAMODEL
		promela/*.cpp
		promela/*.c
		promela/*.h
	)
	if (BUILD_AS_PLUGINS)
		source_group("" FILES ${PROMELA_DATAMODEL})
		add_library(datamodel_promela SHARED ${PROMELA_DATAMODEL} "../Plugins.cpp")
		target_link_libraries(datamodel_promela 
			uscxml
		)
		# SET_SOURCE_FILES_PROPERTIES is directory scope
		set_target_properties(datamodel_promela PROPERTIES FOLDER "Plugins//DataModel")
		set_target_properties(datamodel_promela PROPERTIES COMPILE_FLAGS "-DPLUMA_EXPORTS")
		set_target_properties(datamodel_promela PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib/plugins")
	else()
		list (APPEND USCXML_FILES ${PROMELA_DATAMODEL})	
	endif()
endif()

if (NOT SWIG_FOUND)
	message(STATUS "No swig binary found, not generating DOM classes")		
elseif(SWIG_VERSION VERSION_LESS 3.0.8)
	message(STATUS "SWIG version > 3.0.8 is recommended, found ${SWIG_VERSION} - skipping DOM generation")
else()
	if (JSC_FOUND)
		add_custom_target(jsc-bindings
			COMMAND ${SWIG_EXECUTABLE}
			-I${XercesC_INCLUDE_DIRS}
			-I${PROJECT_SOURCE_DIR}/src
			-I${CMAKE_BINARY_DIR}
			-javascript 
			-jsc 
			-c++ 
			-o ${CMAKE_CURRENT_SOURCE_DIR}/ecmascript/JavaScriptCore/JSCDOM.cpp.inc
			ecmascript/JavaScriptCore/bindings.i
			WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
			COMMENT "Creating the DOM for JavaScriptCore ...")
		add_custom_target(jsc-bindings-noxercesc
			COMMAND ${SWIG_EXECUTABLE}
			-I${XercesC_INCLUDE_DIRS}
			-I${PROJECT_SOURCE_DIR}/src
			-I${CMAKE_BINARY_DIR}
			-javascript 
			-jsc
			-DNO_XERCESC
			-c++ 
			-o ${CMAKE_CURRENT_SOURCE_DIR}/ecmascript/JavaScriptCore/JSCEvent.cpp.inc
			ecmascript/JavaScriptCore/bindings.i
			WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
			COMMENT "Creating the DOM for JavaScriptCore (no XERCESC) ...")

		# list (APPEND JSC_DATAMODEL ${CMAKE_CURRENT_SOURCE_DIR}/ecmascript/JavaScriptCore/JSCDOM.cpp.inc)
		set_target_properties(jsc-bindings-noxercesc PROPERTIES FOLDER "Bindings")
		set_target_properties(jsc-bindings PROPERTIES FOLDER "Bindings")
	endif()

	if (V8_FOUND)
		add_custom_target(v8-bindings
			COMMAND ${SWIG_EXECUTABLE}
			-I${XercesC_INCLUDE_DIRS}
			-I${PROJECT_SOURCE_DIR}/src
			-I${CMAKE_BINARY_DIR}
			-javascript 
			-v8 
			-c++ 
			-o ${CMAKE_CURRENT_SOURCE_DIR}/ecmascript/v8/V8DOM.cpp.inc
			ecmascript/v8/bindings.i
			WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
			COMMENT "Creating the DOM for V8 ...")

		add_custom_target(v8-bindings-noxercesc
			COMMAND ${SWIG_EXECUTABLE}
			-I${XercesC_INCLUDE_DIRS}
			-I${PROJECT_SOURCE_DIR}/src
			-I${CMAKE_BINARY_DIR}
			-javascript 
			-v8 
			-DNO_XERCESC
			-c++ 
			-o ${CMAKE_CURRENT_SOURCE_DIR}/ecmascript/v8/V8Event.cpp.inc
			ecmascript/v8/bindings.i
			WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
			COMMENT "Creating the DOM for V8 (no XERCESC) ...")

		# list (APPEND V8_DATAMODEL ${CMAKE_CURRENT_SOURCE_DIR}/ecmascript/v8/V8DOM.cpp.inc)
		set_target_properties(v8-bindings-noxercesc PROPERTIES FOLDER "Bindings")
		set_target_properties(v8-bindings PROPERTIES FOLDER "Bindings")
		
	endif()

	if (LUA_FOUND)
		add_custom_target(lua-bindings
			COMMAND ${SWIG_EXECUTABLE}
			-I${XercesC_INCLUDE_DIRS}
			-I${PROJECT_SOURCE_DIR}/src
			-I${CMAKE_BINARY_DIR}
			-lua 
			-c++ 
			-o ${CMAKE_CURRENT_SOURCE_DIR}/lua/LuaDOM.cpp.inc
			lua/bindings.i
			WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
			COMMENT "Creating the DOM for Lua ...")

		add_custom_target(lua-bindings-noxercesc
			COMMAND ${SWIG_EXECUTABLE}
			-I${XercesC_INCLUDE_DIRS}
			-I${PROJECT_SOURCE_DIR}/src
			-I${CMAKE_BINARY_DIR}
			-lua 
			-DNO_XERCESC
			-c++ 
			-o ${CMAKE_CURRENT_SOURCE_DIR}/lua/LuaEvent.cpp.inc
			lua/bindings.i
			WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
			COMMENT "Creating the DOM for Lua (no XERCESC) ...")

		# list (APPEND V8_DATAMODEL ${CMAKE_CURRENT_SOURCE_DIR}/ecmascript/v8/V8DOM.cpp.inc)
		set_target_properties(lua-bindings-noxercesc PROPERTIES FOLDER "Bindings")
		set_target_properties(lua-bindings PROPERTIES FOLDER "Bindings")
	endif()
endif()



set(USCXML_INCLUDE_DIRS ${USCXML_INCLUDE_DIRS} PARENT_SCOPE)
set(USCXML_FILES ${USCXML_FILES} PARENT_SCOPE)
set(USCXML_DATAMODELS ${USCXML_DATAMODELS} PARENT_SCOPE)