diff --git a/CMakeLists.txt b/CMakeLists.txt index 5f083ab24c..ecf8bffa49 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1882,43 +1882,19 @@ add_library(oai_iqplayer MODULE ) set(CMAKE_MODULE_PATH "${OPENAIR_DIR}/cmake_targets/tools/MODULES" "${CMAKE_MODULE_PATH}") -#include T directory even if the T is off because T macros are in the code -#no matter what -include_directories("${OPENAIR_DIR}/common/utils/T") +# include T directory even if the T is off because T macros are in the code +# no matter what. Note: sone files are generated, so we have both source and +# binary directories +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/common/utils/T + ${CMAKE_CURRENT_BINARY_DIR}/common/utils/T) if (${T_TRACER}) set(T_SOURCE - ${OPENAIR_DIR}/common/utils/T/T_IDs.h ${OPENAIR_DIR}/common/utils/T/T.c ${OPENAIR_DIR}/common/utils/T/local_tracer.c) set(T_LIB "rt") endif (${T_TRACER}) -#Some files in the T directory are generated. -#This rule and the following deal with it. -add_custom_command ( - OUTPUT ${OPENAIR_DIR}/common/utils/T/T_IDs.h - COMMAND make check_vcd - WORKING_DIRECTORY ${OPENAIR_DIR}/common/utils/T - DEPENDS ${OPENAIR_DIR}/common/utils/T/T_messages.txt - ${OPENAIR_DIR}/common/utils/LOG/vcd_signal_dumper.c - ${OPENAIR_DIR}/common/utils/LOG/vcd_signal_dumper.h - ) - -execute_process ( - COMMAND make check_vcd - WORKING_DIRECTORY ${OPENAIR_DIR}/common/utils/T -) -#This rule is specifically needed to generate T files -#before anything else in a project that uses the T. -#See below, there are some 'add_dependencies' showing that. -#Basically we create a custom target and we make other -#targets depend on it. That forces cmake to generate -#T files before anything else. -add_custom_target ( - generate_T - DEPENDS ${OPENAIR_DIR}/common/utils/T/T_IDs.h -) ################################# # add executables for operation @@ -2380,6 +2356,7 @@ if (${T_TRACER}) oai_eth_transpro oai_mobipass coding HASHTABLE UTIL OMG_SUMO SECURITY SCHED_LIB SCHED_NR_LIB SCHED_RU_LIB SCHED_UE_LIB SCHED_NR_UE_LIB default_sched remote_sched RAL NFAPI_COMMON_LIB NFAPI_LIB NFAPI_PNF_LIB NFAPI_VNF_LIB NFAPI_USER_LIB + MISC_NFAPI_LTE_LIB MISC_NFAPI_NR_LIB PHY_COMMON PHY PHY_UE PHY_NR PHY_NR_COMMON PHY_NR_UE PHY_RU PHY_MEX L2 L2_LTE L2_NR L2_LTE_NR L2_UE NR_L2_UE L2_UE_LTE_NR MAC_NR_COMMON MAC_NR MAC_UE_NR ngap CN_UTILS GTPV1U SCTP_CLIENT MME_APP LIB_NAS_UE NB_IoT SIMU SIMU_ETH OPENAIR0_LIB diff --git a/common/utils/CMakeLists.txt b/common/utils/CMakeLists.txt index 2acf78c9c2..8d5989be38 100644 --- a/common/utils/CMakeLists.txt +++ b/common/utils/CMakeLists.txt @@ -8,3 +8,4 @@ if(ENABLE_WEBSRV) add_subdirectory(websrv) endif() +add_subdirectory(T) diff --git a/common/utils/T/CMakeLists.txt b/common/utils/T/CMakeLists.txt new file mode 100644 index 0000000000..1a22ae2cd5 --- /dev/null +++ b/common/utils/T/CMakeLists.txt @@ -0,0 +1,40 @@ +add_executable(genids genids.c) + +add_custom_command(OUTPUT T_IDs.h + COMMAND ./genids ${CMAKE_CURRENT_SOURCE_DIR}/T_messages.txt T_IDs.h + DEPENDS genids + COMMENT "Generating T_IDs.h from T_messages.txt" +) +add_custom_command(OUTPUT T_messages.txt.h + COMMAND xxd -i T_messages.txt ${CMAKE_CURRENT_BINARY_DIR}/T_messages.txt.h + COMMENT "Generating T_messages.txt.h from T_messages.txt" + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} +) + +add_executable(_check_vcd check_vcd.c tracer/database.c tracer/utils.c T_IDs.h T_messages.txt.h) +target_include_directories(_check_vcd PRIVATE + .. ../itti ../../../openair2/COMMON tracer + ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}) +target_compile_options(_check_vcd PRIVATE -Wall) +target_link_libraries(_check_vcd PRIVATE m pthread) + +add_custom_target(check_vcd + COMMAND _check_vcd ${CMAKE_CURRENT_SOURCE_DIR}/T_messages.txt ${CMAKE_CURRENT_SOURCE_DIR}/../LOG/vcd_signal_dumper.h + DEPENDS _check_vcd + COMMENT "Checking validity of VCD files" +) + +# This rule is specifically needed to generate T files before anything else in +# a project that uses the T. +# See root CMakeLists.txt, there are some 'add_dependencies' showing that. +# Basically we create a custom target and we make other targets depend on it. +# That forces cmake to generate T files before anything else. +add_custom_target(generate_T DEPENDS T_IDs.h check_vcd) + +# even if T is off, we need the headers as many targets depend on it +# for this, create an INTERFACE (header-only) library T_headers. To ensure the +# headers have really been created, we make this headers library explicitly +# depend on the generated headers. +add_library(T_headers INTERFACE) +add_dependencies(T_headers T_IDs.h T_messages.txt.h) +target_include_directories(T_headers INTERFACE ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}) diff --git a/common/utils/T/Makefile b/common/utils/T/Makefile index d76ab93cb8..4f1bc695ae 100644 --- a/common/utils/T/Makefile +++ b/common/utils/T/Makefile @@ -20,7 +20,7 @@ T_IDs.h: $(GENIDS) T_messages.txt check_vcd: T_IDs.h T_messages.txt.h gcc -Wall -I. -I.. -I../itti -I../../../openair2/COMMON -Itracer -o _check_vcd check_vcd.c tracer/database.c tracer/utils.c -lm -pthread - ./_check_vcd || (rm -f ./_check_vcd ./T_IDs.h ./T_messages.txt.h && false) + ./_check_vcd T_messages.txt ../LOG/vcd_signal_dumper.h || (rm -f ./_check_vcd ./T_IDs.h ./T_messages.txt.h && false) rm -f ./_check_vcd .PHONY: check_vcd diff --git a/common/utils/T/check_vcd.c b/common/utils/T/check_vcd.c index 33ca58f947..6e415c2d94 100644 --- a/common/utils/T/check_vcd.c +++ b/common/utils/T/check_vcd.c @@ -67,14 +67,17 @@ void err(char *fmt, ...) exit(1); } -int main(void) +int main(int argc, char *argv[]) { /* to disable the checks done by this program, uncomment the following * line, ie. remove the leading '//' */ //return 0; - void *database = parse_database("T_messages.txt"); + if (argc != 3) err("usage: %s ", argv[0]); + char *T_msg_txt = argv[1]; + char *vcd_sig_dmp = argv[2]; + void *database = parse_database(T_msg_txt); int number_of_events; int first_var = -1; int last_var; @@ -212,8 +215,8 @@ int main(void) * VCD_VARIABLE_ABC or VCD_FUNCTION_XYZ */ i = first_var; - in = fopen("../LOG/vcd_signal_dumper.h", "r"); - if (in == NULL) err("could not open ../LOG/vcd_signal_dumper.h"); + in = fopen(vcd_sig_dmp, "r"); + if (in == NULL) err("could not open %s\n", vcd_sig_dmp); while (1) { char *x = " VCD_SIGNAL_DUMPER_VARIABLES_"; ssize_t r;