Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

BLD: Get ESMF compiling on Cygwin #202

Open
wants to merge 21 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
74 changes: 74 additions & 0 deletions .github/workflows/test-build-cygwin.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
name: Test on Cygwin
on:
workflow_dispatch:
release:
type: ["published"]
push:
tags:
- 'v[0-9]+.[0-9]+.[0-9]+'

concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true

permissions:
contents: read # to fetch code (actions/checkout)

env:
SHELLOPTS: igncr
CYGWIN_NOWINPATH: 1
CHERE_INVOKING: 1
ESMF_DIR: /cygdrive/d/a/esmf/esmf
ESMF_BOPT: O
ESMF_OPTLEVEL: 2
ESMF_COMM: mpiuni
ESMF_COMPILER: gfortran
ESMF_TESTSHAREDOBJ: ON
ESMF_RANLIB: ranlib
ESMF_LAPACK: system
ESMF_LAPACK_LIBPATH: /usr/lib
ESMF_LAPACK_LIBS: -llapack -lblas
NETCDF: /usr
ESMF_NETCDF: split
ESMF_NETCDF_INCLUDE: /usr/include
ESMF_NETCDF_LIBPATH: /usr/lib
ESMF_CXX: g++
ESMF_CXXCOMPILEOPTS: "-g -O2"
ESMF_F90: gfortran
ESMF_F90COMPILEOPTS: "-g -O2"
ESMF_INSTALL_PREFIX: /tmp/fakeroot/usr
ESMF_INSTALL_DOCDIR: share/doc/esmf

jobs:
cygwin_build_test:
runs-on: windows-latest
steps:
- run: git config --global core.autocrlf input
- uses: actions/checkout@v3
with:
submodules: recursive
- uses: cygwin/cygwin-install-action@v4
with:
platform: x86_64
install-dir: 'C:\tools\cygwin'
packages: >-
openmpi gcc-core gcc-fortran gcc-g++ libnetcdf-devel libnetcdf-fortran-devel
texlive-collection-latex texlive-collection-latexextra perl make bash dash
liblapack-devel cmake
python39-devel python39-pip python39-numpy python39-pytest
- name: Set Windows PATH
uses: egor-tensin/cleanup-path@v3
with:
dirs: 'C:\tools\cygwin\bin;C:\tools\cygwin\lib\lapack'
- name: Check location
run: |
C:\tools\cygwin\bin\dash.exe -c "echo PWD; pwd; echo ESMF_DIR=${ESMF_DIR}"
- name: Build ESMF
run: |
C:\tools\cygwin\bin\dash.exe -c "/usr/bin/make all"
- name: Build ESMPy
run: |
C:\tools\cygwin\bin\dash.exe -c "cd src/addon/esmpy; python -m pip install ."
- name: Check ESMF
run: |
C:\tools\cygwin\bin\dash.exe -c "/usr/bin/make check"
23 changes: 16 additions & 7 deletions build/common.mk
Original file line number Diff line number Diff line change
Expand Up @@ -4027,7 +4027,11 @@ $(ESMF_LOCOBJDIR)/%.o : %.cpp

.F90.$(ESMF_SL_SUFFIX):
$(ESMF_F90COMPILEFREECPP_CMD) $(ESMF_SO_F90COMPILEOPTS) $<
$(ESMF_F90LINKER) $(ESMF_SO_F90LINKOPTS) $(ESMF_F90LINKOPTS) $(ESMF_F90LINKPATHS) $(ESMF_F90LINKRPATHS) -o $@ $*.o $(ESMF_F90ESMFLINKLIBS)
if [ $(ESMF_SL_SUFFIX) != "dll.a" ] ; then \
$(ESMF_F90LINKER) $(ESMF_SO_F90LINKOPTS) $(ESMF_F90LINKOPTS) $(ESMF_F90LINKPATHS) $(ESMF_F90LINKRPATHS) -o $@ $*.o $(ESMF_F90ESMFLINKLIBS); \
else \
$(ESMF_F90LINKER) $(ESMF_SO_F90LINKOPTS) $(ESMF_F90LINKOPTS) $(ESMF_F90LINKPATHS) -shared -o $(@:.dll.a=.dll) -Wl,--out-implib=$@ -Wl,--export-all-symbols -Wl,--whole-archive $*.o -Wl,--no-whole-archive $(ESMF_F90ESMFLINKLIBS); \
fi;

.F90.$(ESMF_LIB_SUFFIX):
$(ESMF_F90COMPILEFREECPP_CMD) $<
Expand Down Expand Up @@ -4127,12 +4131,17 @@ shared:
echo Converting $$NEXTLIB.a to $$NEXTLIB.$(ESMF_SL_SUFFIX) ;\
mkdir tmp_$$NEXTLIB ;\
cd tmp_$$NEXTLIB ;\
$(ESMF_AREXTRACT) ../$$NEXTLIB.$(ESMF_LIB_SUFFIX) ;\
echo $(ESMF_SL_LIBLINKER) $(ESMF_SL_LIBOPTS) -o $(ESMF_LDIR)/$$NEXTLIB.$(ESMF_SL_SUFFIX) *.o $(ESMF_SL_LIBLIBS) ;\
$(ESMF_SL_LIBLINKER) $(ESMF_SL_LIBOPTS) -o $(ESMF_LDIR)/$$NEXTLIB.$(ESMF_SL_SUFFIX) *.o $(ESMF_SL_LIBLIBS) ;\
echo Converting $$NEXTLIB.$(ESMF_SL_SUFFIX) to $$NEXTLIB\_fullylinked.$(ESMF_SL_SUFFIX) ;\
echo $(ESMF_SL_LIBLINKER) $(ESMF_SL_LIBOPTS) -o $(ESMF_LDIR)/$$NEXTLIB\_fullylinked.$(ESMF_SL_SUFFIX) *.o $(ESMF_CXXLINKOPTS) $(ESMF_CXXLINKPATHS) $(ESMF_CXXLINKRPATHS) $(ESMF_CXXLINKLIBS) ;\
$(ESMF_SL_LIBLINKER) $(ESMF_SL_LIBOPTS) -o $(ESMF_LDIR)/$$NEXTLIB\_fullylinked.$(ESMF_SL_SUFFIX) *.o $(ESMF_CXXLINKOPTS) $(ESMF_CXXLINKPATHS) $(ESMF_CXXLINKRPATHS) $(ESMF_CXXLINKLIBS) ;\
$(ESMF_AREXTRACT) ../$$NEXTLIB.$(ESMF_LIB_SUFFIX) ;\
if [ $(ESMF_SL_SUFFIX) != "dll.a" ] ; then \
echo $(ESMF_SL_LIBLINKER) $(ESMF_SL_LIBOPTS) -o $(ESMF_LDIR)/$$NEXTLIB.$(ESMF_SL_SUFFIX) *.o $(ESMF_SL_LIBLIBS) ;\
$(ESMF_SL_LIBLINKER) $(ESMF_SL_LIBOPTS) -o $(ESMF_LDIR)/$$NEXTLIB.$(ESMF_SL_SUFFIX) *.o $(ESMF_SL_LIBLIBS) ;\
echo Converting $$NEXTLIB.$(ESMF_SL_SUFFIX) to $$NEXTLIB\_fullylinked.$(ESMF_SL_SUFFIX) ;\
echo $(ESMF_SL_LIBLINKER) $(ESMF_SL_LIBOPTS) -o $(ESMF_LDIR)/$$NEXTLIB\_fullylinked.$(ESMF_SL_SUFFIX) *.o $(ESMF_CXXLINKOPTS) $(ESMF_CXXLINKPATHS) $(ESMF_CXXLINKRPATHS) $(ESMF_CXXLINKLIBS) ;\
$(ESMF_SL_LIBLINKER) $(ESMF_SL_LIBOPTS) -o $(ESMF_LDIR)/$$NEXTLIB\_fullylinked.$(ESMF_SL_SUFFIX) *.o $(ESMF_CXXLINKOPTS) $(ESMF_CXXLINKPATHS) $(ESMF_CXXLINKRPATHS) $(ESMF_CXXLINKLIBS) ;\
else \
echo $(ESMF_SL_LIBLINKER) $(ESMF_SL_LIBOPTS) -o $(ESMF_LDIR)/cyg$${NEXTLIB#lib}\.dll -Wl,--out-implib=$(ESMF_LDIR)/$$NEXTLIB\.dll.a -Wl,--export-all-symbols -Wl,--enable-auto-import -Wl,--whole-archive *.o -Wl,--no-whole-archive $(ESMF_CXXLINKOPTS) $(ESMF_CXXLINKPATHS) $(ESMF_CXXLINKRPATHS) $(ESMF_CXXLINKLIBS) ;\
$(ESMF_SL_LIBLINKER) $(ESMF_SL_LIBOPTS) -o $(ESMF_LDIR)/cyg$${NEXTLIB#lib}\.dll -Wl,--out-implib=$(ESMF_LDIR)/$$NEXTLIB\.dll.a -Wl,--export-all-symbols -Wl,--enable-auto-import -Wl,--whole-archive *.o -Wl,--no-whole-archive $(ESMF_CXXLINKOPTS) $(ESMF_CXXLINKPATHS) $(ESMF_CXXLINKRPATHS) $(ESMF_CXXLINKLIBS) ;\
fi ;\
cd .. ;\
$(ESMF_RM) -r tmp_$$NEXTLIB ;\
fi ;\
Expand Down
5 changes: 3 additions & 2 deletions build_config/Cygwin.gfortran.default/build_rules.mk
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
ESMF_F90DEFAULT = gfortran
ESMF_CXXDEFAULT = g++
ESMF_CDEFAULT = gcc
ESMF_CXXCOMPILECPPFLAGS+= -D_BSD_SOURCE -D_POSIX_C_SOURCE=199309L

############################################################
# Default MPI setting.
Expand Down Expand Up @@ -115,8 +116,8 @@ ESMF_CXXOPTFLAG_G += -Wall -Wextra -Wno-unused

############################################################
# Cygwin 1.5.24 does not yet support POSIX IPC (memory mapped files)
#
ESMF_CXXCOMPILECPPFLAGS += -DESMF_NO_POSIXIPC
# Cygwin 3.4.9 might
# ESMF_CXXCOMPILECPPFLAGS += -DESMF_NO_POSIXIPC

############################################################
# Fortran symbol convention
Expand Down
Loading