From d4c8dcbce6b61a7b82ba579c7077d0b6f0c22440 Mon Sep 17 00:00:00 2001 From: MintoDA1 <51412913+MintoDA1@users.noreply.github.com> Date: Fri, 22 Sep 2023 17:17:23 -0400 Subject: [PATCH] Major update to build scripts. Now use CMake for all dependencies and attempted to simplify the FindNETCDF_Fortran package finder --- CMakeFiles/3.27.0/CMakeCCompiler.cmake | 74 +++++ CMakeFiles/3.27.0/CMakeFortranCompiler.cmake | 64 ++++ CMakeFiles/3.27.0/CMakeSystem.cmake | 15 + CMakeLists.txt | 9 +- buildscripts/build_dependencies.sh | 44 +-- buildscripts/build_hdf5.sh | 40 ++- buildscripts/build_libaec.sh | 69 +++++ buildscripts/build_netcdf-c.sh | 21 +- buildscripts/build_netcdf-fortran.sh | 13 +- buildscripts/set_environment.sh | 7 +- cmake/Modules/FindNETCDF_Fortran.cmake | 290 ++++++++++--------- pyproject.toml | 10 +- 12 files changed, 473 insertions(+), 183 deletions(-) create mode 100644 CMakeFiles/3.27.0/CMakeCCompiler.cmake create mode 100644 CMakeFiles/3.27.0/CMakeFortranCompiler.cmake create mode 100644 CMakeFiles/3.27.0/CMakeSystem.cmake create mode 100755 buildscripts/build_libaec.sh diff --git a/CMakeFiles/3.27.0/CMakeCCompiler.cmake b/CMakeFiles/3.27.0/CMakeCCompiler.cmake new file mode 100644 index 000000000..a1b553d9c --- /dev/null +++ b/CMakeFiles/3.27.0/CMakeCCompiler.cmake @@ -0,0 +1,74 @@ +set(CMAKE_C_COMPILER "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang") +set(CMAKE_C_COMPILER_ARG1 "") +set(CMAKE_C_COMPILER_ID "AppleClang") +set(CMAKE_C_COMPILER_VERSION "15.0.0.15000040") +set(CMAKE_C_COMPILER_VERSION_INTERNAL "") +set(CMAKE_C_COMPILER_WRAPPER "") +set(CMAKE_C_STANDARD_COMPUTED_DEFAULT "17") +set(CMAKE_C_EXTENSIONS_COMPUTED_DEFAULT "ON") +set(CMAKE_C_COMPILE_FEATURES "c_std_90;c_function_prototypes;c_std_99;c_restrict;c_variadic_macros;c_std_11;c_static_assert;c_std_17;c_std_23") +set(CMAKE_C90_COMPILE_FEATURES "c_std_90;c_function_prototypes") +set(CMAKE_C99_COMPILE_FEATURES "c_std_99;c_restrict;c_variadic_macros") +set(CMAKE_C11_COMPILE_FEATURES "c_std_11;c_static_assert") +set(CMAKE_C17_COMPILE_FEATURES "c_std_17") +set(CMAKE_C23_COMPILE_FEATURES "c_std_23") + +set(CMAKE_C_PLATFORM_ID "Darwin") +set(CMAKE_C_SIMULATE_ID "") +set(CMAKE_C_COMPILER_FRONTEND_VARIANT "GNU") +set(CMAKE_C_SIMULATE_VERSION "") + + + + +set(CMAKE_AR "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ar") +set(CMAKE_C_COMPILER_AR "") +set(CMAKE_RANLIB "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib") +set(CMAKE_C_COMPILER_RANLIB "") +set(CMAKE_LINKER "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld") +set(CMAKE_MT "") +set(CMAKE_TAPI "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/tapi") +set(CMAKE_COMPILER_IS_GNUCC ) +set(CMAKE_C_COMPILER_LOADED 1) +set(CMAKE_C_COMPILER_WORKS TRUE) +set(CMAKE_C_ABI_COMPILED TRUE) + +set(CMAKE_C_COMPILER_ENV_VAR "CC") + +set(CMAKE_C_COMPILER_ID_RUN 1) +set(CMAKE_C_SOURCE_FILE_EXTENSIONS c;m) +set(CMAKE_C_IGNORE_EXTENSIONS h;H;o;O;obj;OBJ;def;DEF;rc;RC) +set(CMAKE_C_LINKER_PREFERENCE 10) +set(CMAKE_C_LINKER_DEPFILE_SUPPORTED FALSE) + +# Save compiler ABI information. +set(CMAKE_C_SIZEOF_DATA_PTR "8") +set(CMAKE_C_COMPILER_ABI "") +set(CMAKE_C_BYTE_ORDER "LITTLE_ENDIAN") +set(CMAKE_C_LIBRARY_ARCHITECTURE "") + +if(CMAKE_C_SIZEOF_DATA_PTR) + set(CMAKE_SIZEOF_VOID_P "${CMAKE_C_SIZEOF_DATA_PTR}") +endif() + +if(CMAKE_C_COMPILER_ABI) + set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_C_COMPILER_ABI}") +endif() + +if(CMAKE_C_LIBRARY_ARCHITECTURE) + set(CMAKE_LIBRARY_ARCHITECTURE "") +endif() + +set(CMAKE_C_CL_SHOWINCLUDES_PREFIX "") +if(CMAKE_C_CL_SHOWINCLUDES_PREFIX) + set(CMAKE_CL_SHOWINCLUDES_PREFIX "${CMAKE_C_CL_SHOWINCLUDES_PREFIX}") +endif() + + + + + +set(CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES "/usr/local/include;/opt/homebrew/include;/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/15.0.0/include;/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.0.sdk/usr/include;/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include") +set(CMAKE_C_IMPLICIT_LINK_LIBRARIES "") +set(CMAKE_C_IMPLICIT_LINK_DIRECTORIES "/usr/local/lib;/opt/homebrew/lib") +set(CMAKE_C_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "") diff --git a/CMakeFiles/3.27.0/CMakeFortranCompiler.cmake b/CMakeFiles/3.27.0/CMakeFortranCompiler.cmake new file mode 100644 index 000000000..12e12ebd9 --- /dev/null +++ b/CMakeFiles/3.27.0/CMakeFortranCompiler.cmake @@ -0,0 +1,64 @@ +set(CMAKE_Fortran_COMPILER "/opt/homebrew/bin/gfortran-12") +set(CMAKE_Fortran_COMPILER_ARG1 "") +set(CMAKE_Fortran_COMPILER_ID "GNU") +set(CMAKE_Fortran_COMPILER_VERSION "12.3.0") +set(CMAKE_Fortran_COMPILER_WRAPPER "") +set(CMAKE_Fortran_PLATFORM_ID "") +set(CMAKE_Fortran_SIMULATE_ID "") +set(CMAKE_Fortran_COMPILER_FRONTEND_VARIANT "GNU") +set(CMAKE_Fortran_SIMULATE_VERSION "") + + +set(CMAKE_Fortran_COMPILER_SYSROOT "/Library/Developer/CommandLineTools/SDKs/MacOSX13.sdk/usr") +set(CMAKE_COMPILER_SYSROOT "/Library/Developer/CommandLineTools/SDKs/MacOSX13.sdk/usr") + +set(CMAKE_AR "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ar") +set(CMAKE_Fortran_COMPILER_AR "/opt/homebrew/bin/gcc-ar-12") +set(CMAKE_RANLIB "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib") +set(CMAKE_TAPI "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/tapi") +set(CMAKE_Fortran_COMPILER_RANLIB "/opt/homebrew/bin/gcc-ranlib-12") +set(CMAKE_COMPILER_IS_GNUG77 1) +set(CMAKE_Fortran_COMPILER_LOADED 1) +set(CMAKE_Fortran_COMPILER_WORKS TRUE) +set(CMAKE_Fortran_ABI_COMPILED TRUE) + +set(CMAKE_Fortran_COMPILER_ENV_VAR "FC") + +set(CMAKE_Fortran_COMPILER_SUPPORTS_F90 1) + +set(CMAKE_Fortran_COMPILER_ID_RUN 1) +set(CMAKE_Fortran_SOURCE_FILE_EXTENSIONS f;F;fpp;FPP;f77;F77;f90;F90;for;For;FOR;f95;F95;f03;F03;f08;F08) +set(CMAKE_Fortran_IGNORE_EXTENSIONS h;H;o;O;obj;OBJ;def;DEF;rc;RC) +set(CMAKE_Fortran_LINKER_PREFERENCE 20) +set(CMAKE_Fortran_LINKER_DEPFILE_SUPPORTED FALSE) +if(UNIX) + set(CMAKE_Fortran_OUTPUT_EXTENSION .o) +else() + set(CMAKE_Fortran_OUTPUT_EXTENSION .obj) +endif() + +# Save compiler ABI information. +set(CMAKE_Fortran_SIZEOF_DATA_PTR "8") +set(CMAKE_Fortran_COMPILER_ABI "") +set(CMAKE_Fortran_LIBRARY_ARCHITECTURE "") + +if(CMAKE_Fortran_SIZEOF_DATA_PTR AND NOT CMAKE_SIZEOF_VOID_P) + set(CMAKE_SIZEOF_VOID_P "${CMAKE_Fortran_SIZEOF_DATA_PTR}") +endif() + +if(CMAKE_Fortran_COMPILER_ABI) + set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_Fortran_COMPILER_ABI}") +endif() + +if(CMAKE_Fortran_LIBRARY_ARCHITECTURE) + set(CMAKE_LIBRARY_ARCHITECTURE "") +endif() + + +set(CMAKE_Fortran_SYSROOT_FLAG "-isysroot") +set(CMAKE_Fortran_OSX_DEPLOYMENT_TARGET_FLAG "-mmacosx-version-min=") + +set(CMAKE_Fortran_IMPLICIT_INCLUDE_DIRECTORIES "/opt/homebrew/Cellar/gcc@12/12.3.0/lib/gcc/12/gcc/aarch64-apple-darwin22/12/finclude;/usr/local/include;/opt/homebrew/include;/opt/homebrew/Cellar/gcc@12/12.3.0/lib/gcc/12/gcc/aarch64-apple-darwin22/12/include;/opt/homebrew/Cellar/gcc@12/12.3.0/lib/gcc/12/gcc/aarch64-apple-darwin22/12/include-fixed;/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.0.sdk/usr/include") +set(CMAKE_Fortran_IMPLICIT_LINK_LIBRARIES "gfortran;emutls_w;gcc;quadmath;emutls_w;gcc;gcc") +set(CMAKE_Fortran_IMPLICIT_LINK_DIRECTORIES "/usr/local/lib;/opt/homebrew/lib;/opt/homebrew/Cellar/gcc@12/12.3.0/lib/gcc/12/gcc/aarch64-apple-darwin22/12;/opt/homebrew/Cellar/gcc@12/12.3.0/lib/gcc/12/gcc;/opt/homebrew/Cellar/gcc@12/12.3.0/lib/gcc/12") +set(CMAKE_Fortran_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "") diff --git a/CMakeFiles/3.27.0/CMakeSystem.cmake b/CMakeFiles/3.27.0/CMakeSystem.cmake new file mode 100644 index 000000000..ac5601a0f --- /dev/null +++ b/CMakeFiles/3.27.0/CMakeSystem.cmake @@ -0,0 +1,15 @@ +set(CMAKE_HOST_SYSTEM "Darwin-22.6.0") +set(CMAKE_HOST_SYSTEM_NAME "Darwin") +set(CMAKE_HOST_SYSTEM_VERSION "22.6.0") +set(CMAKE_HOST_SYSTEM_PROCESSOR "arm64") + + + +set(CMAKE_SYSTEM "Darwin-22.6.0") +set(CMAKE_SYSTEM_NAME "Darwin") +set(CMAKE_SYSTEM_VERSION "22.6.0") +set(CMAKE_SYSTEM_PROCESSOR "arm64") + +set(CMAKE_CROSSCOMPILING "FALSE") + +set(CMAKE_SYSTEM_LOADED 1) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0e8d4b256..ee14a5b37 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -66,14 +66,7 @@ IF(PROJECT_SOURCE_DIR STREQUAL PROJECT_BINARY_DIR) MESSAGE(FATAL_ERROR "In-source builds not allowed. Please make a new directory (called a build directory) and run CMake from there.\n") ENDIF() -IF (CMAKE_SYSTEM_NAME STREQUAL "Windows") - FILE(GLOB LIBDIRS "C:/Program Files*/NC4F") - LIST(SORT LIBDIRS) - LIST(GET LIBDIRS -1 LIBPREFIX) - SET(netCDF-Fortran_DIR "${LIBPREFIX}/lib/cmake/netCDF" CACHE PATH "Location of provided netCDF-FortranConfig.cmake file") -ENDIF () -MESSAGE(STATUS "Looking for netCDF-FortranConfig.cmake in ${netCDF-Fortran_DIR}") -FIND_PACKAGE(netCDF-Fortran REQUIRED) +FIND_PACKAGE(NETCDF_Fortran REQUIRED) FIND_PACKAGE(HDF5 COMPONENTS C HL REQUIRED) # Ensure scikit-build modules diff --git a/buildscripts/build_dependencies.sh b/buildscripts/build_dependencies.sh index 704aa1e28..11e3bdbdc 100755 --- a/buildscripts/build_dependencies.sh +++ b/buildscripts/build_dependencies.sh @@ -16,30 +16,34 @@ SCRIPT_DIR=$(realpath $(dirname $0)) set -a ARGS=$@ . ${SCRIPT_DIR}/_build_getopts.sh ${ARGS} -NPROC=$(nproc) - +set -e cd $ROOT_DIR -NINJA_VER="1.11.1" -printf "*********************************************************\n" -printf "* FETCHING NINJA SOURCE *\n" -printf "*********************************************************\n" -printf "Copying files to ${DEPENDENCY_DIR}\n" -mkdir -p ${DEPENDENCY_DIR} -if [ ! -d ${DEPENDENCY_DIR}/ninja-${NINJA_VER} ]; then - [ -d ${DEPENDENCY_DIR}/zlib-* ] && rm -rf ${DEPENDENCY_DIR}/zlib-* - curl -L https://github.com/ninja-build/ninja/archive/refs/tags/v${NINJA_VER}.tar.gz | tar xvz -C ${DEPENDENCY_DIR} -fi -cd ${DEPENDENCY_DIR}/ninja-* -cmake -B build -S . -DCMAKE_INSTALL_PREFIX=${PREFIX} -cmake --build build -if [ -w ${PREFIX} ]; then - cmake --install build -else - sudo cmake --install build +if ! command -v ninja &> /dev/null; then + NINJA_VER="1.11.1" + + printf "*********************************************************\n" + printf "* FETCHING NINJA SOURCE *\n" + printf "*********************************************************\n" + printf "Copying files to ${DEPENDENCY_DIR}\n" + mkdir -p ${DEPENDENCY_DIR} + if [ ! -d ${DEPENDENCY_DIR}/ninja-${NINJA_VER} ]; then + [ -d ${DEPENDENCY_DIR}/zlib-* ] && rm -rf ${DEPENDENCY_DIR}/zlib-* + curl -L https://github.com/ninja-build/ninja/archive/refs/tags/v${NINJA_VER}.tar.gz | tar xvz -C ${DEPENDENCY_DIR} + fi + cd ${DEPENDENCY_DIR}/ninja-* + cmake -B build -S . -DCMAKE_INSTALL_PREFIX=${PREFIX} + cmake --build build + if [ -w ${PREFIX} ]; then + cmake --install build + else + sudo cmake --install build + fi fi -set -e +NPROC=$(nproc) + +${SCRIPT_DIR}/build_libaec.sh ${ARGS} ${SCRIPT_DIR}/build_zlib.sh ${ARGS} ${SCRIPT_DIR}/build_hdf5.sh ${ARGS} ${SCRIPT_DIR}/build_netcdf-c.sh ${ARGS} diff --git a/buildscripts/build_hdf5.sh b/buildscripts/build_hdf5.sh index f6c5a2938..43308cc5e 100755 --- a/buildscripts/build_hdf5.sh +++ b/buildscripts/build_hdf5.sh @@ -10,6 +10,12 @@ # 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. + +HDF5_VER="1_14_2" +PLUGIN_VER="1.14.0" +ZLIB_VER="1.3" +AEC_VER="1.0.6" + SCRIPT_DIR=$(realpath $(dirname $0)) set -a ARGS=$@ @@ -27,7 +33,6 @@ printf "Using ${OS} compilers:\nFC: ${FC}\nCC: ${CC}\nCXX: ${CXX}\n" printf "Installing to ${PREFIX}\n" printf "\n" -HDF5_VER="1_14_2" printf "*********************************************************\n" printf "* FETCHING HDF5 SOURCE *\n" printf "*********************************************************\n" @@ -63,8 +68,39 @@ printf "LDFLAGS: ${LDFLAGS}\n" printf "*********************************************************\n" cd ${DEPENDENCY_DIR}/hdfsrc +ZLIB_TGZ_NAME="zlib-${ZLIB_VER}.tar.gz" +ZLIB_TGZ_ORIGPATH="https://github.com/madler/zlib/releases/download/v${ZLIB_VER}/" +LIBAEC_TGZ_NAME="libaec-${AEC_VER}.tar.gz" +LIBAEC_TGZ_ORIGPATH="https://github.com/MathisRosenhauer/libaec/releases/download/v${AEC_VER}/" + +HDF5_ROOT="${PREFIX}/HDF_Group/HDF5/1.14.2" ZLIB_ROOT=${PREFIX} -cmake -B build -S . -G Ninja -DCMAKE_INSTALL_PREFIX=${PREFIX} +SZIP_ROOT=${PREFIX} +if [ $OS = "MacOSX" ]; then + ZLIB_LIBRARY="${ZLIB_ROOT}/lib/libz.dylib" + SZIP_LIBRARY="${SZIP_ROOT}/lib/libsz.dylib" +else + ZLIB_LIBRARY="${ZLIB_ROOT}/lib/libz.so" + SZIP_LIBRARY="${SZIP_ROOT}/lib/libsz.so" +fi + +cmake -B build -C ./config/cmake/cacheinit.cmake -G Ninja \ + -DCMAKE_INSTALL_PREFIX:PATH=${HDF5_ROOT} \ + -DHDF5_ALLOW_EXTERNAL_SUPPORT:STRING="TGZ" \ + -DBUILD_ZLIB_WITH_FETCHCONTENT:BOOL=ON \ + -DZLIB_USE_LOCALCONTENT:BOOL=OFF \ + -DZLIB_TGZ_ORIGNAME:STRING="${ZLIB_TGZ_NAME}" \ + -DZLIB_TGZ_ORIGPATH:STRING="${ZLIB_TGZ_ORIGPATH}" \ + -DHDF5_ENABLE_SZIP_SUPPORT:BOOL=ON \ + -DBUILD_SZIP_WITH_FETCHCONTENT:BOOL=ON \ + -DLIBAEC_USE_LOCALCONTENT:BOOL=OFF \ + -DLIBAEC_TGZ_ORIGNAME:STRING="${LIBAEC_TGZ_NAME}" \ + -DLIBAEC_TGZ_ORIGPATH:STRING="${LIBAEC_TGZ_ORIGPATH}" \ + -DHDF5_ENABLE_PLUGIN_SUPPORT:BOOL=OFF \ + -DHDF5_BUILD_CPP_LIB:BOOL=OFF \ + -DHDF5_BUILD_FORTRAN:BOOL=OFF \ + -DHDF5_BUILD_JAVA:BOOL=OFF . + cmake --build build -j${NPROC} if [ -w ${PREFIX} ]; then cmake --install build diff --git a/buildscripts/build_libaec.sh b/buildscripts/build_libaec.sh new file mode 100755 index 000000000..8e2f4d0d2 --- /dev/null +++ b/buildscripts/build_libaec.sh @@ -0,0 +1,69 @@ +#!/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)) +set -a +ARGS=$@ +. ${SCRIPT_DIR}/_build_getopts.sh ${ARGS} +. ${SCRIPT_DIR}/set_compilers.sh +# Get the OpenMP Libraries +if [ $OS = "MacOSX" ]; then + ${SCRIPT_DIR}/get_lomp.sh ${ARGS} +fi + +printf "*********************************************************\n" +printf "* STARTING DEPENDENCY BUILD *\n" +printf "*********************************************************\n" +printf "Using ${OS} compilers:\nFC: ${FC}\nCC: ${CC}\nCXX: ${CXX}\n" +printf "Installing to ${PREFIX}\n" +printf "\n" + +AEC_VER="1.0.6" +LIBAEC_TGZ_NAME="libaec-${AEC_VER}.tar.gz" + +printf "*********************************************************\n" +printf "* FETCHING AEC SOURCE *\n" +printf "*********************************************************\n" +printf "Copying files to ${DEPENDENCY_DIR}\n" +mkdir -p ${DEPENDENCY_DIR} +if [ ! -d ${DEPENDENCY_DIR}/aec-${ZLIB_VER} ]; then + [ -d ${DEPENDENCY_DIR}/aec-* ] && rm -rf ${DEPENDENCY_DIR}/aec-* + + curl -L https://github.com/MathisRosenhauer/libaec/releases/download/v${AEC_VER}/${LIBAEC_TGZ_NAME}| tar xvz -C ${DEPENDENCY_DIR} +fi + +printf "*********************************************************\n" +printf "* BUILDING AEC LIBRARY *\n" +printf "*********************************************************\n" +printf "LIBS: ${LIBS}\n" +printf "CFLAGS: ${CFLAGS}\n" +printf "CPPFLAGS: ${CPPFLAGS}\n" +printf "CPATH: ${CPATH}\n" +printf "LD_LIBRARY_PATH: ${LD_LIBRARY_PATH}\n" +printf "LDFLAGS: ${LDFLAGS}\n" +printf "*********************************************************\n" + +cd ${DEPENDENCY_DIR}/libaec-* +mkdir build +cd build +cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=${PREFIX} +cmake --build build -j${NPROC} +if [ -w ${PREFIX} ]; then + make install +else + sudo make install +fi + +if [ $? -ne 0 ]; then + printf "libaec could not be compiled.\n" + exit 1 +fi \ No newline at end of file diff --git a/buildscripts/build_netcdf-c.sh b/buildscripts/build_netcdf-c.sh index 91be2b04c..3eafa0d7e 100755 --- a/buildscripts/build_netcdf-c.sh +++ b/buildscripts/build_netcdf-c.sh @@ -53,12 +53,25 @@ printf "HDF5_ROOT: ${HDF5_ROOT}\n" printf "*********************************************************\n" cd ${DEPENDENCY_DIR}/netcdf-c-* -cmake -B build -S . -G Ninja -DCMAKE_INSTALL_PREFIX=${PREFIX} -cmake --build build -j${NPROC} +NCDIR="${PREFIX}" +ZLIB_ROOT=${PREFIX} +cmake -B build -S . -G Ninja \ + -DCMAKE_BUILD_TYPE:STRING="Release" \ + -DHDF5_DIR:PATH=${HDF5_ROOT}/cmake \ + -DCMAKE_INSTALL_PREFIX:STRING="${NCDIR}" \ + -DENABLE_DAP:BOOL=OFF \ + -DENABLE_BYTERANGE:BOOL=OFF \ + -DENABLE_NCZARR:BOOL=OFF \ + -DENABLE_NCZARR_FILTERS:BOOL=OFF \ + -DENABLE_NCZARR_FILTER_TESTING:BOOL=OFF \ + -DENABLE_NCZARR_FILTERS_TESTING:BOOL=OFF \ + -DENABLE_LIBXML2:BOOL=OFF \ + +cmake --build build -j${NPROC} if [ -w ${PREFIX} ]; then - cmake --install build + cmake --install build else - sudo cmake --install build + sudo cmake --install build fi if [ $? -ne 0 ]; then diff --git a/buildscripts/build_netcdf-fortran.sh b/buildscripts/build_netcdf-fortran.sh index fbbd3930a..0f920a8e1 100755 --- a/buildscripts/build_netcdf-fortran.sh +++ b/buildscripts/build_netcdf-fortran.sh @@ -51,19 +51,22 @@ printf "LDFLAGS: ${LDFLAGS}\n" printf "*********************************************************\n" cd ${DEPENDENCY_DIR}/netcdf-fortran-* - -NCLIBDIR=$(${PREFIX}/bin/nc-config --libdir) +NFDIR="${PREFIX}" +NCLIBDIR=$(${NCDIR}/bin/nc-config --libdir) if [ $OS = "MacOSX" ]; then netCDF_LIBRARIES="${NCLIBDIR}/libnetcdf.dylib" else netCDF_LIBRARIES="${NCLIBDIR}/libnetcdf.so" fi -cmake -B build -S . -G Ninja -DnetCDF_INCLUDE_DIR="${PREFIX}/include" -DnetCDF_LIBRARIES="${netCDF_LIBRARIES}" -DCMAKE_INSTALL_PREFIX=${PREFIX} -cmake --build build -j${NPROC} +cmake -B build -S . -G Ninja \ + -DnetCDF_INCLUDE_DIR:PATH="${NCDIR}/include" \ + -DnetCDF_LIBRARIES:FILEPATH="${netCDF_LIBRARIES}" \ + -DCMAKE_INSTALL_PREFIX:PATH=${NFDIR} +cmake --build build -j${NPROC} if [ -w ${PREFIX} ]; then cmake --install build else - sudo cmake --install build + sudo cmake --install build fi if [ $? -ne 0 ]; then diff --git a/buildscripts/set_environment.sh b/buildscripts/set_environment.sh index e1cffbc64..bf1775978 100755 --- a/buildscripts/set_environment.sh +++ b/buildscripts/set_environment.sh @@ -11,18 +11,19 @@ LDFLAGS="-Wl,-rpath,${ROOT_DIR}/lib -Wl,-no_compact_unwind -L${PREFIX}/lib -L${ CPATH="/usr/local/include:${PREFIX}/include:${HOMEBREW_PREFIX}/include:${ROOT_DIR}/include" CPPFLAGS="-isystem ${PREFIX}/include -isystem /usr/local/include -Xclang -fopenmp" LIBS="-lomp" +CFLAGS="-mmacosx-version-min=${MACOSX_DEPLOYMENT_TARGET} -Wno-deprecated-non-prototype -arch ${ARCH}" FCFLAGS="-mmacosx-version-min=${MACOSX_DEPLOYMENT_TARGET}" FFFLAGS="${FCFLAGS}" CFLAGS="${FCFLAGS} -Wno-deprecated-non-prototype" CXXFLAGS="${CFLAGS}" -HDF5_ROOT="${PREFIX}" +HDF5_ROOT="${PREFIX}/HDF_Group/HDF5/1.14.2" HDF5_LIBDIR="${HDF5_ROOT}/lib" HDF5_INCLUDE_DIR="${HDF5_ROOT}/include" HDF5_PLUGIN_PATH="${HDF5_LIBDIR}/plugin" -NETCDF_FORTRAN_HOME="${PREFIX}" -NETCDF_INCLUDE="${PREFIX}" NCDIR="${PREFIX}" NFDIR="${PREFIX}" +NETCDF_FORTRAN_HOME="${NFDIR}" +NETCDF_FORTRAN_INCLUDE="${NFDIR}/include" FC="$(command -v gfortran-12)" F77="${FC}" CC="/usr/bin/clang" diff --git a/cmake/Modules/FindNETCDF_Fortran.cmake b/cmake/Modules/FindNETCDF_Fortran.cmake index 7baec7972..5a74b488a 100644 --- a/cmake/Modules/FindNETCDF_Fortran.cmake +++ b/cmake/Modules/FindNETCDF_Fortran.cmake @@ -8,158 +8,176 @@ # If not, see: https://www.gnu.org/licenses. # - Finds the NetCDF libraries -# Begin searches with "typical" install locations of dependent libraries. These can be overrided in the cache or supplemented -# with environment variables -IF (CMAKE_SYSTEM_NAME STREQUAL "Linux") - SET(NFPREFIX_DIR "/usr/local" CACHE PATH "Location of provided NetCDF-Fortran dependencies") - SET(NFINCLUDE_DIR "/usr/local/include" CACHE PATH "Location of provided netcdf.mod") - IF (NOT BUILD_SHARED_LIBS) - SET(NCPREFIX_DIR "/usr/local" CACHE PATH "Location of provided NetCDF-C dependencies") - SET(H5PREFIX_DIR "/usr/local" CACHE PATH "Location of provided HDF5 dependencies") - SET(ZPREFIX_DIR "/usr/local" CACHE PATH "Location of provided zlib dependencies") - ENDIF () -ELSEIF (CMAKE_SYSTEM_NAME STREQUAL "Darwin") - IF (DEFINED ENV{HOMEBREW_PREFIX}) - SET(LIBPREFIX "$ENV{HOMEBREW_PREFIX}") - ELSE () - SET(LIBPREFIX "/usr/local") - ENDIF() +# Tries to find the cmake config files first. Otherwise, try to find the libraries and headers by hand - SET(NFPREFIX_DIR "${LIBPREFIX}" CACHE PATH "Location of provided NetCDF-Fortran dependencies") - SET(NFINCLUDE_DIR "${LIBPREFIX}/include" CACHE PATH "Location of provided netcdf.mod") - IF (NOT BUILD_SHARED_LIBS) - SET(NCPREFIX_DIR "${LIBPREFIX}" CACHE PATH "Location of provided NetCDF-C dependencies") - SET(H5PREFIX_DIR "${LIBPREFIX}" CACHE PATH "Location of provided HDF5 dependencies") - SET(ZPREFIX_DIR "${LIBPREFIX}" CACHE PATH "Location of provided zlib dependencies") - ENDIF () -ELSEIF (CMAKE_SYSTEM_NAME STREQUAL "Windows") - FILE(GLOB LIBDIRS "C:/Program Files*/NC4F") - LIST(SORT LIBDIRS) - LIST(GET LIBDIRS -1 LIBPREFIX) - SET(NFPREFIX_DIR "${LIBPREFIX}" CACHE PATH "Location of provided NetCDF-Fortran dependencies") - SET(NFINCLUDE_DIR "${LIBPREFIX}/include" CACHE PATH "Location of provided netcdf.mod") - IF (NOT BUILD_SHARED_LIBS) - # Assumes that the dependency libraries are packaged with NetCDF-C. - FILE(GLOB LIBDIRS "C:/Program Files*/netCDF*") +IF (NOT netCDF-Fortran_DIR) + IF (CMAKE_SYSTEM_NAME STREQUAL "Windows") + FILE(GLOB LIBDIRS "C:/Program Files*/NC4F") + LIST(SORT LIBDIRS) + LIST(GET LIBDIRS -1 LIBPREFIX) + SET(netCDF-Fortran_DIR "${LIBPREFIX}/lib/cmake/netCDF" CACHE PATH "Location of provided netCDF-FortranConfig.cmake file") + ELSE() + SET(netCDF-Fortran_DIR "/usr/local/lib/cmake/netCDF" CACHE PATH "Location of provided netCDF-FortranConfig.cmake file") + ENDIF () +ENDIF() + +MESSAGE(STATUS "Looking for netCDF-FortranConfig.cmake in ${netCDF-Fortran_DIR}") +FIND_PACKAGE(netCDF-Fortran QUIET) +IF (netCDF-Fortran_FOUND) + MESSAGE(STATUS "Found the NetCDF library via cmake configuration files") +ELSE () + MESSAGE(STATUS "No cmake configuration files detected. Searching for library files manually.") + IF (CMAKE_SYSTEM_NAME STREQUAL "Linux") + SET(NFPREFIX_DIR "/usr/local" CACHE PATH "Location of provided NetCDF-Fortran dependencies") + SET(NFINCLUDE_DIR "/usr/local/include" CACHE PATH "Location of provided netcdf.mod") + IF (NOT BUILD_SHARED_LIBS) + SET(NCPREFIX_DIR "/usr/local" CACHE PATH "Location of provided NetCDF-C dependencies") + SET(H5PREFIX_DIR "/usr/local" CACHE PATH "Location of provided HDF5 dependencies") + SET(ZPREFIX_DIR "/usr/local" CACHE PATH "Location of provided zlib dependencies") + ENDIF () + ELSEIF (CMAKE_SYSTEM_NAME STREQUAL "Darwin") + IF (DEFINED ENV{HOMEBREW_PREFIX}) + SET(LIBPREFIX "$ENV{HOMEBREW_PREFIX}") + ELSE () + SET(LIBPREFIX "/usr/local") + ENDIF() + + SET(NFPREFIX_DIR "${LIBPREFIX}" CACHE PATH "Location of provided NetCDF-Fortran dependencies") + SET(NFINCLUDE_DIR "${LIBPREFIX}/include" CACHE PATH "Location of provided netcdf.mod") + IF (NOT BUILD_SHARED_LIBS) + SET(NCPREFIX_DIR "${LIBPREFIX}" CACHE PATH "Location of provided NetCDF-C dependencies") + SET(H5PREFIX_DIR "${LIBPREFIX}" CACHE PATH "Location of provided HDF5 dependencies") + SET(ZPREFIX_DIR "${LIBPREFIX}" CACHE PATH "Location of provided zlib dependencies") + ENDIF () + ELSEIF (CMAKE_SYSTEM_NAME STREQUAL "Windows") + FILE(GLOB LIBDIRS "C:/Program Files*/NC4F") LIST(SORT LIBDIRS) LIST(GET LIBDIRS -1 LIBPREFIX) - SET(NCPREFIX_DIR "${LIBPREFIX}" CACHE PATH "Location of provided NetCDF-C dependencies") - SET(H5PREFIX_DIR "${LIBPREFIX}" CACHE PATH "Location of provided HDF5 dependencies") - SET(ZPREFIX_DIR "${LIBPREFIX}" CACHE PATH "Location of provided zlib dependencies") + SET(NFPREFIX_DIR "${LIBPREFIX}" CACHE PATH "Location of provided NetCDF-Fortran dependencies") + SET(NFINCLUDE_DIR "${LIBPREFIX}/include" CACHE PATH "Location of provided netcdf.mod") + IF (NOT BUILD_SHARED_LIBS) + # Assumes that the dependency libraries are packaged with NetCDF-C. + FILE(GLOB LIBDIRS "C:/Program Files*/netCDF*") + LIST(SORT LIBDIRS) + LIST(GET LIBDIRS -1 LIBPREFIX) + SET(NCPREFIX_DIR "${LIBPREFIX}" CACHE PATH "Location of provided NetCDF-C dependencies") + SET(H5PREFIX_DIR "${LIBPREFIX}" CACHE PATH "Location of provided HDF5 dependencies") + SET(ZPREFIX_DIR "${LIBPREFIX}" CACHE PATH "Location of provided zlib dependencies") + ENDIF () ENDIF () -ENDIF () -IF(NOT CMAKE_SYSTEM_NAME STREQUAL "Windows") - FIND_FILE(NFBIN - NAMES nf-config - HINTS - NFPREFIX_DIR - ENV NETCDF_FORTRAN_HOME - ENV PATH - PATH_SUFFIXES - bin - ) + IF(NOT CMAKE_SYSTEM_NAME STREQUAL "Windows") + FIND_FILE(NFBIN + NAMES nf-config + HINTS + NFPREFIX_DIR + ENV NETCDF_FORTRAN_HOME + ENV PATH + PATH_SUFFIXES + bin + ) - IF (NFBIN) - SET(CMD "${NFBIN}") - LIST(APPEND CMD "--includedir") - MESSAGE(STATUS "Searching for NetCDF-Fortran include directory using ${CMD}") - EXECUTE_PROCESS(COMMAND ${CMD} OUTPUT_VARIABLE NFINCLUDE_DIR ERROR_VARIABLE ERR RESULT_VARIABLE RES OUTPUT_STRIP_TRAILING_WHITESPACE) - IF (NFINCLUDE_DIR) - MESSAGE(STATUS "Found in ${NFINCLUDE_DIR}") - ELSE () - MESSAGE(STATUS "Cannot execute ${CMD}") - MESSAGE(STATUS "OUTPUT: ${NFINCLUDE_DIR}") - MESSAGE(STATUS "RESULT: ${RES}") - MESSAGE(STATUS "ERROR : ${ERR}") - ENDIF () + IF (NFBIN) + SET(CMD "${NFBIN}") + LIST(APPEND CMD "--includedir") + MESSAGE(STATUS "Searching for NetCDF-Fortran include directory using ${CMD}") + EXECUTE_PROCESS(COMMAND ${CMD} OUTPUT_VARIABLE NFINCLUDE_DIR ERROR_VARIABLE ERR RESULT_VARIABLE RES OUTPUT_STRIP_TRAILING_WHITESPACE) + IF (NFINCLUDE_DIR) + MESSAGE(STATUS "Found in ${NFINCLUDE_DIR}") + ELSE () + MESSAGE(STATUS "Cannot execute ${CMD}") + MESSAGE(STATUS "OUTPUT: ${NFINCLUDE_DIR}") + MESSAGE(STATUS "RESULT: ${RES}") + MESSAGE(STATUS "ERROR : ${ERR}") + ENDIF () - SET(CMD "${NFBIN}") - LIST(APPEND CMD "--prefix") - MESSAGE(STATUS "Searching for NetCDF-Fortran library directory using ${CMD}") - EXECUTE_PROCESS(COMMAND ${CMD} OUTPUT_VARIABLE NFPREFIX_DIR ERROR_VARIABLE ERR RESULT_VARIABLE RES OUTPUT_STRIP_TRAILING_WHITESPACE) - IF (NFPREFIX_DIR) - MESSAGE(STATUS "Found in ${NFPREFIX_DIR}") - ELSE () - MESSAGE(STATUS "Cannot execute ${CMD}") - MESSAGE(STATUS "OUTPUT: ${NFPREFIX_DIR}") - MESSAGE(STATUS "RESULT: ${RES}") - MESSAGE(STATUS "ERROR : ${ERR}") - ENDIF () + SET(CMD "${NFBIN}") + LIST(APPEND CMD "--prefix") + MESSAGE(STATUS "Searching for NetCDF-Fortran library directory using ${CMD}") + EXECUTE_PROCESS(COMMAND ${CMD} OUTPUT_VARIABLE NFPREFIX_DIR ERROR_VARIABLE ERR RESULT_VARIABLE RES OUTPUT_STRIP_TRAILING_WHITESPACE) + IF (NFPREFIX_DIR) + MESSAGE(STATUS "Found in ${NFPREFIX_DIR}") + ELSE () + MESSAGE(STATUS "Cannot execute ${CMD}") + MESSAGE(STATUS "OUTPUT: ${NFPREFIX_DIR}") + MESSAGE(STATUS "RESULT: ${RES}") + MESSAGE(STATUS "ERROR : ${ERR}") + ENDIF () + ENDIF() ENDIF() -ENDIF() -FIND_PATH(NETCDF_FORTRAN_INCLUDE_DIR - NAMES netcdf.mod - HINTS - ${NFINCLUDE_DIR} - ENV NETCDF_INCLUDE - ENV NETCDF_FORTRAN_HOME - ENV CPATH - PATH_SUFFIXES - include - modules - mod - REQUIRED -) + FIND_PATH(NETCDF_FORTRAN_INCLUDE_DIR + NAMES netcdf.mod + HINTS + ${NFINCLUDE_DIR} + ENV NETCDF_INCLUDE + ENV NETCDF_FORTRAN_HOME + ENV CPATH + PATH_SUFFIXES + include + modules + mod + REQUIRED + ) -IF (BUILD_SHARED_LIBS) - SET(NETCDFF "netcdff") -ELSE () - IF (CMAKE_SYSTEM_NAME STREQUAL "Windows") - SET(NETCDFF "netcdff.lib") - SET(NETCDF "netcdf.lib") - SET(HDF5 "libhdf5.lib") - SET(HDF5_HL "libhdf5_hl.lib") - SET(ZLIB "zlibstatic.lib") + IF (BUILD_SHARED_LIBS) + SET(NETCDFF "netcdff") ELSE () - SET(NETCDFF "libnetcdff.a") - SET(NETCDF "libnetcdf.a") - SET(HDF5 "libhdf5.a") - SET(HDF5_HL "libhdf5_hl.a") - SET(ZLIB "libz.a") + IF (CMAKE_SYSTEM_NAME STREQUAL "Windows") + SET(NETCDFF "netcdff.lib") + SET(NETCDF "netcdf.lib") + SET(HDF5 "libhdf5.lib") + SET(HDF5_HL "libhdf5_hl.lib") + SET(ZLIB "zlibstatic.lib") + ELSE () + SET(NETCDFF "libnetcdff.a") + SET(NETCDF "libnetcdf.a") + SET(HDF5 "libhdf5.a") + SET(HDF5_HL "libhdf5_hl.a") + SET(ZLIB "libz.a") + ENDIF() ENDIF() -ENDIF() -FIND_LIBRARY(NETCDF_FORTRAN_LIBRARY - NAMES ${NETCDFF} - PATHS - ${NFPREFIX_DIR} - ENV NETCDF_FORTRAN_HOME - ENV NETCDF_HOME - ENV LD_LIBRARY_PATH - PATH_SUFFIXES - lib - ${CMAKE_LIBRARY_ARCHITECTURE} - REQUIRED -) -ADD_LIBRARY(NETCDF_FORTRAN_LIBRARY UNKNOWN IMPORTED PUBLIC) -IF (CMAKE_SYSTEM_NAME STREQUAL "Windows") - # Get the DLL added in - FIND_FILE(NFDLL - NAMES "netcdff.dll" - HINTS - NFPREFIX_DIR + FIND_LIBRARY(netCDF::netcdff + NAMES ${NETCDFF} + PATHS + ${NFPREFIX_DIR} ENV NETCDF_FORTRAN_HOME - ENV PATH + ENV NETCDF_HOME + ENV LD_LIBRARY_PATH PATH_SUFFIXES - bin + lib + ${CMAKE_LIBRARY_ARCHITECTURE} + REQUIRED ) - SET_TARGET_PROPERTIES(NETCDF_FORTRAN_LIBRARY PROPERTIES - IMPORTED_IMPLIB "${NFLIB}" - IMPORTED_LOCATION "${NFDLL}" - INTERFACE_INCLUDE_DIRECTORIES "${NETCDF_FORTRAN_INCLUDE_DIR}" - ) - MESSAGE(STATUS "NetCDF-Fortran dll: ${NFDLL}") -ELSE () - SET_TARGET_PROPERTIES(NETCDF_FORTRAN_LIBRARY PROPERTIES - IMPORTED_LOCATION "${NFLIB}" - INTERFACE_INCLUDE_DIRECTORIES "${NETCDF_FORTRAN_INCLUDE_DIR}" - ) -ENDIF() - -MESSAGE(STATUS "NetCDF-Fortran library: ${NETCDF_FORTRAN_LIBRARY}") -MESSAGE(STATUS "NetCDF-Fortran include directory: ${NETCDF_FORTRAN_INCLUDE_DIR}") + ADD_LIBRARY(netCDF::netcdff UNKNOWN IMPORTED PUBLIC) + IF (CMAKE_SYSTEM_NAME STREQUAL "Windows") + # Get the DLL added in + FIND_FILE(NFDLL + NAMES "netcdff.dll" + HINTS + NFPREFIX_DIR + ENV NETCDF_FORTRAN_HOME + ENV PATH + PATH_SUFFIXES + bin + ) + SET_TARGET_PROPERTIES(netCDF::netcdff PROPERTIES + IMPORTED_IMPLIB "${NFLIB}" + IMPORTED_LOCATION "${NFDLL}" + INTERFACE_INCLUDE_DIRECTORIES "${NETCDF_FORTRAN_INCLUDE_DIR}" + ) + MESSAGE(STATUS "NetCDF-Fortran dll: ${NFDLL}") + ELSE () + SET_TARGET_PROPERTIES(netCDF::netcdff PROPERTIES + IMPORTED_LOCATION "${NFLIB}" + INTERFACE_INCLUDE_DIRECTORIES "${NETCDF_FORTRAN_INCLUDE_DIR}" + ) + ENDIF() + + MESSAGE(STATUS "NetCDF-Fortran library: ${NFLIB}") + MESSAGE(STATUS "NetCDF-Fortran include directory: ${NETCDF_FORTRAN_INCLUDE_DIR}") +ENDIF () SET(NETCDF_FORTRAN_FOUND TRUE) MARK_AS_ADVANCED(NETCDF_FORTRAN_LIBRARY NETCDF_FORTRAN_INCLUDE_DIR) \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index d80530429..be5fc1ed1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -77,14 +77,14 @@ FCFLAGS="-mmacos-version-min=${MACOSX_DEPLOYMENT_TARGET} -arch ${ARCH}" FFFLAGS="${FCFLAGS}" CFLAGS="${FCFLAGS} -Wno-deprecated-non-prototype -arch ${ARCH}" CXXFLAGS="${CFLAGS}" -HDF5_ROOT="${PREFIX}" +HDF5_ROOT="${PREFIX}/HDF_Group/HDF5/1.14.2" HDF5_LIBDIR="${HDF5_ROOT}/lib" HDF5_INCLUDE_DIR="${HDF5_ROOT}/include" HDF5_PLUGIN_PATH="${HDF5_LIBDIR}/plugin" -NETCDF_FORTRAN_HOME="${PREFIX}" -NETCDF_INCLUDE="${PREFIX}" -NCDIR="${PREFIX}" -NFDIR="${PREFIX}" +NCDIR="${PREFIX}/netCDF-C" +NFDIR="${PREFIX}/netCDF-Fortran" +NETCDF_FORTRAN_HOME="${NFDIR}" +NETCDF_FORTRAN_INCLUDE="${NFDIR}/include" FC="$(command -v gfortran-12)" F77="${FC}" CC="/usr/bin/clang"