FWIW, we might have a deal breaker back here at Cisco... The OMPI code base is being used in an embedded environment with a toolchain that (we think) was derived from gcc 3.x. It seems to totally hate the -std=gnu99 flag. :-(
Further, it is extremely unlikely that the toolchain will be upgraded (this is something beyond our control). Cisco must therefore vote "thumbs down" on the C99 stuff. Sorry guys! :-( On Jan 25, 2011, at 5:51 PM, Paul H. Hargrove wrote: > I found a root cause and a simpler/better simple fix: > > From manpage for gcc on Linux: >> file.s >> Assembler code. > > And from Darwin: > >> file.s >> Assembler code. Apple's version of GCC runs the preprocessor on >> these files as well as >> those ending in .S. > > So the problem/difference is that Apple insists on passing the .s through the > preprocessor by default when FSF's gcc does not. > The fix appears to be an explict "-xassembler": > > $ cat foo.s > .text > # _gsym_test_func > .globl _gsym_test_func > _gsym_test_func: > # _gsym_test_func > > $ gcc -std=c99 -c foo.s > foo.s:2:3: error: invalid preprocessing directive #_gsym_test_func > foo.s:5:3: error: invalid preprocessing directive #_gsym_test_func > > $ gcc -std=c99 -c -xassembler foo.s > [no output] > > -Paul > > > On 1/25/2011 2:48 PM, Nathan Hjelm wrote: >> Ok, then there are two possible simple fixes: >> - Strip -std from CCASFLAGS if Apple's gcc 4.0 is encountered, or >> - Always strip -std from CCASFLAGS. The flag shouln't have any effect when >> compiling assembly. >> >> -Nathan >> HPC-3, LANL >> >> On Tue, 25 Jan 2011, Paul H. Hargrove wrote: >> >>> I can confirm that the problem appears specific to Apple's compiler. >>> >>> Since the failure was reported to be configure-time, that took less time to >>> check up on that I'd expected. >>> What I find is that gcc-4.0.0 on Linux/x86 *does* fail the >>> "#_gsym_test_func" test, but for the RIGHT reason, and then goes on to >>> pass the next test case with the proper form of global symbol. The >>> relevent portion of config.log appears below. >>> >>> -Paul >>> >>> configure:27399: checking prefix for global symbol labels >>> configure: trying _ >>> configure:27439: gcc -std=gnu99 -O3 -DNDEBUG -finline-functions >>> -fno-strict-aliasing -c conftest.s >conftest.out 2>&1 >>> configure:27442: $? = 0 >>> configure:27447: gcc -std=gnu99 -O3 -DNDEBUG -finline-functions >>> -fno-strict-aliasing -I. conftest_c.c -c > conftest.cmpl 2>&1 >>> configure:27450: $? = 0 >>> configure:27455: gcc -std=gnu99 -O3 -DNDEBUG -finline-functions >>> -fno-strict-aliasing conftest_c.o conftest.o -o conftest > >>> conftest.link 2>&1 >>> configure:27458: $? = 1 >>> conftest_c.o: In function `main': >>> conftest_c.o(.text+0xd): undefined reference to `gsym_test_func' >>> collect2: ld returned 1 exit status >>> configure: failed C program was: >>> #ifdef __cplusplus >>> extern "C" { >>> #endif >>> void gsym_test_func(void); >>> #ifdef __cplusplus >>> } >>> #endif >>> int >>> main() >>> { >>> gsym_test_func(); >>> return 0; >>> } >>> configure: failed ASM program was: >>> >>> .text >>> # _gsym_test_func >>> .globl _gsym_test_func >>> _gsym_test_func: >>> # _gsym_test_func >>> >>> configure: trying >>> configure:27439: gcc -std=gnu99 -O3 -DNDEBUG -finline-functions >>> -fno-strict-aliasing -c conftest.s >conftest.out 2>&1 >>> configure:27442: $? = 0 >>> configure:27447: gcc -std=gnu99 -O3 -DNDEBUG -finline-functions >>> -fno-strict-aliasing -I. conftest_c.c -c > conftest.cmpl 2>&1 >>> configure:27450: $? = 0 >>> configure:27455: gcc -std=gnu99 -O3 -DNDEBUG -finline-functions >>> -fno-strict-aliasing conftest_c.o conftest.o -o conftest > >>> conftest.link 2>&1 >>> configure:27458: $? = 0 >>> configure:27496: result: >>> >>> >>> >>> >>> On 1/25/2011 2:19 PM, Paul H. Hargrove wrote: >>> I have gcc-4.0.0 on Linux built from unmodified FSF sources. >>> I will try to reproduce. >>> >>> -Paul >>> >>> On 1/25/2011 1:47 PM, Nathan Hjelm wrote: >>> Looks like a bug in Apple's gcc 4.0. I tried the source with >>> gcc 3.4.6 and gcc 4.1.2 on Linux and did not >>> see that error. >>> >>> I will take a look and see if there is a simple fix to get >>> around this apparent compiler bug. >>> >>> -Nathan >>> >>> On Tue, 25 Jan 2011, Jeff Squyres wrote: >>> >>> Short version >>> ============= >>> >>> MTT turned up a problem with -std=gnu99 on OS X Leopard, >>> which ships with the gcc 4.0 >>> compiler (OS X Snow Leopard ships with gcc 4.2, and >>> doesn't have a problem). Does anyone >>> have gcc 4.0 on Linux? I'm wondering if the same problem >>> would occur. >>> >>> More details: >>> ============= >>> >>> From our friends at Absoft: >>> >>> >>> ----- >>> The -std=gnu99 is causing the problem when used with >>> gcc-4.0 ( the default on Leopard with >>> Apple's XCode 3.1 development tools ): >>> >>> BigMac:ompi cag$ gcc --version -std=gnu99 -c conftest.s >>> conftest.s:2:3: error: invalid preprocessing directive >>> #_gsym_test_func >>> conftest.s:5:3: error: invalid preprocessing directive >>> #_gsym_test_func >>> BigMac:ompi cag$ gcc-4.0 -std=gnu99 -c conftest.s >>> conftest.s:2:3: error: invalid preprocessing directive >>> #_gsym_test_func >>> conftest.s:5:3: error: invalid preprocessing directive >>> #_gsym_test_func >>> BigMac:ompi cag$ gcc-4.2 -std=gnu99 -c conftest.s >>> BigMac:ompi cag$ >>> >>> On Snow Leopard with Apple's XCode 3.2 development tools, >>> the default compiler is 4.2. >>> ----- >>> >>> The compile line he's talking about in particular is from >>> a configure test in >>> opal/config/opal_config_asm.m4, where we're looking for >>> assembly global symbols. The source >>> that we're trying to compile is: >>> >>> ----- >>> .text >>> # _gsym_test_func >>> .globl _gsym_test_func >>> _gsym_test_func: >>> # _gsym_test_func >>> ----- >>> >>> (configure tries a few prefixes) >>> >>> But the "#" token with the -std=gnu99 option is causing >>> failures where it shouldn't (i.e., it >>> causes configure to abort because all the assembly tests >>> looking for the global symbols error >>> out due to the # token. >>> >>> So I think we either need to find a workaround for this >>> assembly test or whack the idea of >>> the C99 stuff. :-( >>> >>> >>> >>> On Jan 24, 2011, at 10:29 AM, Nathan Hjelm wrote: >>> >>> No, they didn't get added (adding them now). I >>> didn't get a chance to add them >>> over the weekend. >>> >>> -Nathan >>> >>> On Mon, 24 Jan 2011, Jeff Squyres wrote: >>> >>> I'm getting these: >>> >>> CC dummy_component.lo >>> dummy_component.c:25: warning: ISO C90 >>> forbids specifying subobject >>> to initialize >>> dummy_component.c:28: warning: ISO C90 >>> forbids specifying subobject >>> to initialize >>> dummy_component.c:29: warning: ISO C90 >>> forbids specifying subobject >>> to initialize >>> dummy_component.c:30: warning: ISO C90 >>> forbids specifying subobject >>> to initialize >>> dummy_component.c:31: warning: ISO C90 >>> forbids specifying subobject >>> to initialize >>> dummy_component.c:33: warning: ISO C90 >>> forbids specifying subobject >>> to initialize >>> dummy_component.c:34: warning: ISO C90 >>> forbids specifying subobject >>> to initialize >>> dummy_component.c:35: warning: ISO C90 >>> forbids specifying subobject >>> to initialize >>> dummy_component.c:37: warning: ISO C90 >>> forbids specifying subobject >>> to initialize >>> dummy_component.c:39: warning: ISO C90 >>> forbids specifying subobject >>> to initialize >>> dummy_component.c: In function >>> ‘component_open’: >>> dummy_component.c:45: warning: unused >>> variable ‘c’ >>> dummy.c:67: warning: ISO C90 forbids >>> specifying subobject to >>> initialize >>> dummy.c:68: warning: ISO C90 forbids >>> specifying subobject to >>> initialize >>> dummy.c:69: warning: ISO C90 forbids >>> specifying subobject to >>> initialize >>> dummy.c:70: warning: ISO C90 forbids >>> specifying subobject to >>> initialize >>> CCLD mca_debugger_dummy.la >>> >>> Did the autoconf tests not get added? >>> >>> -- >>> Jeff Squyres >>> jsquy...@cisco.com >>> For corporate legal information go to: >>> >>> http://www.cisco.com/web/about/doing_business/legal/cri/ >>> >>> >>> >>> _______________________________________________ >>> devel mailing list >>> de...@open-mpi.org >>> >>> http://www.open-mpi.org/mailman/listinfo.cgi/devel >>> >>> _______________________________________________ >>> devel mailing list >>> de...@open-mpi.org >>> http://www.open-mpi.org/mailman/listinfo.cgi/devel >>> >>> >>> >>> -- >>> Jeff Squyres >>> jsquy...@cisco.com >>> For corporate legal information go to: >>> http://www.cisco.com/web/about/doing_business/legal/cri/ >>> >>> >>> _______________________________________________ >>> devel mailing list >>> de...@open-mpi.org >>> http://www.open-mpi.org/mailman/listinfo.cgi/devel >>> >>> _______________________________________________ >>> devel mailing list >>> de...@open-mpi.org >>> http://www.open-mpi.org/mailman/listinfo.cgi/devel >>> >>> >>> -- >>> Paul H. Hargrove phhargr...@lbl.gov >>> Future Technologies Group >>> HPC Research Department Tel: +1-510-495-2352 >>> Lawrence Berkeley National Laboratory Fax: +1-510-486-6900 >>> >>> >>> _______________________________________________ >>> devel mailing list >>> de...@open-mpi.org >>> http://www.open-mpi.org/mailman/listinfo.cgi/devel >>> >>> >>> -- >>> Paul H. Hargrove phhargr...@lbl.gov >>> Future Technologies Group >>> HPC Research Department Tel: +1-510-495-2352 >>> Lawrence Berkeley National Laboratory Fax: +1-510-486-6900 >>> >>> >> >> _______________________________________________ >> devel mailing list >> >> de...@open-mpi.org >> http://www.open-mpi.org/mailman/listinfo.cgi/devel > > -- > Paul H. Hargrove > phhargr...@lbl.gov > > Future Technologies Group > HPC Research Department Tel: +1-510-495-2352 > Lawrence Berkeley National Laboratory Fax: +1-510-486-6900 > > _______________________________________________ > devel mailing list > de...@open-mpi.org > http://www.open-mpi.org/mailman/listinfo.cgi/devel -- Jeff Squyres jsquy...@cisco.com For corporate legal information go to: http://www.cisco.com/web/about/doing_business/legal/cri/