Mercurial > sdl-ios-xcode
view test/automated/testsdl.c @ 5130:f2c2f0ecba5f
Fixed bug #1111
kwm@rainbow-runner.nl 2011-01-30 06:28:27 PST
Created attachment 562 [details]
Build fix with clang.
When building sdl 1.2.14 with the Clang compiler http://clang.llvm.org .
The build fails in src/video/mmx.h with the following error:
--------------------------------------------------
./src/video/SDL_RLEaccel.c:831:5: error: invalid operand for instruction
CHOOSE_BLIT(RLECLIPBLIT, alpha, fmt);
^
./src/video/SDL_RLEaccel.c:831:17: note: instantiated from:
CHOOSE_BLIT(RLECLIPBLIT, alpha, fmt);
^
./src/video/SDL_RLEaccel.c:831:5: note: instantiated from:
CHOOSE_BLIT(RLECLIPBLIT, alpha, fmt);
^
./src/video/SDL_RLEaccel.c:647:23: note: instantiated from:
blitter(2, Uint8, ALPHA_BLIT16_565MMX); \
^
./src/video/SDL_RLEaccel.c:282:4: note: instantiated from:
movq_r2m(mm3, *dstp); \
^
In file included from ./src/video/SDL_RLEaccel.c:99:
./src/video/mmx.h:379:28: note: instantiated from:
#define movq_r2m(reg, var) mmx_r2m(movq, reg, var)
^
<scratch space>:192:1: note: instantiated from:
"movq"
^
<inline asm>:1:2: note: instantiated into assembly here
movq %mm3, %dx
^
--------------------------------------------------
According to the clang developers this is a invalid inline assembly.
Using the attached patch from the last commit in the below bug report fixes the
compile.
More details from: http://llvm.org/bugs/show_bug.cgi?id=6730
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Sun, 30 Jan 2011 13:42:05 -0800 |
parents | c84712de8433 |
children |
line wrap: on
line source
/* * SDL test suite framework code. * * Written by Edgar Simo "bobbens" * * Released under Public Domain. */ #include "SDL.h" #include "SDL_at.h" #include "platform/platform.h" #include "rwops/rwops.h" #include "rect/rect.h" #include "surface/surface.h" #include "render/render.h" #include "audio/audio.h" #if defined(WIN32) #define NO_GETOPT #endif #if defined(__QNXNTO__) #define NO_GETOPT_LONG 1 #endif /* __QNXNTO__ */ #include <stdio.h> /* printf */ #include <stdlib.h> /* exit */ #ifndef NO_GETOPT #include <unistd.h> /* getopt */ #if !defined(NO_GETOPT_LONG) #include <getopt.h> /* getopt_long */ #endif /* !NO_GETOPT_LONG */ #endif /* !NO_GETOPT */ /* * Tests to run. */ static int run_manual = 0; /**< Run manual tests. */ /* Manual. */ /* Automatic. */ static int run_platform = 1; /**< Run platform tests. */ static int run_rwops = 1; /**< Run RWops tests. */ static int run_rect = 1; /**< Run rect tests. */ static int run_surface = 1; /**< Run surface tests. */ static int run_render = 1; /**< Run render tests. */ static int run_audio = 1; /**< Run audio tests. */ /* * Prototypes. */ static void print_usage( const char *name ); static void parse_options( int argc, char *argv[] ); /** * @brief Displays program usage. */ static void print_usage( const char *name ) { printf("Usage: %s [OPTIONS]\n", name); printf("Options are:\n"); printf(" -m, --manual enables tests that require user interaction\n"); printf(" --noplatform do not run the platform tests\n"); printf(" --norwops do not run the rwops tests\n"); printf(" --norect do not run the rect tests\n"); printf(" --nosurface do not run the surface tests\n"); printf(" --norender do not run the render tests\n"); printf(" --noaudio do not run the audio tests\n"); printf(" -v, --verbose increases verbosity level by 1 for each -v\n"); printf(" -q, --quiet only displays errors\n"); printf(" -h, --help display this message and exit\n"); } /** * @brief Handles the options. */ static void parse_options( int argc, char *argv[] ) { int i; for (i = 1; i < argc; ++i) { const char *arg = argv[i]; if (SDL_strcmp(arg, "-m") == 0 || SDL_strcmp(arg, "--manual") == 0) { run_manual = 1; continue; } if (SDL_strcmp(arg, "-v") == 0 || SDL_strcmp(arg, "--verbose") == 0) { int level; SDL_ATgeti( SDL_AT_VERBOSE, &level ); SDL_ATseti( SDL_AT_VERBOSE, level+1 ); continue; } if (SDL_strcmp(arg, "-q") == 0 || SDL_strcmp(arg, "--quiet") == 0) { SDL_ATseti( SDL_AT_QUIET, 1 ); SDL_setenv("SDL_ASSERT", "abort", 0); continue; } if (SDL_strcmp(arg, "--noplatform") == 0) { run_platform = 0; continue; } if (SDL_strcmp(arg, "--norwops") == 0) { run_rwops = 0; continue; } if (SDL_strcmp(arg, "--norect") == 0) { run_rect = 0; continue; } if (SDL_strcmp(arg, "--nosurface") == 0) { run_surface = 0; continue; } if (SDL_strcmp(arg, "--norender") == 0) { run_render = 0; continue; } if (SDL_strcmp(arg, "--noaudio") == 0) { run_audio = 0; continue; } /* Print help and exit! */ print_usage( argv[0] ); exit(EXIT_FAILURE); } } /** * @brief Main entry point. */ int main( int argc, char *argv[] ) { int failed; const char *rev; SDL_version ver; /* Get options. */ parse_options( argc, argv ); /* Defaults. */ failed = 0; /* Print some text if verbose. */ SDL_GetVersion( &ver ); rev = SDL_GetRevision(); SDL_ATprintVerbose( 1, "Running tests with SDL %d.%d.%d revision %s\n", ver.major, ver.minor, ver.patch, rev ); /* Automatic tests. */ if (run_platform) failed += test_platform(); if (run_rwops) failed += test_rwops(); if (run_rect) failed += test_rect(); if (run_surface) failed += test_surface(); if (run_render) failed += test_render(); if (run_audio) failed += test_audio(); /* Manual tests. */ if (run_manual) { } /* Display more information if failed. */ if (failed > 0) { SDL_ATprintErr( "Tests run with SDL %d.%d.%d revision %d\n", ver.major, ver.minor, ver.patch, rev ); SDL_ATprintErr( "System is running %s and is %s endian\n", SDL_GetPlatform(), #if SDL_BYTEORDER == SDL_LIL_ENDIAN "little" #else "big" #endif ); } return failed; }