From 7c757ac7771d93659a2b1fd2e99c6335f614e384 Mon Sep 17 00:00:00 2001 From: Xylar Asay-Davis Date: Sat, 11 May 2024 14:57:35 -0600 Subject: [PATCH 1/4] Add recipe for squadgen --- recipes/squadgen/CMakeLists.txt | 44 ++++++++++++++++++ recipes/squadgen/build.sh | 17 +++++++ recipes/squadgen/cmake/FindNETCDF.cmake | 57 ++++++++++++++++++++++++ recipes/squadgen/cmake_macros/gnu.cmake | 6 +++ recipes/squadgen/meta.yaml | 56 +++++++++++++++++++++++ recipes/squadgen/test/grid.png | Bin 0 -> 2303 bytes 6 files changed, 180 insertions(+) create mode 100644 recipes/squadgen/CMakeLists.txt create mode 100644 recipes/squadgen/build.sh create mode 100644 recipes/squadgen/cmake/FindNETCDF.cmake create mode 100644 recipes/squadgen/cmake_macros/gnu.cmake create mode 100644 recipes/squadgen/meta.yaml create mode 100644 recipes/squadgen/test/grid.png diff --git a/recipes/squadgen/CMakeLists.txt b/recipes/squadgen/CMakeLists.txt new file mode 100644 index 0000000000000..138728ee0e302 --- /dev/null +++ b/recipes/squadgen/CMakeLists.txt @@ -0,0 +1,44 @@ +cmake_minimum_required(VERSION 3.18) +project( + squadgen + VERSION $ENV{PKG_VERSION} + LANGUAGES C CXX) + +list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake) + +include("${CMAKE_SOURCE_DIR}/cmake_macros/gnu.cmake") + +find_package(NETCDF REQUIRED) + +message(STATUS "netcdf_c_incdir=${netcdf_c_incdir}") +message(STATUS "netcdf_c_libs=${netcdf_c_libs}") + +find_package(PNG REQUIRED) +message(STATUS "PNG_INCLUDE_DIR=${PNG_INCLUDE_DIR}") +message(STATUS "PNG_LIBRARIES=${PNG_LIBRARIES}") + +SET(SRC ${CMAKE_SOURCE_DIR}/src) +set(SQUADGEN_SRC ${SRC}/SQuadGen.cpp + ${SRC}/GridElements.cpp + ${SRC}/CSRefinementMap.cpp + ${SRC}/CubedSphereGrid.cpp + ${SRC}/IcosahedralFlagGrid.cpp + ${SRC}/RefineGrid.cpp + ${SRC}/RefinementTemplateCUBIT.cpp + ${SRC}/RefinementTemplateLOWCONN.cpp + ${SRC}/RefinementTemplateLOWCONNOLD.cpp + ${SRC}/SpringDynamics.cpp + ${SRC}/MeshUtilities.cpp + ${SRC}/Tessellate.cpp + ${SRC}/lodepng.cpp + ${SRC}/netcdf.cpp + ${SRC}/ncvalues.cpp) + +include_directories(${PNG_INCLUDE_DIR}) +include_directories(${netcdf_c_incdir}) + +include_directories(${SRC}) +add_executable(SQuadGen ${SQUADGEN_SRC}) +target_link_libraries(SQuadGen ${netcdf_c_libs} ${PNG_LIBRARIES}) + +install(TARGETS SQuadGen DESTINATION bin) diff --git a/recipes/squadgen/build.sh b/recipes/squadgen/build.sh new file mode 100644 index 0000000000000..23f1fd8421130 --- /dev/null +++ b/recipes/squadgen/build.sh @@ -0,0 +1,17 @@ +#!/usr/bin/env bash + +set -x +set -e + +cp -r ${RECIPE_DIR}/cmake ${RECIPE_DIR}/cmake_macros ${RECIPE_DIR}/CMakeLists.txt . + +rm -rf build +mkdir build +cd build +cmake \ + -D CMAKE_INSTALL_PREFIX="${PREFIX}" \ + -D NETCDF_PATH="${PREFIX}" \ + -D CMAKE_BUILD_TYPE=Release \ + .. +cmake --build . +cmake --install . diff --git a/recipes/squadgen/cmake/FindNETCDF.cmake b/recipes/squadgen/cmake/FindNETCDF.cmake new file mode 100644 index 0000000000000..4caf02266e0f1 --- /dev/null +++ b/recipes/squadgen/cmake/FindNETCDF.cmake @@ -0,0 +1,57 @@ +# - Try to find Netcdf + +function(get_netcdf_libs ncpath) + + set(ncconfig ${ncpath}/bin/nc-config) + + # Get C libs + if (EXISTS ${ncconfig}) + execute_process(COMMAND ${ncconfig} --libs OUTPUT_VARIABLE nclibs OUTPUT_STRIP_TRAILING_WHITESPACE) + endif() + + # Fall back to find_library + if (NOT nclibs) + find_library(nclibs_temp netcdf REQUIRED HINTS ${ncpath}/lib ${ncpath}/lib64) + set(nclibs ${nclibs_temp}) + endif() + + + set(netcdf_c_libs ${nclibs} PARENT_SCOPE) +endfunction() + +function(create_netcdf_target) + + # Grab things from env + set(NETCDF_PATH $ENV{NETCDF_PATH}) + set(NETCDF_C_PATH $ENV{NETCDF_C_PATH}) + + if (NETCDF_C_PATH) + # Sanity checks + if (NOT EXISTS ${NETCDF_C_PATH}/lib AND NOT EXISTS ${NETCDF_C_PATH}/lib64) + message(FATAL_ERROR "NETCDF_C_PATH does not contain a lib or lib64 directory") + endif () + + get_netcdf_libs(${NETCDF_C_PATH}) + find_path (netcdf_c_incdir netcdf.h REQUIRED HINTS ${NETCDF_C_PATH}/include) + + elseif (NETCDF_FORTRAN_PATH) + message(FATAL_ERROR "NETCDF_FORTRAN_PATH specified without NETCDF_C_PATH") + + elseif (NETCDF_PATH) + # Sanity checks + if (NOT EXISTS ${NETCDF_PATH}/lib AND NOT EXISTS ${NETCDF_PATH}/lib64) + message(FATAL_ERROR "NETCDF_PATH does not contain a lib or lib64 directory") + endif () + + get_netcdf_libs(${NETCDF_PATH}) + find_path(netcdf_c_incdir netcdf.h REQUIRED HINTS ${NETCDF_PATH}/include) + + else() + message(FATAL_ERROR "NETCDF not found: Define NETCDF_PATH or NETCDF_C_PATH") + endif() + + set(netcdf_c_incdir ${netcdf_c_incdir}) + set(netcdf_c_libs ${netcdf_c_libs} PARENT_SCOPE) + endfunction() + +create_netcdf_target() diff --git a/recipes/squadgen/cmake_macros/gnu.cmake b/recipes/squadgen/cmake_macros/gnu.cmake new file mode 100644 index 0000000000000..905c848ea8e52 --- /dev/null +++ b/recipes/squadgen/cmake_macros/gnu.cmake @@ -0,0 +1,6 @@ +string(APPEND CMAKE_Fortran_FLAGS " -fconvert=big-endian -ffree-line-length-none -ffixed-line-length-none") +if (CMAKE_Fortran_COMPILER_VERSION VERSION_GREATER_EQUAL 10) + string(APPEND CMAKE_Fortran_FLAGS " -fallow-argument-mismatch") +endif() +string(APPEND CMAKE_Fortran_FORMAT_FIXED_FLAG " -ffixed-form") +string(APPEND CMAKE_Fortran_FORMAT_FREE_FLAG " -ffree-form") diff --git a/recipes/squadgen/meta.yaml b/recipes/squadgen/meta.yaml new file mode 100644 index 0000000000000..58bff7e7f604b --- /dev/null +++ b/recipes/squadgen/meta.yaml @@ -0,0 +1,56 @@ +{% set name = "squadgen" %} +{% set version = "1.2.1" %} + +package: + name: {{ name|lower }} + version: {{ version }} + +source: + url: https://github.com/ClimateGlobalChange/squadgen/archive/refs/tags/v{{ version }}.tar.gz + sha256: a39f9f467563e796c1b0a53c7bf7d046f50110a030d92350754a60ada4eda053 + +build: + skip: true # [not linux] + number: 0 + ignore_run_exports: + # I don't really understand why these dynamic libraries aren't being linked in... + - libpng + - zlib + +requirements: + build: + - {{ compiler('c') }} + - {{ compiler('cxx') }} + - {{ stdlib("c") }} + - cmake + - make + host: + - libnetcdf + - libnetcdf * nompi_* + - libpng + - zlib + +test: + files: + - test/grid.png + commands: + - > + SQuadGen --refine_file test/grid.png --refine_level 5 + --refine_type LOWCONN --resolution 30 --smooth_type SPRING + --smooth_dist 3 --smooth_iter 20 --output grid.g + - test -f "grid.g" + +about: + home: https://github.com/ClimateGlobalChange/squadgen + license: GPL-2.0-or-later and CUSTOM + license_family: GPL + license_file: + - LICENSE.md + - src/netcdf-cxx-4.2.COPYRIGHT + summary: Spherical Quadrilateral Mesh Generator (SQuadGen) + doc_url: https://github.com/ClimateGlobalChange/squadgen/blob/master/README.md + dev_url: https://github.com/ClimateGlobalChange/squadgen + +extra: + recipe-maintainers: + - xylar diff --git a/recipes/squadgen/test/grid.png b/recipes/squadgen/test/grid.png new file mode 100644 index 0000000000000000000000000000000000000000..5111e737f48f35be98e5fbb1ceb9c192cbbad745 GIT binary patch literal 2303 zcmbVNdpOhkADS+y%0wKOMO4oG{{Q`RUeELSJfG+Fyg%>fdA(on_ve$1^+l`g(BA<9 zfz&)O$8jK#T&(O|zx_Y5-Cot?tc z3uURkOPkdF#xX=wM=Pv;2dV;#zy2%O`@j#)yN6884*=;Gc)Xm>s*IaYYSe4ejo0KR z=frFY)a<9Vd41NRxEZoAe`J0_?%31+20V$>#=?6sdneD@H$fG{wcH%mwL0rxc&FMI zdOoM5jPtuj+I9<;Tvn$geoK4gQ=p5gLbaPoeL4)S2gOUx9e;@o?VO)UVY1Vm8|)H$nR;8a|e9Ug$9-4^VLr160dN5o{M-AMyx zNV2J`4+{&L5J*bMZtwQLY54qg_-)sWd@idd-{Be0#3qbA2hX{DxpDRD!kw5j*G_wK zH(+zyNal+&5fefIfeyg7mRu6YHBm+?C3yItlqB0!boZ%7-6wd;D7^$!a02pTTwHW~ z0tiWtj!1}(GQNC1A=Vh};e!pjrmhPDDM~z!9}P$v`!YTrKNhN~h(!`j7B(Mw5RSd> zEWh=MAgpJ=A70XG(NSoyyBE{ADmWx3%lz-~tYbmkaprCr|GiC^w{S%&g@=IzMut6E z{P#qJA<#AT{-g%bJRaYo3H`gB=NCb8HVWqsg%9^ySi5wL$2S>4jS);sJKu8QOae7I zxd-*J8%qknh1HJCO4q-AyQ8vrO`NnVn2F^Ip59_2`h{ONHR=0NRVrU@(%If@umArmJJv19T_@vrSYl z9rM}NvPzPx3Bt$}p0CU3x|$2MSiCn|utp3rL438SB)QzPgdbpdT?|}0NcX-0wDI!Dus#fKY9521 z$Y-?tscCq{hmObLVgvphFeqZpODNCqW$ruZx3bmq`g`f3rm(g;O~W<a=%rw_Ahy=}gjc{Cghj9sw}Kq;k1GCsOj7O@?y z^=zvT&5V1}Nh>bVB9GX`A6a?%thO2$ z-q9)2com!VK%Q5(H-9p1Bni*`TrqqU`k)j%@ciA5{V($1>rgB`N%id|{jzH2NvPc1~ z173CxBCd22gfVplTq(8S{S-}S-5Bw6Mh-}c+!!keyC^C$f_UUo+wFY(rN%?70G3}w z|46rV$g-z)YB4rTn^%`JSD|)%;|!Yn5_#&)6Bw%NBUvxK6i<(^N57McUAxWAs1&L2 z>dM8EK)3MCiH;9^c?R`0j+b}SWwhVF)U$;5C|F%4;}x9?CT*6)nLSPw+Xa2Q2 zB2m{C(4FW_GtmjZcw3}NwaFX!astgfyy!GWm(YLE9j z7!Lj}9`#QQa3`G1zgjf#=t?Yi`OZhU71=AQ{pnNbTE*u`(eptFM=?F}9M3j|zEG34 z(55iV)W6IaDwkl0D_TP5#Lc*L4y4D-Fq%4G5=?d>{U8~3?v6J`7+E;cP93DS*m^InnILF|Yd^FehRX96A06>JK_?t_o^ySh>DMF= zg36G;XRUeHM?> mFdY&-6RUss#r(fpS63hg)GwJFm*|GA5D%2^@tR|2(*FU!X H literal 0 HcmV?d00001 From 5ac82c880efe7ffd6e002118454919cf25465646 Mon Sep 17 00:00:00 2001 From: Xylar Asay-Davis Date: Sun, 12 May 2024 08:42:13 -0600 Subject: [PATCH 2/4] Update NetCDF license and build shared libs --- recipes/squadgen/CMakeLists.txt | 2 +- recipes/squadgen/build.sh | 1 + recipes/squadgen/meta.yaml | 5 +---- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/recipes/squadgen/CMakeLists.txt b/recipes/squadgen/CMakeLists.txt index 138728ee0e302..5df65ab981285 100644 --- a/recipes/squadgen/CMakeLists.txt +++ b/recipes/squadgen/CMakeLists.txt @@ -39,6 +39,6 @@ include_directories(${netcdf_c_incdir}) include_directories(${SRC}) add_executable(SQuadGen ${SQUADGEN_SRC}) -target_link_libraries(SQuadGen ${netcdf_c_libs} ${PNG_LIBRARIES}) +target_link_libraries(SQuadGen PUBLIC ${netcdf_c_libs} ${PNG_LIBRARIES}) install(TARGETS SQuadGen DESTINATION bin) diff --git a/recipes/squadgen/build.sh b/recipes/squadgen/build.sh index 23f1fd8421130..2ae641d67b1c3 100644 --- a/recipes/squadgen/build.sh +++ b/recipes/squadgen/build.sh @@ -12,6 +12,7 @@ cmake \ -D CMAKE_INSTALL_PREFIX="${PREFIX}" \ -D NETCDF_PATH="${PREFIX}" \ -D CMAKE_BUILD_TYPE=Release \ + -D BUILD_SHARED_LIBS=ON \ .. cmake --build . cmake --install . diff --git a/recipes/squadgen/meta.yaml b/recipes/squadgen/meta.yaml index 58bff7e7f604b..cb09e57bcc4d1 100644 --- a/recipes/squadgen/meta.yaml +++ b/recipes/squadgen/meta.yaml @@ -13,9 +13,7 @@ build: skip: true # [not linux] number: 0 ignore_run_exports: - # I don't really understand why these dynamic libraries aren't being linked in... - libpng - - zlib requirements: build: @@ -28,7 +26,6 @@ requirements: - libnetcdf - libnetcdf * nompi_* - libpng - - zlib test: files: @@ -42,7 +39,7 @@ test: about: home: https://github.com/ClimateGlobalChange/squadgen - license: GPL-2.0-or-later and CUSTOM + license: GPL-2.0-or-later and NetCDF license_family: GPL license_file: - LICENSE.md From be575bf636e1f2161524581631c9d3bfe3d41e53 Mon Sep 17 00:00:00 2001 From: Xylar Asay-Davis Date: Sun, 12 May 2024 11:35:17 -0600 Subject: [PATCH 3/4] Remove dependency on libpng There is an import of `png.h` that turns out to not be used. I have patched to remove this and SQuadGen now builds and runs without requiring `libpng`. --- recipes/squadgen/0001-remove-png-h.patch | 20 ++++++++++++++++++++ recipes/squadgen/CMakeLists.txt | 7 +------ recipes/squadgen/build.sh | 3 +++ recipes/squadgen/meta.yaml | 5 ++--- 4 files changed, 26 insertions(+), 9 deletions(-) create mode 100644 recipes/squadgen/0001-remove-png-h.patch diff --git a/recipes/squadgen/0001-remove-png-h.patch b/recipes/squadgen/0001-remove-png-h.patch new file mode 100644 index 0000000000000..74ce2b86bcd6c --- /dev/null +++ b/recipes/squadgen/0001-remove-png-h.patch @@ -0,0 +1,20 @@ +diff -ruN squadgen-1.2.1/src/SQuadGen.cpp squadgen-1.2.1-patch/src/SQuadGen.cpp +--- squadgen-1.2.1/src/SQuadGen.cpp 2024-05-11 15:31:02.000000000 -0600 ++++ squadgen-1.2.1-patch/src/SQuadGen.cpp 2024-05-12 11:20:44.022644614 -0600 +@@ -14,7 +14,6 @@ + /// or implied warranty. + /// + +-#include + #include "netcdfcpp.h" + + #include +@@ -195,7 +194,7 @@ + if ((nRefinementLevel > 0) && + ((strRefineRect != "") || (strRefineFile != "") || (fLoadCSRefinementMap)) + ) { +- int nCommandLineCount = ++ int nCommandLineCount = + ((strRefineRect != "")?(1):(0)) + + ((strRefineFile != "")?(1):(0)) + + (fLoadCSRefinementMap?(1):(0)); diff --git a/recipes/squadgen/CMakeLists.txt b/recipes/squadgen/CMakeLists.txt index 5df65ab981285..f35cafcfe308d 100644 --- a/recipes/squadgen/CMakeLists.txt +++ b/recipes/squadgen/CMakeLists.txt @@ -13,10 +13,6 @@ find_package(NETCDF REQUIRED) message(STATUS "netcdf_c_incdir=${netcdf_c_incdir}") message(STATUS "netcdf_c_libs=${netcdf_c_libs}") -find_package(PNG REQUIRED) -message(STATUS "PNG_INCLUDE_DIR=${PNG_INCLUDE_DIR}") -message(STATUS "PNG_LIBRARIES=${PNG_LIBRARIES}") - SET(SRC ${CMAKE_SOURCE_DIR}/src) set(SQUADGEN_SRC ${SRC}/SQuadGen.cpp ${SRC}/GridElements.cpp @@ -34,11 +30,10 @@ set(SQUADGEN_SRC ${SRC}/SQuadGen.cpp ${SRC}/netcdf.cpp ${SRC}/ncvalues.cpp) -include_directories(${PNG_INCLUDE_DIR}) include_directories(${netcdf_c_incdir}) include_directories(${SRC}) add_executable(SQuadGen ${SQUADGEN_SRC}) -target_link_libraries(SQuadGen PUBLIC ${netcdf_c_libs} ${PNG_LIBRARIES}) +target_link_libraries(SQuadGen ${netcdf_c_libs}) install(TARGETS SQuadGen DESTINATION bin) diff --git a/recipes/squadgen/build.sh b/recipes/squadgen/build.sh index 2ae641d67b1c3..00b69c12854a1 100644 --- a/recipes/squadgen/build.sh +++ b/recipes/squadgen/build.sh @@ -5,6 +5,9 @@ set -e cp -r ${RECIPE_DIR}/cmake ${RECIPE_DIR}/cmake_macros ${RECIPE_DIR}/CMakeLists.txt . +# remove static libpng and zlib to prevent static linking +rm -rf ${PREFIX}/lib/libpng.a ${PREFIX}/lib/libz.a + rm -rf build mkdir build cd build diff --git a/recipes/squadgen/meta.yaml b/recipes/squadgen/meta.yaml index cb09e57bcc4d1..179a2b767f3e5 100644 --- a/recipes/squadgen/meta.yaml +++ b/recipes/squadgen/meta.yaml @@ -8,12 +8,12 @@ package: source: url: https://github.com/ClimateGlobalChange/squadgen/archive/refs/tags/v{{ version }}.tar.gz sha256: a39f9f467563e796c1b0a53c7bf7d046f50110a030d92350754a60ada4eda053 + patches: + - 0001-remove-png-h.patch build: skip: true # [not linux] number: 0 - ignore_run_exports: - - libpng requirements: build: @@ -25,7 +25,6 @@ requirements: host: - libnetcdf - libnetcdf * nompi_* - - libpng test: files: From bc238badbf17bf9e249f6a15f42b15eaff85a8b0 Mon Sep 17 00:00:00 2001 From: Xylar Asay-Davis Date: Sun, 12 May 2024 11:40:59 -0600 Subject: [PATCH 4/4] Add LodePNG license --- recipes/squadgen/meta.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/recipes/squadgen/meta.yaml b/recipes/squadgen/meta.yaml index 179a2b767f3e5..e151fd01a315e 100644 --- a/recipes/squadgen/meta.yaml +++ b/recipes/squadgen/meta.yaml @@ -38,11 +38,12 @@ test: about: home: https://github.com/ClimateGlobalChange/squadgen - license: GPL-2.0-or-later and NetCDF + license: GPL-2.0-or-later and NetCDF and Zlib license_family: GPL license_file: - LICENSE.md - src/netcdf-cxx-4.2.COPYRIGHT + - src/lodepng.h summary: Spherical Quadrilateral Mesh Generator (SQuadGen) doc_url: https://github.com/ClimateGlobalChange/squadgen/blob/master/README.md dev_url: https://github.com/ClimateGlobalChange/squadgen