Skip to content
Snippets Groups Projects
Commit 268b7969 authored by peters's avatar peters Committed by Sören Peters
Browse files

Add build cache cmake function. Use ccache if available. Therefore removed...

Add build cache cmake function. Use ccache if available. Therefore removed ccache presets and update the ci script. Prevent insource builds. Add compiler warnings target, which is not in use so far.
parent d8133bb9
No related branches found
No related tags found
1 merge request!68Add build cache cmake function. Use ccache if available. Therefore removed...
......@@ -51,7 +51,7 @@ stages:
- cd $CI_PROJECT_DIR/$BUILD_FOLDER
- rm -r -f ./*
- cmake .. -LAH
--preset=all_make_ccache
--preset=all_make
-DBUILD_WARNINGS_AS_ERRORS=ON
-DCMAKE_CUDA_ARCHITECTURES=60
- make -j4
......@@ -301,7 +301,7 @@ gpu_numerical_tests:
- cd $CI_PROJECT_DIR/build
- rm -r -f ./*
- cmake ..
--preset=gpu_numerical_tests_ccache_make
--preset=gpu_numerical_tests_make
-DCMAKE_CUDA_ARCHITECTURES=60
-DPATH_NUMERICAL_TESTS=/tmp/test_data/numerical_tests_gpu
- make -j4
......
option(ENABLE_CACHE "Enable cache if available" ON)
if(NOT ENABLE_CACHE)
return()
endif()
set(CACHE_OPTION
"ccache"
CACHE STRING "Compiler cache to be used")
set(CACHE_OPTION_VALUES "ccache" "sccache")
set_property(CACHE CACHE_OPTION PROPERTY STRINGS ${CACHE_OPTION_VALUES})
list(
FIND
CACHE_OPTION_VALUES
${CACHE_OPTION}
CACHE_OPTION_INDEX)
if(${CACHE_OPTION_INDEX} EQUAL -1)
message(
STATUS
"Using custom compiler cache system: '${CACHE_OPTION}', explicitly supported entries are ${CACHE_OPTION_VALUES}")
endif()
find_program(CACHE_BINARY ${CACHE_OPTION})
if(CACHE_BINARY)
message(STATUS "${CACHE_OPTION} found and enabled")
set(CMAKE_CXX_COMPILER_LAUNCHER ${CACHE_BINARY})
set(CMAKE_CUDA_COMPILER_LAUNCHER ${CACHE_BINARY})
set(CMAKE_C_COMPILER_LAUNCHER ${CACHE_BINARY})
else()
message(WARNING "${CACHE_OPTION} is enabled but was not found. Not using it")
endif()
# from here:
#
# https://github.com/lefticus/cppbestpractices/blob/master/02-Use_the_Tools_Available.md
function(set_project_warnings project_name)
option(WARNINGS_AS_ERRORS "Treat compiler warnings as errors" TRUE)
set(MSVC_WARNINGS
/W4 # Baseline reasonable warnings
/w14242 # 'identifier': conversion from 'type1' to 'type1', possible loss of data
/w14254 # 'operator': conversion from 'type1:field_bits' to 'type2:field_bits', possible loss of data
/w14263 # 'function': member function does not override any base class virtual member function
/w14265 # 'classname': class has virtual functions, but destructor is not virtual instances of this class may not
# be destructed correctly
/w14287 # 'operator': unsigned/negative constant mismatch
/we4289 # nonstandard extension used: 'variable': loop control variable declared in the for-loop is used outside
# the for-loop scope
/w14296 # 'operator': expression is always 'boolean_value'
/w14311 # 'variable': pointer truncation from 'type1' to 'type2'
/w14545 # expression before comma evaluates to a function which is missing an argument list
/w14546 # function call before comma missing argument list
/w14547 # 'operator': operator before comma has no effect; expected operator with side-effect
/w14549 # 'operator': operator before comma has no effect; did you intend 'operator'?
/w14555 # expression has no effect; expected expression with side- effect
/w14619 # pragma warning: there is no warning number 'number'
/w14640 # Enable warning on thread un-safe static member initialization
/w14826 # Conversion from 'type1' to 'type_2' is sign-extended. This may cause unexpected runtime behavior.
/w14905 # wide string literal cast to 'LPSTR'
/w14906 # string literal cast to 'LPWSTR'
/w14928 # illegal copy-initialization; more than one user-defined conversion has been implicitly applied
/permissive- # standards conformance mode for MSVC compiler.
)
set(CLANG_WARNINGS
-Wall
-Wextra # reasonable and standard
-Wshadow # warn the user if a variable declaration shadows one from a parent context
-Wnon-virtual-dtor # warn the user if a class with virtual functions has a non-virtual destructor. This helps
# catch hard to track down memory errors
# -Wold-style-cast # warn for c-style casts
-Wcast-align # warn for potential performance problem casts
-Wunused # warn on anything being unused
-Woverloaded-virtual # warn if you overload (not override) a virtual function
-Wpedantic # warn if non-standard C++ is used
-Wconversion # warn on type conversions that may lose data
-Wsign-conversion # warn on sign conversions
-Wnull-dereference # warn if a null dereference is detected
-Wdouble-promotion # warn if float is implicit promoted to double
-Wformat=2 # warn on security issues around functions that format output (ie printf)
)
if(BUILD_WARNINGS_AS_ERRORS)
set(CLANG_WARNINGS ${CLANG_WARNINGS} -Werror)
set(MSVC_WARNINGS ${MSVC_WARNINGS} /WX)
endif()
set(GCC_WARNINGS
${CLANG_WARNINGS}
-Wmisleading-indentation # warn if indentation implies blocks where blocks do not exist
-Wduplicated-cond # warn if if / else chain has duplicated conditions
-Wduplicated-branches # warn if if / else branches have duplicated code
-Wlogical-op # warn about logical operations being used where bitwise were probably wanted
-Wuseless-cast # warn if you perform a cast to the same type
)
if(MSVC)
set(PROJECT_WARNINGS ${MSVC_WARNINGS})
elseif(CMAKE_CXX_COMPILER_ID MATCHES ".*Clang")
set(PROJECT_WARNINGS ${CLANG_WARNINGS})
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
set(PROJECT_WARNINGS ${GCC_WARNINGS})
else()
message(AUTHOR_WARNING "No compiler warnings set for '${CMAKE_CXX_COMPILER_ID}' compiler.")
endif()
target_compile_options(${project_name} INTERFACE ${PROJECT_WARNINGS})
endfunction()
#
# This function will prevent in-source builds
function(AssureOutOfSourceBuilds)
# make sure the user doesn't play dirty with symlinks
get_filename_component(srcdir "${CMAKE_SOURCE_DIR}" REALPATH)
get_filename_component(bindir "${CMAKE_BINARY_DIR}" REALPATH)
# disallow in-source builds
if("${srcdir}" STREQUAL "${bindir}")
message("######################################################")
message("Warning: in-source builds are disabled")
message("Please create a separate build directory and run cmake from there")
message("######################################################")
message(FATAL_ERROR "Quitting configuration")
endif()
endfunction()
assureoutofsourcebuilds()
......@@ -6,10 +6,6 @@
# |___/_/_/ \__/\__,_/\__,_/_/_/ /_/\__,_/_/\__,_/____/
#
#################################################################################
# required cmake versions
# CMAKE 3.13: target_link_options
# CMAKE 3.15: CMAKE_MSVC_RUNTIME_LIBRARY
#################################################################################
cmake_minimum_required(VERSION 3.15..3.20 FATAL_ERROR)
project(VirtualFluids
......@@ -38,6 +34,8 @@ set (VF_THIRD_DIR ${CMAKE_CURRENT_SOURCE_DIR}/3rdParty)
set (VF_SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src)
set (VF_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR})
include(${VF_CMAKE_DIR}/PreventInSourceBuilds.cmake)
#################################################################################
# OPTIONS
#################################################################################
......@@ -80,6 +78,15 @@ option(BUILD_VF_DOUBLE_ACCURACY "Use double accuracy" OFF)
#################################################################################
# MACROS
#################################################################################
add_library(project_warnings INTERFACE)
# standard compiler warnings - Link this 'library' to use the warnings specified in CompilerWarnings.cmake
include(${VF_CMAKE_DIR}/CompilerWarnings.cmake)
set_project_warnings(project_warnings)
# enable cache system
include(${VF_CMAKE_DIR}/Cache.cmake)
include(CMakePrintHelpers)
include(${VF_CMAKE_DIR}/VirtualFluidsMacros.cmake)
......
......@@ -2,7 +2,7 @@
"version": 2,
"cmakeMinimumRequired": {
"major": 3,
"minor": 19,
"minor": 20,
"patch": 0
},
"configurePresets": [
......@@ -20,16 +20,6 @@
"hidden": true,
"generator": "Unix Makefiles"
},
{
"name": "default_ccache_make",
"inherits": "default_make",
"hidden": true,
"cacheVariables": {
"CMAKE_CXX_COMPILER_LAUNCHER": "ccache",
"CMAKE_CUDA_COMPILER_LAUNCHER": "ccache",
"CMAKE_C_COMPILER_LAUNCHER": "ccache"
}
},
{
"name": "default_msvc",
"inherits": "default",
......@@ -87,14 +77,6 @@
],
"displayName": "cpu make configuration"
},
{
"name": "cpu_make_ccache",
"inherits": [
"default_ccache_make",
"default_cpu"
],
"displayName": "cpu ccache make configuration"
},
{
"name": "cpu_msvc",
"inherits": [
......@@ -111,14 +93,6 @@
],
"displayName": "gpu make configuration"
},
{
"name": "gpu_make_ccache",
"inherits": [
"default_ccache_make",
"default_gpu"
],
"displayName": "gpu ccache make configuration"
},
{
"name": "gpu_msvc",
"inherits": [
......@@ -135,14 +109,6 @@
],
"displayName": "all make configuration"
},
{
"name": "all_make_ccache",
"inherits": [
"default_ccache_make",
"default_all"
],
"displayName": "all ccache make configuration"
},
{
"name": "all_msvc",
"inherits": [
......@@ -159,14 +125,6 @@
],
"displayName": "gpu numerical tests make configuration"
},
{
"name": "gpu_numerical_tests_ccache_make",
"inherits": [
"default_ccache_make",
"default_gpu_numerical_tests"
],
"displayName": "gpu numerical tests ccache make configuration"
},
{
"name": "gpu_numerical_tests_msvc",
"inherits": [
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment