Commit 732adc79 authored by Michal Kravcenko's avatar Michal Kravcenko

Merge branch 'dev' of code.it4i.cz:bes0030/lib4neuro into tmp

parents f7aec172 60a9f711
......@@ -3,6 +3,7 @@ stages:
# Windows 10 with dependencies
# downloaded (and compiled) locally
# compiled by VisualStudio 2017
win_visual_studio_static_local_deps:
tags:
- Win
......@@ -18,11 +19,32 @@ win_visual_studio_static_local_deps:
- set BUILD_LIB=yes
- set BUILD_EXAMPLES=yes
- set BUILD_TESTS=yes
- call build_scripts\windows\win_VS_build_x64_release.bat
script:
- call build_scripts\windows\win_VS_build_x64_release.bat
# Windows 10 with dependencies
# downloaded (and compiled) locally
# compiled by VisualStudio 2015
win_visual_studio_2015_static_local_deps:
tags:
- Win
image: windows:latest
stage: build
before_script:
- call VsDevCmd.bat
- set DEPENDENCIES_LINK_TYPE=static
- set clean_after=yes
- set BUILD_LIB=yes
- set BUILD_EXAMPLES=yes
- set BUILD_TESTS=yes
script:
- call build_scripts\windows\win_VS2015_build_x64_release.bat
# Latest Ubuntu with dependencies
# in system directories, Boost
# installed from the official repository
......
For detailed information about new features and bug fixes in different versions
of lib4neuro have a look at [Releases](https://code.it4i.cz/moldyn/lib4neuro/releases).
Versions are labeled like `YEAR.MONTH.N`, which means, that it's the Nth release
of lib4neuro in that specific month.
\ No newline at end of file
This diff is collapsed.
message("DownloadArmadillo starting...")
set(ARMADILLO_LOCAL_PATH ${CMAKE_CURRENT_LIST_DIR}/external_dependencies/armadillo)
include(FetchContent)
######################
# Download Armadillo #
######################
FetchContent_Declare(
armadillo
SOURCE_DIR ${ARMADILLO_LOCAL_PATH}
GIT_REPOSITORY https://gitlab.com/conradsnicta/armadillo-code.git
GIT_TAG 9.300.x #TODO do some general solution!
)
set(FETCHCONTENT_QUIET FALSE)
FetchContent_Populate(armadillo)
find_package(Armadillo)
if(NOT ARMADILLO_FOUND)
message(FATAL_ERROR "Armadillo was not downloaded successfully!")
endif()
set(ENV{ARMADILLO_LOCAL_PATH} ${ARMADILLO_LOCAL_PATH})
message("DownloadBoost starting...")
set(BOOST_LOCAL_PATH ${CMAKE_CURRENT_LIST_DIR}/external_dependencies/boost)
include(FetchContent)
##################
# Download Boost #
##################
set(WINAPI_BOOST_LIB "")
if(WIN32)
set(WINAPI_BOOST_LIB libs/winapi)
endif()
FetchContent_Declare(
boost
SOURCE_DIR ${BOOST_LOCAL_PATH}
GIT_REPOSITORY https://github.com/boostorg/boost.git
GIT_SUBMODULES tools/build tools/boost_install
libs/system libs/random libs/serialization
libs/config libs/headers libs/assert libs/core
libs/integer libs/type_traits libs/mpl
libs/preprocessor libs/throw_exception
libs/utility libs/static_assert libs/smart_ptr
libs/predef libs/move libs/io libs/iterator
libs/detail libs/spirit libs/optional
libs/function libs/type_index libs/bind
libs/container_hash libs/array libs/test
libs/timer libs/exception libs/algorithm
libs/range libs/numeric libs/format
libs/lexical_cast libs/concept_check
libs/container libs/math libs/function_types
libs/typeof ${WINAPI_BOOST_LIB}
)
set(FETCHCONTENT_QUIET FALSE)
FetchContent_Populate(boost)
###############
# Build Boost #
###############
set(BOOTSTRAP_CMD sh bootstrap.sh)
set(B2_CMD ./b2 -j${N_CORES})
if(WIN32)
set(BOOTSTRAP_CMD bootstrap.bat)
set(B2_CMD b2 -j${N_CORES})
endif()
execute_process(
COMMAND ${BOOTSTRAP_CMD}
WORKING_DIRECTORY ${BOOST_LOCAL_PATH}
RESULT_VARIABLE rv
)
if(NOT rv STREQUAL "0")
message("Boost build: bootstrap: ${rv}")
endif()
execute_process(
COMMAND ${B2_CMD} headers
WORKING_DIRECTORY ${BOOST_LOCAL_PATH}
RESULT_VARIABLE rv
)
if(NOT rv STREQUAL "0")
message("Boost build: b2 headers: ${rv}")
endif()
set(VARIANT release)
if(${CMAKE_BUILD_TYPE} STREQUAL "Debug")
set(VARIANT debug)
endif()
execute_process(
COMMAND ${B2_CMD} -q cxxflags=-fPIC --layout=system variant=${VARIANT} link=${DEPENDENCIES_LINK_TYPE} address-model=64 --with-system --with-serialization --with-random
WORKING_DIRECTORY ${BOOST_LOCAL_PATH}
RESULT_VARIABLE rv
)
if(NOT rv STREQUAL "0")
message("Boost build: b2: ${rv}")
endif()
find_package(
Boost
COMPONENTS
system
serialization
random
)
if(NOT Boost_FOUND)
message(FATAL_ERROR "Boost was not downloaded successfully!")
endif()
message("DownloadExprtk starting...")
set(EXPRTK_LOCAL_PATH ${CMAKE_CURRENT_LIST_DIR}/external_dependencies/exprtk)
include(FetchContent)
###################
# Download exprtk #
###################
FetchContent_Declare(
exprtk
SOURCE_DIR ${EXPRTK_LOCAL_PATH}
GIT_REPOSITORY https://github.com/ArashPartow/exprtk.git
)
set(FETCHCONTENT_QUIET FALSE)
FetchContent_Populate(exprtk)
find_package(Exprtk)
if(NOT EXPRTK_FOUND)
message(FATAL_ERROR "Exprtk was not downloaded successfully!")
endif()
message(URL_FOR_DOWNLOAD: ${URL_FOR_DOWNLOAD})
message(FILE_TO_SAVE: ${FILE_TO_SAVE})
file(DOWNLOAD ${URL_FOR_DOWNLOAD} ${FILE_TO_SAVE})
message("DownloadLapacke starting...")
set(LAPACKE_LOCAL_PATH ${CMAKE_CURRENT_LIST_DIR}/external_dependencies/Lapacke)
include(FetchContent)
####################
# Download Lapacke #
####################
set(LAPACKE_FILES ${LAPACKE_LOCAL_PATH}/lapacke.h ${LAPACKE_LOCAL_PATH}/liblapacke.dll ${LAPACKE_LOCAL_PATH}/liblapacke.lib)
add_custom_command(
OUTPUT ${LAPACKE_LOCAL_PATH}/lapacke.h
COMMAND ${CMAKE_COMMAND} -DURL_FOR_DOWNLOAD=https://icl.cs.utk.edu/lapack-for-windows/include/lapacke.h -DFILE_TO_SAVE=${LAPACKE_LOCAL_PATH}/lapacke.h -P ${CMAKE_CURRENT_LIST_DIR}/DownloadFromUrl.cmake
WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
VERBATIM
COMMAND_EXPAND_LISTS
)
add_custom_command(
OUTPUT ${LAPACKE_LOCAL_PATH}/liblapacke.dll
COMMAND ${CMAKE_COMMAND} -DURL_FOR_DOWNLOAD=https://icl.cs.utk.edu/lapack-for-windows/libraries/VisualStudio/3.7.0/Dynamic-MINGW/Win64/liblapacke.dll -DFILE_TO_SAVE=${LAPACKE_LOCAL_PATH}/liblapacke.dll -P ${CMAKE_CURRENT_LIST_DIR}/DownloadFromUrl.cmake
WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
VERBATIM
COMMAND_EXPAND_LISTS
)
add_custom_command(
OUTPUT ${LAPACKE_LOCAL_PATH}/liblapacke.lib
COMMAND ${CMAKE_COMMAND} -DURL_FOR_DOWNLOAD=https://icl.cs.utk.edu/lapack-for-windows/libraries/VisualStudio/3.7.0/Dynamic-MINGW/Win64/liblapacke.lib -DFILE_TO_SAVE=${LAPACKE_LOCAL_PATH}/liblapacke.lib -P ${CMAKE_CURRENT_LIST_DIR}/DownloadFromUrl.cmake
WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
VERBATIM
COMMAND_EXPAND_LISTS
)
set(ENV{LAPACKE_HEADERS} ${LAPACKE_LOCAL_PATH}/lapacke.h )
list(APPEND LAPACKE_LIBRARIES "${LAPACKE_LOCAL_PATH}/liblapacke.lib")
#"${LAPACKE_LOCAL_PATH}/liblapacke.dll"
set(ENV{LAPACKE_LIBRARIES} ${LAPACKE_LIBRARIES})
option(ENV{LAPACKE_LOCAL} ON)
add_custom_target(lapacke_build DEPENDS ${LAPACKE_FILES})
message("DownloadOpenBLAS starting...")
set(OPENBLAS_LOCAL_PATH ${ROOT_DIR}/external_dependencies/OpenBLAS)
include(FetchContent)
#####################
# Download OpenBLAS #
#####################
if(WIN32)
FetchContent_Declare(
OpenBLAS
SOURCE_DIR ${OPENBLAS_LOCAL_PATH}
URL https://github.com/JuliaLinearAlgebra/OpenBLASBuilder/releases/download/v0.3.0-3/OpenBLAS.v0.3.0.x86_64-w64-mingw32-gcc8.tar.gz
)
# See messages during 'git clone'
set(FETCHCONTENT_QUIET FALSE)
if(NOT OpenBLAS_POPULATED)
FetchContent_Populate(OpenBLAS)
endif()
else()
FetchContent_Declare(
OpenBLAS
SOURCE_DIR ${OPENBLAS_LOCAL_PATH}
GIT_REPOSITORY https://github.com/xianyi/OpenBLAS.git
)
# See messages during 'git clone'
set(FETCHCONTENT_QUIET FALSE)
if(NOT OpenBLAS_POPULATED)
FetchContent_Populate(OpenBLAS)
endif()
endif()
if(NOT WIN32)
###################################
# Build OpenBLAS (only for Linux) #
###################################
execute_process(
COMMAND ${CMAKE_COMMAND} -j ${N_CORES} .
WORKING_DIRECTORY ${OPENBLAS_LOCAL_PATH}
RESULT_VARIABLE rv
)
if(NOT rv STREQUAL "0")
message("OpenBLAS build: cmake .: ${rv}")
endif()
# Build library
execute_process(
COMMAND ${CMAKE_COMMAND} --build . --config Release -j ${N_CORES}
WORKING_DIRECTORY ${OPENBLAS_LOCAL_PATH}
RESULT_VARIABLE rv
)
if(NOT rv STREQUAL "0")
message("OpenBLAS build: cmake --build: ${rv}")
endif()
endif()
find_package(OpenBLAS)
message("DownloadTurtle starting...")
set(TURTLE_LOCAL_PATH ${CMAKE_CURRENT_LIST_DIR}/external_dependencies/turtle)
include(FetchContent)
###################
# Download exprtk #
###################
FetchContent_Declare(
turtle
SOURCE_DIR ${TURTLE_LOCAL_PATH}
GIT_REPOSITORY https://github.com/mat007/turtle.git
)
set(FETCHCONTENT_QUIET FALSE)
FetchContent_Populate(turtle)
find_package(Turtle)
if(NOT TURTLE_FOUND)
message(FATAL_ERROR "Turtle was not downloaded successfully!")
endif()
......@@ -51,14 +51,14 @@ PROJECT_BRIEF = "Massivelly-parallel neural networks library"
# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy
# the logo to the output directory.
PROJECT_LOGO = /home/martin/4Neuro/img/lib4neuro_logo.png
PROJECT_LOGO = img/lib4neuro_logo.png
# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path
# into which the generated documentation will be written. If a relative path is
# entered, it will be relative to the location where doxygen was started. If
# left blank the current directory will be used.
OUTPUT_DIRECTORY = /home/martin/4Neuro/docs
OUTPUT_DIRECTORY = docs
# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub-
# directories (in 2 levels) under the output directory of each output format and
......@@ -790,7 +790,7 @@ WARN_LOGFILE =
# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING
# Note: If this tag is empty the current directory is searched.
INPUT = /home/martin/4Neuro/src
INPUT = src
# This tag can be used to specify the character encoding of the source files
# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
......
message("FindArmadillo starting...")
# Find headers
FIND_PATH(
ARMADILLO_INCLUDE_DIR
NAMES
armadillo
HINTS
$ENV{ARMADILLO_INCLUDE_DIR}
${ARMADILLO_INCLUDE_DIR}
${ROOT_DIR}/external_dependencies/armadillo/
PATHS
/usr
/home
/opt
PATH_SUFFIXES
include
armadillo
include/armadillo
local
)
INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(
armadillo
"Armadillo was NOT found!"
ARMADILLO_INCLUDE_DIR)
if(armadillo_FOUND)
message(STATUS "Armadillo headers found.")
message(STATUS "ARMADILLO_INCLUDE_DIR: ${ARMADILLO_INCLUDE_DIR}")
set(ARMADILLO_ROOT ${ARMADILLO_INCLUDE_DIR}/..)
endif()
message("FindOpenBLAS starting...")
FIND_PATH(
OpenBLAS_INCLUDE_DIR
NAMES
cblas.h
HINTS
${OpenBLAS_INCLUDE_DIRECTORY}
$ENV{OpenBLAS_INCLUDE_DIRECTORY}
${ROOT_DIR}/external_dependencies/OpenBLAS
/usr
PATH_SUFFIXES
include
include/x86_64-linux-gnu
include/OpenBLAS
)
FIND_LIBRARY(
OpenBLAS_LIBRARIES
NAMES
openblas
HINTS
${OpenBLAS_LIBRARY_DIRECTORY}
$ENV{OpenBLAS_LIBRARY_DIRECTORY}
${ROOT_DIR}/external_dependencies/OpenBLAS/
/usr
PATH_SUFFIXES
bin
lib
lib/x86_64-linux-gnu
local
include/OpenBLAS/lib
)
# Set OpenBLAS_Found
INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(
OpenBLAS
FAIL_MESSAGE
"OpenBLAS was NOT found!"
REQUIRED_VARS
OpenBLAS_INCLUDE_DIR
OpenBLAS_LIBRARIES
)
IF (OpenBLAS_FOUND)
MESSAGE(STATUS "OpenBLAS was found.")
MESSAGE(STATUS "OpenBLAS_LIBRARIES: ${OpenBLAS_LIBRARIES}")
MESSAGE(STATUS "OpenBLAS_INCLUDE_DIR: ${OpenBLAS_INCLUDE_DIR}")
ELSE()
MESSAGE(STATUS "Could not find OpenBLAS")
ENDIF()
File mode changed from 100755 to 100644
File mode changed from 100755 to 100644
#!/usr/bin/sh
ml CMake/3.13.1
ml GCC/7.1.0-2.28
ml Boost
ml Armadillo
ml OpenBLAS
ml ScaLAPACK
./clean.sh
./build.sh
\ No newline at end of file
@echo off
title Building the 'lib4neuro' project for Release
set BUILD_SOMETHING_LIB=yes
set BUILD_LIB=yes
set BUILD_TESTS=yes
set BUILD_EXAMPLES=yes
rem call VsDevCmd.bat
title Building the 'lib4neuro' project for Release [preparing makefiles]
rem C++ compiler (Requires Visual Studio 2017)
set CXX_COMPILER=cl
set C_COMPILER=cl
set MAKEFILE_GENERATOR="Visual Studio 15 2017 Win64"
cmake -G "Visual Studio 14 2015 Win64" -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_COMPILER=%CXX_COMPILER% -DCMAKE_C_COMPILER=%C_COMPILER% -DBOOST_ROOT=%BOOST_ROOT% -DBOOST_LIBRARYDIR=%BOOST_LIBRARYDIR% -DBOOST_INCLUDEDIR=%BOOST_INCLUDEDIR% -DBUILD_TESTS=%BUILD_TESTS% -DBUILD_EXAMPLES=%BUILD_EXAMPLES% -DBUILD_LIB=%BUILD_LIB% -DLIB4NEURO_DIR=build\lib -DDEPENDENCIES_LINK_TYPE=%LINK_TYPE% -DLIB4NEURO_INCLUDE_DIR=%LIB4NEURO_INCLUDE_DIR% -S . -B build
title Building the 'lib4neuro' project for Release [building]
call set_env_n_cores.bat
if "%BUILD_SOMETHING_LIB%" == "yes" (
cmake --build build -j %N_CORES% --config Release && echo "Build complete."
)
File mode changed from 100755 to 100644
File mode changed from 100755 to 100644
message("DownloadArmadillo starting...")
MESSAGE("DownloadArmadillo starting...")
set(ARMADILLO_LOCAL_PATH ${ROOT_DIR}/external_dependencies/armadillo)
SET(ARMADILLO_LOCAL_PATH ${ROOT_DIR}/external_dependencies/armadillo)
include(FetchContent)
INCLUDE(FetchContent)
######################
# Download Armadillo #
######################
FetchContent_Declare(
FETCHCONTENT_DECLARE(
armadillo
SOURCE_DIR ${ARMADILLO_LOCAL_PATH}
GIT_REPOSITORY https://gitlab.com/conradsnicta/armadillo-code.git
GIT_TAG 9.300.x #TODO do some general solution!
)
set(FETCHCONTENT_QUIET FALSE)
SET(FETCHCONTENT_QUIET FALSE)
FetchContent_Populate(armadillo)
FETCHCONTENT_POPULATE(armadillo)
find_package(Armadillo)
FIND_PACKAGE(Armadillo)
if(NOT ARMADILLO_FOUND)
message(FATAL_ERROR "Armadillo was not downloaded successfully!")
endif()
IF(NOT ARMADILLO_FOUND)
MESSAGE(FATAL_ERROR "Armadillo was not downloaded successfully!")
ENDIF()
set(ENV{ARMADILLO_LOCAL_PATH} ${ARMADILLO_LOCAL_PATH})
SET(ENV{ARMADILLO_LOCAL_PATH} ${ARMADILLO_LOCAL_PATH})
message("DownloadBoost starting...")
MESSAGE("DownloadBoost starting...")
set(BOOST_LOCAL_PATH ${ROOT_DIR}/external_dependencies/boost)
SET(BOOST_LOCAL_PATH ${ROOT_DIR}/external_dependencies/boost)
include(FetchContent)
INCLUDE(FetchContent)
##################
# Download Boost #
##################
set(WINAPI_BOOST_LIB "")
if(WIN32)
set(WINAPI_BOOST_LIB libs/winapi)
endif()
SET(WINAPI_BOOST_LIB "")
IF(WIN32)
SET(WINAPI_BOOST_LIB libs/winapi)
ENDIF()
FetchContent_Declare(
FETCHCONTENT_DECLARE(
boost
SOURCE_DIR ${BOOST_LOCAL_PATH}
GIT_REPOSITORY https://github.com/boostorg/boost.git
GIT_SUBMODULES tools/build tools/boost_install
libs/system libs/random libs/serialization
libs/config libs/headers libs/assert libs/core
libs/integer libs/type_traits libs/mpl
libs/preprocessor libs/throw_exception
libs/utility libs/static_assert libs/smart_ptr
libs/predef libs/move libs/io libs/iterator
libs/detail libs/spirit libs/optional
libs/function libs/type_index libs/bind
libs/container_hash libs/array libs/test
libs/timer libs/exception libs/algorithm
libs/range libs/numeric libs/format
libs/lexical_cast libs/concept_check
libs/container libs/math libs/function_types
libs/typeof ${WINAPI_BOOST_LIB}
libs/system libs/random libs/serialization
libs/config libs/headers libs/assert libs/core
libs/integer libs/type_traits libs/mpl
libs/preprocessor libs/throw_exception
libs/utility libs/static_assert libs/smart_ptr
libs/predef libs/move libs/io libs/iterator
libs/detail libs/spirit libs/optional
libs/function libs/type_index libs/bind
libs/container_hash libs/array libs/test
libs/timer libs/exception libs/algorithm
libs/range libs/numeric libs/format
libs/lexical_cast libs/concept_check
libs/container libs/math libs/function_types
libs/typeof ${WINAPI_BOOST_LIB}
)
set(FETCHCONTENT_QUIET FALSE)
SET(FETCHCONTENT_QUIET FALSE)
FetchContent_Populate(boost)
FETCHCONTENT_POPULATE(boost)
###############
# Build Boost #
###############
set(BOOTSTRAP_CMD sh bootstrap.sh)
set(B2_CMD ./b2 -j${N_CORES})
if(WIN32)
set(BOOTSTRAP_CMD bootstrap.bat)
set(B2_CMD b2 -j${N_CORES})
endif()
SET(BOOTSTRAP_CMD sh bootstrap.sh)
SET(B2_CMD ./b2 -j${N_CORES})
IF(WIN32)
SET(BOOTSTRAP_CMD bootstrap.bat)
SET(B2_CMD b2 -j${N_CORES})
ENDIF()
execute_process(
EXECUTE_PROCESS(
COMMAND ${BOOTSTRAP_CMD}
WORKING_DIRECTORY ${BOOST_LOCAL_PATH}
RESULT_VARIABLE rv
)
if(NOT rv STREQUAL "0")
message("Boost build: bootstrap: ${rv}")
endif()
IF(NOT rv STREQUAL "0")
MESSAGE("Boost build: bootstrap: ${rv}")
ENDIF()
execute_process(
EXECUTE_PROCESS(
COMMAND ${B2_CMD} headers
WORKING_DIRECTORY ${BOOST_LOCAL_PATH}
RESULT_VARIABLE rv
)
if(NOT rv STREQUAL "0")
message("Boost build: b2 headers: ${rv}")
endif()
IF(NOT rv STREQUAL "0")
MESSAGE("Boost build: b2 headers: ${rv}")
ENDIF()
set(VARIANT release)
if(${CMAKE_BUILD_TYPE} STREQUAL "Debug")
set(VARIANT debug)
endif()
SET(VARIANT release)
IF(${CMAKE_BUILD_TYPE} STREQUAL "Debug")
SET(VARIANT debug)
ENDIF()
execute_process(
EXECUTE_PROCESS(
COMMAND ${B2_CMD} -q cxxflags=-fPIC --layout=system variant=${VARIANT} link=${DEPENDENCIES_LINK_TYPE} address-model=64 --with-system --with-serialization --with-random
WORKING_DIRECTORY ${BOOST_LOCAL_PATH}
RESULT_VARIABLE rv
)
if(NOT rv STREQUAL "0")
message("Boost build: b2: ${rv}")
endif()
IF(NOT rv STREQUAL "0")
MESSAGE("Boost build: b2: ${rv}")
ENDIF()
find_package(
FIND_PACKAGE(
Boost
COMPONENTS
system
serialization
random
system
serialization
random
)
if(NOT Boost_FOUND)
message(FATAL_ERROR "Boost was not downloaded successfully!")
endif()
IF(NOT Boost_FOUND)
MESSAGE(FATAL_ERROR "Boost was not downloaded successfully!")
ENDIF()
message("DownloadExprtk starting...")
MESSAGE("DownloadExprtk starting...")
set(EXPRTK_LOCAL_PATH ${ROOT_DIR}/external_dependencies/exprtk)
SET(EXPRTK_LOCAL_PATH ${ROOT_DIR}/external_dependencies/exprtk)
include(FetchContent)
INCLUDE(FetchContent)
###################
# Download exprtk #
###################
FetchContent_Declare(
FETCHCONTENT_DECLARE(
exprtk
SOURCE_DIR ${EXPRTK_LOCAL_PATH}
GIT_REPOSITORY https://github.com/ArashPartow/exprtk.git
)
set(FETCHCONTENT_QUIET FALSE)
SET(FETCHCONTENT_QUIET FALSE)
FetchContent_Populate(exprtk)
FETCHCONTENT_POPULATE(exprtk)
find_package(Exprtk)
FIND_PACKAGE(Exprtk)
if(NOT EXPRTK_FOUND)
message(FATAL_ERROR "Exprtk was not downloaded successfully!")
endif()
IF(NOT EXPRTK_FOUND)
MESSAGE(FATAL_ERROR "Exprtk was not downloaded successfully!")
ENDIF()