[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] xen: Don't use -nostdinc flags with CLANG
On 11/02/14 12:59, Tim Deegan wrote: At 12:36 +0000 on 11 Feb (1392118581), Julien Grall wrote:On 11/02/14 12:35, Tim Deegan wrote:At 12:30 +0000 on 11 Feb (1392118227), Julien Grall wrote:On 11/02/14 08:53, Tim Deegan wrote:At 23:29 +0000 on 10 Feb (1392071374), Julien Grall wrote:Commit 06a9c7e "xen: move -nostdinc into common Rules.mk." breaks compilation with clang: In file included from sched_sedf.c:8: In file included from /home/julieng/works/xen/xen/include/xen/lib.h:5: /home/julieng/works/xen/xen/include/xen/stdarg.h:20:12: error: 'stdarg.h' file not found with <angled> include; use "quotes" instead ^~~~~~~~~~ "stdarg.h"Looks like on your system stdarg.h doesn't live in a compiler-specific path, like we have for the BSDs. I think we should just go to using our own definitions for stdarg/stdbool everywhere; trying to chase the compiler-specific versions around is a PITA, and the pieces we actually need are trivial.For BSDs, we are using our own stdargs/stdbool. So we don't include the system <stdarg.h>. Linux is using $(CC) -print-file-name=include to get the right path. It works with both gcc and clang on Linux distos, but not on FreeBSD.Wait - is the error message you posted from clang on FreeBSD? That's surprising; on FreeBSD xen/stdarg.h shouldn't be trying to include <stdarg.h> at all. Is __FreeBSD__ not being defined?No it's from Linux (Debian Wheezy and Fedora). I just gave a try to the "-print-file-name" solution on FreeBSD.Oh, OK. Yeah, we knew that didn't work there, because on *BSD the compiler-specific headers like stdarg.h actually live in /usr/include and can themselves include other system headers. That's why we have our own implementation of the bits we need, that we use on BSD. Are you using a very old version of clang? As 06a9c7e points out, our current runes didn't work before clang v3.0. If not, rather than chasing this around any further, I think we should abandon trying to use the compiler-provided headers even on linux. Does this patch fix your build issue? commit e7003f174e0df9192dde6fa8d33b0a20f99ce053 Author: Tim Deegan <tim@xxxxxxx> Date: Tue Feb 11 12:44:09 2014 +0000 xen: stop trying to use the system <stdarg.h> and <stdbool.h> We already have our own versions of the stdarg/stdbool definitions, for systems where those headers are installed in /usr/include. On linux, they're typically installed in compiler-specific paths, but finding them has proved unreliable. Drop that and use our own versions everywhere. Signed-off-by: Tim Deegan <tim@xxxxxxx> diff --git a/xen/include/xen/stdarg.h b/xen/include/xen/stdarg.h index d1b2540..0283f06 100644 --- a/xen/include/xen/stdarg.h +++ b/xen/include/xen/stdarg.h @@ -1,23 +1,21 @@ #ifndef __XEN_STDARG_H__ #define __XEN_STDARG_H__ -#if defined(__OpenBSD__) || defined(__NetBSD__) || defined(__FreeBSD__) - typedef __builtin_va_list va_list; -# ifdef __GNUC__ -# define __GNUC_PREREQ__(x, y) \ - ((__GNUC__ == (x) && __GNUC_MINOR__ >= (y)) || \ - (__GNUC__ > (x))) -# else -# define __GNUC_PREREQ__(x, y) 0 -# endif -# if !__GNUC_PREREQ__(4, 5) -# define __builtin_va_start(ap, last) __builtin_stdarg_start((ap), (last)) -# endif -# define va_start(ap, last) __builtin_va_start((ap), (last)) -# define va_end(ap) __builtin_va_end(ap) -# define va_arg __builtin_va_arg +#ifdef __GNUC__ +# define __GNUC_PREREQ__(x, y) \ + ((__GNUC__ == (x) && __GNUC_MINOR__ >= (y)) || \ + (__GNUC__ > (x))) #else -# include <stdarg.h> +# define __GNUC_PREREQ__(x, y) 0 #endif +#if !__GNUC_PREREQ__(4, 5) +# define __builtin_va_start(ap, last) __builtin_stdarg_start((ap), (last)) +#endif + +typedef __builtin_va_list va_list; +#define va_start(ap, last) __builtin_va_start((ap), (last)) +#define va_end(ap) __builtin_va_end(ap) +#define va_arg __builtin_va_arg + #endif /* __XEN_STDARG_H__ */ diff --git a/xen/include/xen/stdbool.h b/xen/include/xen/stdbool.h index f0faedf..b0947a6 100644 --- a/xen/include/xen/stdbool.h +++ b/xen/include/xen/stdbool.h @@ -1,13 +1,9 @@ #ifndef __XEN_STDBOOL_H__ #define __XEN_STDBOOL_H__ -#if defined(__OpenBSD__) || defined(__NetBSD__) || defined(__FreeBSD__) -# define bool _Bool -# define true 1 -# define false 0 -# define __bool_true_false_are_defined 1 -#else -# include <stdbool.h> -#endif +#define bool _Bool +#define true 1 +#define false 0 +#define __bool_true_false_are_defined 1 #endif /* __XEN_STDBOOL_H__ */ -- Julien Grall _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |