Hi, I tried to install openmpi-1.9a1r27674 on Cygwin-1.7.17 and got the following error (gcc-4.5.3).
... CC path.lo ../../../openmpi-1.9a1r27668/opal/util/path.c: In function 'opal_path_df': ../../../openmpi-1.9a1r27668/opal/util/path.c:578:18: error: 'buf' undeclared (first use in this function) ../../../openmpi-1.9a1r27668/opal/util/path.c:578:18: note: each undeclared identifier is reported only once for each function it appears in Makefile:1669: recipe for target `path.lo' failed make[3]: *** [path.lo] Error 1 ... The reason is that "buf" is only declared for some operating systems. I added "defined(__CYGWIN__)" in some places and was able to compile "path.c". hermes util 41 diff path.c path.c.orig 452c452 < #elif defined(__linux__) || defined(__CYGWIN__) || defined (__BSD) || (defined(__APPLE__) && defined(__MACH__)) --- > #elif defined(__linux__) || defined (__BSD) || (defined(__APPLE__) && defined(__MACH__)) 480c480 < #elif defined(__linux__) || defined(__CYGWIN__) || defined (__BSD) || (defined(__APPLE__) && defined(__MACH__)) --- > #elif defined(__linux__) || defined (__BSD) || (defined(__APPLE__) && defined(__MACH__)) 517c517 < #elif defined(__linux__) || defined(__CYGWIN__) --- > #elif defined(__linux__) 549c549 < #elif defined(__linux__) || defined(__CYGWIN__) || defined (__BSD) || \ --- > #elif defined(__linux__) || defined (__BSD) || \ 562c562 < #elif defined(__linux__) || defined (__CYGWIN__) || defined (__BSD) || \ --- > #elif defined(__linux__) || defined (__BSD) || \ hermes util 42 Searching for "__linux__" delivered some more files which must possibly be adapted. opal/config/opal_check_os_flavors.m4 opal/mca/event/libevent2019/libevent/buffer.c I assume that the following files do not need any changes because they are special for Linux or for features which are not important/available for Cygwin. configure: { $as_echo "$as_me:${as_lineno-$LINENO}: checking __linux__" >&5 configure:$as_echo_n "checking __linux__... " >&6; } configure:#ifndef __linux__ configure: error: this isnt __linux__ test/util/opal_path_nfs.c opal/asm/base/MIPS.asm:#ifdef __linux__ opal/asm/generated/atomic-mips64el.s:#ifdef __linux__ opal/asm/generated/atomic-mips64-linux.s:#ifdef __linux__ opal/asm/generated/atomic-mips-irix.s:#ifdef __linux__ opal/asm/generated/atomic-mips-linux.s:#ifdef __linux__ ompi/mca/common/verbs/common_verbs_basics.c:#if defined(__linux__) opal/include/opal/sys/cma.h:#ifdef __linux__ opal/mca/memory/linux/arena.c:#ifdef __linux__ ompi/mca/io/romio/romio/configure: #ifdef __linux__ ompi/mca/io/romio/romio/configure.in: #ifdef __linux__ opal/include/opal/sys/mips/atomic.h:#ifdef __linux__ opal/include/opal/sys/mips/atomic.h:#ifdef __linux__ opal/include/opal/sys/mips/atomic.h:#ifdef __linux__ opal/mca/event/libevent2019/libevent/arc4random.c:#ifdef __linux__ ompi/mca/io/romio/romio/adio/ad_lustre/ad_lustre.h:#ifdef __linux__ ompi/mca/io/romio/romio/adio/ad_lustre/ad_lustre.h:#endif /* __linux__ */ Can somebody add __Cygwin__ to all necessary files? Now I get the following error. ... Making all in mca/if/windows make[2]: Entering directory `/home/Admin/openmpi/openmpi-1.9-Cygwin.x86.32_gcc/opal/mca/if/windows' CC opal_if_windows.lo ../../../../../openmpi-1.9a1r27674/opal/mca/if/windows/opal_if_windows.c: In function 'if_windows_open': ../../../../../openmpi-1.9a1r27674/opal/mca/if/windows/opal_if_windows.c:58:5: error: 'SOCKET' undeclared (first use in this function) ../../../../../openmpi-1.9a1r27674/opal/mca/if/windows/opal_if_windows.c:58:5: note: each undeclared identifier is reported only once for each function it appears in ... Is it necessary to use windows sockets directly or is it possible to use something similar to Linux sockets? Cygwin supports sockets (based on Windows sockets as far as I know) and very often uses similar interfaces as Linux. Which file is responsible for the selection of "opal_if_windows.c"? I added the following constants to /usr/include/cygwin/shm.h before I started to build openmpi-1.9a1r27674. diff /usr/include/cygwin/shm.h /usr/include/cygwin/shm.h.orig 29,34d28 < /* Permission definitions */ < #define SHM_R 0400 /* read permission */ < #define SHM_W 0200 /* write permission */ < I used the following commands to configure Open MPI. "/usr/local/jdk1.7.0" is a link to my Java installation on Windows 7. cd /usr/local ln -s /cygdrive/c/Program\ Files\ \(x86\)/jdk1.7.0 jdk1.7.0 ../openmpi-1.9a1r27674/configure --prefix=/usr/local/openmpi-1.9 \ --with-jdk-bindir=/usr/local/jdk1.7.0/bin \ --with-jdk-headers=/usr/local/jdk1.7.0/include \ JAVA_HOME=/usr/local/jdk1.7.0 \ LDFLAGS="-m32 -Wl,--export-all-symbols -no-undefined" \ CC="gcc" CXX="g++" FC="gfortran" \ CFLAGS="-m32" CXXFLAGS="-m32" FCFLAGS="-m32" \ CPP="cpp" CXXCPP="cpp" \ CPPFLAGS="" CXXCPPFLAGS="" \ C_INCL_PATH="" C_INCLUDE_PATH="" CPLUS_INCLUDE_PATH="" \ OBJC_INCLUDE_PATH="" OPENMPI_HOME="" \ --enable-cxx-exceptions \ --enable-mpi-java \ --enable-heterogeneous \ --enable-opal-multi-threads \ --enable-mpi-thread-multiple \ --with-threads=posix \ --with-hwloc=internal \ --without-verbs \ --without-udapl \ --without-sctp \ --with-wrapper-cflags=-m32 \ --enable-debug \ --disable-mca-dso \ --without-cs-fs \ --enable-contrib-no-build=vt,libompitrace \ --enable-mca-no-build=memory_mallopt,paffinity,installdirs-windows,timer-windows \ |& tee log.configure.$SYSTEM_ENV.$MACHINE_ENV It would be great, if I could get a working Open MPI version with Java interface on Cygwin. Thank you very much for any help in advance. Kind regards Siegmar