diff --git a/CMake/FindHLIBPRO.cmake b/CMake/FindHLIBPRO.cmake
deleted file mode 100644
index b2c6a974176946f8c8e2d4db8cbfd19dde3a909b..0000000000000000000000000000000000000000
--- a/CMake/FindHLIBPRO.cmake
+++ /dev/null
@@ -1,42 +0,0 @@
-# HLIBPRO
-if("$ENV{HLIBPRO_ROOT}" AND (NOT HLIBPRO_ROOT))
-    set(HLIBPRO_ROOT $ENV{HLIBPRO_ROOT})
-endif()
-set(HLIBPRO_ROOT "${HLIBPRO_ROOT}" CACHE PATH "HLIBPRO prefix")
-find_path(HLIBPRO_INCLUDE_DIRS NAMES hlib-c.h PATHS "${HLIBPRO_ROOT}" PATH_SUFFIXES include)
-find_library(HLIBPRO_LIBRARIES NAMES hpro HINTS "${HLIBPRO_ROOT}" PATH_SUFFIXES lib)
-include(FindPackageHandleStandardArgs)
-find_package_handle_standard_args(HLIBPRO HLIBPRO_INCLUDE_DIRS HLIBPRO_LIBRARIES)
-
-if(HLIBPRO_FOUND)
-
-  # BOOST
-  find_package(Boost COMPONENTS filesystem iostreams system program_options REQUIRED)
-  list(APPEND HLIBPRO_LIBRARIES ${Boost_LIBRARIES} )
-  # HDF5
-  find_package(HDF5 COMPONENTS CXX)
-  if (HDF5_FOUND)
-    list(APPEND HLIBPRO_LIBRARIES ${HDF5_LIBRARIES} )
-  endif()
-  # TBB
-  find_library(TBB_LIBRARIES NAMES tbb HINTS "${HLIBPRO_ROOT}/aux" PATH_SUFFIXES lib)
-  if (TBB_LIBRARIES)
-    list(APPEND HLIBPRO_LIBRARIES ${TBB_LIBRARIES} )
-  endif()
-  # GSL
-  find_package(GSL REQUIRED)
-  if (GSL_FOUND)
-    list(APPEND HLIBPRO_LIBRARIES ${GSL_LIBRARIES} )
-  endif()
-  # FFTW3
-  find_library(FFTW_LIBRARIES NAMES fftw3 HINTS "${HLIBPRO_ROOT}/aux" PATH_SUFFIXES lib)
-  if (FFTW_LIBRARIES)
-    list(APPEND HLIBPRO_LIBRARIES ${FFTW_LIBRARIES} )
-  endif()
-  # METIS
-  find_library(METIS_LIBRARIES NAMES metis HINTS "${HLIBPRO_ROOT}/aux" PATH_SUFFIXES lib)
-  if (METIS_LIBRARIES)
-    list(APPEND HLIBPRO_LIBRARIES ${METIS_LIBRARIES} )
-  endif()
-
-endif(HLIBPRO_FOUND)
diff --git a/CMake/FindMKL.cmake b/CMake/FindMKL.cmake
deleted file mode 100644
index ef796a19928bb9a62075d75bedea3482275da8e2..0000000000000000000000000000000000000000
--- a/CMake/FindMKL.cmake
+++ /dev/null
@@ -1,118 +0,0 @@
-# - Find MKL installation.
-# Try to find MKL. The following values are defined
-#  MKL_FOUND   - True if MKL has been found in MKL
-#  MKL_BLAS_FOUND   - True if blas has been found in MKL (should be always ok)
-#  MKL_CBLAS_FOUND   - True if cblas has been found in MKL (OK for >=10.2)
-#  MKL_LAPACKE_FOUND - True if lapacke has been found in MKL (OK for >=10.3)
-#  MKL_BLACS_FOUND   - True if blacs has been found in libraries listed in ${MKL_LIBRARIES}
-#  MKL_SCALAPACK_FOUND   - True if scalapack has been found in libraries listed in ${MKL_LIBRARIES}
-#  MKL_DEFINITIONS  - list of compilation definition -DFOO
-#  + many HAVE_XXX...
-
-#See http://software.intel.com/sites/products/mkl/MKL_Link_Line_Advisor.html
-
-#TODO add scalapack, sequential, ilp64, ...
-
-# Allow to skip MKL detection even if MKLROOT is set in the environment.
-option(MKL_DETECT "Try to detect and use MKL." ON)
-
-if(MKL_DETECT)
-    find_path(MKL_INCLUDE_DIRS NAMES mkl.h HINTS
-        $ENV{MKLROOT}/include
-        ${MKLROOT}/include)
-    option(MKL_STATIC "Link with MKL statically." OFF)
-
-    if( CMAKE_SIZEOF_VOID_P EQUAL 8 )
-        set(MKL_ARCH "intel64")
-        set(MKL_IL "lp64")
-    else( CMAKE_SIZEOF_VOID_P EQUAL 8 )
-        set(MKL_ARCH "ia32")
-        set(MKL_IL "c")
-    endif( CMAKE_SIZEOF_VOID_P EQUAL 8 )
-
-    find_library(MKL_RT_LIBRARY NAMES mkl_rt HINTS
-        $ENV{MKLROOT}/lib
-        ${MKLROOT}/lib
-        PATH_SUFFIXES ${MKL_ARCH})
-
-    get_filename_component(MKL_LIBRARY_DIR ${MKL_RT_LIBRARY} PATH)
-
-    include(CheckCXXCompilerFlag)
-    check_cxx_compiler_flag("-mkl=parallel" MKL_PARALLEL_COMPILER_FLAG)
-
-    if(MINGW)
-        set(MKL_LINKER_FLAGS ${MKL_RT_LIBRARY})
-    elseif(WIN32)
-        if(MKL_STATIC)
-            set(MKL_LINKER_FLAGS "mkl_intel_${MKL_IL}.lib mkl_core.lib mkl_intel_thread.lib")
-            set(MKL_COMPILE_FLAGS "")
-        else()
-            set(MKL_LINKER_FLAGS "mkl_intel_${MKL_IL}_dll.lib mkl_core_dll.lib mkl_intel_thread_dll.lib")
-            set(MKL_COMPILE_FLAGS "/Qmkl:parallel")
-        endif()
-    else()
-        if(MKL_STATIC)
-            if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
-                set(MKL_LINKER_FLAGS "-Wl,--start-group ${MKL_LIBRARY_DIR}/libmkl_intel_${MKL_IL}.a ${MKL_LIBRARY_DIR}/libmkl_core.a ${MKL_LIBRARY_DIR}/libmkl_gnu_thread.a -Wl,--end-group -ldl -lm")
-                set(MKL_COMPILE_FLAGS "")
-            else()
-                set(MKL_LINKER_FLAGS "-Wl,--start-group ${MKL_LIBRARY_DIR}/libmkl_intel_${MKL_IL}.a ${MKL_LIBRARY_DIR}/libmkl_core.a ${MKL_LIBRARY_DIR}/libmkl_intel_thread.a -Wl,--end-group")
-                set(MKL_COMPILE_FLAGS "")
-            endif()
-        else()
-            if(MKL_PARALLEL_COMPILER_FLAG)
-                set(MKL_LINKER_FLAGS "-mkl=parallel")
-                set(MKL_COMPILE_FLAGS "-mkl=parallel")
-            elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
-                find_library(_lib1 mkl_intel_${MKL_IL} PATHS ${MKL_LIBRARY_DIR})
-                find_library(_lib2 mkl_core PATHS ${MKL_LIBRARY_DIR})
-                find_library(_lib3 mkl_gnu_thread PATHS ${MKL_LIBRARY_DIR})
-                set(MKL_LINKER_FLAGS ${_lib1} ${_lib2} ${_lib3} m)
-                set(MKL_COMPILE_FLAGS "")
-            endif()
-        endif()
-    endif()
-
-    include(FindPackageHandleStandardArgs)
-    find_package_handle_standard_args(MKL DEFAULT_MSG MKL_INCLUDE_DIRS)
-
-    set(MKL_CBLAS_FOUND FALSE)
-    set(MKL_BLAS_FOUND FALSE)
-endif(MKL_DETECT)
-
-if (MKL_FOUND)
-  include(CMakePushCheckState)
-  cmake_push_check_state()
-  set(CMAKE_REQUIRED_FLAGS ${MKL_COMPILE_FLAGS})
-  set(CMAKE_REQUIRED_INCLUDES ${MKL_INCLUDE_DIRS})
-  # We want MKL link flags to be added at the end of the command line
-  # else static compilation will fail, so we use CMAKE_REQUIRED_LIBRARIES
-  # instead of CMAKE_REQUIRED_FLAGS
-  list(APPEND CMAKE_REQUIRED_LIBRARIES ${MKL_LINKER_FLAGS})
-  include(CheckIncludeFile)
-  check_include_file("mkl_cblas.h"   HAVE_MKL_CBLAS_H)
-  check_include_file("mkl.h"         HAVE_MKL_H)
-
-  include(CheckFunctionExists)
-  check_function_exists("dgemm"               HAVE_DGEMM)
-  check_function_exists("cblas_dgemm"         HAVE_CBLAS_DGEMM)
-  check_function_exists("zgemm3m"             HAVE_ZGEMM3M)
-  check_function_exists("mkl_set_num_threads" HAVE_MKL_SET_NUM_THREADS)
-  check_function_exists("mkl_get_max_threads" HAVE_MKL_GET_MAX_THREADS)
-  check_function_exists("mkl_simatcopy"       HAVE_MKL_IMATCOPY)
-
-  if (HAVE_MKL_CBLAS_H AND HAVE_CBLAS_DGEMM)
-    set(MKL_CBLAS_FOUND TRUE)
-  endif()
-
-  if (HAVE_DGEMM)
-    set(MKL_BLAS_FOUND TRUE)
-  endif()
-
-  set(MKL_DEFINITIONS)
-  foreach(arg_ HAVE_MKL_H HAVE_MKL_CBLAS_H)
-    if(${${arg_}})
-      list(APPEND MKL_DEFINITIONS ${arg_})
-    endif()
-  endforeach(arg_ ${ARGN})
-endif (MKL_FOUND)
diff --git a/CMake/GitVersion.cmake b/CMake/GitVersion.cmake
deleted file mode 100644
index 72d827d15d97606e2d58a8ef96d0ffd424e8aed6..0000000000000000000000000000000000000000
--- a/CMake/GitVersion.cmake
+++ /dev/null
@@ -1,24 +0,0 @@
-# Set label_VERSION to the git version
-
-function(git_version label default_version)
-    option(${label}_GIT_VERSION "Get the version string from git describe" ON)
-    if(${label}_GIT_VERSION)
-        find_package(Git)
-        if(GIT_FOUND)
-            execute_process(COMMAND "${GIT_EXECUTABLE}"
-              describe --dirty=-dirty --always --tags
-	      WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
-              OUTPUT_VARIABLE _GIT_DESCRIBE ERROR_QUIET)
-            if(_GIT_DESCRIBE)
-                string(STRIP ${_GIT_DESCRIBE} ${label}_VERSION)
-                # Remove nonnumeric prefix, if any
-                STRING(REGEX REPLACE "^[^0-9]+" "" ${label}_STRIPPED_VERSION ${${label}_VERSION})
-                set(${label}_VERSION ${${label}_STRIPPED_VERSION} PARENT_SCOPE)
-            endif()
-        endif()
-    endif()
-    if(NOT ${label}_VERSION)
-        set(${label}_VERSION ${default_version} PARENT_SCOPE)
-    endif()
-    message(STATUS "Version string is ${${label}_VERSION}")
-endfunction()
diff --git a/CMake/IntelMPI.cmake b/CMake/IntelMPI.cmake
deleted file mode 100644
index 61504540c166be09fe2b86c9b26b364dde9f46c4..0000000000000000000000000000000000000000
--- a/CMake/IntelMPI.cmake
+++ /dev/null
@@ -1,40 +0,0 @@
-# To be included before find_package(MPI) so that
-# Intel MPI is propery detected from I_MPI_ROOT
-
-if(WIN32)
-    option(USE_INTEL_MPI "Use Intel MPI if available" ON)
-else()
-    option(USE_INTEL_MPI "Use Intel MPI if available" OFF)
-endif()
-
-if(USE_INTEL_MPI)
-    # mpicc option for using multithread MPI library
-    # This is not needed for hmat for now
-    #set(ENV{I_MPI_LINK} "opt_mt")
-
-    if( CMAKE_SIZEOF_VOID_P EQUAL 8 )
-        set(MPI_ARCH "intel64")
-    else( CMAKE_SIZEOF_VOID_P EQUAL 8 )
-        set(MPI_ARCH "ia32")
-    endif( CMAKE_SIZEOF_VOID_P EQUAL 8 )
-
-    find_program(MPI_C_COMPILER NAMES mpiicc mpiicc.bat
-        HINTS $ENV{I_MPI_ROOT}/${MPI_ARCH} $ENV{I_MPI_ROOT}/${MPI_ARCH}/bin
-        ${I_MPI_ROOT}/${MPI_ARCH} ${I_MPI_ROOT}/${MPI_ARCH}/bin
-    )
-
-    set(MPI_CXX_COMPILER ${MPI_C_COMPILER})
-
-    if(WIN32)
-        find_path(MPI_INCLUDE_PATH NAMES mpi.h
-            HINTS $ENV{I_MPI_ROOT}/${MPI_ARCH}/include ${I_MPI_ROOT}/${MPI_ARCH}/include
-            NO_DEFAULT_PATH)
-
-        set(MPI_LIB_SUFFIX "" CACHE STRING "Set to d to link against Debug libraries")
-        find_library(MPI_C_LIBRARIES NAMES impi${MPI_LIB_SUFFIX}.lib
-            HINTS $ENV{I_MPI_ROOT}/${MPI_ARCH}/lib ${I_MPI_ROOT}/${MPI_ARCH}/lib)
-        set(MPI_CXX_LIBRARIES ${MPI_C_LIBRARIES})
-    else()
-        # Let FindMPI do the job
-    endif()
-endif()
diff --git a/CMake/config.h.in b/CMake/config.h.in
deleted file mode 100644
index 6da562cffd334e795b02510ae31d43a95c814036..0000000000000000000000000000000000000000
--- a/CMake/config.h.in
+++ /dev/null
@@ -1,72 +0,0 @@
-/** MPF Configuration header file prototype for CMake
-*   M. Pallud
-*   02/05/2011
-*
-*   Mimic autotools configure header file	
-*/
-
-/* ======================================
-*  VERSION & PACKAGE NAMES
-*  ====================================== */
-
-/* Name of package */
-#define PACKAGE "@PROJECT_NAME@"
-
-/* Define to the address where bug reports for this package should be sent. */
-#define PACKAGE_BUGREPORT "https://imacs.polytechnique.fr/bugzilla/enter_bug.cgi"
-
-/* Define to the full name of this package. */
-#define PACKAGE_NAME "@PROJECT_NAME@"
-
-/* Define to the full name and version of this package. */
-#define PACKAGE_STRING "@PROJECT_NAME@ ${@PROJECT_NAME_UPPER@_VERSION}"
-
-/* Define to the one symbol short name of this package. */
-#define PACKAGE_TARNAME "@PROJECT_NAME@"
-
-/* Define to the home page for this package. */
-#define PACKAGE_URL ""
-
-/* Define to the version of this package. */
-#define PACKAGE_VERSION "${@PROJECT_NAME_UPPER@_VERSION}"
-
-/* Version number of package */
-#define VERSION "${@PROJECT_NAME_UPPER@_VERSION}"
-
-#define __COMMITID__ "${@PROJECT_NAME_UPPER@_COMMITID_VERSION}"
-
-/* ======================================
-*  SYSTEM LIBRARIES
-*  ====================================== */
-
-/* Define to 1 if you have the `m' library (-lm). */
-#cmakedefine HAVE_LIBM
-
-/* Define to 1 if you have the `rt' library (-lrt). */
-#cmakedefine HAVE_LIBRT
-
-/* Define to 1 if you have the <mach/mach_time.h> header file. */
-#cmakedefine HAVE_MACH_MACH_TIME_H
-
-/* Define to 1 if you have the <sys/time.h> header file. */
-#cmakedefine HAVE_SYS_TIME_H
-
-/* Define to 1 if you have the <time.h> header file. */
-#cmakedefine HAVE_TIME_H
-
-/* Define to 1 if you have the <stdint.h> header file. */
-#cmakedefine HAVE_STDINT_H
-
-/* Define to 1 if you have the <sys/types.h> header file. */
-#cmakedefine HAVE_SYS_TYPES_H
-
-/* Define to 1 if you have the <sys/resource.h> header file. */
-#cmakedefine HAVE_SYS_RESOURCE_H
-
-/* ======================================
-*  OTHER LIBRARIES
-*  ====================================== */
-
-#cmakedefine HAVE_HMAT
-#cmakedefine HAVE_CHAMELEON
-#cmakedefine HAVE_HLIBPRO
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 0f187ceb21e68302b1c4e8256e9da0b75a6e6777..c60c35f98275c988e4c88a29d852ba519aea0490 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,145 +1,112 @@
-# Main CMakeLists.txt cmake file for hmat-comparison test project
-#
-
 cmake_minimum_required(VERSION 2.8.12)
 
-# Set CMAKE_BUILD_TYPE to Release by default.
-# Must be done before calling project()
+# Consider 'Release' build type by default.
 if(CMAKE_BUILD_TYPE MATCHES "^CMAKE_BUILD_TYPE$")
-    set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build, options are: None(CMAKE_C_FLAGS used) Debug Release RelWithDebInfo MinSizeRel." FORCE)
-    set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "" Release Debug RelWithDebInfo MinSizeRel)
+  set(
+    CMAKE_BUILD_TYPE "Release" CACHE STRING
+    "One of: None(CMAKE_C_FLAGS used) Debug Release RelWithDebInfo MinSizeRel."
+    FORCE
+  )
+  set_property(
+    CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS ""
+    Release Debug RelWithDebInfo MinSizeRel
+  )
 endif()
 
-project(test_fembem C CXX)
-string(TOUPPER ${PROJECT_NAME} PROJECT_NAME_UPPER)
-list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/CMake")
+# Declare the minisolver project.
+project(minisolver C CXX)
+
+# Set up include directories.
 include_directories(${PROJECT_BINARY_DIR};${PROJECT_SOURCE_DIR}/include)
+
+# Add selected definitions.
 add_definitions(-DHAVE_CONFIG_H)
 add_definitions(-D_GNU_SOURCE)
-#On windows to supress some very verbose compiler warnings
-if (MSVC)
-    add_definitions(-D_CRT_SECURE_NO_WARNINGS)
-endif (MSVC)
-
-# ============================
-# Version & Subversion | Git
-# ============================
-include(GitVersion)
-git_version(TEST_FEMBEM 0.1)
-message(STATUS "Current revision is ${TEST_FEMBEM_VERSION}")
-
-# ============================
-# Installation paths
-# ============================
-# Offer the user the choice of overriding the installation directories
-set(INSTALL_BIN_DIR bin CACHE PATH "Installation directory for executables")
-
-# Make relative paths absolute (needed later on)
-if(NOT IS_ABSOLUTE "${INSTALL_BIN_DIR}")
-  set(INSTALL_BIN_DIR "${CMAKE_INSTALL_PREFIX}/${INSTALL_BIN_DIR}")
-endif()
 
-# ========================
-# C
-# ========================
+# Set project's version number.
+set(minisolver_VERSION 0.1)
+
+# Define installation path for executables.
+set(INSTALL_BIN_DIR "${CMAKE_INSTALL_PREFIX}/bin")
+
+# Verify the availability of selected C headers.
 include(CheckIncludeFile)
 CHECK_INCLUDE_FILE("sys/time.h" HAVE_SYS_TIME_H)
 CHECK_INCLUDE_FILE("time.h" HAVE_TIME_H)
 CHECK_INCLUDE_FILE("stdint.h" HAVE_STDINT_H)
 CHECK_INCLUDE_FILE("sys/types.h" HAVE_SYS_TYPES_H)
 CHECK_INCLUDE_FILE("sys/resource.h" HAVE_SYS_RESOURCE_H)
-CHECK_INCLUDE_FILE("mach/mach_time.h" HAVE_MACH_MACH_TIME_H)
-
-# ========================
-# SYSTEM & EXTERNAL LIBS
-# ========================
-include(CheckLibraryExists)
-CHECK_LIBRARY_EXISTS("m" sqrt "" HAVE_LIBM)
-if(HAVE_LIBM)
-    set(EXTRA_LIBS m;${EXTRA_LIBS})
-    set(CMAKE_REQUIRED_LIBRARIES m;${CMAKE_REQUIRED_LIBRARIES})
-endif()
-CHECK_LIBRARY_EXISTS("rt" clock_gettime "" HAVE_LIBRT)
-if(HAVE_LIBRT)
-    set(CMAKE_REQUIRED_LIBRARIES rt;${CMAKE_REQUIRED_LIBRARIES})
-    set(RT_LIBRARY rt)
-endif()
 
-# ========================
-# HMAT-OSS
-# ========================
-if (NOT TARGET HMAT::hmat)
+# Find required dependencies:
+#   - math library (-lm),
+find_library(HAVE_LIBM m REQUIRED)
+#   - HMAT-OSS,
+if(NOT TARGET HMAT::hmat)
   find_package(HMAT REQUIRED)
   if(HMAT_FOUND)
-    message(STATUS "HMAT: Found")
     set(HAVE_HMAT TRUE)
   endif(HMAT_FOUND)
-else()
-  set(HAVE_HMAT TRUE)
 endif()
-
-# ========================
-# Lib M
-# ========================
-find_library(M_LIBRARIES m)
-
+#   - POSIX threads (-lpthread).
 find_package(Threads REQUIRED)
 
-# ========================
-# Warning flags
-# ========================
+# Find optional dependencies:
+#   - real-time library (-lrt)
+find_library(HAVE_LIBRT rt)
+
+# Configure compilation flags.
 include(CheckCCompilerFlag)
-check_c_compiler_flag("-Werror -Wall -Wno-unused-result -Wno-sign-compare" HAVE_GCC_WARNING_FLAGS)
+check_c_compiler_flag(
+  "-Werror -Wall -Wno-unused-result -Wno-sign-compare" HAVE_GCC_WARNING_FLAGS
+)
 if(HAVE_GCC_WARNING_FLAGS)
-  SET(CMAKE_C_FLAGS "-Werror -Wall -Wno-unused-result -Wno-sign-compare  ${CMAKE_C_FLAGS}")
+  SET(
+    CMAKE_C_FLAGS
+    "-Werror -Wall -Wno-unused-result -Wno-sign-compare ${CMAKE_C_FLAGS}"
+  )
 endif()
 
-# ========================
-# Configuration file
-# ========================
-configure_file("${PROJECT_SOURCE_DIR}/CMake/config.h.in" "${CMAKE_CURRENT_BINARY_DIR}/config.h" )
-
-# ============================
-# Generation of executables
-# ============================
-file(GLOB_RECURSE TEST_SOURCES RELATIVE ${PROJECT_SOURCE_DIR} src/*.c include/*.h)
-add_executable(test_FEMBEM ${TEST_SOURCES})
-
+# Configure an input configuration file.
+configure_file(
+  "${PROJECT_SOURCE_DIR}/config.h.in" "${CMAKE_CURRENT_BINARY_DIR}/config.h"
+)
+
+# Configure executables:
+#   - recursively discover source and include files,
+file(
+  GLOB_RECURSE minisolver_SOURCES RELATIVE ${PROJECT_SOURCE_DIR}
+  src/*.c include/*.h
+)
+#   - use them to define the project's executable.
+add_executable(minisolver ${minisolver_SOURCES})
+
+# Link with external libraries (package's dependencies).
 if(HAVE_HMAT)
-  target_link_libraries( test_FEMBEM PUBLIC HMAT::hmat )
+  target_link_libraries(minisolver PUBLIC HMAT::hmat)
 endif()
 
-if ( M_LIBRARIES )
-  target_link_libraries(test_FEMBEM PUBLIC ${M_LIBRARIES} )
+if(HAVE_LIBM)
+  target_link_libraries(minisolver PUBLIC ${HAVE_LIBM})
 endif()
 
-if(CMAKE_THREAD_LIBS_INIT)
-  target_link_libraries(test_FEMBEM PUBLIC ${CMAKE_THREAD_LIBS_INIT})
+if(HAVE_LIBRT)
+  target_link_libraries(minisolver PUBLIC ${HAVE_LIBRT})
 endif()
 
-# ========================
-# INSTALL
-# ========================
-install(TARGETS test_FEMBEM RUNTIME DESTINATION "${INSTALL_BIN_DIR}" COMPONENT Runtime)
+if(CMAKE_THREAD_LIBS_INIT)
+  target_link_libraries(minisolver PUBLIC ${CMAKE_THREAD_LIBS_INIT})
+endif()
 
-# To install, for example, MSVC runtime libraries:
-include (InstallRequiredSystemLibraries)
+# Configure the installation target.
+install(
+  TARGETS minisolver RUNTIME DESTINATION "${INSTALL_BIN_DIR}" COMPONENT Runtime
+)
 
-# ========================
-# CTEST
-# ========================
+# Configure the tests target.
 enable_testing()
-if(HMAT_FOUND)
-  add_test(NAME BEMsolveH_Z COMMAND test_FEMBEM -nbpts 800 -z --hmat -solvehmat )
-  add_test(NAME BEMgemvH_D COMMAND test_FEMBEM -nbpts 1000 -d --hmat -gemvhmat )
-  add_test(NAME BEMinverseH_S COMMAND test_FEMBEM -nbpts 600 -s --hmat -inversehmat --nosym)
-  add_test(NAME FEMsolveH_C COMMAND test_FEMBEM --fem -nbpts 2500 -c --hmat -solvehmat )
-  add_test(NAME FEMgemvH_S COMMAND test_FEMBEM --fem -nbpts 4000 -s --hmat -gemvhmat )
-  add_test(NAME FEMinverseH_Z COMMAND test_FEMBEM --fem -nbpts 1000 -z --hmat -inversehmat --nosym)
-endif(HMAT_FOUND)
-
-# ========================
-# FINAL LOG
-# ========================
+add_test(NAME minisolver_single COMMAND minisolver --size 1600)
+add_test(NAME minisolver_batch COMMAND minisolver --batch-input ../tests.csv)
+
+# Show final configuration report.
 include(FeatureSummary)
 feature_summary(WHAT ALL)
diff --git a/config.h.in b/config.h.in
new file mode 100644
index 0000000000000000000000000000000000000000..c6b949ad7f887eb1c602ca8da1d81c883438ea49
--- /dev/null
+++ b/config.h.in
@@ -0,0 +1,42 @@
+/* PACKAGE INFORMATION */
+
+/* Name of package */
+#define PACKAGE "@PROJECT_NAME@"
+
+/* Define to the full name of this package. */
+#define PACKAGE_NAME "@PROJECT_NAME@"
+
+/* Define to the full name and version of this package. */
+#define PACKAGE_STRING "@PROJECT_NAME@ ${@PROJECT_NAME@_VERSION}"
+
+/* Define to the home page for this package. */
+#define PACKAGE_URL "https://gitlab.inria.fr/tutorial-guix-hpc-workshop/software/minisolver"
+
+/* Define to the version of this package. */
+#define PACKAGE_VERSION "${@PROJECT_NAME@_VERSION}"
+
+/* SYSTEM LIBRARIES */
+
+/* Define to 1 if you have the `m' library (-lm). */
+#cmakedefine HAVE_LIBM
+
+/* Define to 1 if you have the `rt' library (-lrt). */
+#cmakedefine HAVE_LIBRT
+
+/* Define to 1 if you have the <mach/mach_time.h> header file. */
+#cmakedefine HAVE_MACH_MACH_TIME_H
+
+/* Define to 1 if you have the <sys/time.h> header file. */
+#cmakedefine HAVE_SYS_TIME_H
+
+/* Define to 1 if you have the <time.h> header file. */
+#cmakedefine HAVE_TIME_H
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#cmakedefine HAVE_STDINT_H
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#cmakedefine HAVE_SYS_TYPES_H
+
+/* Define to 1 if you have the <sys/resource.h> header file. */
+#cmakedefine HAVE_SYS_RESOURCE_H
diff --git a/tests.csv b/tests.csv
new file mode 100644
index 0000000000000000000000000000000000000000..9cf4608bcfd5a02aaec8f213516b11dbd988d129
--- /dev/null
+++ b/tests.csv
@@ -0,0 +1,3 @@
+1000,high
+2000,low
+3000,medium
\ No newline at end of file