ompi icon indicating copy to clipboard operation
ompi copied to clipboard

clang: error: cannot specify -o when generating multiple output files

Open leleliu008 opened this issue 4 years ago • 12 comments

build toolchain: android-ndk 21.3.6528147 build source: https://download.open-mpi.org/release/open-mpi/v4.1/openmpi-4.1.1.tar.bz2

libtool: compile:  armv7a-linux-androideabi26-clang -DHAVE_CONFIG_H -I. -I/var/folders/jw/7vmz4m1970932zln9tb1whxr0000gn/T/tmp.CqZn4eIR/opal/mca/pmix/pmix3x/pmix/src/util/keyval -I../../../src/include -I../../../include -iquote/var/folders/jw/7vmz4m1970932zln9tb1whxr0000gn/T/tmp.CqZn4eIR/1625720363/armeabi-v7a/opal/mca/pmix/pmix3x/pmix -iquote/var/folders/jw/7vmz4m1970932zln9tb1whxr0000g
n/T/tmp.CqZn4eIR/opal/mca/pmix/pmix3x/pmix -iquote/var/folders/jw/7vmz4m1970932zln9tb1whxr0000gn/T/tmp.CqZn4eIR/opal/mca/pmix/pmix3x/pmix/src -iquote/var/folders/jw/7vmz4m1970932zln9tb1whxr0000gn/T/tmp.CqZn4eIR/1625720363/armeabi-v7a/opal/mca/pmix/pmix3x/pmix/
include -I/var/folders/jw/7vmz4m1970932zln9tb1whxr0000gn/T/tmp.CqZn4eIR/opal/mca/pmix/pmix3x/pmix/include -I/var/folders/jw/7vmz4m1970932zln9tb1whxr0000gn/T/tmp.CqZn4eIR -I/var/folders/jw/7vmz4m1970932zln9tb1whxr0000gn/T/tmp.CqZn4eIR/1625720363/armeabi-v7a -I/var/folders/jw/7vmz4m1970932zln9tb1whxr0000gn/T/tmp.CqZn4eIR/opal/include -I/var/folders/jw/7vmz4m1970932zln9tb1whxr0000gn/T/tmp.CqZn4eIR/1625720363/armeabi-v7a/opal/include -I/var/folders/jw/7vmz4m1970932zln9tb1whxr0000gn/T/tmp.CqZn4eIR/1625720363/armeabi-v7a/opal/mca/hwloc/hwloc201/hwloc/include -I/var/folders/jw/7vmz4m1970932zln9tb1whxr0000gn/T/tmp.CqZn4eIR/opal/mca/hwloc/hwloc201/hwloc/include -I/Users/leleliu008/.ndk-pkg/install.d/libevent/armeabi-v7a/include -I/Users/leleliu008/.ndk-pkg/install.d/openssl/armeabi-v7a/include --sysroot /usr/local/opt/android-sdk/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64/sysroot -Qunused-arguments -I/usr/local/opt/android-sdk/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64/sysroot/usr/include/arm-linux-androideabi -DPOSIX_MADV_DONTNEED=MADV_DONTNEED -include /var/folders/jw/7vmz4m1970932zln9tb1whxr0000gn/T/tmp.CqZn4eIR/1625720363/include.h /var/folders/jw/7vmz4m1970932zln9tb1whxr0000gn/T/tmp.CqZn4eIR/stub-getdtablesize.c -DNDEBUG -O3 --sysroot /usr/local/opt/android-sdk/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64/sysroot -Qunused-arguments -Os -fpic -fPIC -finline-functions -fno-strict-aliasing -MT keyval_lex.lo -MD -MP -MF .deps/keyval_lex.Tpo -c /var/folders/jw/7vmz4m1970932zln9tb1whxr0000gn/T/tmp.CqZn4eIR/opal/mca/pmix/pmix3x/pmix/src/util/keyval/keyval_lex.c  -fPIC -DPIC -o .libs/keyval_lex.o
clang: error: cannot specify -o when generating multiple output files
make[5]: *** [keyval_lex.lo] Error 1

https://github.com/leleliu008/ndk-pkg-formula/runs/3015848340?check_suite_focus=true

leleliu008 avatar Jul 08 '21 09:07 leleliu008

@rhc54 the issue involves PMIx

From the logs, Open MPI configures the internal PMIx with

checking for subdir args...  '--disable-man-pages' '--with-pmix-symbol-rename=OPAL_MCA_PMIX3X_' '--enable-embedded-mode' '--disable-pmix-timing' '--without-tests-examples' '--disable-pmix-binaries' '--disable-pmix-backward-compatibility' '--disable-visibility' '--enable-embedded-libevent' '--with-libevent-header=opal/mca/event/external/external.h' '--enable-embedded-hwloc' '--with-hwloc-header=opal/mca/hwloc/hwloc201/hwloc201.h' '--host=armv7a-linux-androideabi' '--prefix=/Users/runner/.ndk-pkg/install.d/openmpi/armeabi-v7a' '--disable-rpath' '--disable-debug' '--disable-nls' '--enable-largefile' '--enable-static' '--enable-shared' 'CC=armv7a-linux-androideabi26-clang' 'CFLAGS=--sysroot /Users/runner/Library/Android/sdk/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64/sysroot -Qunused-arguments -Os -fpic' 'CXX=armv7a-linux-androideabi26-clang++' 'CXXFLAGS=--sysroot /Users/runner/Library/Android/sdk/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64/sysroot -Qunused-arguments -Os -fpic' 'CPP=armv7a-linux-androideabi26-clang -E' 'CPPFLAGS=-I/Users/runner/.ndk-pkg/install.d/libevent/armeabi-v7a/include -I/Users/runner/.ndk-pkg/install.d/openssl/armeabi-v7a/include --sysroot /Users/runner/Library/Android/sdk/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64/sysroot -Qunused-arguments -I/Users/runner/Library/Android/sdk/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64/sysroot/usr/include/arm-linux-androideabi -DPOSIX_MADV_DONTNEED=MADV_DONTNEED -include /var/folders/24/8k48jl6d249_n_qfxwsl6xvm0000gn/T/tmp.Z1XrgMuE/1625736590/include.h -include /var/folders/24/8k48jl6d249_n_qfxwsl6xvm0000gn/T/tmp.Z1XrgMuE/stub-getdtablesize.c' 'LDFLAGS=-L/Users/runner/.ndk-pkg/install.d/libevent/armeabi-v7a/lib -L/Users/runner/.ndk-pkg/install.d/openssl/armeabi-v7a/lib --sysroot /Users/runner/Library/Android/sdk/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64/sysroot -L/Users/runner/Library/Android/sdk/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64/sysroot/usr/lib/arm-linux-androideabi/26' 'AR=arm-linux-androideabi-ar' 'RANLIB=arm-linux-androideabi-ranlib' 'PKG_CONFIG=/usr/local/bin/pkg-config' 'PKG_CONFIG_PATH=/Users/runner/.ndk-pkg/install.d/openssl/armeabi-v7a/lib/pkgconfig:/Users/runner/.ndk-pkg/install.d/libevent/armeabi-v7a/lib/pkgconfig' 'PKG_CONFIG_LIBDIR=' 'CC_FOR_BUILD=/usr/bin/cc' '--disable-coverage' '--disable-mpi-fortran' '--disable-mpi-java' '--disable-oshmem-fortran' '--disable-builtin-atomics' '--enable-sysv-shmem=no' '--enable-sysv-sshmem=no' '--enable-binaries' '--with-libevent=/Users/runner/.ndk-pkg/install.d/libevent/armeabi-v7a' 'FC=' 'host_alias=armv7a-linux-androideabi' 'CFLAGS=-O3 -DNDEBUG --sysroot /Users/runner/Library/Android/sdk/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64/sysroot -Qunused-arguments -Os -fpic ' 'CPPFLAGS=-I/var/folders/24/8k48jl6d249_n_qfxwsl6xvm0000gn/T/tmp.Z1XrgMuE -I/var/folders/24/8k48jl6d249_n_qfxwsl6xvm0000gn/T/tmp.Z1XrgMuE/1625736590/armeabi-v7a -I/var/folders/24/8k48jl6d249_n_qfxwsl6xvm0000gn/T/tmp.Z1XrgMuE/opal/include -I/var/folders/24/8k48jl6d249_n_qfxwsl6xvm0000gn/T/tmp.Z1XrgMuE/1625736590/armeabi-v7a/opal/include -I/var/folders/24/8k48jl6d249_n_qfxwsl6xvm0000gn/T/tmp.Z1XrgMuE/1625736590/armeabi-v7a/opal/mca/hwloc/hwloc201/hwloc/include -I/var/folders/24/8k48jl6d249_n_qfxwsl6xvm0000gn/T/tmp.Z1XrgMuE/opal/mca/hwloc/hwloc201/hwloc/include -I/Users/runner/.ndk-pkg/install.d/libevent/armeabi-v7a/include -I/Users/runner/.ndk-pkg/install.d/openssl/armeabi-v7a/include --sysroot /Users/runner/Library/Android/sdk/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64/sysroot -Qunused-arguments -I/Users/runner/Library/Android/sdk/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64/sysroot/usr/include/arm-linux-androideabi -DPOSIX_MADV_DONTNEED=MADV_DONTNEED -include /var/folders/24/8k48jl6d249_n_qfxwsl6xvm0000gn/T/tmp.Z1XrgMuE/1625736590/include.h -include /var/folders/24/8k48jl6d249_n_qfxwsl6xvm0000gn/T/tmp.Z1XrgMuE/stub-getdtablesize.c   -I/Users/runner/.ndk-pkg/install.d/libevent/armeabi-v7a/include' '--disable-option-checking'

Note CPPFLAGS=-include /.../include.h -include /.../stub-getdtablesize.c

but ends up with

checking final CPPFLAGS... -iquote/var/folders/24/8k48jl6d249_n_qfxwsl6xvm0000gn/T/tmp.Z1XrgMuE/1625736590/armeabi-v7a/opal/mca/pmix/pmix3x/pmix -iquote/var/folders/24/8k48jl6d249_n_qfxwsl6xvm0000gn/T/tmp.Z1XrgMuE/opal/mca/pmix/pmix3x/pmix -iquote/var/folders/24/8k48jl6d249_n_qfxwsl6xvm0000gn/T/tmp.Z1XrgMuE/opal/mca/pmix/pmix3x/pmix/src -iquote/var/folders/24/8k48jl6d249_n_qfxwsl6xvm0000gn/T/tmp.Z1XrgMuE/1625736590/armeabi-v7a/opal/mca/pmix/pmix3x/pmix/include -I/var/folders/24/8k48jl6d249_n_qfxwsl6xvm0000gn/T/tmp.Z1XrgMuE/opal/mca/pmix/pmix3x/pmix/include -I/var/folders/24/8k48jl6d249_n_qfxwsl6xvm0000gn/T/tmp.Z1XrgMuE -I/var/folders/24/8k48jl6d249_n_qfxwsl6xvm0000gn/T/tmp.Z1XrgMuE/1625736590/armeabi-v7a -I/var/folders/24/8k48jl6d249_n_qfxwsl6xvm0000gn/T/tmp.Z1XrgMuE/opal/include -I/var/folders/24/8k48jl6d249_n_qfxwsl6xvm0000gn/T/tmp.Z1XrgMuE/1625736590/armeabi-v7a/opal/include -I/var/folders/24/8k48jl6d249_n_qfxwsl6xvm0000gn/T/tmp.Z1XrgMuE/1625736590/armeabi-v7a/opal/mca/hwloc/hwloc201/hwloc/include -I/var/folders/24/8k48jl6d249_n_qfxwsl6xvm0000gn/T/tmp.Z1XrgMuE/opal/mca/hwloc/hwloc201/hwloc/include -I/Users/runner/.ndk-pkg/install.d/libevent/armeabi-v7a/include -I/Users/runner/.ndk-pkg/install.d/openssl/armeabi-v7a/include --sysroot /Users/runner/Library/Android/sdk/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64/sysroot -Qunused-arguments -I/Users/runner/Library/Android/sdk/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64/sysroot/usr/include/arm-linux-androideabi -DPOSIX_MADV_DONTNEED=MADV_DONTNEED -include /var/folders/24/8k48jl6d249_n_qfxwsl6xvm0000gn/T/tmp.Z1XrgMuE/1625736590/include.h /var/folders/24/8k48jl6d249_n_qfxwsl6xvm0000gn/T/tmp.Z1XrgMuE/stub-getdtablesize.c

note -include /.../include.h /.../stub-getdtablesize.c

the second -include has been removed, and I think this is what is ultimately causing the error message

clang: error: cannot specify -o when generating multiple output files

ggouaillardet avatar Jul 08 '21 14:07 ggouaillardet

Someone is welcome to come up with a patch 😄

rhc54 avatar Jul 08 '21 16:07 rhc54

@ggouaillardet Thank you for your help. this problem has been resolved.

I have ever set

export CPPFLAGS="$CPPFLAGS -include $SOURCE_DIR/stub-getdtablesize.c"

I removed it and compiled successfully.

leleliu008 avatar Jul 08 '21 16:07 leleliu008

Android-NDK no int getdtablesize(void);

I directly modified the source code:

gsed -i '1i static int getdtablesize(void);' orte/mca/state/base/state_base_fns.c &&
cat >> orte/mca/state/base/state_base_fns.c <<EOF
#include <sys/cdefs.h>
#include <sys/resource.h>
#include <linux/kernel.h>
static int getdtablesize(void) {
    struct rlimit r;
    if (getrlimit(RLIMIT_NOFILE, &r) < 0) {
        return sysconf(_SC_OPEN_MAX);
    }
    return r.rlim_cur;
}
EOF

leleliu008 avatar Jul 08 '21 16:07 leleliu008

@ggouaillardet Is it worth adding -include to https://github.com/open-mpi/ompi/blob/25e0db687fa14e1eac974822abcdce178d284f85/config/opal_functions.m4#L383-L402

jsquyres avatar Jul 08 '21 21:07 jsquyres

Thanks @jsquyres, that will do the trick.

@rhc54 the root cause is in both Open MPI and PMIx, and I will backport the fix to PMIx once reviewed here.

@leleliu008 can you please teach me your full name in Roman alphabet so I can properly acknowledge your contribution?

ggouaillardet avatar Jul 09 '21 01:07 ggouaillardet

Almost certainly in PRRTE as well, I should think

rhc54 avatar Jul 09 '21 01:07 rhc54

@rhc54 I will also issue the PR for PRRTE if needed.

ggouaillardet avatar Jul 09 '21 01:07 ggouaillardet

@ggouaillardet I'm Chinese. My Chinese name is 刘富频. Chinese people usually don't have names in Roman alphabet, but we have Pinyin, which is similar to the Roman alphabet. My Pinyin name is LiuFuPin. Thank you.

leleliu008 avatar Jul 09 '21 05:07 leleliu008

Thanks @leleliu008 for the lengthy explanation. I updated the commit message of #9131 to credit you as LiuFuPin (I am not sure we can use kanji - nor other non roman alphabets - in the commit messages)

ggouaillardet avatar Jul 09 '21 05:07 ggouaillardet

@ggouaillardet Many thanks for your efforts!

leleliu008 avatar Jul 09 '21 06:07 leleliu008

@ggouaillardet I believe this should be closed, yes?

rhc54 avatar Jul 08 '22 16:07 rhc54