@@ -14,6 +14,10 @@ option (MQTTSN_GEN_SWIG "Use commsdsl2swig to generate swig bindings project." O
1414option (MQTTSN_BUILD_SWIG "Build and install project generated by the commsdsl2swig." ${MQTTSN_GEN_SWIG} )
1515option (MQTTSN_GEN_EMSCRIPTEN "Use commsdsl2emscripten to generate emscripten bindings project." OFF )
1616option (MQTTSN_BUILD_EMSCRIPTEN "Build and install project generated by the commsdsl2emscripten." ${MQTTSN_GEN_EMSCRIPTEN} )
17+ option (MQTTSN_GEN_C "Use commsdsl2c to generate \" C\" wrappers project." OFF )
18+ option (MQTTSN_BUILD_C "Build and install project generated by the commsdsl2c." ${MQTTSN_GEN_C} )
19+ option (MQTTSN_GEN_LATEX "Use commsdsl2latex to generate protocol specification." OFF )
20+ option (MQTTSN_BUILD_LATEX "Build and install project generated by the commsdsl2latex." ${MQTTSN_GEN_C} )
1721
1822# Additional variables to be used if needed
1923# ---------------------------
@@ -26,14 +30,18 @@ option (MQTTSN_BUILD_EMSCRIPTEN "Build and install project generated by the comm
2630# MQTTSN_SWIG_LANGUAGES - Languages list to support by swig. If not provided "python java csharp" are chosen
2731# MQTTSN_EMSCRIPTEN_OUTPUT_DIR - Path to emscripten output directory. If not provided <build_dir>/output_emscripten one is used.
2832# MQTTSN_CCACHE_EXECUTABLE - Custom ccache executable
33+ # MQTTSN_C_OUTPUT_DIR - Path to "c" output directory. If not provided <build_dir>/output_c one is used.
34+ # MQTTSN_LATEX_OUTPUT_DIR - Path to latex output directory. If not provided <build_dir>/output_latex one is used.
2935# COMMSDSL2COMMS_EXTRA_ARGS - Extra arguments to pass to "commsdsl2comms"
3036# COMMSDSL2TEST_EXTRA_ARGS - Extra arguments to pass to "commsdsl2test"
3137# COMMSDSL2TOOLS_QT_EXTRA_ARGS - Extra arguments to pass to "commsdsl2tools_qt"
3238# COMMSDSL2SWIG_EXTRA_ARGS - Extra arguments to pass to "commsdsl2swig"
3339# COMMSDSL2EMSCRIPTEN_EXTRA_ARGS - Extra arguments to pass to "commsdsl2emscripten"
40+ # COMMSDSL2C_EXTRA_ARGS - Extra arguments to pass to "commsdsl2c"
41+ # COMMSDSL2LATEX_EXTRA_ARGS - Extra arguments to pass to "commsdsl2latex"
3442
35- set (MQTTSN_VERSION "3.0.3 " )
36- set (MQTTSN_MIN_COMMSDSL_VERSION "7.1 " )
43+ set (MQTTSN_VERSION "3.0.4 " )
44+ set (MQTTSN_MIN_COMMSDSL_VERSION "7.3 " )
3745
3846if ("${CMAKE_CXX_STANDARD} " STREQUAL "" )
3947 set (CMAKE_CXX_STANDARD 17)
@@ -73,6 +81,14 @@ if ("${MQTTSN_EMSCRIPTEN_OUTPUT_DIR}" STREQUAL "")
7381 set (MQTTSN_EMSCRIPTEN_OUTPUT_DIR "${CMAKE_BINARY_DIR} /output_emscripten" )
7482endif ()
7583
84+ if ("${MQTTSN_C_OUTPUT_DIR} " STREQUAL "" )
85+ set (MQTTSN_C_OUTPUT_DIR "${CMAKE_BINARY_DIR} /output_c" )
86+ endif ()
87+
88+ if ("${MQTTSN_LATEX_OUTPUT_DIR} " STREQUAL "" )
89+ set (MQTTSN_LATEX_OUTPUT_DIR "${CMAKE_BINARY_DIR} /output_latex" )
90+ endif ()
91+
7692if ("${MQTTSN_TOOLS_QT_VER} " STREQUAL "" )
7793 set (MQTTSN_TOOLS_QT_VER 5)
7894endif ()
@@ -155,7 +171,7 @@ if (MQTTSN_GEN_TEST)
155171
156172 add_custom_target ("test_output_tgt" ALL
157173 COMMAND ${CMAKE_COMMAND} -E remove_directory ${test_tmp_dir}
158- COMMAND ${COMMSDSL2TEST} ${warn_as_error} ${COMMSDSL2TEST_EXTRA_ARGS}
174+ COMMAND ${COMMSDSL2TEST} ${warn_as_error} -V ${MQTTSN_VERSION} ${COMMSDSL2TEST_EXTRA_ARGS}
159175 -o ${test_tmp_dir} -c ${PROJECT_SOURCE_DIR} /src/test ${schema_file}
160176 COMMAND ${CMAKE_COMMAND}
161177 -DGENERATED="${test_tmp_dir} " -DOUTPUT="${MQTTSN_TEST_OUTPUT_DIR} "
@@ -207,7 +223,7 @@ if (MQTTSN_GEN_TOOLS)
207223
208224 add_custom_target ("tools_output_tgt" ALL
209225 COMMAND ${CMAKE_COMMAND} -E remove_directory ${tools_tmp_dir}
210- COMMAND ${COMMSDSL2TOOLS_QT} ${warn_as_error} ${COMMSDSL2TOOLS_QT_EXTRA_ARGS}
226+ COMMAND ${COMMSDSL2TOOLS_QT} ${warn_as_error} -V ${MQTTSN_VERSION} ${COMMSDSL2TOOLS_QT_EXTRA_ARGS}
211227 --protocol "::CC MQTT-SN:MQTT-SN protocol.:cc.MqttSnProtocolPlugin"
212228 -o ${tools_tmp_dir} -c ${PROJECT_SOURCE_DIR} /src/tools ${schema_file}
213229 COMMAND ${CMAKE_COMMAND}
@@ -260,7 +276,7 @@ if (MQTTSN_GEN_SWIG)
260276
261277 add_custom_target ("swig_output_tgt" ALL
262278 COMMAND ${CMAKE_COMMAND} -E remove_directory ${swig_tmp_dir}
263- COMMAND ${COMMSDSL2SWIG} ${warn_as_error} ${COMMSDSL2SWIG_EXTRA_ARGS}
279+ COMMAND ${COMMSDSL2SWIG} ${warn_as_error} -V ${MQTTSN_VERSION} ${COMMSDSL2SWIG_EXTRA_ARGS}
264280 -c ${MQTTSN_SWIG_SRC_DIR} -o ${swig_tmp_dir} ${schema_file}
265281 COMMAND ${CMAKE_COMMAND}
266282 -DGENERATED="${swig_tmp_dir} " -DOUTPUT="${MQTTSN_SWIG_OUTPUT_DIR} "
@@ -318,7 +334,7 @@ if (MQTTSN_GEN_EMSCRIPTEN)
318334
319335 add_custom_target ("emscripten_output_tgt" ALL
320336 COMMAND ${CMAKE_COMMAND} -E remove_directory ${emscripten_tmp_dir}
321- COMMAND ${COMMSDSL2EMSCRIPTEN} ${warn_as_error} ${COMMSDSL2EMSCRIPTEN_EXTRA_ARGS}
337+ COMMAND ${COMMSDSL2EMSCRIPTEN} ${warn_as_error} -V ${MQTTSN_VERSION} ${COMMSDSL2EMSCRIPTEN_EXTRA_ARGS}
322338 -o ${emscripten_tmp_dir} -c ${PROJECT_SOURCE_DIR} /src/emscripten ${schema_file}
323339 COMMAND ${CMAKE_COMMAND}
324340 -DGENERATED="${emscripten_tmp_dir} " -DOUTPUT="${MQTTSN_EMSCRIPTEN_OUTPUT_DIR} "
@@ -366,3 +382,112 @@ if (MQTTSN_GEN_EMSCRIPTEN)
366382 endif ()
367383endif ()
368384
385+ if (MQTTSN_GEN_C)
386+ find_program (COMMSDSL2C commsdsl2c PATH_SUFFIXES bin REQUIRED)
387+ execute_process (COMMAND "${COMMSDSL2C} " --version OUTPUT_VARIABLE commsdsl2c_version)
388+ if ("${commsdsl2c_version} " VERSION_LESS "${MQTTSN_MIN_COMMSDSL_VERSION} " )
389+ message (FATAL_ERROR "Version of commsdsl2c is too old, required minimum is v${MQTTSN_MIN_COMMSDSL_VERSION} ." )
390+ endif ()
391+
392+ set (c_tmp_dir "${CMAKE_BINARY_DIR} /output_c.tmp" )
393+
394+ add_custom_target ("c_output_tgt" ALL
395+ COMMAND ${CMAKE_COMMAND} -E remove_directory ${c_tmp_dir}
396+ COMMAND ${COMMSDSL2C} ${warn_as_error} -V ${MQTTSN_VERSION} ${COMMSDSL2C_EXTRA_ARGS}
397+ -o ${c_tmp_dir} -c ${PROJECT_SOURCE_DIR} /src/c ${schema_file}
398+ COMMAND ${CMAKE_COMMAND}
399+ -DGENERATED="${c_tmp_dir} " -DOUTPUT="${MQTTSN_C_OUTPUT_DIR} "
400+ -P "${CMAKE_CURRENT_LIST_DIR} /CopyGenerated.cmake"
401+ DEPENDS "${CMAKE_CURRENT_LIST_DIR} /CopyGenerated.cmake" ${schema_file} )
402+
403+ if (MQTTSN_BUILD_C)
404+ if ((NOT MQTTSN_GEN_PROTOCOL) OR (NOT MQTTSN_BUILD_PROTOCOL))
405+ message (FATAL_ERROR "MQTTSN_GEN_PROTOCOL and MQTTSN_BUILD_PROTOCOL are required for MQTTSN_BUILD_C" )
406+ endif ()
407+
408+ execute_process (
409+ COMMAND ${CMAKE_COMMAND} -E make_directory ${MQTTSN_C_OUTPUT_DIR}
410+ )
411+
412+ execute_process (
413+ COMMAND ${CMAKE_COMMAND} -E touch ${MQTTSN_C_OUTPUT_DIR} /dummy.txt
414+ )
415+
416+ set (c_build_dir ${CMAKE_CURRENT_BINARY_DIR} /c_tgt_build)
417+ ExternalProject_Add(
418+ "c_tgt"
419+ BUILD_ALWAYS TRUE
420+ DEPENDS "prot_tgt" "c_output_tgt"
421+ SOURCE_DIR ${MQTTSN_C_OUTPUT_DIR}
422+ BINARY_DIR ${c_build_dir}
423+ LIST_SEPARATOR |
424+ CMAKE_ARGS
425+ -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
426+ -DCMAKE_GENERATOR=${CMAKE_GENERATOR} -DCMAKE_GENERATOR_PLATFORM=${CMAKE_GENERATOR_PLATFORM}
427+ -DCMAKE_GENERATOR_TOOLSET=${CMAKE_GENERATOR_TOOLSET} -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
428+ -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_EXE_LINKER_FLAGS=${CMAKE_EXE_LINKER_FLAGS}
429+ -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX} -DCMAKE_PREFIX_PATH=${combined_prefix_path_str}
430+ -DCMAKE_CXX_STANDARD=${CMAKE_CXX_STANDARD}
431+ -DOPT_USE_CCACHE=${MQTTSN_USE_CCACHE}
432+ -DOPT_CCACHE_EXECUTABLE=${MQTTSN_CCACHE_EXECUTABLE}
433+ )
434+
435+ find_package (Doxygen)
436+ if (MQTTSN_BUILD_PROT_DOC AND DOXYGEN_FOUND)
437+ ExternalProject_Add_Step(
438+ "c_tgt"
439+ "doc"
440+ COMMAND ${CMAKE_COMMAND} --build ${c_build_dir} --target doc_cc_mqttsn_c
441+ DEPENDEES "build"
442+ DEPENDERS "install"
443+ )
444+ endif ()
445+ endif ()
446+ endif ()
447+
448+ if (MQTTSN_GEN_LATEX)
449+ find_program (COMMSDSL2LATEX commsdsl2latex PATH_SUFFIXES bin REQUIRED)
450+ execute_process (COMMAND "${COMMSDSL2LATEX} " --version OUTPUT_VARIABLE commsdsl2latex_version)
451+ if ("${commsdsl2latex_version} " VERSION_LESS "${MQTTSN_MIN_COMMSDSL_VERSION} " )
452+ message (FATAL_ERROR "Version of commsdsl2latex is too old, required minimum is v${MQTTSN_MIN_COMMSDSL_VERSION} ." )
453+ endif ()
454+
455+ set (latex_tmp_dir "${CMAKE_BINARY_DIR} /output_latex.tmp" )
456+
457+ add_custom_target ("latext_output_tgt" ALL
458+ COMMAND ${CMAKE_COMMAND} -E remove_directory ${latex_tmp_dir}
459+ COMMAND ${COMMSDSL2LATEX} ${warn_as_error} ${COMMSDSL2LATEX_EXTRA_ARGS}
460+ -o ${latex_tmp_dir} -c ${PROJECT_SOURCE_DIR} /src/latex ${schema_file}
461+ COMMAND ${CMAKE_COMMAND}
462+ -DGENERATED="${latex_tmp_dir} " -DOUTPUT="${MQTTSN_LATEX_OUTPUT_DIR} "
463+ -P "${CMAKE_CURRENT_LIST_DIR} /CopyGenerated.cmake"
464+ DEPENDS "${CMAKE_CURRENT_LIST_DIR} /CopyGenerated.cmake" ${schema_file} )
465+
466+ if (MQTTSN_BUILD_LATEX)
467+ execute_process (
468+ COMMAND ${CMAKE_COMMAND} -E make_directory ${MQTTSN_LATEX_OUTPUT_DIR}
469+ )
470+
471+ execute_process (
472+ COMMAND ${CMAKE_COMMAND} -E touch ${MQTTSN_LATEX_OUTPUT_DIR} /dummy.txt
473+ )
474+
475+ set (latex_build_dir ${CMAKE_CURRENT_BINARY_DIR} /latex_tgt_build)
476+ ExternalProject_Add(
477+ "latex_tgt"
478+ BUILD_ALWAYS TRUE
479+ DEPENDS "latext_output_tgt"
480+ SOURCE_DIR ${MQTTSN_LATEX_OUTPUT_DIR}
481+ BINARY_DIR ${latex_build_dir}
482+ LIST_SEPARATOR |
483+ CMAKE_ARGS
484+ -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
485+ -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX} -DCMAKE_PREFIX_PATH=${combined_prefix_path_str}
486+ BUILD_COMMAND
487+ ${CMAKE_COMMAND} --build ${latex_build_dir} --config ${CMAKE_BUILD_TYPE} --target all_artifacts
488+ INSTALL_COMMAND
489+ ${CMAKE_COMMAND} -E echo "No install for documentation build"
490+ )
491+ endif ()
492+ endif ()
493+
0 commit comments