diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..aecd798 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,6 @@ +[submodule "lib/mdlp"] + path = lib/mdlp + url = https://github.com/rmontanana/mdlp +[submodule "lib/catch2"] + path = lib/catch2 + url = https://github.com/catchorg/Catch2.git diff --git a/CMakeLists.txt b/CMakeLists.txt index 89e564e..4042293 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -33,12 +33,22 @@ set(CMAKE_BUILD_TYPE "Debug") # -------------- set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules ${CMAKE_MODULE_PATH}) +include(AddGitSubmodule) +include(StaticAnalyzers) # clang-tidy +include(CodeCoverage) + +# External libraries - dependencies of BayesNet +# --------------------------------------------- +# include(FetchContent) +add_git_submodule("lib/mdlp") +add_git_submodule("lib/catch2") # Subdirectories # -------------- add_subdirectory(config) -add_subdirectory(${BayesNet_SOURCE_DIR}/src/BayesNet) -add_subdirectory(${BayesNet_SOURCE_DIR}/src/Platform) +add_subdirectory(lib/Files) +add_subdirectory(src/BayesNet) +add_subdirectory(src/Platform) add_subdirectory(sample) file(GLOB BayesNet_HEADERS CONFIGURE_DEPENDS ${BayesNet_SOURCE_DIR}/src/BayesNet/*.h ${BayesNet_SOURCE_DIR}/BayesNet/*.hpp) @@ -51,14 +61,14 @@ if (ENABLE_TESTING) MESSAGE("Testing enabled") enable_testing() if (CODE_COVERAGE) - include(CodeCoverage) + #include(CodeCoverage) MESSAGE("Code coverage enabled") set(CMAKE_C_FLAGS " ${CMAKE_C_FLAGS} -fprofile-arcs -ftest-coverage") set(CMAKE_CXX_FLAGS " ${CMAKE_CXX_FLAGS} -fprofile-arcs -ftest-coverage") SET(GCC_COVERAGE_LINK_FLAGS " ${GCC_COVERAGE_LINK_FLAGS} -lgcov --coverage") endif (CODE_COVERAGE) - find_package(Catch2 3 REQUIRED) + #find_package(Catch2 3 REQUIRED) include(CTest) - include(Catch) + #include(Catch) add_subdirectory(tests) endif (ENABLE_TESTING) \ No newline at end of file diff --git a/cmake/modules/AddGitSubmodule.cmake b/cmake/modules/AddGitSubmodule.cmake new file mode 100644 index 0000000..7855fce --- /dev/null +++ b/cmake/modules/AddGitSubmodule.cmake @@ -0,0 +1,12 @@ + +function(add_git_submodule dir) + find_package(Git REQUIRED) + + if(NOT EXISTS ${dir}/CMakeLists.txt) + message(STATUS "🚨 Adding git submodule => ${dir}") + execute_process(COMMAND ${GIT_EXECUTABLE} + submodule update --init --recursive -- ${dir} + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) + endif() + add_subdirectory(${dir}) +endfunction(add_git_submodule) diff --git a/cmake/modules/StaticAnalyzers.cmake b/cmake/modules/StaticAnalyzers.cmake new file mode 100644 index 0000000..8a15aed --- /dev/null +++ b/cmake/modules/StaticAnalyzers.cmake @@ -0,0 +1,22 @@ +if(ENABLE_CLANG_TIDY) + find_program(CLANG_TIDY_COMMAND NAMES clang-tidy) + + if(NOT CLANG_TIDY_COMMAND) + message(WARNING "🔴 CMake_RUN_CLANG_TIDY is ON but clang-tidy is not found!") + set(CMAKE_CXX_CLANG_TIDY "" CACHE STRING "" FORCE) + else() + + message(STATUS "🟢 CMake_RUN_CLANG_TIDY is ON") + set(CLANGTIDY_EXTRA_ARGS + "-extra-arg=-Wno-unknown-warning-option" + ) + set(CMAKE_CXX_CLANG_TIDY "${CLANG_TIDY_COMMAND};-p=${CMAKE_BINARY_DIR};${CLANGTIDY_EXTRA_ARGS}" CACHE STRING "" FORCE) + + add_custom_target(clang-tidy + COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target ${CMAKE_PROJECT_NAME} + COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target clang-tidy + COMMENT "Running clang-tidy..." + ) + set(CMAKE_EXPORT_COMPILE_COMMANDS ON) + endif() +endif(ENABLE_CLANG_TIDY) diff --git a/src/Platform/ArffFiles.cc b/lib/Files/ArffFiles.cc similarity index 100% rename from src/Platform/ArffFiles.cc rename to lib/Files/ArffFiles.cc diff --git a/src/Platform/ArffFiles.h b/lib/Files/ArffFiles.h similarity index 100% rename from src/Platform/ArffFiles.h rename to lib/Files/ArffFiles.h diff --git a/lib/Files/CMakeLists.txt b/lib/Files/CMakeLists.txt new file mode 100644 index 0000000..5e3412f --- /dev/null +++ b/lib/Files/CMakeLists.txt @@ -0,0 +1,2 @@ +add_library(ArffFiles ArffFiles.cc) +#target_link_libraries(BayesNet "${TORCH_LIBRARIES}") \ No newline at end of file diff --git a/lib/catch2 b/lib/catch2 new file mode 160000 index 0000000..4acc518 --- /dev/null +++ b/lib/catch2 @@ -0,0 +1 @@ +Subproject commit 4acc51828f7f93f3b2058a63f54d112af4034503 diff --git a/lib/mdlp b/lib/mdlp new file mode 160000 index 0000000..fbffc3a --- /dev/null +++ b/lib/mdlp @@ -0,0 +1 @@ +Subproject commit fbffc3a9c468b142ac0fc68f0ca8c6f2d947e9bc diff --git a/sample/CMakeLists.txt b/sample/CMakeLists.txt index 62d677d..41ea8c0 100644 --- a/sample/CMakeLists.txt +++ b/sample/CMakeLists.txt @@ -1,4 +1,6 @@ include_directories(${BayesNet_SOURCE_DIR}/src/Platform) include_directories(${BayesNet_SOURCE_DIR}/src/BayesNet) -add_executable(sample sample.cc ${BayesNet_SOURCE_DIR}/src/Platform/ArffFiles.cc ${BayesNet_SOURCE_DIR}/src/Platform/CPPFImdlp.cpp ${BayesNet_SOURCE_DIR}/src/Platform/Metrics.cpp ${BayesNet_SOURCE_DIR}/src/Platform/typesFImdlp.h ${BayesNet_HEADERS}) -target_link_libraries(sample BayesNet "${TORCH_LIBRARIES}") \ No newline at end of file +include_directories(${BayesNet_SOURCE_DIR}/lib/Files) +include_directories(${BayesNet_SOURCE_DIR}/lib/mdlp) +add_executable(BayesNetSample sample.cc) +target_link_libraries(BayesNetSample BayesNet ArffFiles mdlp "${TORCH_LIBRARIES}") \ No newline at end of file diff --git a/sample/sample.cc b/sample/sample.cc index 4388fbf..4a19b10 100644 --- a/sample/sample.cc +++ b/sample/sample.cc @@ -5,7 +5,7 @@ #include #include "ArffFiles.h" #include "Network.h" -#include "Metrics.hpp" +#include "BayesMetrics.h" #include "CPPFImdlp.h" #include "KDB.h" #include "SPODE.h" diff --git a/src/BayesNet/BaseClassifier.h b/src/BayesNet/BaseClassifier.h index dcb0b34..2157805 100644 --- a/src/BayesNet/BaseClassifier.h +++ b/src/BayesNet/BaseClassifier.h @@ -2,7 +2,7 @@ #define CLASSIFIERS_H #include #include "Network.h" -#include "Metrics.hpp" +#include "BayesMetrics.h" using namespace std; using namespace torch; diff --git a/src/BayesNet/Metrics.cc b/src/BayesNet/BayesMetrics.cc similarity index 99% rename from src/BayesNet/Metrics.cc rename to src/BayesNet/BayesMetrics.cc index 5c87e28..ce49fb1 100644 --- a/src/BayesNet/Metrics.cc +++ b/src/BayesNet/BayesMetrics.cc @@ -1,4 +1,4 @@ -#include "Metrics.hpp" +#include "BayesMetrics.h" #include "Mst.h" using namespace std; namespace bayesnet { diff --git a/src/BayesNet/Metrics.hpp b/src/BayesNet/BayesMetrics.h similarity index 100% rename from src/BayesNet/Metrics.hpp rename to src/BayesNet/BayesMetrics.h diff --git a/src/BayesNet/CMakeLists.txt b/src/BayesNet/CMakeLists.txt index 5473662..cbaa5ac 100644 --- a/src/BayesNet/CMakeLists.txt +++ b/src/BayesNet/CMakeLists.txt @@ -1,2 +1,2 @@ -add_library(BayesNet bayesnetUtils.cc Network.cc Node.cc Metrics.cc BaseClassifier.cc KDB.cc TAN.cc SPODE.cc Ensemble.cc AODE.cc Mst.cc) +add_library(BayesNet bayesnetUtils.cc Network.cc Node.cc BayesMetrics.cc BaseClassifier.cc KDB.cc TAN.cc SPODE.cc Ensemble.cc AODE.cc Mst.cc) target_link_libraries(BayesNet "${TORCH_LIBRARIES}") \ No newline at end of file diff --git a/src/BayesNet/Ensemble.h b/src/BayesNet/Ensemble.h index 3787cca..389e3a1 100644 --- a/src/BayesNet/Ensemble.h +++ b/src/BayesNet/Ensemble.h @@ -2,7 +2,7 @@ #define ENSEMBLE_H #include #include "BaseClassifier.h" -#include "Metrics.hpp" +#include "BayesMetrics.h" #include "bayesnetUtils.h" using namespace std; using namespace torch; diff --git a/src/Platform/CMakeLists.txt b/src/Platform/CMakeLists.txt index 547766b..b15bbe7 100644 --- a/src/Platform/CMakeLists.txt +++ b/src/Platform/CMakeLists.txt @@ -1,4 +1,6 @@ include_directories(${BayesNet_SOURCE_DIR}/src/BayesNet) include_directories(${BayesNet_SOURCE_DIR}/src/Platform) -add_executable(main Experiment.cc ArffFiles.cc CPPFImdlp.cpp Metrics.cpp platformUtils.cc) -target_link_libraries(main BayesNet "${TORCH_LIBRARIES}") \ No newline at end of file +include_directories(${BayesNet_SOURCE_DIR}/lib/Files) +include_directories(${BayesNet_SOURCE_DIR}/lib/mdlp) +add_executable(main Experiment.cc platformUtils.cc) +target_link_libraries(main BayesNet ArffFiles mdlp "${TORCH_LIBRARIES}") \ No newline at end of file diff --git a/src/Platform/Experiment.cc b/src/Platform/Experiment.cc index 03dd8d4..7564645 100644 --- a/src/Platform/Experiment.cc +++ b/src/Platform/Experiment.cc @@ -5,7 +5,7 @@ #include #include "ArffFiles.h" #include "Network.h" -#include "Metrics.hpp" +#include "BayesMetrics.h" #include "CPPFImdlp.h" #include "KDB.h" #include "SPODE.h" diff --git a/src/Platform/CPPFImdlp.cpp b/src/Platform/x/CPPFImdlp.cpp similarity index 100% rename from src/Platform/CPPFImdlp.cpp rename to src/Platform/x/CPPFImdlp.cpp diff --git a/src/Platform/CPPFImdlp.h b/src/Platform/x/CPPFImdlp.h similarity index 100% rename from src/Platform/CPPFImdlp.h rename to src/Platform/x/CPPFImdlp.h diff --git a/src/Platform/Metrics.cpp b/src/Platform/x/Metrics.cpp similarity index 100% rename from src/Platform/Metrics.cpp rename to src/Platform/x/Metrics.cpp diff --git a/src/Platform/Metrics.h b/src/Platform/x/Metrics.h similarity index 100% rename from src/Platform/Metrics.h rename to src/Platform/x/Metrics.h diff --git a/src/Platform/typesFImdlp.h b/src/Platform/x/typesFImdlp.h similarity index 100% rename from src/Platform/typesFImdlp.h rename to src/Platform/x/typesFImdlp.h diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 9405b09..6c4e1c7 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -2,8 +2,10 @@ if(ENABLE_TESTING) set(TEST_MAIN "unit_tests") include_directories(${BayesNet_SOURCE_DIR}/src/BayesNet) include_directories(${BayesNet_SOURCE_DIR}/src/Platform) - set(TEST_SOURCES BayesModels.cc BayesNetwork.cc ${BayesNet_SOURCES} ${Platform_SOURCES}) + include_directories(${BayesNet_SOURCE_DIR}/lib/Files) + include_directories(${BayesNet_SOURCE_DIR}/lib/mdlp) + set(TEST_SOURCES BayesModels.cc BayesNetwork.cc ${BayesNet_SOURCE_DIR}/src/Platform/platformUtils.cc ${BayesNet_SOURCES}) add_executable(${TEST_MAIN} ${TEST_SOURCES}) - target_link_libraries(${TEST_MAIN} PUBLIC "${TORCH_LIBRARIES}" Catch2::Catch2WithMain) + target_link_libraries(${TEST_MAIN} PUBLIC "${TORCH_LIBRARIES}" ArffFiles mdlp Catch2::Catch2WithMain) add_test(NAME ${TEST_MAIN} COMMAND ${TEST_MAIN}) endif(ENABLE_TESTING)