Halton Huo wrote: > Hi All, > > I write a report on issues when porting OpenSource projects to > Solaris/OpenSolaris. > > The report link is: > http://wikis.sun.com/display/SolarisDeveloper/Issues+when+porting+OpenSource+projects+to+Solaris
Thanks for collecting and sharing this information. Some additional notes from our work on X.Org code: - No support for GCC options: -Wall/-Werror/-Wl - Your sample patch just removes -Wall - the code integrated into X.Org upstream checks for the compiler in a configure macro to set either -v for Sun Studio or the -W flags for gcc: http://cgit.freedesktop.org/xorg/util/macros/tree/xorg-macros.m4.in#n436 - MMX/SSE intrinsic functions are not compatible - We hit this issue in X a while ago, and filed CR 6224421 with the compilers for it, which though closed as duplicate of another bug, they never fully addressed, and chose to remain at least partially incompatible with gcc in the type definitions in a way that breaks the Xorg MMX code. Our solution was to build the code that used it (the Xorg server) with gcc on x86, since the performance increase of being able to use the MMX code was significant. (This code has since moved to libpixman, so we may be able to move Xorg server back to Sun Studio builds soon.) - No definition for _FUNCTION_ - You give workarounds that use glib's G_STRFUNC or use Sun Studio express. Our solution for non-glib code for Studio 12 is simply to use the C99 equivalent version that Studio 12 already supports - for instance, in Mesa: http://cgit.freedesktop.org/mesa/mesa/tree/src/mesa/main/glheader.h#n288 Like you, we've had to upstream multiple fixes already for some of these: - No definition for u_int8_t/u_int16_t/u_int32_t/u_int64_t causes build failure - libc printf(%s, NULL) segfaults - Missing strcasestr() causes build failure Other things we've had to fix that I didn't see in your list: - No support in Sun compilers for gcc's __builtin_expect (Seems to be covered by compiler CR's 6603861 (C) & 6603858 (C++) ) Solution for now: #if (!defined(__GNUC__) || __GNUC__ < 3) && (!defined(__IBMC__) || __IBMC__ < 900) # define __builtin_expect(x, y) x #endif - Needing to add -R flags to pkgconfig *.pc files & Makefiles for finding runtime libraries that aren't in /usr/lib - Adding checks for Sun Studio's __i386__, __amd64__, & __sparc__ defines everywhere the code checks for gcc's __i386, __amd64, & __sparc defines - No support for gcc's __volatile keyword. Solution: +#ifdef __SUNPRO_C +# if !defined(__volatile) +# define __volatile volatile +# endif +#endif - Functions to get the name of the running program (used by some libraries in error messages). Solution: On Solaris, use basename(getexecname()) where BSD uses getprogname() & Linux uses program_invocation_short_name, as shown in: http://cgit.freedesktop.org/mesa/mesa/tree/src/mesa/drivers/dri/common/xmlconfig.c#n51 - Different headers/names for byteswapping macros. Solution: Can either use platform-independent generic versions, such as: http://cgit.freedesktop.org/xorg/xserver/tree/glx/glxbyteorder.h or use Solaris <sys/byteorder.h> versions, as in: http://cgit.freedesktop.org/xorg/lib/libpciaccess/tree/src/common_interface.c#n39 I believe the <sys/byteorder.h> versions are somewhat optimized, due to CR 6729208: Optimize BSWAP_* and BE_* macros in sys/byteorder.h to use inline amd64 assembly -- -Alan Coopersmith- alan.coopersmith at sun.com Sun Microsystems, Inc. - X Window System Engineering