[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
|