Merge pull request #139 from sm64pc/master

Add MXE/OSX stuff to nightly
This commit is contained in:
Vinícius R. Miguel 2020-05-16 22:08:24 -03:00 committed by GitHub
commit bdc06d1709
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 122 additions and 28 deletions

View file

@ -23,8 +23,9 @@ TARGET_N64 = 0
# Build and optimize for Raspberry Pi(s)
TARGET_RPI ?= 0
# Compiler to use (ido or gcc)
# COMPILER ?= ido // Old Default
# Makeflag to enable OSX fixes
OSX_BUILD ?= 0
# Disable better camera by default
BETTERCAMERA ?= 0
@ -39,6 +40,15 @@ EXT_OPTIONS_MENU ?= 1
TARGET_WEB ?= 0
# Specify the target you are building for, 0 means native
TARGET_ARCH ?= native
ifeq ($(CROSS),i686-w64-mingw32.static-)
TARGET_ARCH = i386pe
else ifeq ($(CROSS),x86_64-w64-mingw32.static-)
TARGET_ARCH = i386pe
else
TARGET_ARCH = native
endif
TARGET_BITS ?= 0
ifneq ($(TARGET_BITS),0)
@ -142,6 +152,10 @@ ifeq ($(TARGET_RPI),1) # Define RPi to change SDL2 title & GLES2 hints
VERSION_CFLAGS += -DUSE_GLES
endif
ifeq ($(OSX_BUILD),1) # Modify GFX & SDL2 for OSX GL
VERSION_CFLAGS += -DOSX_BUILD
endif
VERSION_ASFLAGS := --defsym AVOID_UB=1
COMPARE := 0
@ -168,7 +182,7 @@ endif
endif
# Make tools if out of date
DUMMY != make -s -C tools >&2 || echo FAIL
DUMMY != make -C tools >&2 || echo FAIL
ifeq ($(DUMMY),FAIL)
$(error Failed to build tools)
endif
@ -411,6 +425,10 @@ ENDIAN_BITWIDTH := $(BUILD_DIR)/endian-and-bitwidth
AS := as
ifeq ($(OSX_BUILD),1)
AS := i686-w64-mingw32-as
endif
ifneq ($(TARGET_WEB),1) # As in, not-web PC port
CC := $(CROSS)gcc
CXX := $(CROSS)g++
@ -419,7 +437,13 @@ else
endif
ifeq ($(WINDOWS_BUILD),1)
LD := $(CXX)
ifeq ($(CROSS),i686-w64-mingw32.static-) # fixes compilation in MXE on Linux and WSL
LD := $(CC)
else ifeq ($(CROSS),x86_64-w64-mingw32.static-)
LD := $(CC)
else
LD := $(CXX)
endif
else
LD := $(CC)
endif
@ -427,11 +451,19 @@ endif
ifeq ($(WINDOWS_BUILD),1) # fixes compilation in MXE on Linux and WSL
CPP := cpp -P
OBJCOPY := objcopy
OBJDUMP := $(CROSS)objdump
else
ifeq ($(OSX_BUILD),1)
CPP := cpp-9 -P
OBJDUMP := i686-w64-mingw32-objdump
OBJCOPY := i686-w64-mingw32-objcopy
else # Linux & other builds
CPP := $(CROSS)cpp -P
OBJCOPY := $(CROSS)objcopy
OBJDUMP := $(CROSS)objdump
endif
OBJDUMP := $(CROSS)objdump
endif
PYTHON := python3
SDLCONFIG := $(CROSS)sdl2-config
@ -483,9 +515,9 @@ LDFLAGS := -lm -lGL -lSDL2 -no-pie -s TOTAL_MEMORY=20MB -g4 --source-map-base ht
else ifeq ($(WINDOWS_BUILD),1)
LDFLAGS := $(BITS) -march=$(TARGET_ARCH) -Llib -lpthread -lglew32 `$(SDLCONFIG) --static-libs` -lm -lglu32 -lsetupapi -ldinput8 -luser32 -lgdi32 -limm32 -lole32 -loleaut32 -lshell32 -lwinmm -lversion -luuid -lopengl32 -static
ifneq ($(CROSS),i686-w64-mingw32.static-)
ifneq ($(CROSS),x86_64-w64-mingw32.static-)
LDFLAGS += -no-pie
endif
LDFLAGS += -no-pie
else ifneq ($(CROSS),x86_64-w64-mingw32.static-)
LDFLAGS += -no-pie
endif
ifeq ($(WINDOWS_CONSOLE),1)
LDFLAGS += -mconsole
@ -494,9 +526,12 @@ else ifeq ($(TARGET_RPI),1)
# Linux / Other builds below
LDFLAGS := $(OPT_FLAGS) -lm -lGLESv2 `$(SDLCONFIG) --libs` -no-pie
else
ifeq ($(OSX_BUILD),1)
LDFLAGS := -lm -framework OpenGL `$(SDLCONFIG) --libs` -no-pie -lpthread `pkg-config --libs libusb-1.0 glfw3 glew`
else
LDFLAGS := $(BITS) -march=$(TARGET_ARCH) -lm -lGL `$(SDLCONFIG) --libs` -no-pie -lpthread
endif
endif # End of LDFLAGS
# Prevent a crash with -sopt
export LANG := C
@ -749,7 +784,6 @@ $(BUILD_DIR)/src/audio/%.copt: $(BUILD_DIR)/src/audio/%.acpp
$(QEMU_IRIX) -silent -L $(IRIX_ROOT) $(IRIX_ROOT)/usr/lib/copt -signed -I=$< -CMP=$@ -cp=i -scalaroptimize=1
endif
# Rebuild files with 'GLOBAL_ASM' if the NON_MATCHING flag changes.
$(GLOBAL_ASM_O_FILES): $(GLOBAL_ASM_DEP).$(NON_MATCHING)
$(GLOBAL_ASM_DEP).$(NON_MATCHING):

View file

@ -3,8 +3,28 @@
#include "ultratypes.h"
// Old deprecated functions from strings.h, replaced by memcpy/memset.
// old bstring functions that aren't present on some platforms
#if defined(__APPLE__)
// macOS libc has them
#include <strings.h>
#elif defined(_POSIX_C_SOURCE) && (_POSIX_C_SOURCE >= 200809L)
// there's no way that shit's defined, use memcpy/memset
#include <string.h>
#undef bzero
#undef bcopy
#define bzero(buf, len) memset((buf), 0, (len))
#define bcopy(src, dst, len) memcpy((dst), (src), (len))
#else
// hope for the best
extern void bcopy(const void *, void *, size_t);
extern void bzero(void *, size_t);
#endif
#endif /* !_OS_LIBC_H_ */

View file

@ -1,6 +1,7 @@
#include "libultra_internal.h"
#include <stdlib.h>
#ifndef OSX_BUILD
lldiv_t lldiv(long long num, long long denom) {
lldiv_t ret;
@ -13,6 +14,7 @@ lldiv_t lldiv(long long num, long long denom) {
return ret;
}
#endif // OSX_BUILD cannot use this
ldiv_t ldiv(long num, long denom) {
ldiv_t ret;

View file

@ -33,6 +33,7 @@ static const du pilo = {
static const fu zero = {0.0};
extern const fu NAN;
#ifndef OSX_BUILD
float cosf(float x)
{
double dx; // double x
@ -92,3 +93,5 @@ float cosf(float x)
return zero.f;
}
#endif // OSX_BUILD cannot use this

View file

@ -18,12 +18,19 @@
#include <SDL2/SDL.h>
#define GL_GLEXT_PROTOTYPES 1
#include <SDL2/SDL_opengl.h>
#else
#include <SDL2/SDL.h>
#define GL_GLEXT_PROTOTYPES 1
#ifdef OSX_BUILD
#include <SDL2/SDL_opengl.h>
#else
#include <SDL2/SDL_opengles2.h>
#endif
#endif
#include "gfx_cc.h"
#include "gfx_rendering_api.h"
@ -49,7 +56,7 @@ static bool gfx_opengl_z_is_from_0_to_1(void) {
static void gfx_opengl_vertex_array_set_attribs(struct ShaderProgram *prg) {
size_t num_floats = prg->num_floats;
size_t pos = 0;
for (int i = 0; i < prg->num_attribs; i++) {
glEnableVertexAttribArray(prg->attrib_locations[i]);
glVertexAttribPointer(prg->attrib_locations[i], prg->attrib_sizes[i], GL_FLOAT, GL_FALSE, num_floats * sizeof(float), (void *)(pos * sizeof(float)));
@ -179,15 +186,19 @@ static struct ShaderProgram *gfx_opengl_create_and_load_new_shader(uint32_t shad
bool do_multiply[2] = {c[0][1] == 0 && c[0][3] == 0, c[1][1] == 0 && c[1][3] == 0};
bool do_mix[2] = {c[0][1] == c[0][3], c[1][1] == c[1][3]};
bool color_alpha_same = (shader_id & 0xfff) == ((shader_id >> 12) & 0xfff);
char vs_buf[1024];
char fs_buf[1024];
size_t vs_len = 0;
size_t fs_len = 0;
size_t num_floats = 4;
// Vertex shader
#ifdef OSX_BUILD
append_line(vs_buf, &vs_len, "");
#else
append_line(vs_buf, &vs_len, "#version 100");
#endif
append_line(vs_buf, &vs_len, "attribute vec4 aVtxPos;");
if (used_textures[0] || used_textures[1]) {
append_line(vs_buf, &vs_len, "attribute vec2 aTexCoord;");
@ -216,10 +227,15 @@ static struct ShaderProgram *gfx_opengl_create_and_load_new_shader(uint32_t shad
}
append_line(vs_buf, &vs_len, "gl_Position = aVtxPos;");
append_line(vs_buf, &vs_len, "}");
// Fragment shader
#ifdef OSX_BUILD
append_line(fs_buf, &fs_len, "");
#else
append_line(fs_buf, &fs_len, "#version 100");
append_line(fs_buf, &fs_len, "precision mediump float;");
#endif
if (used_textures[0] || used_textures[1]) {
append_line(fs_buf, &fs_len, "varying vec2 vTexCoord;");
}
@ -464,7 +480,11 @@ static void gfx_opengl_init(void) {
#if FOR_WINDOWS
glewInit();
#endif
#ifdef OSX_BUILD
glewInit();
#endif
glGenBuffers(1, &opengl_vbo);
glBindBuffer(GL_ARRAY_BUFFER, opengl_vbo);

View file

@ -13,9 +13,15 @@
#else
#include <SDL2/SDL.h>
#define GL_GLEXT_PROTOTYPES 1
#ifdef OSX_BUILD
#include <SDL2/SDL_opengl.h>
#else
#include <SDL2/SDL_opengles2.h>
#endif
#endif // End of OS-Specific GL defines
#include "gfx_window_manager_api.h"
#include "gfx_screen_config.h"
#include "../configfile.h"
@ -31,7 +37,7 @@ static bool cur_fullscreen;
static uint32_t cur_width, cur_height;
const SDL_Scancode windows_scancode_table[] =
{
{
/* 0 1 2 3 4 5 6 7 */
/* 8 9 A B C D E F */
SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_ESCAPE, SDL_SCANCODE_1, SDL_SCANCODE_2, SDL_SCANCODE_3, SDL_SCANCODE_4, SDL_SCANCODE_5, SDL_SCANCODE_6, /* 0 */
@ -54,7 +60,7 @@ const SDL_Scancode windows_scancode_table[] =
SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_F13, SDL_SCANCODE_F14, SDL_SCANCODE_F15, SDL_SCANCODE_F16, /* 6 */
SDL_SCANCODE_F17, SDL_SCANCODE_F18, SDL_SCANCODE_F19, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, /* 6 */
SDL_SCANCODE_INTERNATIONAL2, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_INTERNATIONAL1, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, /* 7 */
SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_INTERNATIONAL4, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_INTERNATIONAL5, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_INTERNATIONAL3, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN /* 7 */
};
@ -100,16 +106,16 @@ static void gfx_sdl_init(void) {
u8 Fullscreen;
SDL_Init(SDL_INIT_VIDEO);
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24);
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
#ifdef USE_GLES
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 2); // These attributes allow for hardware acceleration on RPis.
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_ES);
#endif
//SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 1);
//SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, 4);
@ -126,9 +132,9 @@ static void gfx_sdl_init(void) {
}
SDL_DisplayMode sdl_displaymode;
SDL_GetCurrentDisplayMode(0, &sdl_displaymode);
SDL_GetCurrentDisplayMode(0, &sdl_displaymode);
const char* window_title =
const char* window_title =
#ifndef USE_GLES
"Super Mario 64 PC port (OpenGL)";
#else
@ -144,10 +150,10 @@ static void gfx_sdl_init(void) {
DESIRED_SCREEN_WIDTH, DESIRED_SCREEN_HEIGHT, window_flags);
SDL_ShowCursor(SDL_ENABLE);
}
SDL_GL_CreateContext(wnd);
SDL_GL_SetSwapInterval(1); // We have a double buffered GL context, it makes no sense to want tearing.
for (size_t i = 0; i < sizeof(windows_scancode_table) / sizeof(SDL_Scancode); i++) {
inverted_scancode_table[windows_scancode_table[i]] = i;
}

View file

@ -1,5 +1,10 @@
UNAME := $(shell uname)
ifeq ($(UNAME),Darwin)
OSX_BUILD := -DOSX_BUILD
endif
CC := gcc
CFLAGS := -Llib -Iinclude -I . -Wall -Wextra -Wno-unused-parameter -pedantic -std=c99 -O3 -s
CFLAGS := -Llib -Iinclude -I . -Wall -Wextra -Wno-unused-parameter $(OSX_BUILD) -pedantic -std=c99 -O3 -s
PROGRAMS := n64graphics n64graphics_ci mio0 n64cksum textconv patch_libultra_math iplfontutil aifc_decode aiff_extract_codebook vadpcm_enc tabledesign extract_data_for_mio skyconv
n64graphics_SOURCES := n64graphics.c utils.c
@ -43,7 +48,7 @@ clean:
define COMPILE
$(1): $($1_SOURCES)
$(CC) $(CFLAGS) $$^ -lm -o $$@ $($1_CFLAGS)
$(CC) $(CFLAGS) $(OSX_BUILD) $$^ -lm -o $$@ $($1_CFLAGS)
endef
$(foreach p,$(PROGRAMS),$(eval $(call COMPILE,$(p))))

View file

@ -23,7 +23,11 @@ SOFTWARE.
*/
#include "exoquant.h"
#ifndef OSX_BUILD // OSX build cannot have malloc defined
#include <malloc.h>
#endif
#include <math.h>
#include <stdlib.h>
#include <stdio.h>
@ -705,4 +709,4 @@ exq_float exq_sort_by_dir(const exq_histogram *pHist)
pHist->color.g * exq_sort_dir.g +
pHist->color.b * exq_sort_dir.b +
pHist->color.a * exq_sort_dir.a;
}
}