@@ -14,24 +14,32 @@ option (UBLOX_GEN_SWIG "Use commsdsl2swig to generate swig bindings project." OF
1414option (UBLOX_BUILD_SWIG "Build and install project generated by the commsdsl2swig." ${UBLOX_GEN_SWIG} )
1515option (UBLOX_GEN_EMSCRIPTEN "Use commsdsl2emscripten to generate emscripten bindings project." OFF )
1616option (UBLOX_BUILD_EMSCRIPTEN "Build and install project generated by the commsdsl2emscripten." ${UBLOX_GEN_EMSCRIPTEN} )
17+ option (UBLOX_GEN_C "Use commsdsl2c to generate \" C\" wrappers project." OFF )
18+ option (UBLOX_BUILD_C "Build and install project generated by the commsdsl2c." ${UBLOX_GEN_C} )
19+ option (UBLOX_GEN_LATEX "Use commsdsl2latex to generate protocol specification." OFF )
20+ option (UBLOX_BUILD_LATEX "Build and install project generated by the commsdsl2latex." ${UBLOX_GEN_C} )
1721option (UBLOX_BUILD_EXAMPLES "Build examples." OFF )
1822
1923# Additional variables to be used if needed
2024# ---------------------------
2125# UBLOX_PROT_OUTPUT_DIR - Path to protocol output directory. If not provided <build_dir>/output one is used.
22- # UBLOX_TEST_OUTPUT_DIR - Path to test output directory. If not provided <build_dir>/output_tools one is used.
26+ # UBLOX_TEST_OUTPUT_DIR - Path to test output directory. If not provided <build_dir>/output_test one is used.
2327# UBLOX_TOOLS_OUTPUT_DIR - Path to tools output directory. If not provided <build_dir>/output_tools one is used.
2428# UBLOX_TOOLS_QT_VER - Major Qt version to be used when building tools output. Defaults to 5
2529# UBLOX_SWIG_OUTPUT_DIR - Path to swig output directory. If not provided <build_dir>/output_swig one is used.
2630# UBLOX_SWIG_SRC_DIR - Path to the commsdsl2swig sources. If not provided local "src/swig" dir is used.
2731# UBLOX_SCHEMA_FILES_LIST_FILE - Path to the file containing list of DSL files, use it to replace "schema_files" list below.
2832# UBLOX_EMSCRIPTEN_OUTPUT_DIR - Path to emscripten output directory. If not provided <build_dir>/output_emscripten one is used.
33+ # UBLOX_C_OUTPUT_DIR - Path to "c" output directory. If not provided <build_dir>/output_c one is used.
34+ # UBLOX_LATEX_OUTPUT_DIR - Path to latex output directory. If not provided <build_dir>/output_latex one is used.
2935# UBLOX_CCACHE_EXECUTABLE - Custom ccache executable
3036# COMMSDSL2COMMS_EXTRA_ARGS - Extra arguments to pass to "commsdsl2comms"
3137# COMMSDSL2TEST_EXTRA_ARGS - Extra arguments to pass to "commsdsl2test"
3238# COMMSDSL2TOOLS_QT_EXTRA_ARGS - Extra arguments to pass to "commsdsl2tools_qt"
3339# COMMSDSL2SWIG_EXTRA_ARGS - Extra arguments to pass to "commsdsl2swig"
3440# COMMSDSL2EMSCRIPTEN_EXTRA_ARGS - Extra arguments to pass to "commsdsl2emscripten"
41+ # COMMSDSL2C_EXTRA_ARGS - Extra arguments to pass to "commsdsl2c"
42+ # COMMSDSL2LATEX_EXTRA_ARGS - Extra arguments to pass to "commsdsl2latex"
3543
3644set (UBLOX_VERSION "3.0.4" )
3745set (UBLOX_MIN_COMMSDSL_VERSION "7.3" )
@@ -78,6 +86,18 @@ if ("${UBLOX_EMSCRIPTEN_OUTPUT_DIR}" STREQUAL "")
7886 set (UBLOX_EMSCRIPTEN_OUTPUT_DIR "${CMAKE_BINARY_DIR } /output_emscripten" )
7987endif ()
8088
89+ if ("${UBLOX_C_OUTPUT_DIR} " STREQUAL "" )
90+ set (UBLOX_C_OUTPUT_DIR "${CMAKE_BINARY_DIR } /output_c" )
91+ endif ()
92+
93+ if ("${UBLOX_LATEX_OUTPUT_DIR} " STREQUAL "" )
94+ set (UBLOX_LATEX_OUTPUT_DIR "${CMAKE_BINARY_DIR } /output_latex" )
95+ endif ()
96+
97+ if ("${UBLOX_TOOLS_QT_VER} " STREQUAL "" )
98+ set (UBLOX_TOOLS_QT_VER 5)
99+ endif ()
100+
81101if ("${UBLOX_SCHEMA_FILES_LIST_FILE} " STREQUAL "" )
82102 set (schema_files
83103 dsl/main.xml
@@ -245,18 +265,6 @@ set (prot_tmp_dir "${CMAKE_BINARY_DIR}/output.tmp")
245265set (test_tmp_dir "${CMAKE_BINARY_DIR } /output_test.tmp" )
246266set (tools_tmp_dir "${CMAKE_BINARY_DIR } /output_tools.tmp" )
247267
248- if ("${UBLOX_PROT_OUTPUT_DIR} " STREQUAL "" )
249- set (UBLOX_PROT_OUTPUT_DIR "${CMAKE_BINARY_DIR } /output" )
250- endif ()
251-
252- if ("${UBLOX_TEST_OUTPUT_DIR} " STREQUAL "" )
253- set (UBLOX_TEST_OUTPUT_DIR "${CMAKE_BINARY_DIR } /output_test" )
254- endif ()
255-
256- if ("${UBLOX_TOOLS_OUTPUT_DIR} " STREQUAL "" )
257- set (UBLOX_TOOLS_OUTPUT_DIR "${CMAKE_BINARY_DIR } /output_tools" )
258- endif ()
259-
260268set (warn_as_error "--warn-as-err" )
261269if (UBLOX_NO_WARN_AS_ERR)
262270 set (warn_as_error)
@@ -554,6 +562,117 @@ if (UBLOX_GEN_EMSCRIPTEN)
554562 endif ()
555563endif ()
556564
565+ if (UBLOX_GEN_C)
566+ find_program (COMMSDSL2C commsdsl2c PATH_SUFFIXES bin REQUIRED )
567+ execute_process (COMMAND "${COMMSDSL2C} " --version OUTPUT_VARIABLE commsdsl2c_version )
568+ if ("${commsdsl2c_version} " VERSION_LESS "${UBLOX_MIN_COMMSDSL_VERSION} " )
569+ message (FATAL_ERROR "Version of commsdsl2c is too old, required minimum is v${UBLOX_MIN_COMMSDSL_VERSION} ." )
570+ endif ()
571+
572+ set (c_tmp_dir "${CMAKE_BINARY_DIR } /output_c.tmp" )
573+
574+ add_custom_target ("c_output_tgt" ALL
575+ COMMAND ${CMAKE_COMMAND } -E remove_directory ${c_tmp_dir}
576+ COMMAND ${COMMSDSL2C} ${warn_as_error} -V ${UBLOX_VERSION} ${COMMSDSL2C_EXTRA_ARGS}
577+ -o ${c_tmp_dir} -c ${PROJECT_SOURCE_DIR } /src/c
578+ -p ${PROJECT_SOURCE_DIR } -i ${UBLOX_SCHEMA_FILES_LIST_FILE}
579+ COMMAND ${CMAKE_COMMAND }
580+ -DGENERATED= "${c_tmp_dir} " -DOUTPUT= "${UBLOX_C_OUTPUT_DIR} "
581+ -P "${CMAKE_CURRENT_LIST_DIR } /CopyGenerated.cmake"
582+ DEPENDS "${CMAKE_CURRENT_LIST_DIR } /CopyGenerated.cmake" ${schema_file} )
583+
584+ if (UBLOX_BUILD_C)
585+ if ((NOT UBLOX_GEN_PROTOCOL) OR (NOT UBLOX_BUILD_PROTOCOL))
586+ message (FATAL_ERROR "UBLOX_GEN_PROTOCOL and UBLOX_BUILD_PROTOCOL are required for UBLOX_BUILD_C" )
587+ endif ()
588+
589+ execute_process (
590+ COMMAND ${CMAKE_COMMAND } -E make_directory ${UBLOX_C_OUTPUT_DIR}
591+ )
592+
593+ execute_process (
594+ COMMAND ${CMAKE_COMMAND } -E touch ${UBLOX_C_OUTPUT_DIR} /dummy.txt
595+ )
596+
597+ set (c_build_dir ${CMAKE_CURRENT_BINARY_DIR } /c_tgt_build)
598+ ExternalProject_Add (
599+ "c_tgt"
600+ BUILD_ALWAYS TRUE
601+ DEPENDS "prot_tgt" "c_output_tgt"
602+ SOURCE_DIR ${UBLOX_C_OUTPUT_DIR}
603+ BINARY_DIR ${c_build_dir}
604+ LIST_SEPARATOR |
605+ CMAKE_ARGS
606+ -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER } -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER }
607+ -DCMAKE_GENERATOR=${CMAKE_GENERATOR } -DCMAKE_GENERATOR_PLATFORM=${CMAKE_GENERATOR_PLATFORM }
608+ -DCMAKE_GENERATOR_TOOLSET=${CMAKE_GENERATOR_TOOLSET } -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE }
609+ -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE } -DCMAKE_EXE_LINKER_FLAGS=${CMAKE_EXE_LINKER_FLAGS }
610+ -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX } -DCMAKE_PREFIX_PATH=${combined_prefix_path_str}
611+ -DCMAKE_CXX_STANDARD=${CMAKE_CXX_STANDARD }
612+ -DOPT_USE_CCACHE=${UBLOX_USE_CCACHE}
613+ -DOPT_CCACHE_EXECUTABLE=${UBLOX_CCACHE_EXECUTABLE}
614+ )
615+
616+ find_package (Doxygen )
617+ if (UBLOX_BUILD_PROT_DOC AND DOXYGEN_FOUND)
618+ ExternalProject_Add_Step (
619+ "c_tgt"
620+ "doc"
621+ COMMAND ${CMAKE_COMMAND } --build ${c_build_dir} --target doc_cc_ublox_c
622+ DEPENDEES "build"
623+ DEPENDERS "install"
624+ )
625+ endif ()
626+ endif ()
627+ endif ()
628+
629+ if (UBLOX_GEN_LATEX)
630+ find_program (COMMSDSL2LATEX commsdsl2latex PATH_SUFFIXES bin REQUIRED )
631+ execute_process (COMMAND "${COMMSDSL2LATEX} " --version OUTPUT_VARIABLE commsdsl2latex_version )
632+ if ("${commsdsl2latex_version} " VERSION_LESS "${UBLOX_MIN_COMMSDSL_VERSION} " )
633+ message (FATAL_ERROR "Version of commsdsl2latex is too old, required minimum is v${UBLOX_MIN_COMMSDSL_VERSION} ." )
634+ endif ()
635+
636+ set (latex_tmp_dir "${CMAKE_BINARY_DIR } /output_latex.tmp" )
637+
638+ add_custom_target ("latext_output_tgt" ALL
639+ COMMAND ${CMAKE_COMMAND } -E remove_directory ${latex_tmp_dir}
640+ COMMAND ${COMMSDSL2LATEX} ${warn_as_error} ${COMMSDSL2LATEX_EXTRA_ARGS}
641+ -o ${latex_tmp_dir} -c ${PROJECT_SOURCE_DIR } /src/latex
642+ -p ${PROJECT_SOURCE_DIR } -i ${UBLOX_SCHEMA_FILES_LIST_FILE}
643+ COMMAND ${CMAKE_COMMAND }
644+ -DGENERATED= "${latex_tmp_dir} " -DOUTPUT= "${UBLOX_LATEX_OUTPUT_DIR} "
645+ -P "${CMAKE_CURRENT_LIST_DIR } /CopyGenerated.cmake"
646+ DEPENDS "${CMAKE_CURRENT_LIST_DIR } /CopyGenerated.cmake" ${schema_file} )
647+
648+ if (UBLOX_BUILD_LATEX)
649+ execute_process (
650+ COMMAND ${CMAKE_COMMAND } -E make_directory ${UBLOX_LATEX_OUTPUT_DIR}
651+ )
652+
653+ execute_process (
654+ COMMAND ${CMAKE_COMMAND } -E touch ${UBLOX_LATEX_OUTPUT_DIR} /dummy.txt
655+ )
656+
657+ set (latex_build_dir ${CMAKE_CURRENT_BINARY_DIR } /latex_tgt_build)
658+ ExternalProject_Add (
659+ "latex_tgt"
660+ BUILD_ALWAYS TRUE
661+ DEPENDS "latext_output_tgt"
662+ SOURCE_DIR ${UBLOX_LATEX_OUTPUT_DIR}
663+ BINARY_DIR ${latex_build_dir}
664+ LIST_SEPARATOR |
665+ CMAKE_ARGS
666+ -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE }
667+ -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX } -DCMAKE_PREFIX_PATH=${combined_prefix_path_str}
668+ BUILD_COMMAND
669+ ${CMAKE_COMMAND } --build ${latex_build_dir} --config ${CMAKE_BUILD_TYPE } --target all_artifacts
670+ INSTALL_COMMAND
671+ ${CMAKE_COMMAND } -E echo "No install for documentation build"
672+ )
673+ endif ()
674+ endif ()
675+
557676if (NOT UBLOX_BUILD_EXAMPLES)
558677 return ()
559678endif ()
0 commit comments