From 9a5fdb1293a68f171a2b078a2216294ce6dd09f6 Mon Sep 17 00:00:00 2001 From: Ethan Lee Date: Wed, 1 Apr 2020 17:12:48 -0400 Subject: [PATCH] Add MOJOSHADER_USE_SDL_STDLIB, to avoid C runtime dependencies --- mojoshader_common.c | 2 ++ mojoshader_effects.c | 2 ++ mojoshader_internal.h | 62 +++++++++++++++++++++++++++++++++++++++++++ mojoshader_opengl.c | 6 ----- 4 files changed, 66 insertions(+), 6 deletions(-) diff --git a/mojoshader_common.c b/mojoshader_common.c index 25a3cc71..bddacc25 100644 --- a/mojoshader_common.c +++ b/mojoshader_common.c @@ -1,6 +1,8 @@ #define __MOJOSHADER_INTERNAL__ 1 #include "mojoshader_internal.h" +#ifndef MOJOSHADER_USE_SDL_STDLIB #include +#endif /* MOJOSHADER_USE_SDL_STDLIB */ // Convenience functions for allocators... #if !MOJOSHADER_FORCE_ALLOCATOR diff --git a/mojoshader_effects.c b/mojoshader_effects.c index 474ae7eb..dfa4c478 100644 --- a/mojoshader_effects.c +++ b/mojoshader_effects.c @@ -12,7 +12,9 @@ #ifdef MOJOSHADER_EFFECT_SUPPORT +#ifndef MOJOSHADER_USE_SDL_STDLIB #include +#endif /* MOJOSHADER_USE_SDL_STDLIB */ void MOJOSHADER_runPreshader(const MOJOSHADER_preshader *preshader, float *outregs) diff --git a/mojoshader_internal.h b/mojoshader_internal.h index d46e85a1..7dacbcf7 100644 --- a/mojoshader_internal.h +++ b/mojoshader_internal.h @@ -8,11 +8,71 @@ // Shader bytecode format is described at MSDN: // http://msdn.microsoft.com/en-us/library/ff569705.aspx +#ifdef MOJOSHADER_USE_SDL_STDLIB +#include +#include + +/* stdint.h */ +typedef Uint8 uint8; +typedef Uint16 uint16; +typedef Uint32 uint32; +typedef Sint32 int32; +typedef Sint64 int64; +typedef Uint64 uint64; + +/* assert.h */ +#define assert SDL_assert + +/* stdlib.h */ +#define malloc SDL_malloc +#define free SDL_free + +/* stdio.h */ +#define sscanf SDL_sscanf +#define snprintf SDL_snprintf +#define vsnprintf SDL_vsnprintf + +/* math.h */ +#define acos SDL_acos +#define asin SDL_asin +#define atan SDL_atan +#define atan2 SDL_atan2 +#define cos SDL_acos +#define exp SDL_exp +#define floor SDL_floor +#define log SDL_log +#define sin SDL_sin +#define sqrt SDL_sqrt + +/* string.h */ +#define strchr SDL_strchr +#define strcmp SDL_strcmp +/* TODO: Move MojoShader away from strcpy! This len is awful! */ +#define strcpy(dst, src) SDL_strlcpy(dst, src, SDL_strlen(src) + 1) +#define strlen SDL_strlen +#define strncmp SDL_strncmp +#define strstr SDL_strstr + +/* string.h but with undefs for Apple systems */ +#ifdef memcmp +#undef memcmp +#endif +#define memcmp SDL_memcmp +#ifdef memcpy +#undef memcpy +#endif +#define memcpy SDL_memcpy +#ifdef memset +#define memset +#endif +#define memset SDL_memset +#else /* MOJOSHADER_USE_SDL_STDLIB */ #include #include #include #include #include +#endif /* MOJOSHADER_USE_SDL_STDLIB */ #include "mojoshader.h" @@ -114,6 +174,7 @@ typedef unsigned int uint; // this is a printf() helper. don't use for code. // Locale-independent float printing replacement for snprintf size_t MOJOSHADER_printFloat(char *text, size_t maxlen, float arg); +#ifndef MOJOSHADER_USE_SDL_STDLIB #ifdef _MSC_VER #include #include @@ -155,6 +216,7 @@ typedef uint64_t uint64; #ifdef sun #include #endif +#endif /* MOJOSHADER_USE_SDL_STDLIB */ #ifdef __GNUC__ #define ISPRINTF(x,y) __attribute__((format (printf, x, y))) diff --git a/mojoshader_opengl.c b/mojoshader_opengl.c index 293ff19d..8e0b861e 100644 --- a/mojoshader_opengl.c +++ b/mojoshader_opengl.c @@ -7,12 +7,6 @@ * This file written by Ryan C. Gordon. */ -#include -#include -#include -#include -#include - #ifdef _WIN32 #define WIN32_LEAN_AND_MEAN 1 #include // GL headers need this for WINGDIAPI definition.