]> gerrit.simantics Code Review - simantics/fmil.git/blob - org.simantics.fmil.core/native/FMILibrary/Config.cmake/fmixml.cmake
Add FMILibrary-2.0.3 to org.simantics.fmil.core\native.
[simantics/fmil.git] / org.simantics.fmil.core / native / FMILibrary / Config.cmake / fmixml.cmake
1 #    Copyright (C) 2012 Modelon AB
2
3 #    This program is free software: you can redistribute it and/or modify
4 #    it under the terms of the BSD style license.
5
6 # #    This program is distributed in the hope that it will be useful,
7 #    but WITHOUT ANY WARRANTY; without even the implied warranty of
8 #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
9 #    FMILIB_License.txt file for more details.
10
11 #    You should have received a copy of the FMILIB_License.txt file
12 #    along with this program. If not, contact Modelon AB <http://www.modelon.com>.
13
14 if(NOT FMIXMLDIR)
15 set(FMIXMLDIR ${FMILIBRARYHOME}/src/XML/)
16 include(jmutil)
17
18 ################################################################################
19 #generate c source from Bison and Flex files
20 #Download Flex 2.5.4 and Bison 2.7 for windows from http://sourceforge.net/projects/winflexbison
21 if (WIN32)
22     set(FMILIB_BUILD_LEX_AND_PARSER_FILES FALSE CACHE BOOL "Generate scanner and parser for variable name syntax checking. Requiers Flex and Bison commands to be specified. Please read src/XML/NOTE" )
23     if (${FMILIB_BUILD_LEX_AND_PARSER_FILES})
24         set(BISON_COMMAND ${FMILIB_THIRDPARTYLIBS}/winflexbison/win_bison.exe CACHE PATH "Command for running bison, e.g C:/win_bison.exe")
25         set(FLEX_COMMAND ${FMILIB_THIRDPARTYLIBS}/winflexbison/win_flex.exe CACHE PATH "Command for running flex, e.g C:/win_flex.exe")
26     else()
27         #Remove variables from cache -> GUI if not used
28         unset(BISON_COMMAND CACHE)
29         unset(FLEX_COMMAND CACHE)
30     endif()
31 endif()
32
33 #Folder to put generated files in
34 set(FMIXMLGENDIR ${FMIXMLDIR}/src-gen)
35
36 #Build BISON files
37 set(USE_DEVELOPER_BUILD FALSE) #Enable/disable developer(debug) build
38 if (${USE_DEVELOPER_BUILD})
39         set(BISON_FMIX_COMMAND_DEBUG -v -t)
40         set(BISON_FMI2_OUT_DEBUG ${FMIXMLGENDIR}/FMI2/fmi2_xml_variable_name_parser.output)
41         set(BISON_FMI1_OUT_DEBUG ${FMIXMLGENDIR}/FMI1/fmi1_xml_variable_name_parser.output)
42 endif()
43 set(BISON_FMI2_SRC ${FMIXMLDIR}/src/FMI2/fmi2_xml_variable_name_parser.y)
44 set(BISON_FMI1_SRC ${FMIXMLDIR}/src/FMI1/fmi1_xml_variable_name_parser.y)
45 set(BISON_FMI2_OUT_HEADERS ${FMIXMLGENDIR}/FMI2/fmi2_xml_variable_name_parser.tab.h)
46 set(BISON_FMI1_OUT_HEADERS ${FMIXMLGENDIR}/FMI1/fmi1_xml_variable_name_parser.tab.h)
47 set(BISON_FMI2_OUT_SRC ${FMIXMLGENDIR}/FMI2/fmi2_xml_variable_name_parser.tab.c)
48 set(BISON_FMI1_OUT_SRC ${FMIXMLGENDIR}/FMI1/fmi1_xml_variable_name_parser.tab.c)
49 set(BISON_FMI2_OUT ${BISON_FMI2_OUT_SRC} ${BISON_FMI2_OUT_HEADERS} ${BISON_FMI2_OUT_DEBUG})
50 set(BISON_FMI1_OUT ${BISON_FMI1_OUT_SRC} ${BISON_FMI1_OUT_HEADERS} ${BISON_FMI1_OUT_DEBUG})
51 if (${FMILIB_BUILD_LEX_AND_PARSER_FILES})
52         add_custom_command(OUTPUT ${BISON_FMI2_OUT} COMMAND ${BISON_COMMAND} ${BISON_FMIX_COMMAND_DEBUG} --no-lines -Dapi.prefix=yyfmi2 -d ${BISON_FMI2_SRC} DEPENDS ${BISON_FMI2_SRC} WORKING_DIRECTORY ${FMIXMLGENDIR}/FMI2)
53         add_custom_command(OUTPUT ${BISON_FMI1_OUT} COMMAND ${BISON_COMMAND} ${BISON_FMIX_COMMAND_DEBUG} --no-lines -Dapi.prefix=yyfmi1 -d ${BISON_FMI1_SRC} DEPENDS ${BISON_FMI1_SRC} WORKING_DIRECTORY ${FMIXMLGENDIR}/FMI1)
54 endif()
55
56 #Build FLEX files
57 set(FLEX_FMI2_SRC ${FMIXMLDIR}/src/FMI2/fmi2_xml_variable_name_scan.l)
58 set(FLEX_FMI1_SRC ${FMIXMLDIR}/src/FMI1/fmi1_xml_variable_name_scan.l)
59 set(FLEX_FMI2_OUT_HEADERS ${FMIXMLGENDIR}/FMI2/fmi2_xml_variable_name_lex.h)
60 set(FLEX_FMI1_OUT_HEADERS ${FMIXMLGENDIR}/FMI1/fmi1_xml_variable_name_lex.h)
61 set(FLEX_FMI2_OUT_SRC ${FMIXMLGENDIR}/FMI2/lex.yyfmi2.c)
62 set(FLEX_FMI1_OUT_SRC ${FMIXMLGENDIR}/FMI1/lex.yyfmi1.c)
63 set(FLEX_FMI2_OPT_ARG --noline --header-file=${FLEX_FMI2_OUT_HEADERS} -Pyyfmi2)
64 set(FLEX_FMI1_OPT_ARG --noline --header-file=${FLEX_FMI1_OUT_HEADERS} -Pyyfmi1)
65
66 if (CMAKE_HOST_WIN32)
67         set(FLEX_FMI2_OPT_ARG ${FLEX_FMI2_OPT_ARG})
68         set(FLEX_FMI1_OPT_ARG ${FLEX_FMI1_OPT_ARG})
69 endif()
70 if (${FMILIB_BUILD_LEX_AND_PARSER_FILES})
71         add_custom_command(OUTPUT ${FLEX_FMI2_OUT_SRC} ${FLEX_FMI2_OUT_HEADERS} COMMAND ${FLEX_COMMAND} ${FLEX_FMI2_OPT_ARG} ${FLEX_FMI2_SRC} DEPENDS ${BISON_FMI2_OUT} ${FLEX_FMI2_SRC} WORKING_DIRECTORY ${FMIXMLGENDIR}/FMI2)
72         add_custom_command(OUTPUT ${FLEX_FMI1_OUT_SRC} ${FLEX_FMI1_OUT_HEADERS} COMMAND ${FLEX_COMMAND} ${FLEX_FMI1_OPT_ARG} ${FLEX_FMI1_SRC} DEPENDS ${BISON_FMI1_OUT} ${FLEX_FMI1_SRC} WORKING_DIRECTORY ${FMIXMLGENDIR}/FMI1)
73 endif()
74
75 if(WIN32)
76     add_definitions(-DYY_NO_UNISTD_H)
77 endif()
78
79 #end of generate c source from Bison and Flex files
80 ################################################################################
81
82 # set(DOXYFILE_EXTRA_SOURCES "${DOXYFILE_EXTRA_SOURCES} \"${FMIXMLDIR}/include\"")
83
84 include_directories("${FMIXMLDIR}/include" "${FMILIB_THIRDPARTYLIBS}/FMI/")
85 set(FMIXML_LIBRARIES fmixml)
86 set(FMIXML_EXPAT_DIR "${FMILIB_THIRDPARTYLIBS}/Expat/expat-2.1.0") 
87
88 set(FMIXMLHEADERS
89         include/FMI/fmi_xml_context.h
90         src/FMI/fmi_xml_context_impl.h
91
92     include/FMI1/fmi1_xml_model_description.h
93     src/FMI1/fmi1_xml_model_description_impl.h
94     src/FMI1/fmi1_xml_parser.h
95     include/FMI1/fmi1_xml_type.h
96     src/FMI1/fmi1_xml_type_impl.h
97     include/FMI1/fmi1_xml_unit.h
98     src/FMI1/fmi1_xml_unit_impl.h
99     include/FMI1/fmi1_xml_vendor_annotations.h
100     src/FMI1/fmi1_xml_vendor_annotations_impl.h
101     include/FMI1/fmi1_xml_variable.h
102     src/FMI1/fmi1_xml_variable_impl.h
103     include/FMI1/fmi1_xml_capabilities.h
104     src/FMI1/fmi1_xml_capabilities_impl.h
105
106     include/FMI2/fmi2_xml_model_description.h
107     src/FMI2/fmi2_xml_model_description_impl.h
108     include/FMI2/fmi2_xml_model_structure.h
109     src/FMI2/fmi2_xml_model_structure_impl.h
110     src/FMI2/fmi2_xml_parser.h
111     include/FMI2/fmi2_xml_type.h
112     src/FMI2/fmi2_xml_type_impl.h
113     include/FMI2/fmi2_xml_unit.h
114     src/FMI2/fmi2_xml_unit_impl.h
115     include/FMI2/fmi2_xml_variable.h
116     src/FMI2/fmi2_xml_variable_impl.h
117  )
118
119 set(FMIXMLSOURCE
120         src/FMI/fmi_xml_context.c
121
122     src/FMI1/fmi1_xml_parser.c
123     src/FMI1/fmi1_xml_model_description.c
124     src/FMI1/fmi1_xml_type.c
125     src/FMI1/fmi1_xml_unit.c
126     src/FMI1/fmi1_xml_vendor_annotations.c
127     src/FMI1/fmi1_xml_variable.c
128     src/FMI1/fmi1_xml_capabilities.c
129     src/FMI1/fmi1_xml_cosim.c
130
131     src/FMI2/fmi2_xml_parser.c
132     src/FMI2/fmi2_xml_model_description.c
133     src/FMI2/fmi2_xml_model_structure.c
134     src/FMI2/fmi2_xml_type.c
135     src/FMI2/fmi2_xml_unit.c
136         src/FMI2/fmi2_xml_vendor_annotations.c
137         src/FMI2/fmi2_xml_variable.c
138 )
139
140 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DXML_STATIC -DFMI_XML_QUERY")
141
142 include(ExternalProject)
143
144 set(EXPAT_SETTINGS
145                 -DBUILD_tools:BOOLEAN=OFF
146                 -DBUILD_examples:BOOLEAN=OFF
147                 -DBUILD_tests:BOOLEAN=OFF
148                 -DBUILD_shared:BOOLEAN=OFF
149                 -DXML_DTD:BOOLEAN=OFF
150                 -DXML_NS:BOOLEAN=OFF
151                 -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}
152                 -DCMAKE_C_FLAGS:STRING=${CMAKE_C_FLAGS}
153                 -DCMAKE_C_FLAGS_DEBUG:STRING=${CMAKE_C_FLAGS_DEBUG}
154                 -DCMAKE_C_FLAGS_RELEASE:STRING=${CMAKE_C_FLAGS_RELEASE}
155                 -DCMAKE_C_FLAGS_MINSIZEREL:STRING=${CMAKE_C_FLAGS_MINSIZEREL}
156                 -DCMAKE_C_FLAGS_RELWITHDEBINFO:STRING=${CMAKE_C_FLAGS_RELWITHDEBINFO}
157                 -DCMAKE_EXE_LINKER_FLAGS:STRING=${CMAKE_EXE_LINKER_FLAGS}
158                 -DCMAKE_LINK_LIBRARY_FLAG:STRING=${CMAKE_LINK_LIBRARY_FLAG}
159                 -DCMAKE_MODULE_LINKER_FLAGS:STRING=${CMAKE_MODULE_LINKER_FLAGS}
160                 -DCMAKE_SHARED_LINKER_FLAGS:STRING=${CMAKE_SHARED_LINKER_FLAGS} 
161                 -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_BINARY_DIR}/ExpatEx/install
162 )
163
164 ExternalProject_Add(
165         expatex
166         PREFIX "${FMIXML_EXPAT_DIR}"
167         SOURCE_DIR "${FMIXML_EXPAT_DIR}"
168         CMAKE_CACHE_ARGS ${EXPAT_SETTINGS}
169         BINARY_DIR ${CMAKE_BINARY_DIR}/ExpatEx
170         INSTALL_DIR ${CMAKE_BINARY_DIR}/ExpatEx/install
171         TMP_DIR     ${CMAKE_BINARY_DIR}/ExpatEx/tmp
172     STAMP_DIR   ${CMAKE_BINARY_DIR}/ExpatEx/stamp
173 )
174
175 ExternalProject_Add_Step(
176         expatex dependent_reconfigure
177         DEPENDEES configure
178         DEPENDERS build
179         COMMAND ${CMAKE_COMMAND} -E echo "Running:  ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}"  ${EXPAT_SETTINGS} ${FMIXML_EXPAT_DIR}"
180         COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" ${EXPAT_SETTINGS} "${FMIXML_EXPAT_DIR}"
181         DEPENDS ${CMAKE_BINARY_DIR}/CMakeCache.txt
182         WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/ExpatEx
183 )
184
185 add_dependencies(expatex ${CMAKE_BINARY_DIR}/CMakeCache.txt ${FMILIBRARYHOME}/CMakeLists.txt)
186   
187 set(expatlib "${CMAKE_BINARY_DIR}/ExpatEx/${CMAKE_CFG_INTDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}expat${CMAKE_STATIC_LIBRARY_SUFFIX}")
188   
189 add_library(expat STATIC IMPORTED)
190
191 set_target_properties(
192         expat PROPERTIES 
193                 IMPORTED_LOCATION "${expatlib}"
194 )
195
196 add_dependencies(expat expatex)
197
198 if(FMILIB_INSTALL_SUBLIBS)
199         install(FILES 
200         "${CMAKE_BINARY_DIR}/ExpatEx/install/lib/${CMAKE_STATIC_LIBRARY_PREFIX}expat${CMAKE_STATIC_LIBRARY_SUFFIX}"
201         DESTINATION lib)
202 endif()
203
204 set(EXPAT_INCLUDE_DIRS ${CMAKE_BINARY_DIR}/ExpatEx/install/include)
205
206 include_directories("${EXPAT_INCLUDE_DIRS}" "${FMILIB_THIRDPARTYLIBS}/FMI/" "${FMIXMLGENDIR}/FMI1" "${FMIXMLGENDIR}/FMI2")
207
208 PREFIXLIST(FMIXMLSOURCE  ${FMIXMLDIR}/)
209 PREFIXLIST(FMIXMLHEADERS ${FMIXMLDIR}/)
210
211 list(APPEND FMIXMLSOURCE
212     ${BISON_FMI2_OUT_SRC}
213     ${BISON_FMI1_OUT_SRC}
214     ${FLEX_FMI2_OUT_SRC}
215     ${FLEX_FMI1_OUT_SRC}
216 )
217
218 debug_message(STATUS "adding fmixml")
219
220 add_library(fmixml ${FMILIBKIND} ${FMIXMLSOURCE} ${FMIXMLHEADERS})
221
222 target_link_libraries(fmixml ${JMUTIL_LIBRARIES} expat)
223
224 endif(NOT FMIXMLDIR)