From 27323ee71aeba9c092a603d59c68a3cab894a467 Mon Sep 17 00:00:00 2001 From: Isaak Lux Date: Tue, 25 Nov 2025 16:17:43 +0100 Subject: [PATCH 1/2] Created Dockerfile for the Image & Container, uncomment lines in main.cpp and add CMakeList.txt --- Dockerfile | 22 ++++++++++++++++++++++ README.md | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ main.cpp | 52 ++++++++++++++++++++++++++-------------------------- 3 files changed, 100 insertions(+), 26 deletions(-) create mode 100644 Dockerfile diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..5a999b3 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,22 @@ +FROM ubuntu:24.04 + +# Dependencies +RUN apt-get update +RUN apt install -y build-essential +RUN apt install -y cmake +RUN apt install -y unzip +RUN apt install -y wget +RUN apt install -y vim +RUN apt install -y libboost-all-dev +Run apt install -y libdeal.ii-dev + +# Yaml +Run wget https://github.com/jbeder/yaml-cpp/archive/refs/tags/yaml-cpp-0.6.3.zip +Run unzip yaml-cpp-0.6.3.zip +RUN cd yaml-cpp-yaml-cpp-0.6.3 && mkdir build && cd build && cmake .. && make && make install +ENV LD_LIBRARY_PATH = /usr/local/bin + +WORKDIR mnt/host + +# Execute default command +#CMD ["/bin/bash"] \ No newline at end of file diff --git a/README.md b/README.md index 9e27f1f..f782241 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,55 @@ # Let's Fight With CMake, Docker, and Some Dependencies Repository for the [CMake exercise](https://github.com/Simulation-Software-Engineering/Lecture-Material/blob/main/03_building_and_packaging/cmake_exercise.md). + +# Instructions + +The imageName has to be chosen! ("cmakeFight" could be a fitting name) + +1. Build the image via (getting all dependencies will take some time) +```shell +docker buildx build -t . +``` + +2. Run the container + +```shell +docker run -it --mount type=bind,src=.,dst=/mnt/host/cmake-exercise +``` + +3. Change directory into the repo + +```shell +cd cmake-exercise +``` + +4. Run the shell script (build folder should not exist beforehand!) + +```shell +./build_and_run.sh +``` + +Expected output: + +```markdown +Let's fight with CMake, Docker, and some dependencies! + +Solve Poisson problem with FEM using deal.II +FEM results available in `solution.vtk`. Try visualizing with Paraview. + +Modify a flat set using boost container +Elements in s1: 1 2 3 4 + +Inspect the current directory using boost filesystem +"." is a directory containing: + "CMakeCache.txt" + "CMakeFiles" + "Makefile" + "cmake_install.cmake" + "main" + "solution.vtk" + +Parse some yaml file with yaml-cpp + ../yamlParser/config.yml +Version: 1.2.3 +``` \ No newline at end of file diff --git a/main.cpp b/main.cpp index 7588360..08bc4a9 100644 --- a/main.cpp +++ b/main.cpp @@ -1,39 +1,39 @@ -//#include "fem/fem.hpp" -//#include "flatset/flatset.hpp" -//#include "filesystem/filesystem.hpp" -//#include "yamlParser/yamlParser.hpp" +#include "fem/fem.hpp" +#include "flatset/flatset.hpp" +#include "filesystem/filesystem.hpp" +#include "yamlParser/yamlParser.hpp" #include int main(int argc, char *argv[]) { std::cout << "Let's fight with CMake, Docker, and some dependencies!" << std::endl << std::endl; - //std::cout << "Solve Poisson problem with FEM using deal.II" << std::endl; - //Fem fem; - //fem.run(); - //std::cout << std::endl; + std::cout << "Solve Poisson problem with FEM using deal.II" << std::endl; + Fem fem; + fem.run(); + std::cout << std::endl; - //std::cout << "Modify a flat set using boost container" << std::endl; - //modifyAndPrintSets(); - //std::cout << std::endl; + std::cout << "Modify a flat set using boost container" << std::endl; + modifyAndPrintSets(); + std::cout << std::endl; - //std::cout << "Inspect the current directory using boost filesystem" << std::endl; - //inspectDirectory(); - //std::cout << std::endl; + std::cout << "Inspect the current directory using boost filesystem" << std::endl; + inspectDirectory(); + std::cout << std::endl; - //if ( argc == 2 ) - //{ - // const std::string yamlFile( argv[1] ); - // std::cout << "Parse some yaml file with yaml-cpp" << std::endl; - // std::cout << " " << yamlFile << std::endl; - // parseConfig( yamlFile ); - //} - //else - //{ - // std::cout << "To parse a yaml file please specify file on command line" << std::endl; - // std::cout << " ./main YAMLFILE" << std::endl; - //} + if ( argc == 2 ) + { + const std::string yamlFile( argv[1] ); + std::cout << "Parse some yaml file with yaml-cpp" << std::endl; + std::cout << " " << yamlFile << std::endl; + parseConfig( yamlFile ); + } + else + { + std::cout << "To parse a yaml file please specify file on command line" << std::endl; + std::cout << " ./main YAMLFILE" << std::endl; + } return 0; } From 6aa7996bd2acf6655f6bdd8c8471545e801399d9 Mon Sep 17 00:00:00 2001 From: Isaak Lux Date: Wed, 26 Nov 2025 07:57:53 +0100 Subject: [PATCH 2/2] Actually add CMakeList.txt --- CMakeLists.txt | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..f8eb6d8 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,15 @@ +cmake_minimum_required(VERSION "3.12") + +project("main") + +find_package(Boost REQUIRED COMPONENTS filesystem) +find_package(deal.II REQUIRED) +find_package(yaml-cpp REQUIRED) + +deal_ii_initialize_cached_variables() + +add_executable(main main.cpp filesystem/filesystem.cpp fem/fem.cpp flatset/flatset.cpp yamlParser/yamlParser.cpp) + +deal_ii_setup_target(main) + +target_link_libraries(main Boost::filesystem yaml-cpp) \ No newline at end of file