cmake_minimum_required(VERSION 3.8) project(mockturtle LANGUAGES CXX) set(MOCKTURTLE_CXX_STANDARD "17" CACHE STRING "C++ standard") set(CMAKE_CXX_STANDARD ${MOCKTURTLE_CXX_STANDARD}) set(CMAKE_CXX_STANDARD_REQUIRED ON) # Options option(MOCKTURTLE_EXAMPLES "Build examples" ON) option(MOCKTURTLE_TEST "Build tests" OFF) option(MOCKTURTLE_EXPERIMENTS "Build experiments" OFF) option(BILL_Z3 "Enable Z3 interface for bill library" OFF) option(ENABLE_COVERAGE "Enable coverage reporting for gcc/clang" OFF) option(ENABLE_MATPLOTLIB "Enable matplotlib library in experiments" OFF) option(ENABLE_NAUTY "Enable the Nauty library for percy" OFF) option(ENABLE_ABC "Enable linking ABC as a static library" OFF) option(ENABLE_CACHE_STATS "Enable cache stats" OFF) if(UNIX) # show quite some warnings (but remove some intentionally) include(CheckCXXCompilerFlag) add_compile_options(-W -Wall -Wextra) foreach (WARNING unknown-pragmas gnu-anonymous-struct nested-anon-types) check_cxx_compiler_flag("-Wno-${WARNING}" HAS_WNO_${WARNING}) if (HAS_WNO_${WARNING}) add_compile_options(-Wno-${WARNING}) endif() endforeach() if (ENABLE_COVERAGE) add_compile_options(-O0 -g --coverage -fprofile-arcs -ftest-coverage) endif() endif() if(MSVC) add_compile_options(/EHsc /bigobj) endif() if (WIN32) set(ENABLE_NAUTY OFF) endif() add_subdirectory(include) add_subdirectory(lib) add_subdirectory(src) if(ENABLE_NAUTY) add_definitions(-DENABLE_NAUTY) endif() if (ENABLE_ABC) if (NOT EXISTS ${PROJECT_SOURCE_DIR}/lib/abc_static/libabc.a) message(FATAL_ERROR "Cannot find libabc.a in lib/abc_static/. For more info, see https://github.com/lsils/abc-staticlib") endif() endif() ############################################# Generate Doxygen Documentation # Option to build docs option(BUILD_DOC "Build API documentation with Doxygen" ON) if(BUILD_DOC) find_package(Doxygen QUIET) if(NOT DOXYGEN_FOUND) message(WARNING "Doxygen not found. Set BUILD_DOC=OFF or install Doxygen.") else() # Graphviz (dot) for diagrams — optional find_program(DOT_EXE dot) set(DOXYGEN_HAVE_DOT "NO") if(DOT_EXE) set(DOXYGEN_HAVE_DOT "YES") endif() configure_file( "${CMAKE_SOURCE_DIR}/Doxyfile.in" "${CMAKE_BINARY_DIR}/Doxyfile" @ONLY ) # docs target add_custom_target(docs COMMAND "${DOXYGEN_EXECUTABLE}" "${CMAKE_BINARY_DIR}/Doxyfile" WORKING_DIRECTORY "${CMAKE_BINARY_DIR}" COMMENT "Generating API documentation with Doxygen" VERBATIM ) # Optional: convenience target to clean generated docs add_custom_target(docs-clean COMMAND "${CMAKE_COMMAND}" -E rm -rf "${DOXYGEN_OUTPUT_DIR}" COMMENT "Removing generated documentation in ${DOXYGEN_OUTPUT_DIR}" VERBATIM ) endif() endif()