Files
GridFire/meson.build
Emily Boudreaux 75a88b9720 fix(unity): GridFire supports unity builds
GridFire can now support unity builds. This is useful for python
bindings. The main limitation is that openssl (a dependency of
libplugin) does not support unity builds. Therefore when building in a
unity build libplugin must be disabled. This is done with the
-Dunity-safe=ture flag at setup time
2025-11-28 11:56:41 -05:00

144 lines
4.9 KiB
Meson

# ***********************************************************************
#
# Copyright (C) 2025 -- The 4D-STAR Collaboration
# File Author: Emily Boudreaux
# Last Modified: June 21, 2025
#
# GridFire is free software; you can use it and/or modify
# it under the terms and restrictions the GNU General Library Public
# License version 3 (GPLv3) as published by the Free Software Foundation.
#
# GridFire is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU Library General Public License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this software; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
# *********************************************************************** #
project('GridFire', ['c', 'cpp', 'fortran'], version: 'v0.7.4_rc2', default_options: ['cpp_std=c++23'], meson_version: '>=1.5.0')
# Add default visibility for all C++ targets
add_project_arguments('-fvisibility=default', language: 'cpp')
message('Found CXX compiler: ' + meson.get_compiler('cpp').get_id())
message('Found FORTRAN compiler: ' + meson.get_compiler('fortran').get_id())
message('C++ standard set to: ' + get_option('cpp_std'))
message('Fortran standard set to: ' + get_option('fortran_std'))
if meson.get_compiler('cpp').get_id() == 'clang'
# We disable these because of CppAD
message('disabling bitwise-instead-of-logical warnings for clang')
add_project_arguments('-Wno-bitwise-instead-of-logical', language: 'cpp')
endif
if meson.get_compiler('cpp').get_id() == 'gcc'
# We disable these because of boost notes about abi changes from C++10 -> C++17 make the build too noisey
message('disabling psabi warnings for gcc')
add_project_arguments('-Wno-psabi', language: 'cpp')
if (meson.get_compiler('cpp').version().version_compare('<14.0'))
error('g++ version must be at least 14.0, found ' + meson.get_compiler('cpp').version())
endif
endif
build_fortran = get_option('build-fortran')
if (build_fortran)
add_languages('fortran', native: true)
message('Building fortran module (gridfire_mod.mod)')
fc = meson.get_compiler('fortran')
if not get_option('unsafe-fortran')
if fc.get_id() != 'gcc'
error('The only supported fortran compiler for GridFire is gfortran (version >= 14.0), found ' + fc + '. GridFire has not been tested with any other compilers. You can disable this check with the -Dunsafe-fortran=true flag to try other compilers')
endif
endif
if (meson.get_compiler('fortran').version().version_compare('<14.0'))
error('gfortran version must be at least 14.0, found ' + meson.get_compiler('fortran').version())
endif
endif
# For Eigen
add_project_arguments('-Wno-deprecated-declarations', language: 'cpp')
llevel = get_option('log-level')
logbase='QUILL_COMPILE_ACTIVE_LOG_LEVEL_'
if (llevel == 'traceL3')
message('Setting log level to TRACE_L3')
log_argument = logbase + 'TRACE_L3'
elif (llevel == 'traceL2')
message('Setting log level to TRACE_L2')
log_argument = logbase + 'TRACE_L2'
elif (llevel == 'traceL1')
message('Setting log level to TRACE_L1')
log_argument = logbase + 'TRACE_L1'
elif (llevel == 'debug')
message('Setting log level to DEBUG')
log_argument = logbase + 'DEBUG'
elif (llevel == 'info')
message('Setting log level to INFO')
log_argument = logbase + 'INFO'
elif (llevel == 'warning')
message('Setting log level to WARNING')
log_argument = logbase + 'WARNING'
elif (llevel == 'error')
message('Setting log level to ERROR')
log_argument = logbase + 'ERROR'
elif (llevel == 'critical')
message('Setting log level to CRITICAL')
log_argument = logbase + 'CRITICAL'
endif
log_argument = '-DQUILL_COMPILE_ACTIVE_LOG_LEVEL=' + log_argument
add_project_arguments(log_argument, language: 'cpp')
cpp = meson.get_compiler('cpp')
subdir('build-config')
subdir('src')
if get_option('build-python')
message('Configuring Python bindings...')
subdir('build-python')
else
message('Skipping Python bindings...')
endif
if get_option('build-tests')
message('Setting up tests for GridFire...')
subdir('tests')
else
message('Skipping tests for GridFire...')
endif
if get_option('pkg-config')
message('Generating pkg-config file for GridFire...')
pkg = import('pkgconfig')
pkg.generate(
name: 'gridfire',
description: 'GridFire nuclear reaction network solver',
version: meson.project_version(),
libraries: [
libgridfire,
libcomposition,
libconfig,
libconst,
liblogging
],
subdirs: ['gridfire'],
filebase: 'gridfire',
install_dir: join_paths(get_option('libdir'), 'pkgconfig')
)
endif