From GEMPAK to AWIPS: Building the NSHARP Dynamic Library on OS X

A little known fact in the world of AWIPS(II) is just how dependent the system still is on NAWIPS-GEMPAK. The entire National Centers Perspective is dependent on pre-built shared object files for 64-bit Linux, which means that all of the D2D plugins which extend NSHARP (for bufr obs, NPP profiles, forecast models, etc.) also depend on these libraries.

This dependency has prevented use of the NSHARP plugin in the first release (15.1.1) of the OS X CAVE client. These are the steps taken to build NSHARP and GEMPAK libraries for OS X AWIPS 16.2.2.

You will need the https://github.com/Unidata/awips2-gemlibs repository on your Mac, as well as gcc and gfortran (from XCode). Pay attention to any version-specific include path or linked files, such as /usr/local/Cellar/gcc/4.9.2_1/lib/gcc/4.9/, always account for the correct versions and locations on your own system.

NSHARP pre-built libraries

libbignsharp.dylib

Using the script below, the NSHARP dynamic library is built from C and FORTRAN source files (and their required include files supplied by the awips2-gemlibs repository, and as linked against $GEMINC, meaning that GEMPAK for OS X must be built and installed).

git clone https://github.com/Unidata/awips2-gemlibs.git  cd awips2-gemlibs/nsharp/  

An optional step, which can be performed in a separate script or within the build script below, is to create ld-style *.a files in $OS_LIB which can then be referenced with -l flags (e.g. -lgemlib):

libs=(snlist sflist nxmlib gemlib gplt cgemlib rsl device xwp xw ps gn nsharp netcdf textlib)  for file in ${libs[@]}  do    if [ ! -f $OS_LIB/lib$file.a ]; then      echo '$OS_LIB/lib$file.a does not exist'      if [ -f $OS_LIB/$file.a ]; then        cp $OS_LIB/$file.a $OS_LIB/lib$file.a        echo 'copied OS_LIB/$file.a to OS_LIB/lib$file.a for linking'      fi    fi  done  

Build libbignsharp.dylib with the following script (Note the GEMPAK includes and links -I$NSHARP, -I$GEMPAK/include, -L$OS_LIB, etc.).

#!/bin/bash  cd ~/awips2-gemlibs/nsharp/  . $NAWIPS/Gemenviron.profile  CC=gcc  FC=gfortran    export NSHARP=$GEMPAK/source/programs/gui/nsharp  export NWX=$GEMPAK/source/programs/gui/nwx    myLibs='$OS_LIB/ginitp_alt.o $OS_LIB/gendp_alt.o'    myCflags='$CFLAGS -I. -I./Sndglib -I$NSHARP  -I$GEMPAK/include  -I$OS_INC -I$NWX   -I/opt/X11/include/X11 -I/usr/include/Xm -I/opt/local/include -I/usr/include/malloc -Wcomment -Wno-return-type -Wincompatible-pointer-types -DUNDERSCORE -fPIC -DDEBUG -c'    myFflags='-I. -I$OS_INC -I$GEMPAK/include -I$NSHARP -fPIC -g -c -fno-second-underscore -fmax-errors=200 -std=f95'    myLinkflags='-L/usr/local/Cellar/gcc/4.9.2_1/lib/gcc/4.9/ -L/opt/local/lib -L$OS_LIB -L. -L./Sndglib -L/usr/X11R6/lib   -shared -Wl -Wcomment -Wincompatible-pointer-types -Wimplicit-function-declaration -Wno-return-type,-install_name,libbignsharp.dylib -o libbignsharp.dylib'    myLibsInc='$OS_LIB/ginitp_alt.o $OS_LIB/gendp_alt.o $OS_LIB/libnxmlib.a $OS_LIB/libsnlist.a    $OS_LIB/libsflist.a $OS_LIB/libgemlib.a $OS_LIB/libcgemlib.a $OS_LIB/libgplt.a $OS_LIB/libdevice.a    $OS_LIB/libxwp.a $OS_LIB/libxw.a $OS_LIB/libps.a  $OS_LIB/libgn.a $OS_LIB/libcgemlib.a $OS_LIB/libgemlib.a    $OS_LIB/libnetcdf.a $OS_LIB/libtextlib.a $OS_LIB/libxml2.a $OS_LIB/libxslt.a    $OS_LIB/libgemlib.a $OS_LIB/libcgemlib.a $OS_LIB/librsl.a $OS_LIB/libbz2.a'    myLinktail='-I$OS_INC     -I$GEMPAK/include -I$NWX -I$NSHARP -I. -I./Sndglib  -I/opt/X11/include/X11 -I/usr/include -I/usr/include/Xm -I/opt/local/include/ -I/opt/local/include -lhdf5 -lgfortran -ljasper -lpng -liconv -lc -lXt -lX11 -lz -lm -lXm'    $CC $myCflags *.c Sndglib/*.c  $FC $myFflags *.f  $CC $myLinkflags *.o $myLibsInc $myLinktail    cp libbignsharp.dylib ~/awips2-ncep/viz/gov.noaa.nws.ncep.ui.nsharp.macosx/  

GEMPAK pre-built libraries

libgempak.dylib

libgempak.dylib is built in a similar way as libbignsharp.dylib:

#!/bin/bash  cd ~/awips2-gemlibs/gempak/  . $NAWIPS/Gemenviron.profile  CC=gcc  FC=gfortran    myCflags='$CFLAGS -I. -I$GEMPAK/source/diaglib/dg -I$GEMPAK/source/gemlib/er   -I/opt/X11/include/X11 -I/usr/include/Xm -I/opt/local/include -I/usr/include/malloc -fPIC -DDEBUG -c'     myFflags='-I. -I$OS_INC -I$GEMPAK/include -fPIC -g -c -Wtabs -fno-second-underscore'    myLinkflags='-L/usr/local/Cellar/gcc/4.9.2_1/lib/gcc/4.9/ -L/opt/local/lib -L$OS_LIB -L.   -shared -Wl -Wno-return-type,-install_name,libgempak.dylib -o libgempak.dylib'    myLibs='$OS_LIB/ginitp_alt.o $OS_LIB/gendp_alt.o $OS_LIB/libcgemlib.a   $OS_LIB/libsflist.a $OS_LIB/gdlist.a $OS_LIB/libcgemlib.a $OS_LIB/libgemlib.a   $OS_LIB/libcgemlib.a $OS_LIB/libgplt.a $OS_LIB/libdevice.a $OS_LIB/libcgemlib.a   $OS_LIB/libgn.a $OS_LIB/libgemlib.a $OS_LIB/libcgemlib.a $OS_LIB/libnetcdf.a   $OS_LIB/libcgemlib.a $OS_LIB/libtextlib.a $OS_LIB/libxml2.a $OS_LIB/libxslt.a   $OS_LIB/libcgemlib.a $OS_LIB/libgemlib.a $OS_LIB/libcgemlib.a $OS_LIB/libcgemlib.a   $OS_LIB/librsl.a $OS_LIB/libcgemlib.a $OS_LIB/libbz2.a'    myLinktail='-I$OS_INC -I$GEMPAK/include -I. -I/opt/X11/include/X11 -I/usr/include   -I/usr/include/Xm -I/opt/local/include/ -I/opt/local/include   -lhdf5 -lgfortran -ljasper -lpng -liconv -lc -lXt -lX11 -lz -lm -lXm'    $CC $myCflags *.c  $FC $myFflags *.f  $CC $myLinkflags *.o $myLibs $myLinktail    cp libgempak.dylib ~/awips2-ncep/viz/gov.noaa.nws.ncep.viz.gempak.nativelib.macosx/  

libcnflib.dylib

#!/bin/bash  cd ~/awips2-gemlibs/cnflib/  . $NAWIPS/Gemenviron.profile  CC=gcc  FC=gfortran    myCflags='$CFLAGS -I/opt/X11/include/X11 -I/usr/include/Xm -I/opt/local/include   -I/usr/include/malloc -Wno-return-type -DUNDERSCORE  -fPIC -DDEBUG -g -c'    myLinkflags='-L/usr/local/Cellar/gcc/4.9.2_1/lib/gcc/4.9/ -L/opt/local/lib   -shared -Wl -Wno-return-type,-install_name,libcnflib.dylib -o libcnflib.dylib'    myLinktail='-lgfortran -lc'    myLibs='$OS_LIB/ginitp_alt.o $OS_LIB/gendp_alt.o $OS_LIB/gdlist.a $OS_LIB/gdcfil.a   $OS_LIB/libgemlib.a $OS_LIB/libgplt.a $OS_LIB/libdevice.a $OS_LIB/libgn.a   $OS_LIB/libcgemlib.a $OS_LIB/libgemlib.a $OS_LIB/libnetcdf.a $OS_LIB/libtextlib.a   $OS_LIB/libxslt.a $OS_LIB/libxml2.a -liconv   $OS_LIB/libz.a $OS_LIB/librsl.a -lbz2'    $CC $myCflags *.c  $CC $myLinkflags *.o $myLibs $myLinktail    cp libcnflib.dylib ~/awips2-ncep/viz/gov.noaa.nws.ncep.viz.gempak.nativelib.macosx/  

libaodtv64.dylib

#!/bin/bash  CC=gcc  FC=gfortran    cd ~/awips2-gemlibs/aodt/AODTLIB/    gcc -fPIC -g -c -Wall *.c *.h  gcc -shared -Wl,-Wno-return-type,-install_name,libaodtv64.dylib -o libaodtv64.dylib *.o -lc    cp libaodtv64.dylib ~/awips2-ncep/viz/gov.noaa.nws.ncep.viz.gempak.nativelib.macosx/  

libg2g.dylib

#!/bin/bash  cd ~/awips2-gemlibs/g2g/  . $NAWIPS/Gemenviron.profile  CC=gcc  FC=gfortran    myCflags='$CFLAGS -I$GEMPAK/include -I. -I$GEMPAK/source/diaglib/dg   -I$GEMPAK/source/gemlib/er -I/opt/X11/include/X11 -I/usr/include/Xm   -I/opt/local/include -I/usr/include/malloc -Wno-return-type -DUNDERSCORE   -fPIC -DDEBUG -c'    myFflags='-I. -I$OS_INC -I$GEMPAK/include -fPIC -g -c -Wtabs -fno-second-underscore'    myLinkflags='-L/usr/local/Cellar/gcc/4.9.2_1/lib/gcc/4.9/ -L/opt/local/lib   -L/usr/X11R6/lib -shared -Wl -Wno-return-type,-install_name,libg2g.dylib -o libg2g.dylib'    myLinktail='-lgfortran $OS_LIB/libjasper.a -lpng  -lc'    myLibs='$OS_LIB/ginitp_alt.o $OS_LIB/gendp_alt.o $OS_LIB/gdlist.a   $OS_LIB/gdcfil.a $OS_LIB/libgemlib.a $OS_LIB/libgplt.a $OS_LIB/libdevice.a   $OS_LIB/libgn.a $OS_LIB/libcgemlib.a $OS_LIB/libgemlib.a $OS_LIB/libnetcdf.a   $OS_LIB/libtextlib.a $OS_LIB/libxslt.a $OS_LIB/libxml2.a   -liconv $OS_LIB/libz.a $OS_LIB/librsl.a -lbz2'    $CC $myCflags *.c  $FC $myFflags *.f  $CC $myLinkflags *.o $myLibs $myLinktail    cp libg2g.dylib ~/awips2-ncep/viz/gov.noaa.nws.ncep.viz.gempak.nativelib.macosx/  
Comments:

Post a Comment:
Comments are closed for this entry.
Unidata Developer's Blog
A weblog about software development by Unidata developers*
Unidata Developer's Blog
A weblog about software development by Unidata developers*

Welcome

FAQs

News@Unidata blog

Take a poll!

What if we had an ongoing user poll in here?

Browse By Topic
Browse by Topic
« April 2025
SunMonTueWedThuFriSat
  
1
2
3
4
5
6
7
8
9
10
11
12
13
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
   
       
Today