Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Updates dockerlizard and cMake -- fixes #68 #66

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 53 additions & 0 deletions .github/workflows/compile.yaml
Original file line number Diff line number Diff line change
@@ -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 }}."
41 changes: 41 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -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
120 changes: 92 additions & 28 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -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()
45 changes: 45 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
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 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
72 changes: 0 additions & 72 deletions Makefile

This file was deleted.

Loading