Skip to content

Commit 836b45c

Browse files
committed
Supporting sub-projects generation with commsdsl2c and commsdsl2latex.
1 parent 394d594 commit 836b45c

7 files changed

Lines changed: 530 additions & 16 deletions

File tree

CMakeLists.txt

Lines changed: 132 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,24 +14,32 @@ option (UBLOX_GEN_SWIG "Use commsdsl2swig to generate swig bindings project." OF
1414
option (UBLOX_BUILD_SWIG "Build and install project generated by the commsdsl2swig." ${UBLOX_GEN_SWIG})
1515
option (UBLOX_GEN_EMSCRIPTEN "Use commsdsl2emscripten to generate emscripten bindings project." OFF)
1616
option (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})
1721
option (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

3644
set (UBLOX_VERSION "3.0.4")
3745
set (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")
7987
endif ()
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+
81101
if ("${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")
245265
set (test_tmp_dir "${CMAKE_BINARY_DIR}/output_test.tmp")
246266
set (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-
260268
set (warn_as_error "--warn-as-err")
261269
if (UBLOX_NO_WARN_AS_ERR)
262270
set (warn_as_error)
@@ -554,6 +562,117 @@ if (UBLOX_GEN_EMSCRIPTEN)
554562
endif ()
555563
endif ()
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+
557676
if (NOT UBLOX_BUILD_EXAMPLES)
558677
return()
559678
endif()

script/full_build.sh

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ ${SCRIPT_DIR}/prepare_externals.sh
2727
cd ${BUILD_DIR}
2828
cmake .. -DCMAKE_INSTALL_PREFIX=${COMMON_INSTALL_DIR} \
2929
-DCMAKE_BUILD_TYPE=${COMMON_BUILD_TYPE} -DUBLOX_GEN_TEST=ON \
30-
-DUBLOX_GEN_TOOLS=ON -DUBLOX_GEN_SWIG=OFF -DUBLOX_GEN_EMSCRIPTEN=OFF \
30+
-DUBLOX_GEN_TOOLS=ON -DUBLOX_GEN_SWIG=OFF -DUBLOX_GEN_EMSCRIPTEN=OFF \
31+
-DUBLOX_GEN_C=ON -DUBLOX_GEN_LATEX=ON \
3132
-DUBLOX_BUILD_EXAMPLES=ON -DUBLOX_USE_CCACHE=ON "$@"
3233

3334
procs=$(nproc)

script/prepare_externals.bat

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,8 @@ mkdir "%COMMSDSL_BUILD_DIR%"
107107
cd %COMMSDSL_BUILD_DIR%
108108
cmake %GENERATOR_PARAM% %COMMSDSL_PLATFORM_PARAM% -S %COMMSDSL_SRC_DIR% -B %COMMSDSL_BUILD_DIR% ^
109109
-DCMAKE_INSTALL_PREFIX=%COMMSDSL_INSTALL_DIR% -DCMAKE_BUILD_TYPE=%COMMON_BUILD_TYPE% ^
110-
-DCOMMSDSL_INSTALL_LIBRARY=OFF -DCOMMSDSL_BUILD_COMMSDSL2TEST=ON -DCOMMSDSL_BUILD_COMMSDSL2TOOLS_QT=ON
110+
-DCOMMSDSL_INSTALL_LIBRARY=OFF -DCOMMSDSL_BUILD_COMMSDSL2TEST=ON -DCOMMSDSL_BUILD_COMMSDSL2TOOLS_QT=ON ^
111+
-DCOMMSDSL_BUILD_COMMSDSL2LATEX=ON -DCOMMSDSL_BUILD_COMMSDSL2C=ON
111112
if %errorlevel% neq 0 exit /b %errorlevel%
112113
cmake --build %COMMSDSL_BUILD_DIR% --config %COMMON_BUILD_TYPE% --target install
113114
if %errorlevel% neq 0 exit /b %errorlevel%

script/prepare_externals.sh

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,8 @@ function build_commsdsl() {
146146
${COMMON_USE_CCACHE:+"-DCOMMSDSL_USE_CCACHE=${COMMON_USE_CCACHE}"} \
147147
${COMMON_CCACHE_EXECUTABLE:+"-DCOMMSDSL_CCACHE_EXECUTABLE=${COMMON_CCACHE_EXECUTABLE}"} \
148148
-DCOMMSDSL_INSTALL_LIBRARY=OFF -DCOMMSDSL_BUILD_COMMSDSL2TEST=ON -DCOMMSDSL_BUILD_COMMSDSL2TOOLS_QT=ON \
149-
-DCOMMSDSL_BUILD_COMMSDSL2SWIG=ON -DCOMMSDSL_BUILD_COMMSDSL2EMSCRIPTEN=ON
149+
-DCOMMSDSL_BUILD_COMMSDSL2SWIG=ON -DCOMMSDSL_BUILD_COMMSDSL2EMSCRIPTEN=ON \
150+
-DCOMMSDSL_BUILD_COMMSDSL2LATEX=ON -DCOMMSDSL_BUILD_COMMSDSL2C=ON
150151
cmake --build ${COMMSDSL_BUILD_DIR} --config ${COMMON_BUILD_TYPE} --target install ${procs_param}
151152
}
152153

@@ -180,6 +181,7 @@ function build_cc_tools_qt() {
180181
${COMMON_CCACHE_EXECUTABLE:+"-DCC_TOOLS_QT_CCACHE_EXECUTABLE=${COMMON_CCACHE_EXECUTABLE}"} \
181182
-DCMAKE_BUILD_TYPE=${COMMON_BUILD_TYPE} -DCC_TOOLS_QT_BUILD_APPS=OFF -DCMAKE_PREFIX_PATH=${COMMS_INSTALL_DIR} \
182183
-DCMAKE_CXX_STANDARD=${COMMON_CXX_STANDARD} ${CC_TOOLS_QT_VERSION_OPT}
184+
183185
cmake --build ${CC_TOOLS_QT_BUILD_DIR} --config ${COMMON_BUILD_TYPE} --target install ${procs_param}
184186
}
185187

0 commit comments

Comments
 (0)