diff --git a/openair2/RRC/LTE/MESSAGES/CMakeLists.txt b/openair2/RRC/LTE/MESSAGES/CMakeLists.txt index 1b85c3ce66..b7e7f3ead6 100644 --- a/openair2/RRC/LTE/MESSAGES/CMakeLists.txt +++ b/openair2/RRC/LTE/MESSAGES/CMakeLists.txt @@ -14,8 +14,23 @@ add_custom_command(OUTPUT ${lte_rrc_source} ${lte_rrc_headers} COMMENT "Generating LTE RRC source file from ${CMAKE_CURRENT_SOURCE_DIR}/${LTE_RRC_GRAMMAR}" ) +# Many other targets include LTE RRC ASN.1 headers, without actually needing +# the actual library (asn1_lte_rrc). Therefore, below we create the INTERFACE +# library asn1_lte_rrc_hdrs that only contains these headers. To actually wait +# that the headers are created in add_custom_command, we use an intermediary +# add_custom_target which create a target that waits for the headers, and make +# a dependency from asn1_lte_rrc_hdrs to gen_lte_rrc_hdrs, which is the +# recommended way, see https://gitlab.kitware.com/cmake/cmake/-/issues/17366. +# In newer cmake version (e.g., 3.20), it is also possible to have +# ${lte_rrc_headers} directly in the add_library(asn1_lte_rrc_hdrs) statement, +# without the need for asn1_lte_rrc_hdrs +add_custom_target(gen_lte_rrc_hdrs DEPENDS ${lte_rrc_headers}) +add_library(asn1_lte_rrc_hdrs INTERFACE) +add_dependencies(asn1_lte_rrc_hdrs gen_lte_rrc_hdrs) +target_include_directories(asn1_lte_rrc_hdrs INTERFACE "${CMAKE_CURRENT_BINARY_DIR}") + add_library(asn1_lte_rrc ${lte_rrc_source}) -target_include_directories(asn1_lte_rrc PUBLIC "${CMAKE_CURRENT_BINARY_DIR}") +target_link_libraries(asn1_lte_rrc PUBLIC asn1_lte_rrc_hdrs) target_compile_options(asn1_lte_rrc PRIVATE -DASN_DISABLE_OER_SUPPORT -w PUBLIC -DLTE_RRC_VERSION=${LTE_RRC_RELEASE}) diff --git a/openair2/RRC/NR/MESSAGES/CMakeLists.txt b/openair2/RRC/NR/MESSAGES/CMakeLists.txt index c43b846c82..666f528c37 100644 --- a/openair2/RRC/NR/MESSAGES/CMakeLists.txt +++ b/openair2/RRC/NR/MESSAGES/CMakeLists.txt @@ -14,8 +14,23 @@ add_custom_command(OUTPUT ${nr_rrc_source} ${nr_rrc_headers} COMMENT "Generating NR RRC source file from ${CMAKE_CURRENT_SOURCE_DIR}/${NR_RRC_GRAMMAR}" ) +# Many other targets include NR RRC ASN.1 headers, without actually needing the +# actual library (asn1_nr_rrc). Therefore, below we create the INTERFACE +# library asn1_nr_rrc_hdrs that only contains these headers. To actually wait +# that the headers are created in add_custom_command, we use an intermediary +# add_custom_target which create a target that waits for the headers, and make +# a dependency from asn1_nr_rrc_hdrs to gen_nr_rrc_hdrs, which is the +# recommended way, see https://gitlab.kitware.com/cmake/cmake/-/issues/17366. +# In newer cmake version (e.g., 3.20), it is also possible to have +# ${nr_rrc_headers} directly in the add_library(asn1_nr_rrc_hdrs) statement, +# without the need for asn1_lte_rrc_hdrs +add_custom_target(gen_nr_rrc_hdrs DEPENDS ${nr_rrc_headers}) +add_library(asn1_nr_rrc_hdrs INTERFACE) +add_dependencies(asn1_nr_rrc_hdrs gen_nr_rrc_hdrs) +target_include_directories(asn1_nr_rrc_hdrs INTERFACE "${CMAKE_CURRENT_BINARY_DIR}") + add_library(asn1_nr_rrc ${nr_rrc_source}) -target_include_directories(asn1_nr_rrc PUBLIC "${CMAKE_CURRENT_BINARY_DIR}") +target_link_libraries(asn1_nr_rrc PUBLIC asn1_nr_rrc_hdrs) target_compile_options(asn1_nr_rrc PRIVATE -DASN_DISABLE_OER_SUPPORT -w PUBLIC -DNR_RRC_VERSION=${NR_RRC_RELEASE})