From e5312ce2a85c44b414a017cfab64e92a30bd322d Mon Sep 17 00:00:00 2001
From: Giovanna Lazzari Miotto <giovanna.lazzari.miotto@cern.ch>
Date: Fri, 12 Jan 2024 14:01:38 +0100
Subject: [PATCH] [lint] Add compilation options for C code

Create new target library WZDMA for wzdma.c/h with different set of compilation options than core library SCDAQ. Namely, compile in C99 mode to silence C90 mode warnings enabled by default.
---
 CMakeLists.txt | 27 +++++++++++++++++++++------
 1 file changed, 21 insertions(+), 6 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index b3cd71a9..5525e3c7 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,18 +1,24 @@
 cmake_minimum_required(VERSION 2.8)
 set(SCDAQ_TARGET scdaq)
-project(${SCDAQ_TARGET})
+project(${SCDAQ_TARGET} C CXX)
 
 set(SCDAQ_LIB SCDAQ)
+set(WZDMA_LIB WZDMA)
 
 set(SCDAQ_SOURCE_DIR ${CMAKE_SOURCE_DIR}/src)
 set(SCDAQ_CMAKE_MODS_DIR ${CMAKE_SOURCE_DIR}/cmake)
-message("${SCDAQ_CMAKE_MODS_DIR}")
 
 set(CMAKE_CXX_STANDARD 11)
 
-file(GLOB SOURCE_FILES ${SCDAQ_SOURCE_DIR}/*/*.h ${SCDAQ_SOURCE_DIR}/*.h)
-set(SOURCE_FILES "${SOURCE_FILES}"
+set(C_SOURCE_FILES
         ${SCDAQ_SOURCE_DIR}/wzdma/wz_dma.c
+        ${SCDAQ_SOURCE_DIR}/wzdma/wz_dma.h)
+
+file(GLOB CXX_SOURCE_FILES $
+        {SCDAQ_SOURCE_DIR}/*/*.h
+        ${SCDAQ_SOURCE_DIR}/*.h)
+
+set(CXX_SOURCE_FILES "${CXX_SOURCE_FILES}"
         ${SCDAQ_SOURCE_DIR}/WZDmaInputFilter.cc
         ${SCDAQ_SOURCE_DIR}/config.cc
         ${SCDAQ_SOURCE_DIR}/slice.cc
@@ -29,7 +35,9 @@ set(SOURCE_FILES "${SOURCE_FILES}"
         ${SCDAQ_SOURCE_DIR}/OutputBySize.cc
         ${SCDAQ_SOURCE_DIR}/OutputFileHandler.cc
 )
-add_library(${SCDAQ_LIB} ${SOURCE_FILES})
+
+add_library(${SCDAQ_LIB} ${CXX_SOURCE_FILES})
+add_library(${WZDMA_LIB} ${C_SOURCE_FILES})
 
 set(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH}" "${SCDAQ_CMAKE_MODS_DIR}")
 set(Boost_USE_MULTITHREADED ON)
@@ -48,14 +56,21 @@ find_library(micron_STATIC_LIBRARY
 )
 
 if (Boost_FOUND AND TBB_FOUND AND CURL_FOUND)
+    # Rules for WZDMA library (compiled in C99-mode, i.e., `gnu99`):
+    set_target_properties(${WZDMA_LIB} PROPERTIES LINKER_LANGUAGE C)
+    target_include_directories(${WZDMA_LIB} PRIVATE ${SCDAQ_SOURCE_DIR})
+    target_compile_options(${WZDMA_LIB} PRIVATE -std=gnu99 -Wall -Wextra -Wpedantic)
+
+    # Rules for SCDAQ core library (compiled in C11-mode):
     # For older compilers that do not devise *.cc as C++
     set_target_properties(${SCDAQ_LIB} PROPERTIES LINKER_LANGUAGE CXX)
     # Build library and link to dependencies
     target_include_directories(${SCDAQ_LIB}
             PRIVATE ${SCDAQ_SOURCE_DIR} ${Boost_INCLUDE_DIRS} ${CURL_INCLUDE_DIR})
-    target_link_libraries(${SCDAQ_LIB} PUBLIC ${Boost_LIBRARIES} ${CURL_LIBRARIES} ${TBB_LIBRARIES} -pthread crypto micron)
+    target_link_libraries(${SCDAQ_LIB} PUBLIC ${WZDMA_LIB} ${Boost_LIBRARIES} ${CURL_LIBRARIES} ${TBB_LIBRARIES} -pthread crypto micron)
     # Public options for library are imposed on dependants (i.e., main executable)
     target_compile_options(${SCDAQ_LIB} PUBLIC -std=c++11 -Wall -Wextra -Wpedantic)
+
     # Build main executable and link it to SCDAQ library
     add_executable(${SCDAQ_TARGET} ${SCDAQ_SOURCE_DIR}/scdaq.cc)
     set_target_properties(${SCDAQ_TARGET} PROPERTIES LINKER_LANGUAGE CXX)
-- 
GitLab