diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 000000000..1d60b6d6e --- /dev/null +++ b/.dockerignore @@ -0,0 +1,21 @@ +# Ignore everything +* +# Whitelist what is necessary +!setup.py +!version.txt +!environment.yml +!pyproject.toml +!requirements.txt +!distclean.cmake +!cmake/Modules/*.cmake +!CMakeLists.txt +!src/CMakeLists.txt +!swiftest/CMakeLists.txt +!swiftest/tests/CMakeLists.txt +!swiftest/*.py +!swiftest/*.pyx +!swiftest/*.h +!swiftest/tests/*.py +!src/*/*.f90 +!buildscripts/*.sh +!buildscripts/*.yml diff --git a/.gitignore b/.gitignore index 8bbdc2e7b..945b01fd1 100644 --- a/.gitignore +++ b/.gitignore @@ -40,8 +40,13 @@ dump* !singularity/ !Dockerfile !environment.yml +!.dockerignore bin/ build/* +hdf5-* +netcdf-c-* +netcdf-fortran-* +zlib-* diff --git a/Dockerfile b/Dockerfile index 04246b77b..211f9e323 100644 --- a/Dockerfile +++ b/Dockerfile @@ -13,160 +13,19 @@ # dynamically. # This build target compiles all dependencies and the swiftest driver itself -FROM intel/oneapi-hpckit:2023.1.0-devel-ubuntu20.04 as build_deps - -ENV INSTALL_DIR="/usr/local" -ENV FC="${ONEAPI_ROOT}/mpi/latest/bin/mpiifort" -ENV CC="${ONEAPI_ROOT}/mpi/latest/bin/mpicc -cc=icx" -ENV CXX="${ONEAPI_ROOT}/mpi/latest/bin/mpicc -cc=icpx" -ENV F77="${FC}" -ENV CFLAGS="-fPIC" - -# Get the HDF5, NetCDF-C, and NetCDF-Fortran libraries -RUN wget -qO- https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.14/hdf5-1.14.1/src/hdf5-1.14.1-2.tar.gz | tar xvz && \ - wget -qO- https://github.com/Unidata/netcdf-c/archive/refs/tags/v4.9.2.tar.gz | tar xvz && \ - wget -qO- https://github.com/Unidata/netcdf-fortran/archive/refs/tags/v4.6.1.tar.gz | tar xvz && \ - wget -qO- https://www.zlib.net/zlib-1.2.13.tar.gz | tar xvz - -RUN apt-get update && \ - DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ - m4 && \ - rm -rf /var/lib/apt/lists/* - -RUN cd zlib-1.2.13 && \ - ./configure --prefix=${INSTALL_DIR} --static && \ - make && \ - make install - -RUN cd hdf5-1.14.1-2 && \ - ./configure --disable-shared \ - --enable-build-mode=production \ - --disable-fortran \ - --disable-java \ - --disable-cxx \ - --prefix=${INSTALL_DIR} \ - --with-zlib=${INSTALL_DIR} && \ - make && \ - make install - -RUN cd netcdf-c-4.9.2 && \ - ./configure --disable-shared \ - --disable-dap \ - --disable-libxml2 \ - --disable-byterange \ - --prefix=${INSTALL_DIR} && \ - make && \ - make install - -ENV NCDIR="${INSTALL_DIR}" -ENV NFDIR="${INSTALL_DIR}" -ENV HDF5_ROOT="${INSTALL_DIR}" -ENV HDF5_LIBDIR="${HDF5_ROOT}/lib" -ENV HDF5_INCLUDE_DIR="${HDF5_ROOT}/include" -ENV HDF5_PLUGIN_PATH="${HDF5_LIBDIR}/plugin" - -# NetCDF-Fortran library -ENV FCFLAGS="${CFLAGS} -standard-semantics" -ENV FFLAGS=${CFLAGS} -ENV CPPFLAGS="-I${INSTALL_DIR}/include" -ENV LIBS="-L/usr/local/lib -L/usr/lib/x86_64-linux-gnu -lnetcdf -lhdf5_hl -lhdf5 -lm -lz" -RUN cd netcdf-fortran-4.6.1 && \ - ./configure --disable-shared --prefix=${NFDIR} && \ - make && \ - make install - -FROM intel/oneapi-hpckit:2023.1.0-devel-ubuntu20.04 as build_driver -SHELL ["/bin/bash", "-c"] - -# The MACHINE_CODE_VALUE argument is a string that is used when compiling the swiftest_driver. It is appended to the "-x" compiler -# option: (-x${MACHINE_CODE_VALUE}). The default value is set to "sse2" which allows for certain SIMD instructions to be used while -# remaining # compatible with a wide range of CPUs. To get the highest performance, you can pass "host" as an argument, but the -# compiled binary # would only run on a CPU with an architecture compatible with the one that the build was performed on. -# For more details and other options, see: -# https://www.intel.com/content/www/us/en/docs/fortran-compiler/developer-guide-reference/2023-1/x-qx.html -ARG MACHINE_CODE_VALUE="sse2" - -ARG BUILD_TYPE="RELEASE" - -# Additional CMAKE options: -ARG EXTRA_CMAKE_OPTIONS="" - -ENV INSTALL_DIR="/usr/local" -ENV NETCDF_HOME=${INSTALL_DIR} -ENV NETCDF_FORTRAN_HOME=${NETCDF_HOME} -ENV NETCDF_LIBRARY=${NETCDF_HOME} -ENV FOR_COARRAY_NUM_IMAGES=1 -ENV OMP_NUM_THREADS=1 -ENV FC="${ONEAPI_ROOT}/mpi/latest/bin/mpiifort" -ENV CC="${ONEAPI_ROOT}/mpi/latest/bin/mpicc" -ENV CXX="${ONEAPI_ROOT}/mpi/latest/bin/mpicxx" -ENV FFLAGS="-fPIC -standard-semantics" -ENV LDFLAGS="-L${INSTALL_DIR}/lib" -ENV LIBS="-lhdf5_hl -lhdf5 -lz" -ENV PATH /root/miniconda3/bin:$PATH - -COPY --from=build_deps ${INSTALL_DIR}/. ${INSTALL_DIR}/ - -COPY ./environment.yml /swiftest/ - -RUN wget https://repo.anaconda.com/miniconda/Miniconda3-py311_23.5.2-0-Linux-x86_64.sh && \ - /bin/bash Miniconda3-py311_23.5.2-0-Linux-x86_64.sh -b && \ - /root/miniconda3/bin/conda init bash && \ - source /root/.bashrc && conda update --all -y && \ - conda install conda-libmamba-solver -y && \ - conda config --set solver libmamba && \ - cd swiftest && \ - conda env create -f environment.yml && \ - conda init bash && \ - echo "conda activate swiftest-env" >> ~/.bashrc && \ - source ~/.bashrc && \ - conda install -c conda-forge scikit-build -y&& \ - conda install -c anaconda cython -y - -COPY ./cmake/ /swiftest/cmake/ -COPY ./src/ /swiftest/src/ -COPY ./CMakeLists.txt /swiftest/ -COPY ./swiftest/ /swiftest/swiftest/ -COPY ./version.txt /swiftest/ -COPY ./setup.py /swiftest/ -COPY ./requirements.txt /swiftest/ -COPY ./pyproject.toml /swiftest/ - -ENV CMAKE_ARGS="-DMACHINE_CODE_VALUE=${MACHINE_CODE_VALUE} -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DBUILD_SHARED_LIBS=OFF ${EXTRA_CMAKE_OPTIONS}" - -RUN cd swiftest && \ - pip install . -v - -# This build target creates a container that executes just the driver program -FROM ubuntu:20.04 as driver -COPY --from=build_driver /root/miniconda3/envs/swiftest-env/bin/swiftest_driver /usr/local/bin/ -ENTRYPOINT ["/usr/local/bin/swiftest_driver"] - -# This build target exports the binary to the host -FROM scratch AS export_driver -COPY --from=driver /usr/local/bin/swiftest_driver / - -# This build target creates a container with a conda environment with all dependencies needed to run the Python front end and -# analysis tools -FROM continuumio/miniconda3 as python +ARG BUILDIMAGE="intel/oneapi-hpckit:2023.1.0-devel-ubuntu20.04" +FROM ${BUILDIMAGE} as build-deps +ENV SCRIPT_DIR="buildscripts" SHELL ["/bin/bash", "--login", "-c"] -ENV INSTALL_DIR="/usr/local" -ENV CONDA_DIR="/opt/conda" ENV SHELL="/bin/bash" -ENV PATH="${CONDA_DIR}/bin:${PATH}" - -COPY --from=build_driver /root/miniconda3/envs/swiftest-env/ ${CONDA_DIR}/envs/ -RUN conda update --all -y && \ - conda install conda-libmamba-solver -y && \ - conda config --set solver libmamba && \ - conda init bash && \ - echo "conda activate swiftest-env" >> ~/.bashrc && \ - conda clean --all -y && \ - mkdir -p /.astropy && \ - chmod -R 777 /.astropy && \ - mkdir -p /.cache/matplotlib && \ - mkdir -p /.config/matplotlib && \ - chmod -R 777 /.cache/matplotlib && \ - chmod -R 777 /.config/matplotlib - -ENTRYPOINT ["conda", "run", "--no-capture-output", "-n", "swiftest-env"] \ No newline at end of file +WORKDIR /swiftest +COPY . ./ +RUN ${SCRIPT_DIR}/fetch_dependencies.sh +RUN if [ "$BUILDIMAGE" = "intel/oneapi-hpckit:2023.1.0-devel-ubuntu20.04" ]; then \ + ${SCRIPT_DIR}/build_dependencies.sh Intel; \ + else \ + ${SCRIPT_DIR}/make_build_environment.sh && \ + echo "conda activate swiftest-build-env" >> ~/.bashrc && \ + /bin/bash -lic "${SCRIPT_DIR}/build_dependencies.sh GNU"; \ + fi +RUN pip install . \ No newline at end of file diff --git a/buildscripts/.gitignore b/buildscripts/.gitignore new file mode 100644 index 000000000..120c12345 --- /dev/null +++ b/buildscripts/.gitignore @@ -0,0 +1,2 @@ +!*.sh +!*.yml \ No newline at end of file diff --git a/buildscripts/build_all.sh b/buildscripts/build_all.sh new file mode 100755 index 000000000..fdcceb037 --- /dev/null +++ b/buildscripts/build_all.sh @@ -0,0 +1,68 @@ +#!/bin/bash +# This script will determine the steps necessary to set up an appropriate build environment necessary to build Swiftest and all its +# dependencies. The steps that are executed depend on the combination of platform and architecture, as follows: +# +# Linux amd64/x86_64: +# Docker present: The build scripts will run inside a Docker container with Intel compilers (preferred). +# Docker not present: The build scripts will run inside a custom conda environment and build with Intel compilers if available, +# or GNU compiler compilers otherwise. +# Linux aarch64/arm64: +# Docker present: The build scripts will run inside a Docker container with GNU compilers +# Docker not present: The build scripts will run inside a custom conda environment with GNU compilers +# Mac OS (Darwin): +# The build scripts will run inside a custom conda environment with GNU compilers +# +# Copyright 2023 - David Minton +# This file is part of Swiftest. +# Swiftest is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. +# Swiftest 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 General Public License for more details. +# You should have received a copy of the GNU General Public License along with Swiftest. +# If not, see: https://www.gnu.org/licenses. + + +# Determine the platform and architecture +SCRIPT_DIR=$(realpath $(dirname $0)) +ROOT_DIR=$(realpath ${SCRIPT_DIR}/..) +BUILD_DIR=$(realpath ${ROOT_DIR}/build) +read -r OS ARCH < <($SCRIPT_DIR/get_platform.sh) + +# Determine if we are in the correct directory (the script can either be run from the Swiftest project root directory or the +# buildscripts directory) +if [ ! -f "${ROOT_DIR}/setup.py" ]; then + echo "Error: setup.py not found" + exit 1 +fi +cd ${ROOT_DIR} +VERSION=$( cat version.txt ) +echo "Building Swiftest version ${VERSION} for ${OS}-${ARCH}" + +case $OS in + Linux) + # Determine if Docker is available + if command -v docker &> /dev/null; then + echo "Docker detected" + if [ "$ARCH" = "x86_64" ]; then + BUILDIMAGE="intel/oneapi-hpckit:2023.1.0-devel-ubuntu20.04" + else + BUILDIMAGE="condaforge/mambaforge:23.1.0-4" + fi + cmd="docker build --tag swiftest:latest --tag swiftest:${VERSION} --build-arg BUILDIMAGE=\"${BUILDIMAGE}\" ." + echo "Executing Docker build:\n${cmd}" + eval "$cmd" + exit 0 + else + echo "Docker not detected" + fi + ;; + MacOSX) + ;; + *) + echo "Swiftest is currently not configured to build for platform ${OS}-${ARCH}" + exit 1 + ;; +esac + + + diff --git a/buildscripts/build_dependencies.sh b/buildscripts/build_dependencies.sh new file mode 100755 index 000000000..b06b1e8a8 --- /dev/null +++ b/buildscripts/build_dependencies.sh @@ -0,0 +1,105 @@ +#!/bin/bash +# This script will build all of the dependency libraries needed by Swiftest. Builds the following from source: +# Zlib, hdf5, netcdf-c, netcdf-fortran +# +# Copyright 2023 - David Minton +# This file is part of Swiftest. +# Swiftest is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. +# Swiftest 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 General Public License for more details. +# You should have received a copy of the GNU General Public License along with Swiftest. +# If not, see: https://www.gnu.org/licenses. +SCRIPT_DIR=$(realpath $(dirname $0)) +BUILD_DIR=$(realpath ${SCRIPT_DIR}/../build) +mkdir -p ${BUILD_DIR} +cd $BUILD_DIR + +USTMT="Usage: $0 <{Intel}|GNU>" +if [[ ( $@ == "--help") || $@ == "-h" ]]; then + echo $USTMT + exit 0 +fi +COMPILER=${1:-Intel} + +case $COMPILER in + Intel) + if command -v ifx &> /dev/null; then + export FC=$(command -v ifx) + export CC=$(command -v icx) + export CXX=$(command -v icpx) + elif command -v ifort &> /dev/null; then + export FC=$(command -v ifort) + export CC=$(command -v icc) + export CXX=$(command -v icpc) + else + echo "Error. Cannot find valid Intel fortran compiler." + exit 1 + fi + export F77="${FC}" + ;; + GNU) + export FC=$(command -v gfortran) + export CC=$(command -v gcc) + export CXX=$(command -v g++) + ;; + *) + echo "Unknown compiler type: ${COMPILER}" + echo $USTMT + exit 1 + ;; +esac +export F77=${FC} +echo "Using $COMPILER compilers:\nFC: $FC\nCC: $CC\nCXX: $CXX\n" + +export INSTALL_DIR=${BUILD_DIR} +mkdir -p ${INSTALL_DIR} +export NCDIR="${INSTALL_DIR}" +export NFDIR="${INSTALL_DIR}" +export HDF5_ROOT="${INSTALL_DIR}" +export HDF5_LIBDIR="${HDF5_ROOT}/lib" +export HDF5_INCLUDE_DIR="${HDF5_ROOT}/include" +export HDF5_PLUGIN_PATH="${HDF5_LIBDIR}/plugin" + +export LDFLAGS="-L${INSTALL_DIR}/lib" +export CPATH="${INSTALL_DIR}/include" +export CFLAGS="-fPIC" + +cd zlib-1.2.13 +./configure --prefix=${INSTALL_DIR} --static +make +make install +cd ../hdf5-1.14.1-2 +./configure --disable-shared \ + --enable-build-mode=production \ + --disable-fortran \ + --disable-java \ + --disable-cxx \ + --prefix=${INSTALL_DIR} \ + --with-zlib=${INSTALL_DIR} +make +make install + +cd ../netcdf-c-4.9.2 +./configure --disable-shared \ + --disable-dap \ + --disable-byterange \ + --prefix=${INSTALL_DIR} +make +make check +make install + +if [ $COMPILER = "Intel" ]; then + export FCFLAGS="${CFLAGS} -standard-semantics" + export FFLAGS=${CFLAGS} +else + export FCFLAGS="${CFLAGS}" + export FFLAGS="${CFLAGS}" +fi + +export LIBS="$(${INSTALL_DIR}/bin/nc-config --libs)" +cd ../netcdf-fortran-4.6.1 +./configure --disable-shared --with-pic --prefix=${NFDIR} +make +make check +make install diff --git a/buildscripts/fetch_dependencies.sh b/buildscripts/fetch_dependencies.sh new file mode 100755 index 000000000..2330d3683 --- /dev/null +++ b/buildscripts/fetch_dependencies.sh @@ -0,0 +1,22 @@ +#!/bin/bash +# This script will download all of the dependency libraries needed by Swiftest. +# Zlib, hdf5, netcdf-c, netcdf-fortran +# +# Copyright 2023 - David Minton +# This file is part of Swiftest. +# Swiftest is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. +# Swiftest 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 General Public License for more details. +# You should have received a copy of the GNU General Public License along with Swiftest. +# If not, see: https://www.gnu.org/licenses. +SCRIPT_DIR=$(realpath $(dirname $0)) +BUILD_DIR=$(realpath ${SCRIPT_DIR}/../build) + +mkdir -p ${BUILD_DIR} +cd $BUILD_DIR + +wget -qO- https://www.zlib.net/zlib-1.2.13.tar.gz | tar xvz +wget -qO- https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.14/hdf5-1.14.1/src/hdf5-1.14.1-2.tar.gz | tar xvz +wget -qO- https://github.com/Unidata/netcdf-c/archive/refs/tags/v4.9.2.tar.gz | tar xvz +wget -qO- https://github.com/Unidata/netcdf-fortran/archive/refs/tags/v4.6.1.tar.gz | tar xvz diff --git a/buildscripts/get_platform.sh b/buildscripts/get_platform.sh new file mode 100755 index 000000000..c30592d7f --- /dev/null +++ b/buildscripts/get_platform.sh @@ -0,0 +1,59 @@ +#!/bin/bash +# This script will determine the platform (OS and architecture) and format them in a way that other scripts can make use of. +# +# The following combinations are valid: +# Linux x86_64 +# Linux aarch64 +# MacOSX x86_64 +# MacOSX arm64 +# +# Copyright 2023 - David Minton +# This file is part of Swiftest. +# Swiftest is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. +# Swiftest 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 General Public License for more details. +# You should have received a copy of the GNU General Public License along with Swiftest. +# If not, see: https://www.gnu.org/licenses. + + +# Determine the platform and architecture +OS=$(uname -s) +ARCH=$(uname -m) + +case $ARCH in + x86_64) + ;; + amd64) + ARCH="x86_64" + ;; + arm64) + if [ "$OS" = "Linux" ]; then + ARCH="aarch64" + fi + ;; + aarch64) + if [ "$OS" = "Darwin" ]; then + ARCH="arm64" + fi + ;; + *) + echo "Swiftest is currently not configured to build for platform ${OS}-${ARCH}" + exit 1 + ;; +esac + + +case $OS in + Linux) + ;; + Darwin) + OS="MacOSX" + ;; + *) + echo "Swiftest is currently not configured to build for platform ${OS}-${ARCH}" + exit 1 + ;; +esac + +echo $OS $ARCH diff --git a/buildscripts/make_build_environment.sh b/buildscripts/make_build_environment.sh new file mode 100755 index 000000000..fb42fc110 --- /dev/null +++ b/buildscripts/make_build_environment.sh @@ -0,0 +1,44 @@ +#!/bin/bash -l +# This script will create a miniforge3 conda environment in order to execute the build +# Zlib, hdf5, netcdf-c, netcdf-fortran +# +# Copyright 2023 - David Minton +# This file is part of Swiftest. +# Swiftest is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. +# Swiftest 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 General Public License for more details. +# You should have received a copy of the GNU General Public License along with Swiftest. +# If not, see: https://www.gnu.org/licenses. + +SCRIPT_DIR=$(realpath $(dirname $0)) + +# Determine if mamba/conda is already installed on the system. If not, install Mambaforge +if command -v mamba; then + CONDABIN="mamba" +elif command -v conda; then + CONDABIN="conda" +else + BUILD_DIR=$(realpath ${SCRIPT_DIR}/../build) + mkdir -p ${BUILD_DIR} + read -r OS ARCH < <(${SCRIPT_DIR}/get_platform.sh) + unset PYTHONPATH + cd $BUILD_DIR + wget https://github.com/conda-forge/miniforge/releases/download/23.1.0-4/Mambaforge-23.1.0-4-${OS}-${ARCH}.sh + + MYSHELL=$(basename $SHELL) + INSTALL_DIR=${HOME}/mambaforge + ${SHELL} Mambaforge-23.1.0-4-${OS}-${ARCH}.sh -b -p ${INSTALL_DIR} + rm Mambaforge-23.1.0-4-${OS}-${ARCH}.sh + + CONDABIN="mamba" + if [ $MYSHELL != "bash" ]; then + $INSTALL_DIR/condabin/$CONDABIN init $MYSHELL + fi + $INSTALL_DIR/condabin/$CONDABIN init bash + source ~/.bashrc + export PATH=${INSTALL_DIR}/bin:$PATH +fi +cd $SCRIPT_DIR +${CONDABIN} update --name base ${CONDABIN} -y +${CONDABIN} env create --file swiftest-build-env.yml --name swiftest-build-env \ No newline at end of file diff --git a/buildscripts/swiftest-build-env.yml b/buildscripts/swiftest-build-env.yml new file mode 100644 index 000000000..914b3ffdb --- /dev/null +++ b/buildscripts/swiftest-build-env.yml @@ -0,0 +1,16 @@ +name: swiftest-build-env + +channels: + - conda-forge + - defaults + +dependencies: + - python>=3.8 + - compilers>=1.6 + - setuptools>=42 + - scikit-build>=0.17 + - cmake>=3.5.0 + - cython>=3.0.0 + - make + - m4 + - ninja \ No newline at end of file diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 9cab5f7f3..00bcf31f8 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -34,6 +34,7 @@ ENDIF () # RELEASE, PROFILING, and TESTING. INCLUDE(SetFortranFlags) + # Add the source files SET(STRICT_MATH_FILES ${SRC}/collision/collision_generate.f90 @@ -127,7 +128,6 @@ ENDIF () # Turn preprocessor on for all files SET_SOURCE_FILES_PROPERTIES(${SWIFTEST_src} ${DRIVER_src} PROPERTIES Fortran_PREPROCESS ON) - #Set strict vs fast math flags STRING(TOUPPER "${CMAKE_BUILD_TYPE}" BT) IF(BT STREQUAL "RELEASE" OR BT STREQUAL "PROFILE") @@ -142,12 +142,11 @@ ELSEIF(BT STREQUAL "PROFILE") ENDIF() ##################################################### -# Add the needed libraries and special compiler flags +# Add the needed libraries ##################################################### - # Create a library from the source files, except the driver SET(SWIFTEST_LIBRARY swiftest) -ADD_LIBRARY(${SWIFTEST_LIBRARY} ${SWIFTEST_src}) +ADD_LIBRARY(${SWIFTEST_LIBRARY} ${netcdff} ${SWIFTEST_src}) # Define the executable name SET(SWIFTEST_DRIVER swiftest_driver)