Skip to content

Commit

Permalink
file attributes; cmake files updates
Browse files Browse the repository at this point in the history
Possible names for PETSC & SLEPC libraries

first workflow

error for petsc and slepc

replacement libopenblas

ready workflows for ubuntu-latest

default paths

parallel make

Enhanced build instructions

correction for petsc name

cache test

mpi for aarch64 architecture

cleaning merge garbage

lowercase message

no default path problem

update cmake and docker

overrideable paths

simplify include/src

simplify

SLEPC is required

delete

shared lib by default

rm makefile

make metis optional

update readme

fixes path search for slepc

Better openblas search and flags

whoops

fix actions + slepc

Use different header
  • Loading branch information
pthibaud authored and Nimish Telang committed Feb 15, 2023
1 parent a6414d7 commit 1de94c2
Show file tree
Hide file tree
Showing 409 changed files with 20,138 additions and 6,037 deletions.
49 changes: 49 additions & 0 deletions .github/workflows/compile.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
name: Sparselizard Compilation

on: [push]

jobs:
Compilation-Actions:
runs-on: ubuntu-latest

env:
CCACHE_COMPRESS: "true"
CCACHE_MAXSIZE: 500M

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 }}."
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -36,3 +36,4 @@ build/

# CCLS cache
.ccls-cache/
machine-type.txt
92 changes: 64 additions & 28 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,43 +1,79 @@
# 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(BUILD_MODE Debug)
SET(CMAKE_CXX_FLAGS "-Wall -Wextra -Wpedantic")
SET(CMAKE_CXX_FLAGS_DEBUG "-g -Og")
SET(CMAKE_CXX_FLAGS_RELEASE "-O3")
set(BLA_VENDOR OpenBLAS)

# 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)

# Add cmake packages
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
list(PREPEND CMAKE_PREFIX_PATH /opt/homebrew/opt/openblas)
# 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
file(GLOB_RECURSE SRC_FILES "src/*.cpp")
add_library(sparselizard SHARED ${SRC_FILES})

target_include_directories(sparselizard PUBLIC include)

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 REQUIRED)
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)

set(BUILD_SIMULATIONS YES)

if(BUILD_SIMULATIONS)
add_subdirectory(simulations)
message(STATUS "Building simulations")
endif()
50 changes: 50 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
FROM debian:testing-slim as build

LABEL maintainer="[email protected]"
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 git cmake clang \
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


# Clone git sparselizard repository
# RUN git clone https://github.com/araven/sparselizard.git
WORKDIR /sparselizard
COPY CMakeLists.txt .
COPY src src
COPY cmake cmake
COPY include include
COPY simulations simulations
RUN mkdir build
# Prepare compilation environment
RUN CXX=clang++ 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
ENV OMPI_CXX=clang++

72 changes: 0 additions & 72 deletions Makefile

This file was deleted.

18 changes: 13 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,17 +1,25 @@
# Build instructions

Run the scripts in the 'install_external_libs' folder then configure and build:
Sparselizard depends on mandatory and optional external libraries.

On debian Linux, run
```sudo apt-get install -y libopenblas-dev libmetis-dev libopenmpi-dev libmumps-dev petsc-dev slepc-dev libgmsh-dev cmake ninja-build```
or
run the scripts in the 'install_external_libs' folder to download and install these libraries locally.

Then:
```bash
mkdir build && cd build
cmake ..
cmake --build . -j$(nproc)
CXX=clang++ cmake -G Ninja -S . -B build
cmake --build build -- -j 0
mkdir -p /some/where/to/install
cmake --install build -v --prefix /some/where/to/install
```

---

Provide a custom path to the petsc, gmsh (optional) or mpi (optional) folder with:
```bash
cmake .. -DPETSC_PATH=/yourpath/petsc -DGMSH_PATH=/yourpath/gmsh -DMPI_PATH=/yourpath/mpi
cmake -B build . -DCMAKE_PREFIX_PATH="/custom/libs/and/headers"
```

It may be convenient to use the cmake GUI:
Expand Down
47 changes: 0 additions & 47 deletions cMake/SetupBLAS.cmake

This file was deleted.

Loading

0 comments on commit 1de94c2

Please sign in to comment.