Discussion:
[SDL] Fail to build SDL-2.0.5, after enabling -std=c99 ...
JIA Pei
2017-03-03 22:11:14 UTC
Permalink
Hi, all:


Working Environment: Ubuntu 16.04.2
GCC Version: 5.4.0


I successfully configured SDL-2.0.5 for further building. And I configured
CMAKE_C_FLAGS -std=c99
However, I get ERROR messages for the assembly code in file SDL_cpuinfo.c
SDL2-2.0.5/src/cpuinfo/SDL_cpuinfo.c:250:34: error: expected ‘)’ before ‘:’
token
asm(".byte 0x0f, 0x01, 0xd0" : "=a" (a) : "c" (0) : "%edx");
I'm pretty sure this ERROR message has something to do with -std=c99 . I
wonder which version of C is SDL2-2.0.5 compatible with?


Cheers
--
Pei JIA, Ph.D.

Email: ***@gmail.com
cell in Canada: +1 778-863-5816
cell in China: +86 186-8244-3503

Welcome to Vision Open
http://www.visionopen.com
Sik the hedgehog
2017-03-03 22:13:35 UTC
Permalink
Try -std=gnu99 (if I recall correctly)

Looks like the problem is using asm instead of a reserved keyword
(whoops). -std=c99 will disable any extensions, -std=gnu99 will keep
them.
JIA Pei
2017-03-06 19:07:05 UTC
Permalink
Thank you... That works for me.... Thanks...
Post by Sik the hedgehog
Try -std=gnu99 (if I recall correctly)
Looks like the problem is using asm instead of a reserved keyword
(whoops). -std=c99 will disable any extensions, -std=gnu99 will keep
them.
_______________________________________________
SDL mailing list
http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org
--
Pei JIA, Ph.D.

Email: ***@gmail.com
cell in Canada: +1 778-863-5816
cell in China: +86 186-8244-3503

Welcome to Vision Open
http://www.visionopen.com
Ryan C. Gordon
2017-03-06 22:00:43 UTC
Permalink
Post by Sik the hedgehog
Try -std=gnu99 (if I recall correctly)
Looks like the problem is using asm instead of a reserved keyword
(whoops). -std=c99 will disable any extensions, -std=gnu99 will keep
them.
So the actual fix should be to change that to __asm__, right?

--ryan.
JIA Pei
2017-03-07 01:01:58 UTC
Permalink
Hi, Ryan:


My current solution is to* change -std=c99 to -std=gnu99.*

I'm testing your solution, which seems to be correct !!! However, I'm NOW
facing some new issues:

SDL2/SDL2-2.0.5/src/render/software/SDL_rotate.c:136:29: error: ‘M_PI’
undeclared (first use in this function)
radangle = angle * (M_PI / -180.0); /* reverse the angle because
our rotations are clockwise */

SDL2/SDL2-2.0.5/src/events/SDL_quit.c:55:22: error: storage size of ‘action’
isn’t known
struct sigaction action;


I can easily solve the first problem *'M_PI' hasn't been declared* by
defining *M_PI *as*:*

*#ifndef M_PI*
*#define M_PI 3.14159265358979323846264338327950288 /* pi */*
*#endif*



However, how to solve the second issue ????
SDL2/SDL2-2.0.5/src/events/SDL_quit.c:55:22: error: storage size of ‘action’
isn’t known
struct sigaction action;


Cheers
Post by Ryan C. Gordon
Post by Sik the hedgehog
Try -std=gnu99 (if I recall correctly)
Looks like the problem is using asm instead of a reserved keyword
(whoops). -std=c99 will disable any extensions, -std=gnu99 will keep
them.
So the actual fix should be to change that to __asm__, right?
--ryan.
_______________________________________________
SDL mailing list
http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org
--
Pei JIA, Ph.D.

Email: ***@gmail.com
cell in Canada: +1 778-863-5816
cell in China: +86 186-8244-3503

Welcome to Vision Open
http://www.visionopen.com
Daniel Gibson
2017-03-07 01:09:59 UTC
Permalink
Hi,

building with -std=c99 (instead of gnu99) doesn't only change the syntax
that's accepted by the compiler, but also what parts of headers are used.
All (or most?) things in standard headers that are not part of the C99
standard, like "GNU extensions" is not enabled (this is the "#define
_GNU_SOURCE" stuff mentioned in manpages).
IMHO it's not very useful to use -std=c99, especially for code like
libSDL that needs to do operating-system specific things. Just use
-std=gnu99 (or even gnu89)..


Cheers,
Daniel
My current solution is to*change -std=c99 to -std=gnu99.*
I'm testing your solution, which seems to be correct !!! However, I'm
SDL2/SDL2-2.0.5/src/render/software/SDL_rotate.c:136:29:error: ‘M_PI’
undeclared (first use in this function)
radangle = angle * (M_PI / -180.0); /* reverse the angle because
our rotations are clockwise */
SDL2/SDL2-2.0.5/src/events/SDL_quit.c:55:22:error: storage size of
‘action’ isn’t known
struct sigaction action;
I can easily solve the first problem *'M_PI' hasn't been declared* by
defining *M_PI *as*:*
*#ifndef M_PI*
*#define M_PI 3.14159265358979323846264338327950288 /* pi */*
*#endif*
However, how to solve the second issue ????
SDL2/SDL2-2.0.5/src/events/SDL_quit.c:55:22: error: storage size of
‘action’ isn’t known
struct sigaction action;
Cheers
Try -std=gnu99 (if I recall correctly)
Looks like the problem is using asm instead of a reserved keyword
(whoops). -std=c99 will disable any extensions, -std=gnu99 will keep
them.
So the actual fix should be to change that to __asm__, right?
--ryan.
_______________________________________________
SDL mailing list
http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org
<http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org>
--
Pei JIA, Ph.D.
cell in Canada: +1 778-863-5816
cell in China: +86 186-8244-3503
Welcome to Vision Open
http://www.visionopen.com
_______________________________________________
SDL mailing list
http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org
JIA Pei
2017-03-07 19:28:11 UTC
Permalink
Thank you Daniel... Thank you for your very clear explanation...

Cheers
Post by Daniel Gibson
Hi,
building with -std=c99 (instead of gnu99) doesn't only change the syntax
that's accepted by the compiler, but also what parts of headers are used.
All (or most?) things in standard headers that are not part of the C99
standard, like "GNU extensions" is not enabled (this is the "#define
_GNU_SOURCE" stuff mentioned in manpages).
IMHO it's not very useful to use -std=c99, especially for code like libSDL
that needs to do operating-system specific things. Just use -std=gnu99 (or
even gnu89)..
Cheers,
Daniel
My current solution is to*change -std=c99 to -std=gnu99.*
I'm testing your solution, which seems to be correct !!! However, I'm
SDL2/SDL2-2.0.5/src/render/software/SDL_rotate.c:136:29:error: ‘M_PI’
undeclared (first use in this function)
radangle = angle * (M_PI / -180.0); /* reverse the angle because
our rotations are clockwise */
SDL2/SDL2-2.0.5/src/events/SDL_quit.c:55:22:error: storage size of
‘action’ isn’t known
struct sigaction action;
I can easily solve the first problem *'M_PI' hasn't been declared* by
defining *M_PI *as*:*
*#ifndef M_PI*
*#define M_PI 3.14159265358979323846264338327950288 /* pi */*
*#endif*
However, how to solve the second issue ????
SDL2/SDL2-2.0.5/src/events/SDL_quit.c:55:22: error: storage size of
‘action’ isn’t known
struct sigaction action;
Cheers
Try -std=gnu99 (if I recall correctly)
Looks like the problem is using asm instead of a reserved keyword
(whoops). -std=c99 will disable any extensions, -std=gnu99 will keep
them.
So the actual fix should be to change that to __asm__, right?
--ryan.
_______________________________________________
SDL mailing list
http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org
<http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org>
--
Pei JIA, Ph.D.
cell in Canada: +1 778-863-5816
cell in China: +86 186-8244-3503
Welcome to Vision Open
http://www.visionopen.com
_______________________________________________
SDL mailing list
http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org
_______________________________________________
SDL mailing list
http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org
--
Pei JIA, Ph.D.

Email: ***@gmail.com
cell in Canada: +1 778-863-5816
cell in China: +86 186-8244-3503

Welcome to Vision Open
http://www.visionopen.com
Loading...