diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4504ed2..6e9f39f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -10,12 +10,11 @@ on: env: BUILD_DIR: _build INSTALL_DIR: _install - EXPORT_BUILD_DIR: _build_export jobs: # - # Builds and tests with CMake + # Test project on Ubuntu with Intel ifx compiler # ubuntu-ifx: @@ -36,11 +35,9 @@ jobs: echo "FC=ifx" >> ${GITHUB_ENV} echo "FPM_FC=ifx" >> ${GITHUB_ENV} - - name: Setup CMake - uses: jwlawson/actions-setup-cmake@v1.14 - - - name: Setup Ninja - uses: ashutoshvarma/setup-ninja@v1.1 + - name: Setup build tools + run: | + pip install cmake fpm meson ninja - name: Build Fortuno run: | @@ -48,32 +45,56 @@ jobs: cmake -B ${BUILD_DIR} -G Ninja -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} cmake --build ${BUILD_DIR} cmake --install ${BUILD_DIR} + rm -rf ${BUILD_DIR} - name: Test CMake export run: | source /opt/intel/oneapi/setvars.sh - CMAKE_PREFIX_PATH=${INSTALL_DIR} cmake -B ${EXPORT_BUILD_DIR} -G Ninja test/export - cmake --build ${EXPORT_BUILD_DIR} - ${EXPORT_BUILD_DIR}/testapp + CMAKE_PREFIX_PATH=${INSTALL_DIR} cmake -B ${BUILD_DIR} -G Ninja test/export + cmake --build ${BUILD_DIR} + ${BUILD_DIR}/testapp + rm -rf ${BUILD_DIR} - name: Test PkgConfig export run: | source /opt/intel/oneapi/setvars.sh - export LD_LIBRARY_PATH="${INSTALL_DIR}/lib:${LD_LIBRARY_PATH}" - export PKG_CONFIG_PATH="${INSTALL_DIR}/lib/pkgconfig:${PKG_CONFIG_PATH}" + export LD_LIBRARY_PATH="${PWD}/${INSTALL_DIR}/lib:${LD_LIBRARY_PATH}" + export PKG_CONFIG_PATH="${PWD}/${INSTALL_DIR}/lib/pkgconfig:${PKG_CONFIG_PATH}" cflags="$(pkg-config --cflags fortuno)" lflags="$(pkg-config --libs fortuno)" - ifx ${cflags} ${lflags} -o testapp test/export/app/testapp.f90 + mkdir ${BUILD_DIR} + pushd ${BUILD_DIR} + ifx ${cflags} ${lflags} -o testapp ../test/export/app/testapp.f90 ./testapp - rm ./testapp - - - name: Setup fpm - uses: fortran-lang/setup-fpm@v5 - with: - github-token: ${{ secrets.GITHUB_TOKEN }} + popd + rm -rf ${BUILD_DIR} - name: Test fpm export run: | source /opt/intel/oneapi/setvars.sh cd test/export fpm run testapp + + - name: Test meson PkgConfig export + run: | + source /opt/intel/oneapi/setvars.sh + export PKG_CONFIG_PATH="${PWD}/${INSTALL_DIR}/lib/pkgconfig:${PKG_CONFIG_PATH}" + cd test/export + meson setup -Dfortuno_subproject=false ${BUILD_DIR} + ninja -C ${BUILD_DIR} + ${BUILD_DIR}/testapp + rm -rf ./${BUILD_DIR} + + - name: Test meson subproject export + run: | + source /opt/intel/oneapi/setvars.sh + FORTUNO_DIR=${PWD} + GIT_REV=$(git rev-parse HEAD) + cd test/export + mkdir subprojects + echo -e "[wrap-git]\ndirectory=fortuno\n" > subprojects/fortuno.wrap + echo -e "url=file://${FORTUNO_DIR}\nrevision=${GIT_REV}\n" >> subprojects/fortuno.wrap + meson setup -Dfortuno_subproject=true ${BUILD_DIR} + ninja -C ${BUILD_DIR} + ${BUILD_DIR}/testapp + rm -rf subprojects ${BUILD_DIR} diff --git a/example/meson.build b/example/meson.build new file mode 100644 index 0000000..33cba19 --- /dev/null +++ b/example/meson.build @@ -0,0 +1,19 @@ +example_mylib_lib = library( + 'mylib', + sources: ['mylib.f90'], + install: false +) +example_mylib_dep = declare_dependency( + link_with: example_mylib_lib, +) + +example_testapp_exe = executable( + 'testapp', + sources: [ + 'fixtured_tests.f90', + 'simple_tests.f90', + 'testapp.f90', + ], + dependencies: [example_mylib_dep, fortuno_dep], + install: false, +) diff --git a/meson.build b/meson.build new file mode 100644 index 0000000..962d581 --- /dev/null +++ b/meson.build @@ -0,0 +1,31 @@ +project( + 'fortuno', + 'fortran', + version: '0.1.0', +) + +sources = [] +subdir('src') + +# Current Intel compiler crashes when building the library with optimization turned on. +if meson.get_compiler('fortran').get_id() == 'intel-llvm' + fortran_args = ['-O0'] +else + fortran_args = [] +endif + +fortuno_lib = library( + meson.project_name(), + sources: sources, + version: meson.project_version(), + fortran_args: fortran_args +) + +fortuno_dep = declare_dependency( + link_with: fortuno_lib, +) + +build_examples = get_option('build_examples') +if build_examples + subdir('example') +endif diff --git a/meson_options.txt b/meson_options.txt new file mode 100644 index 0000000..9ec9ca1 --- /dev/null +++ b/meson_options.txt @@ -0,0 +1 @@ +option('build_examples', type: 'boolean', value: false, description: 'Build examples') diff --git a/src/fortuno/meson.build b/src/fortuno/meson.build new file mode 100644 index 0000000..1e0ff2f --- /dev/null +++ b/src/fortuno/meson.build @@ -0,0 +1,14 @@ +sources += files( + 'argumentparser.f90', + 'basetypes.f90', + 'checkers.f90', + 'consolelogger.f90', + 'testcmdapp.f90', + 'testcontext.f90', + 'testdriver.f90', + 'testinfo.f90', + 'testlogger.f90', + 'utils.f90', + 'version.f90', +) +subdir('serial') diff --git a/src/fortuno/serial/meson.build b/src/fortuno/serial/meson.build new file mode 100644 index 0000000..492007e --- /dev/null +++ b/src/fortuno/serial/meson.build @@ -0,0 +1,10 @@ +sources += files( + 'serialbasetypes.f90', + 'serialcase.f90', + 'serialcmdapp.f90', + 'serialconlogger.f90', + 'serialcontext.f90', + 'serialdriver.f90', + 'serialglobalctx.f90', + 'serialsuite.f90', +) diff --git a/src/meson.build b/src/meson.build new file mode 100644 index 0000000..df17f4f --- /dev/null +++ b/src/meson.build @@ -0,0 +1,4 @@ +sources += files( + 'fortuno.f90' +) +subdir('fortuno') diff --git a/test/export/CMakeLists.txt b/test/export/CMakeLists.txt index 6eb6cbf..c7ea234 100644 --- a/test/export/CMakeLists.txt +++ b/test/export/CMakeLists.txt @@ -1,7 +1,7 @@ cmake_minimum_required(VERSION 3.22...3.28) project( - Fortuno_Export + Fortuno_Test_Export VERSION 0.1.0 DESCRIPTION "Testing the CMake build info exported by Fortuno" LANGUAGES Fortran diff --git a/test/export/app/meson.build b/test/export/app/meson.build new file mode 100644 index 0000000..ed0c7a5 --- /dev/null +++ b/test/export/app/meson.build @@ -0,0 +1,3 @@ +sources += files( + 'testapp.f90' +) diff --git a/test/export/meson.build b/test/export/meson.build new file mode 100644 index 0000000..e918e6c --- /dev/null +++ b/test/export/meson.build @@ -0,0 +1,21 @@ +project( + 'fortuno_test_export', + 'fortran', + version: '0.0', +) + +if get_option('fortuno_subproject') + fortuno_subproject = subproject('fortuno') + fortuno_dep = fortuno_subproject.get_variable('fortuno_dep') +else + fortuno_dep = dependency('fortuno') +endif + +sources = [] +subdir('app') + +testapp_exe = executable( + 'testapp', + sources: sources, + dependencies: [fortuno_dep], +) diff --git a/test/export/meson_options.txt b/test/export/meson_options.txt new file mode 100644 index 0000000..1c071c1 --- /dev/null +++ b/test/export/meson_options.txt @@ -0,0 +1,6 @@ +option( + 'fortuno_subproject', + type: 'boolean', + value: false, + description: 'Obtain Fortuno from subproject not from external dependency' +)