Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:redwil:15.4
sparselizard
0001-Improve-cMake-and-docker-builds.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0001-Improve-cMake-and-docker-builds.patch of Package sparselizard
From 2b5518cd7526a58bbfc16496e5866ab69a53b70e Mon Sep 17 00:00:00 2001 From: Pascal Thibaudeau <pascal.thibaudeau@cea.fr> Date: Fri, 8 Oct 2021 09:38:12 +0200 Subject: [PATCH] Improve cMake and docker builds --- .github/workflows/compile.yaml | 53 +++++++++++++ .gitignore | 41 ++++++++++ CMakeLists.txt | 120 ++++++++++++++++++++++------- Dockerfile | 45 +++++++++++ Makefile | 72 ----------------- cMake/SetupBLAS.cmake | 47 ----------- cMake/SetupGMSH.cmake | 43 ----------- cMake/SetupMETIS.cmake | 47 ----------- cMake/SetupMPI.cmake | 49 ------------ cMake/SetupMUMPS.cmake | 47 ----------- cMake/SetupPETSC.cmake | 60 --------------- cMake/SetupSLEPC.cmake | 47 ----------- cMake/functions.cmake | 45 ----------- cmake/FindGMSH.cmake | 17 ++++ cmake/FindMETIS.cmake | 17 ++++ cmake/FindPETSC.cmake | 21 +++++ cmake/FindSLEPC.cmake | 25 ++++++ simulations/default/CMakeLists.txt | 8 +- src/CMakeLists.txt | 76 ------------------ 19 files changed, 316 insertions(+), 564 deletions(-) create mode 100644 .github/workflows/compile.yaml create mode 100644 Dockerfile delete mode 100755 Makefile delete mode 100644 cMake/SetupBLAS.cmake delete mode 100644 cMake/SetupGMSH.cmake delete mode 100644 cMake/SetupMETIS.cmake delete mode 100644 cMake/SetupMPI.cmake delete mode 100644 cMake/SetupMUMPS.cmake delete mode 100644 cMake/SetupPETSC.cmake delete mode 100644 cMake/SetupSLEPC.cmake delete mode 100644 cMake/functions.cmake create mode 100644 cmake/FindGMSH.cmake create mode 100644 cmake/FindMETIS.cmake create mode 100644 cmake/FindPETSC.cmake create mode 100644 cmake/FindSLEPC.cmake delete mode 100644 src/CMakeLists.txt diff --git a/.github/workflows/compile.yaml b/.github/workflows/compile.yaml new file mode 100644 index 00000000..c98181f9 --- /dev/null +++ b/.github/workflows/compile.yaml @@ -0,0 +1,53 @@ +name: Sparselizard Compilation + +on: [push] + +jobs: + Compilation-Actions: + runs-on: ubuntu-22.04 + + env: + CCACHE_COMPRESS: "true" + CCACHE_MAXSIZE: 500M + CC: gcc-12 + CXX: g++-12 + OMPI_CC: gcc-12 + OMPI_CXX: g++-12 + + steps: + - name: Check out repository code + uses: actions/checkout@v2 + - run: echo "The ${{ github.repository }} repository has been cloned to the runner." + - run: echo "The workflow is now ready to test the code on the runner." + + - name: install ccache + run: sudo apt-get install ccache + + - name: identify machine architecture + run: | + gcc -### -E -march=native - &> machine-type.txt + cat machine-type.txt + + - name: restore cache + uses: actions/cache@v2 + with: + path: ~/.ccache + key: ccache-${{ hashFiles('machine-type.txt') }}-${{ github.sha }} + restore-keys: ccache-${{ hashFiles('machine-type.txt') }}- + + - name: Install mandatory packages + run: sudo apt-get install -y libomp-dev ninja-build cmake libopenblas-dev libmetis-dev libopenmpi-dev libmumps-dev petsc-dev slepc-dev libgmsh-dev + + - name: build + run: | + export PATH="/usr/lib/ccache:$PATH" + mkdir build + cmake -G Ninja -S . -B build + cmake --build build -- -j $(getconf _NPROCESSORS_ONLN) + + - name: show ccache stats + run: | + ccache --show-stats + ccache --zero-stats + + - run: echo "🍏 This job's status is ${{ job.status }}." diff --git a/.gitignore b/.gitignore index 2630aa78..ffdca098 100644 --- a/.gitignore +++ b/.gitignore @@ -36,3 +36,44 @@ build/ # CCLS cache .ccls-cache/ +machine-type.txt + +CMakeLists.txt.user +CMakeCache.txt +CMakeFiles +CMakeScripts +Testing +Makefile +cmake_install.cmake +install_manifest.txt +compile_commands.json +CTestTestfile.cmake +_deps + +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk diff --git a/CMakeLists.txt b/CMakeLists.txt index aeeed1d0..90eed8bd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,43 +1,107 @@ # Thanks to S. Matsievskiy for bringing cmake to the project. -cmake_minimum_required(VERSION 3.0 FATAL_ERROR) +cmake_minimum_required(VERSION 3.23 FATAL_ERROR) project(Sparselizard LANGUAGES CXX) set(DEFAULT_BUILD_TYPE "Release") set(CMAKE_BUILD_TYPE "${DEFAULT_BUILD_TYPE}" CACHE STRING "Choose the type of build" FORCE) -set(PETSC_PATH "~/SLlibs/petsc" CACHE STRING "Provide the path to the petsc folder") -set(GMSH_PATH "~/SLlibs/gmsh" CACHE STRING "Provide the path to the gmsh folder") -set(MPI_PATH "" CACHE STRING "Provide the path to the mpi folder") - # Place library in build folder: set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) +SET(CMAKE_CXX_STANDARD 17) +SET(CMAKE_CXX_FLAGS_DEBUG "-g -Og -Wall -Wextra -Wpedantic") +SET(CMAKE_CXX_FLAGS_RELEASE "-O3") + +if(NOT BLA_VENDOR) + set(BLA_VENDOR CACHE STRING OpenBLAS) +endif() -# Default flags: -set(BLAS_FOUND NO) -set(GMSH_FOUND NO) -set(METIS_FOUND NO) -set(MPI_FOUND NO) -set(MUMPS_FOUND NO) -set(PETSC_FOUND NO) -set(SLEPC_FOUND NO) +if(NOT PETSC_DIR AND NOT(APPLE)) + set(PETSC_DIR CACHE STRING /usr/lib/petscdir) +endif() + +# Add cmake packages +list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") +list(APPEND CMAKE_PREFIX_PATH $<$<BOOL:${APPLE}>:/opt/homebrew/opt/openblas> ${PETSC_DIR}) # Installation definitions include(GNUInstallDirs) -# Aux functions -include(cMake/functions.cmake) -include(cMake/SetupBLAS.cmake) -include(cMake/SetupGMSH.cmake) -include(cMake/SetupMETIS.cmake) -include(cMake/SetupMPI.cmake) -include(cMake/SetupMUMPS.cmake) -include(cMake/SetupPETSC.cmake) -include(cMake/SetupSLEPC.cmake) - -# Add libsparselizard target -add_subdirectory(src) - -# Add simulations targets -add_subdirectory(simulations) +# this is not the cmake-official way but it's a lot easier +set(INCLUDE_DIRS + src + src/mesh + src/gausspoint + src/io + src/io/paraview + src/io/nastran + src/io/gmsh + src/field + src/resolution + src/geometry + src/expression + src/expression/operation + src/shapefunction + src/shapefunction/hierarchical + src/shapefunction/hierarchical/h1 + src/shapefunction/hierarchical/hcurl + src/shapefunction/lagrange + src/formulation +) +file(GLOB_RECURSE SRC_FILES "src/*.cpp") +file(GLOB_RECURSE SRC_HEADERS "src/*.h") +add_library(sparselizard SHARED ${SRC_FILES}) +# Note: the following would allow hierarchical install, but sparselizard acts as if it's flattened +# target_sources(sparselizard PUBLIC FILE_SET HEADERS FILES ${SRC_HEADERS} BASE_DIRS src) +target_precompile_headers(sparselizard PUBLIC ${SRC_HEADERS}) +target_include_directories(sparselizard PUBLIC ${INCLUDE_DIRS}) +set_target_properties(sparselizard PROPERTIES PUBLIC_HEADER "${SRC_HEADERS}") + +target_compile_options(sparselizard PUBLIC -fPIC -O3) + +find_package(OpenMP REQUIRED) +target_link_libraries(sparselizard PUBLIC OpenMP::OpenMP_CXX) + +find_package(MPI REQUIRED) +target_link_libraries(sparselizard PUBLIC MPI::MPI_CXX) + +find_package(BLAS REQUIRED) +target_link_libraries(sparselizard PUBLIC BLAS::BLAS) + +find_package(PETSC REQUIRED) +target_link_libraries(sparselizard PUBLIC PETSC::PETSC) + +find_package(SLEPC) +target_link_libraries(sparselizard PUBLIC SLEPC::SLEPC) + +find_package(GMSH) +if(GMSH_FOUND) + target_link_libraries(sparselizard PUBLIC GMSH::GMSH) + target_compile_definitions(sparselizard PRIVATE -DHAVE_GMSH) +endif() + +find_package(METIS) + +if(METIS_FOUND) + target_link_libraries(sparselizard PUBLIC METIS::METIS) + target_compile_definitions(sparselizard PRIVATE -DHAVE_METIS) +endif() + +target_link_libraries(sparselizard PUBLIC cmumps) +target_compile_definitions(sparselizard PRIVATE + -DHAVE_BLAS + -DHAVE_MPI + -DHAVE_MUMPS + -DHAVE_PETSC + -DHAVE_SLEPC +) + +install(TARGETS sparselizard LIBRARY PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_PREFIX}/include/sparselizard) + +set(BUILD_SIMULATIONS YES) + +if(BUILD_SIMULATIONS) + add_subdirectory(simulations) + message(STATUS "Building simulations") +endif() diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..c8c47138 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,45 @@ +FROM debian:testing-slim as build + +LABEL maintainer="pascal.thibaudeau@cea.fr" +LABEL version="0.2" +LABEL description="Sparselizard on docker. See https://github.com/pthibaud/dockerlizard" + +# Disable prompt during packages installation +ARG DEBIAN_FRONTEND=noninteractive + +# Update ubuntu software repository +# Install additional repository +RUN apt-get update && \ + apt-get -y upgrade && \ + apt-get -y dist-upgrade && \ + apt-get install -y apt-utils build-essential cmake \ + libopenblas-dev \ + libopenmpi-dev \ + libmumps-dev \ + libmetis-dev \ + petsc-dev \ + slepc-dev \ + libgmsh-dev \ + libomp-dev \ + ninja-build + +# Clean the installation +RUN apt-get clean + + +WORKDIR /sparselizard +COPY CMakeLists.txt . +COPY src src +COPY cmake cmake +COPY simulations simulations +RUN mkdir build +# Prepare compilation environment +RUN cmake -G Ninja -S . -B build +RUN cmake --build build -- -j 8 + +RUN mkdir -p /usr/local +RUN cmake --install build -v --prefix /usr/local + +# Install the library and headers; Put the env variables +# RUN make install +ENV LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib diff --git a/Makefile b/Makefile deleted file mode 100755 index 97bd64c6..00000000 --- a/Makefile +++ /dev/null @@ -1,72 +0,0 @@ -UNAME := $(shell uname) - -ifeq ($(UNAME), Linux) -# With or without the GMSH API: -ifneq ("$(wildcard ~/SLlibs/gmsh)","") - LIBS = -L ~/SLlibs/gmsh/lib -l gmsh -L ~/SLlibs/petsc/arch-linux-c-opt/lib -l openblas -l petsc -l slepc -D HAVE_GMSH - INCL = -I ~/SLlibs/gmsh/include -I ~/SLlibs/petsc/include/petsc/mpiuni -I ~/SLlibs/petsc/arch-linux-c-opt/externalpackages/git.openblas -I ~/SLlibs/petsc/include/ -I ~/SLlibs/petsc/arch-linux-c-opt/include/ -else - LIBS = -L ~/SLlibs/petsc/arch-linux-c-opt/lib -l openblas -l petsc -l slepc - INCL = -I ~/SLlibs/petsc/include/petsc/mpiuni -I ~/SLlibs/petsc/arch-linux-c-opt/externalpackages/git.openblas -I ~/SLlibs/petsc/include/ -I ~/SLlibs/petsc/arch-linux-c-opt/include/ -endif -endif -ifeq ($(UNAME), Darwin) -LIBS = -L ~/SLlibs/petsc/arch-darwin-c-opt/lib -l openblas -l petsc -l slepc -INCL = -I ~/SLlibs/petsc/include/petsc/mpiuni -I ~/SLlibs/petsc/arch-darwin-c-opt/externalpackages/git.openblas -I ~/SLlibs/petsc/include/ -I ~/SLlibs/petsc/arch-darwin-c-opt/include/ -endif - - -# $@ is the filename representing the target. -# $< is the filename of the first prerequisite. -# $^ the filenames of all the prerequisites. -# $(@D) is the file path of the target file. -# D can be added to all of the above. - -CXX = g++ -fopenmp -fPIC -no-pie # openmp is used for parallel sorting on Linux -CXX_FLAGS= -std=c++11 -O3 - -# List of all directories containing the headers: -INCLUDES = -I src -I src/field -I src/expression -I src/expression/operation -I src/shapefunction -I src/formulation -I src/shapefunction/hierarchical -I src/shapefunction/hierarchical/h1 -I src/shapefunction/hierarchical/hcurl -I src/gausspoint -I src/shapefunction/lagrange -I src/mesh -I src/io -I src/io/gmsh -I src/io/paraview -I src/io/nastran -I src/resolution -I src/geometry - -# List of all .cpp source files: -CPPS= $(wildcard src/*.cpp) $(wildcard src/field/*.cpp) $(wildcard src/expression/*.cpp) $(wildcard src/expression/operation/*.cpp) $(wildcard src/shapefunction/*.cpp) $(wildcard src/formulation/*.cpp) $(wildcard src/shapefunction/hierarchical/*.cpp) $(wildcard src/shapefunction/hierarchical/h1/*.cpp) $(wildcard src/shapefunction/hierarchical/hcurl/*.cpp) $(wildcard src/gausspoint/*.cpp) $(wildcard src/shapefunction/lagrange/*.cpp) $(wildcard src/mesh/*.cpp) $(wildcard src/io/*.cpp) $(wildcard src/io/gmsh/*.cpp) $(wildcard src/io/paraview/*.cpp) $(wildcard src/io/nastran/*.cpp) $(wildcard src/resolution/*.cpp) $(wildcard src/geometry/*.cpp) - -# Final binary name: -BIN = sparselizard -# Put all generated stuff to this build directory: -BUILD_DIR = ./build - - -# Same list as CPP but with the .o object extension: -OBJECTS=$(CPPS:%.cpp=$(BUILD_DIR)/%.o) -# Gcc/Clang will create these .d files containing dependencies. -DEP = $(OBJECTS:%.o=%.d) - -all: $(OBJECTS) libsparselizard.so - @# The main is always recompiled (it could have been replaced): - @$(CXX) $(CXX_FLAGS) $(LIBS) $(INCL) $(INCLUDES) -c main.cpp -o $(BUILD_DIR)/main.o - @echo "Linking." - @$(CXX) $(BUILD_DIR)/main.o $(OBJECTS) $(LIBS) -o $(BIN) - @echo "Done." - -# Include all .d files --include $(DEP) - -$(BUILD_DIR)/%.o: %.cpp - @echo "Compiling" $< - @# Create the folder of the current target in the build directory: - @mkdir -p $(@D) - @# Compile .cpp file. MMD creates the dependencies. - @$(CXX) $(CXX_FLAGS) $(LIBS) $(INCL) $(INCLUDES) -MMD -c $< -o $@ - - -clean : - # Removes all files created. - rm -rf $(BUILD_DIR) - rm -f $(BIN) - rm -f libsparselizard.so - -LDFLAGS= -shared -libsparselizard.so : $(OBJECTS) - @echo "Creating shared library." - @$(CXX) $(CXX_FLAGS) $(OBJECTS) -o $@ $(LDFLAGS) diff --git a/cMake/SetupBLAS.cmake b/cMake/SetupBLAS.cmake deleted file mode 100644 index 39fa672e..00000000 --- a/cMake/SetupBLAS.cmake +++ /dev/null @@ -1,47 +0,0 @@ -function(ConfigureBLAS TARGET) - - -# Find blas headers: -FIND_PATH(BLAS_INCLUDE_PATH - NAMES cblas.h - PATHS - "${PETSC_PATH}/arch-linux-c-opt/include" - "${PETSC_PATH}/arch-linux2-c-opt/include" - "${PETSC_PATH}/arch-darwin-c-opt/include" - NO_DEFAULT_PATH - ) - -if(BLAS_INCLUDE_PATH) - message(STATUS "Blas header cblas.h found at " ${BLAS_INCLUDE_PATH}) -else() - message(STATUS "BLAS HEADER CBLAS.H NOT FOUND") -endif() - - -# Find blas library: -FIND_LIBRARY(BLAS_LIBRARIES - NAMES openblas - PATHS - "${PETSC_PATH}/arch-linux-c-opt/lib" - "${PETSC_PATH}/arch-linux2-c-opt/lib" - "${PETSC_PATH}/arch-darwin-c-opt/lib" - NO_DEFAULT_PATH - ) - -if(BLAS_LIBRARIES) - message(STATUS "Blas library found at " ${BLAS_LIBRARIES}) -else() - message(STATUS "BLAS LIBRARY NOT FOUND") -endif() - - -if(BLAS_INCLUDE_PATH AND BLAS_LIBRARIES) - SET(BLAS_FOUND YES PARENT_SCOPE) - - TARGET_INCLUDE_DIRECTORIES(${TARGET} PUBLIC ${BLAS_INCLUDE_PATH}) - TARGET_LINK_LIBRARIES(${TARGET} PUBLIC ${BLAS_LIBRARIES}) -endif() - - -endfunction(ConfigureBLAS) - diff --git a/cMake/SetupGMSH.cmake b/cMake/SetupGMSH.cmake deleted file mode 100644 index d3b0ba3b..00000000 --- a/cMake/SetupGMSH.cmake +++ /dev/null @@ -1,43 +0,0 @@ -function(ConfigureGMSH TARGET) - - -# Find gmsh headers: -FIND_PATH(GMSH_INCLUDE_PATH - NAMES gmsh.h - PATHS - "${GMSH_PATH}/include" - NO_DEFAULT_PATH - ) - -if(GMSH_INCLUDE_PATH) - message(STATUS "Gmsh headers found at " ${GMSH_INCLUDE_PATH}) -else() - message(STATUS "GMSH HEADERS NOT FOUND (OPTIONAL)") -endif() - - -# Find gmsh library: -FIND_LIBRARY(GMSH_LIBRARIES - NAMES gmsh - PATHS - "${GMSH_PATH}/lib" - NO_DEFAULT_PATH - ) - -if(GMSH_LIBRARIES) - message(STATUS "Gmsh library found at " ${GMSH_LIBRARIES}) -else() - message(STATUS "GMSH LIBRARY NOT FOUND (OPTIONAL)") -endif() - - -if(GMSH_INCLUDE_PATH AND GMSH_LIBRARIES) - SET(GMSH_FOUND YES PARENT_SCOPE) - - TARGET_INCLUDE_DIRECTORIES(${TARGET} PUBLIC ${GMSH_INCLUDE_PATH}) - TARGET_LINK_LIBRARIES(${TARGET} PUBLIC ${GMSH_LIBRARIES}) -endif() - - -endfunction(ConfigureGMSH) - diff --git a/cMake/SetupMETIS.cmake b/cMake/SetupMETIS.cmake deleted file mode 100644 index c1ff084b..00000000 --- a/cMake/SetupMETIS.cmake +++ /dev/null @@ -1,47 +0,0 @@ -function(ConfigureMETIS TARGET) - - -# Find metis headers: -FIND_PATH(METIS_INCLUDE_PATH - NAMES metis.h - PATHS - "${PETSC_PATH}/arch-linux-c-opt/include" - "${PETSC_PATH}/arch-linux2-c-opt/include" - "${PETSC_PATH}/arch-darwin-c-opt/include" - NO_DEFAULT_PATH - ) - -if(METIS_INCLUDE_PATH) - message(STATUS "Metis headers found at " ${METIS_INCLUDE_PATH}) -else() - message(STATUS "METIS HEADERS NOT FOUND") -endif() - - -# Find metis library: -FIND_LIBRARY(METIS_LIBRARIES - NAMES metis - PATHS - "${PETSC_PATH}/arch-linux-c-opt/lib" - "${PETSC_PATH}/arch-linux2-c-opt/lib" - "${PETSC_PATH}/arch-darwin-c-opt/lib" - NO_DEFAULT_PATH - ) - -if(METIS_LIBRARIES) - message(STATUS "Metis library found at " ${METIS_LIBRARIES}) -else() - message(STATUS "METIS LIBRARY NOT FOUND") -endif() - - -if(METIS_INCLUDE_PATH AND METIS_LIBRARIES) - SET(METIS_FOUND YES PARENT_SCOPE) - - TARGET_INCLUDE_DIRECTORIES(${TARGET} PUBLIC ${METIS_INCLUDE_PATH}) - TARGET_LINK_LIBRARIES(${TARGET} PUBLIC ${METIS_LIBRARIES}) -endif() - - -endfunction(ConfigureMETIS) - diff --git a/cMake/SetupMPI.cmake b/cMake/SetupMPI.cmake deleted file mode 100644 index f3fad061..00000000 --- a/cMake/SetupMPI.cmake +++ /dev/null @@ -1,49 +0,0 @@ -# Run the default example with MPICH using: -# -# module avail mpi -# module load mpi/mpich-x86_64 -# mpirun -n 4 ./default - -function(ConfigureMPI TARGET) - - -# Find mpi headers: -FIND_PATH(MPI_INCLUDE_PATH - NAMES mpi.h - PATHS - "${MPI_PATH}/include" - NO_DEFAULT_PATH - ) - -if(MPI_INCLUDE_PATH) - message(STATUS "MPI headers found at " ${MPI_INCLUDE_PATH}) -else() - message(STATUS "MPI HEADERS NOT FOUND (OPTIONAL)") -endif() - - -# Find mpi library: -FIND_LIBRARY(MPI_LIBRARIES - NAMES mpi - PATHS - "${MPI_PATH}/lib" - NO_DEFAULT_PATH - ) - -if(MPI_LIBRARIES) - message(STATUS "MPI library found at " ${MPI_LIBRARIES}) -else() - message(STATUS "MPI LIBRARY NOT FOUND (OPTIONAL)") -endif() - - -if(MPI_INCLUDE_PATH AND MPI_LIBRARIES) - SET(MPI_FOUND YES PARENT_SCOPE) - - TARGET_INCLUDE_DIRECTORIES(${TARGET} PUBLIC ${MPI_INCLUDE_PATH}) - TARGET_LINK_LIBRARIES(${TARGET} PUBLIC ${MPI_LIBRARIES}) -endif() - - -endfunction(ConfigureMPI) - diff --git a/cMake/SetupMUMPS.cmake b/cMake/SetupMUMPS.cmake deleted file mode 100644 index ee442e39..00000000 --- a/cMake/SetupMUMPS.cmake +++ /dev/null @@ -1,47 +0,0 @@ -function(ConfigureMUMPS TARGET) - - -# Find mumps headers: -FIND_PATH(MUMPS_INCLUDE_PATH - NAMES cmumps_c.h - PATHS - "${PETSC_PATH}/arch-linux-c-opt/include" - "${PETSC_PATH}/arch-linux2-c-opt/include" - "${PETSC_PATH}/arch-darwin-c-opt/include" - NO_DEFAULT_PATH - ) - -if(MUMPS_INCLUDE_PATH) - message(STATUS "Mumps headers found at " ${MUMPS_INCLUDE_PATH}) -else() - message(STATUS "MUMPS HEADERS NOT FOUND") -endif() - - -# Find mumps library: -FIND_LIBRARY(MUMPS_LIBRARIES - NAMES cmumps - PATHS - "${PETSC_PATH}/arch-linux-c-opt/lib" - "${PETSC_PATH}/arch-linux2-c-opt/lib" - "${PETSC_PATH}/arch-darwin-c-opt/lib" - NO_DEFAULT_PATH - ) - -if(MUMPS_LIBRARIES) - message(STATUS "Mumps library found at " ${MUMPS_LIBRARIES}) -else() - message(STATUS "MUMPS LIBRARY NOT FOUND") -endif() - - -if(MUMPS_INCLUDE_PATH AND MUMPS_LIBRARIES) - SET(MUMPS_FOUND YES PARENT_SCOPE) - - TARGET_INCLUDE_DIRECTORIES(${TARGET} PUBLIC ${MUMPS_INCLUDE_PATH}) - TARGET_LINK_LIBRARIES(${TARGET} PUBLIC ${MUMPS_LIBRARIES}) -endif() - - -endfunction(ConfigureMUMPS) - diff --git a/cMake/SetupPETSC.cmake b/cMake/SetupPETSC.cmake deleted file mode 100644 index 24bd6081..00000000 --- a/cMake/SetupPETSC.cmake +++ /dev/null @@ -1,60 +0,0 @@ -function(ConfigurePETSC TARGET) - - -# Find petsc headers: -FIND_PATH(PETSC_INCLUDE_PATH - NAMES petsc.h - PATHS - "${PETSC_PATH}/include" - NO_DEFAULT_PATH - ) - -if(PETSC_INCLUDE_PATH) - message(STATUS "Petsc header petsc.h found at " ${PETSC_INCLUDE_PATH}) -else() - message(STATUS "PETSC HEADER PETSC.H NOT FOUND") -endif() - -FIND_PATH(PETSCCONF_INCLUDE_PATH - NAMES petscconf.h - PATHS - "${PETSC_PATH}/arch-linux-c-opt/include" - "${PETSC_PATH}/arch-linux2-c-opt/include" - "${PETSC_PATH}/arch-darwin-c-opt/include" - NO_DEFAULT_PATH - ) - -if(PETSCCONF_INCLUDE_PATH) - message(STATUS "Petsc header petscconf.h found at " ${PETSCCONF_INCLUDE_PATH}) -else() - message(STATUS "PETSC HEADER PETSCCONF.H NOT FOUND") -endif() - - -# Find petsc library: -FIND_LIBRARY(PETSC_LIBRARIES - NAMES petsc - PATHS - "${PETSC_PATH}/arch-linux-c-opt/lib" - "${PETSC_PATH}/arch-linux2-c-opt/lib" - "${PETSC_PATH}/arch-darwin-c-opt/lib" - NO_DEFAULT_PATH - ) - -if(PETSC_LIBRARIES) - message(STATUS "Petsc library found at " ${PETSC_LIBRARIES}) -else() - message(STATUS "PETSC LIBRARY NOT FOUND") -endif() - - -if(PETSC_INCLUDE_PATH AND PETSCCONF_INCLUDE_PATH AND PETSC_LIBRARIES) - SET(PETSC_FOUND YES PARENT_SCOPE) - - TARGET_INCLUDE_DIRECTORIES(${TARGET} PUBLIC ${PETSC_INCLUDE_PATH} ${PETSCCONF_INCLUDE_PATH}) - TARGET_LINK_LIBRARIES(${TARGET} PUBLIC ${PETSC_LIBRARIES}) -endif() - - -endfunction(ConfigurePETSC) - diff --git a/cMake/SetupSLEPC.cmake b/cMake/SetupSLEPC.cmake deleted file mode 100644 index e57dbff8..00000000 --- a/cMake/SetupSLEPC.cmake +++ /dev/null @@ -1,47 +0,0 @@ -function(ConfigureSLEPC TARGET) - - -# Find slepc headers: -FIND_PATH(SLEPC_INCLUDE_PATH - NAMES slepc.h - PATHS - "${PETSC_PATH}/arch-linux-c-opt/include" - "${PETSC_PATH}/arch-linux2-c-opt/include" - "${PETSC_PATH}/arch-darwin-c-opt/include" - NO_DEFAULT_PATH - ) - -if(SLEPC_INCLUDE_PATH) - message(STATUS "Slepc headers found at " ${SLEPC_INCLUDE_PATH}) -else() - message(STATUS "SLEPC HEADERS NOT FOUND") -endif() - - -# Find slepc library: -FIND_LIBRARY(SLEPC_LIBRARIES - NAMES slepc - PATHS - "${PETSC_PATH}/arch-linux-c-opt/lib" - "${PETSC_PATH}/arch-linux2-c-opt/lib" - "${PETSC_PATH}/arch-darwin-c-opt/lib" - NO_DEFAULT_PATH - ) - -if(SLEPC_LIBRARIES) - message(STATUS "Slepc library found at " ${SLEPC_LIBRARIES}) -else() - message(STATUS "SLEPC LIBRARY NOT FOUND") -endif() - - -if(SLEPC_INCLUDE_PATH AND SLEPC_LIBRARIES) - SET(SLEPC_FOUND YES PARENT_SCOPE) - - TARGET_INCLUDE_DIRECTORIES(${TARGET} PUBLIC ${SLEPC_INCLUDE_PATH}) - TARGET_LINK_LIBRARIES(${TARGET} PUBLIC ${SLEPC_LIBRARIES}) -endif() - - -endfunction(ConfigureSLEPC) - diff --git a/cMake/functions.cmake b/cMake/functions.cmake deleted file mode 100644 index cbb7657f..00000000 --- a/cMake/functions.cmake +++ /dev/null @@ -1,45 +0,0 @@ -# Add library for dirs -function(custom_add_library_from_dir TARGET DIRLIST) - foreach(d IN LISTS DIRLIST) - file(GLOB SRC "${d}/*.cpp" "${d}/*.h" "${d}/*.hpp") - list(APPEND TARGET_SRC ${SRC}) - endforeach() - add_library(${TARGET} SHARED ${TARGET_SRC}) -endfunction(custom_add_library_from_dir) - -# Add executable for dirs -function(custom_add_executable_from_dir TARGET DIRLIST) - foreach(d IN LISTS DIRLIST) - file(GLOB SRC "${d}/*.cpp" "${d}/*.h" "${d}/*.hpp") - list(APPEND TARGET_SRC ${SRC}) - endforeach() - add_executable(${TARGET} ${TARGET_SRC}) -endfunction(custom_add_executable_from_dir) - -function(custom_copy_file TARGET FROMDIRS TODIR GLOBS) - foreach(d IN LISTS FROMDIRS) - foreach(g IN LISTS GLOBS) - file(GLOB SRC "${d}/${g}") - foreach(f IN LISTS SRC) - string(REGEX REPLACE "^.*/" "" DEST ${f}) - configure_file(${f} ${TODIR}/${DEST} COPYONLY) - endforeach() - endforeach() - endforeach() -endfunction(custom_copy_file) - -function(custom_symlink_file TARGET FROMDIRS TODIR GLOBS) - foreach(d IN LISTS FROMDIRS) - foreach(g IN LISTS GLOBS) - file(GLOB SRC "${d}/${g}") - foreach(f IN LISTS SRC) - get_filename_component(filename ${f} NAME) - if(NOT ${filename} STREQUAL "CMakeLists.txt") - string(REGEX REPLACE "^.*/" "" DEST ${f}) - file(CREATE_LINK ${f} ${TODIR}/${DEST} SYMBOLIC) - endif() - endforeach() - endforeach() - endforeach() -endfunction(custom_symlink_file) - diff --git a/cmake/FindGMSH.cmake b/cmake/FindGMSH.cmake new file mode 100644 index 00000000..1ad4e727 --- /dev/null +++ b/cmake/FindGMSH.cmake @@ -0,0 +1,17 @@ +include(FindPackageHandleStandardArgs) + +find_library(GMSH_LIBRARY NAMES gmsh) +find_path(GMSH_INCLUDE_DIR NAMES gmsh.h) + +find_package_handle_standard_args(GMSH DEFAULT_MSG GMSH_LIBRARY GMSH_INCLUDE_DIR) + +if(GMSH_FOUND) + mark_as_advanced(GMSH_INCLUDE_DIR) + mark_as_advanced(GMSH_LIBRARY) +endif() + +IF(GMSH_FOUND AND NOT TARGET GMSH::GMSH) + add_library(GMSH::GMSH IMPORTED SHARED) + set_property(TARGET GMSH::GMSH PROPERTY IMPORTED_LOCATION ${GMSH_LIBRARY}) + target_include_directories(GMSH::GMSH INTERFACE ${GMSH_INCLUDE_DIR}) +endif() diff --git a/cmake/FindMETIS.cmake b/cmake/FindMETIS.cmake new file mode 100644 index 00000000..9354fa8f --- /dev/null +++ b/cmake/FindMETIS.cmake @@ -0,0 +1,17 @@ +include(FindPackageHandleStandardArgs) + +find_library(METIS_LIBRARY NAMES metis) +find_path(METIS_INCLUDE_DIR NAMES metis.h) + +find_package_handle_standard_args(METIS DEFAULT_MSG METIS_LIBRARY METIS_INCLUDE_DIR) + +if(METIS_FOUND) + mark_as_advanced(METIS_INCLUDE_DIR) + mark_as_advanced(METIS_LIBRARY) +endif() + +IF(METIS_FOUND AND NOT TARGET METIS::METIS) + add_library(METIS::METIS IMPORTED SHARED) + set_property(TARGET METIS::METIS PROPERTY IMPORTED_LOCATION ${METIS_LIBRARY}) + target_include_directories(METIS::METIS INTERFACE ${METIS_INCLUDE_DIR}) +endif() diff --git a/cmake/FindPETSC.cmake b/cmake/FindPETSC.cmake new file mode 100644 index 00000000..77a67f16 --- /dev/null +++ b/cmake/FindPETSC.cmake @@ -0,0 +1,21 @@ +include(FindPackageHandleStandardArgs) + +find_library(PETSC_LIBRARY NAMES petsc petsc_real) +find_path(PETSC_INCLUDE_DIR NAMES petsc.h HINTS + /usr/include/petsc + /usr/lib/petscdir + $<$<BOOL:${APPLE}>:/opt/homebrew/opt/petsc/include > +) + +find_package_handle_standard_args(PETSC DEFAULT_MSG PETSC_LIBRARY PETSC_INCLUDE_DIR) + +if(PETSC_FOUND) + mark_as_advanced(PETSC_INCLUDE_DIR) + mark_as_advanced(PETSC_LIBRARY) +endif() + +IF(PETSC_FOUND AND NOT TARGET PETSC::PETSC) + add_library(PETSC::PETSC IMPORTED SHARED) + set_property(TARGET PETSC::PETSC PROPERTY IMPORTED_LOCATION ${PETSC_LIBRARY}) + target_include_directories(PETSC::PETSC INTERFACE ${PETSC_INCLUDE_DIR}) +endif() diff --git a/cmake/FindSLEPC.cmake b/cmake/FindSLEPC.cmake new file mode 100644 index 00000000..47092f67 --- /dev/null +++ b/cmake/FindSLEPC.cmake @@ -0,0 +1,25 @@ +include(FindPackageHandleStandardArgs) + +find_library(SLEPC_LIBRARY NAMES slepc slepc_real) +find_path(SLEPC_INCLUDE_DIR NAMES slepcsys.h HINTS + /usr/lib/slepcdir + /usr/include/slepc) + +find_path(SLEPC_INCLUDE_DIR_PRIVATE NAMES slepcversion.h HINTS + /usr/lib/slepcdir + /usr/include/slepc +) + +find_package_handle_standard_args(SLEPC DEFAULT_MSG SLEPC_LIBRARY SLEPC_INCLUDE_DIR) + +if(SLEPC_FOUND) + mark_as_advanced(SLEPC_INCLUDE_DIR) + mark_as_advanced(SLEPC_INCLUDE_DIR_PRIVATE) + mark_as_advanced(SLEPC_LIBRARY) +endif() + +IF(SLEPC_FOUND AND NOT TARGET SLEPC::SLEPC) + add_library(SLEPC::SLEPC IMPORTED SHARED) + set_property(TARGET SLEPC::SLEPC PROPERTY IMPORTED_LOCATION ${SLEPC_LIBRARY}) + target_include_directories(SLEPC::SLEPC INTERFACE ${SLEPC_INCLUDE_DIR}) +endif() diff --git a/simulations/default/CMakeLists.txt b/simulations/default/CMakeLists.txt index 49cf00a2..983cd918 100644 --- a/simulations/default/CMakeLists.txt +++ b/simulations/default/CMakeLists.txt @@ -1,4 +1,6 @@ -custom_add_executable_from_dir(default ${CMAKE_CURRENT_SOURCE_DIR}) -target_link_libraries(default sparselizard) -custom_symlink_file(default ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} "*.msh;*.geo;*.txt;*.csv;*.nas;*.slz") +add_executable(default main.cpp) +target_link_libraries(default PUBLIC sparselizard) +install(TARGETS default RUNTIME) +set(DATA disk.geo disk.msh) +install(FILES ${DATA} DESTINATION ${CMAKE_INSTALL_BINDIR}) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt deleted file mode 100644 index f0242d80..00000000 --- a/src/CMakeLists.txt +++ /dev/null @@ -1,76 +0,0 @@ -set(SRC_DIR_LIST - ${CMAKE_CURRENT_SOURCE_DIR} - ${CMAKE_CURRENT_SOURCE_DIR}/resolution - ${CMAKE_CURRENT_SOURCE_DIR}/shapefunction - ${CMAKE_CURRENT_SOURCE_DIR}/shapefunction/lagrange - ${CMAKE_CURRENT_SOURCE_DIR}/shapefunction/hierarchical - ${CMAKE_CURRENT_SOURCE_DIR}/shapefunction/hierarchical/h1 - ${CMAKE_CURRENT_SOURCE_DIR}/shapefunction/hierarchical/hcurl - ${CMAKE_CURRENT_SOURCE_DIR}/mesh - ${CMAKE_CURRENT_SOURCE_DIR}/formulation - ${CMAKE_CURRENT_SOURCE_DIR}/field - ${CMAKE_CURRENT_SOURCE_DIR}/io - ${CMAKE_CURRENT_SOURCE_DIR}/io/nastran - ${CMAKE_CURRENT_SOURCE_DIR}/io/paraview - ${CMAKE_CURRENT_SOURCE_DIR}/io/gmsh - ${CMAKE_CURRENT_SOURCE_DIR}/geometry - ${CMAKE_CURRENT_SOURCE_DIR}/expression - ${CMAKE_CURRENT_SOURCE_DIR}/expression/operation - ${CMAKE_CURRENT_SOURCE_DIR}/gausspoint) - -custom_add_library_from_dir(sparselizard "${SRC_DIR_LIST}") - -custom_copy_file(sparselizard "${SRC_DIR_LIST}" "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/include" "*.h") - -target_include_directories(sparselizard PUBLIC ${SRC_DIR_LIST}) - -target_compile_features(sparselizard PRIVATE cxx_std_11) -target_compile_options(sparselizard PUBLIC -fPIC -no-pie -O3) - -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp") - -ConfigureMPI(sparselizard) -ConfigureGMSH(sparselizard) -ConfigureBLAS(sparselizard) -ConfigureMETIS(sparselizard) -ConfigureMUMPS(sparselizard) -ConfigurePETSC(sparselizard) -ConfigureSLEPC(sparselizard) - -# Optional for std::thread -# find_package(Threads) -# target_link_libraries(sparselizard PUBLIC ${CMAKE_THREAD_LIBS_INIT}) - -if(NOT (${BLAS_FOUND} AND ${METIS_FOUND} AND ${MUMPS_FOUND} AND ${PETSC_FOUND} AND ${SLEPC_FOUND})) - message(FATAL_ERROR "\nAt least one required package (blas, metis, mumps, petsc, slepc) not found.") -endif() - -# set configure file -if(${BLAS_FOUND}) - add_definitions(-DHAVE_BLAS) -endif() -if(${GMSH_FOUND}) - add_definitions(-DHAVE_GMSH) -endif() -if(${METIS_FOUND}) - add_definitions(-DHAVE_METIS) -endif() -if(${MPI_FOUND}) - add_definitions(-DHAVE_MPI) -endif() -if(${MUMPS_FOUND}) - add_definitions(-DHAVE_MUMPS) -endif() -if(${PETSC_FOUND}) - add_definitions(-DHAVE_PETSC) -endif() -if(${SLEPC_FOUND}) - add_definitions(-DHAVE_SLEPC) -endif() - -target_include_directories(sparselizard PUBLIC ${CMAKE_CURRENT_BINARY_DIR}) - -install(TARGETS sparselizard) -install(DIRECTORY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/include/" - DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/sparselizard" - FILES_MATCHING PATTERN "*.h") -- 2.35.3
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor