From 5d69e19ed1374541c298a1bc505eb175f0a3eca1 Mon Sep 17 00:00:00 2001 From: Greg V Date: Wed, 7 Mar 2018 01:54:46 +0300 Subject: [PATCH 1/2] Build on FreeBSD (and potentially other BSD) --- core/linux-dist/joystick.cpp | 3 ++- core/linux/common.cpp | 6 +++--- core/linux/context.cpp | 24 +++++++++++++++++++--- core/oslib/audiobackend_oss.cpp | 4 ++++ shell/linux/Makefile | 35 +++++++++++++++++++-------------- 5 files changed, 50 insertions(+), 22 deletions(-) diff --git a/core/linux-dist/joystick.cpp b/core/linux-dist/joystick.cpp index e4023f37b..b004c82fd 100644 --- a/core/linux-dist/joystick.cpp +++ b/core/linux-dist/joystick.cpp @@ -1,10 +1,11 @@ #include #include #include -#include #include "linux-dist/joystick.h" #if defined(USE_JOYSTICK) +#include + const u32 joystick_map_btn_usb[JOYSTICK_MAP_SIZE] = { DC_BTN_Y, DC_BTN_B, DC_BTN_A, DC_BTN_X, 0, 0, 0, 0, 0, DC_BTN_START }; const u32 joystick_map_axis_usb[JOYSTICK_MAP_SIZE] = { DC_AXIS_X, DC_AXIS_Y, 0, 0, 0, 0, 0, 0, 0, 0 }; diff --git a/core/linux/common.cpp b/core/linux/common.cpp index e27f7c086..ab5591557 100644 --- a/core/linux/common.cpp +++ b/core/linux/common.cpp @@ -18,7 +18,7 @@ #include #include #include -#if !defined(_ANDROID) && !defined(TARGET_IPHONE) && !defined(TARGET_NACL32) && !defined(TARGET_EMSCRIPTEN) && !defined(TARGET_OSX) +#if !defined(TARGET_BSD) && !defined(_ANDROID) && !defined(TARGET_IPHONE) && !defined(TARGET_NACL32) && !defined(TARGET_EMSCRIPTEN) && !defined(TARGET_OSX) #include #include #endif @@ -294,7 +294,7 @@ void enable_runfast() } void linux_fix_personality() { - #if HOST_OS == OS_LINUX && !defined(_ANDROID) && !defined(TARGET_OS_IPHONE) && !defined(TARGET_NACL32) && !defined(TARGET_EMSCRIPTEN) + #if !defined(TARGET_BSD) && !defined(_ANDROID) && !defined(TARGET_OS_IPHONE) && !defined(TARGET_NACL32) && !defined(TARGET_EMSCRIPTEN) printf("Personality: %08X\n", personality(0xFFFFFFFF)); personality(~READ_IMPLIES_EXEC & personality(0xFFFFFFFF)); printf("Updated personality: %08X\n", personality(0xFFFFFFFF)); @@ -302,7 +302,7 @@ void linux_fix_personality() { } void linux_rpi2_init() { -#if (HOST_OS == OS_LINUX) && !defined(_ANDROID) && !defined(TARGET_NACL32) && !defined(TARGET_EMSCRIPTEN) && defined(TARGET_VIDEOCORE) +#if !defined(TARGET_BSD) && !defined(_ANDROID) && !defined(TARGET_NACL32) && !defined(TARGET_EMSCRIPTEN) && defined(TARGET_VIDEOCORE) void* handle; void (*rpi_bcm_init)(void); diff --git a/core/linux/context.cpp b/core/linux/context.cpp index d420c6885..290dcb2d8 100644 --- a/core/linux/context.cpp +++ b/core/linux/context.cpp @@ -31,7 +31,12 @@ void context_segfault(rei_host_context_t* reictx, void* segfault_ctx, bool to_se #if !defined(TARGET_NO_EXCEPTIONS) #if HOST_CPU == CPU_ARM - #if HOST_OS == OS_LINUX + #if defined(__FreeBSD__) + bicopy(reictx->pc, MCTX(.__gregs[_REG_PC]), to_segfault); + + for (int i = 0; i < 15; i++) + bicopy(reictx->r[i], MCTX(.__gregs[i]), to_segfault); + #elif HOST_OS == OS_LINUX bicopy(reictx->pc, MCTX(.arm_pc), to_segfault); u32* r =(u32*) &MCTX(.arm_r0); @@ -47,7 +52,12 @@ void context_segfault(rei_host_context_t* reictx, void* segfault_ctx, bool to_se #error HOST_OS #endif #elif HOST_CPU == CPU_X86 - #if HOST_OS == OS_LINUX + #if defined(__FreeBSD__) + bicopy(reictx->pc, MCTX(.mc_eip), to_segfault); + bicopy(reictx->esp, MCTX(.mc_esp), to_segfault); + bicopy(reictx->eax, MCTX(.mc_eax), to_segfault); + bicopy(reictx->ecx, MCTX(.mc_ecx), to_segfault); + #elif HOST_OS == OS_LINUX bicopy(reictx->pc, MCTX(.gregs[REG_EIP]), to_segfault); bicopy(reictx->esp, MCTX(.gregs[REG_ESP]), to_segfault); bicopy(reictx->eax, MCTX(.gregs[REG_EAX]), to_segfault); @@ -61,7 +71,15 @@ void context_segfault(rei_host_context_t* reictx, void* segfault_ctx, bool to_se #error HOST_OS #endif #elif HOST_CPU == CPU_X64 - bicopy(reictx->pc, MCTX(.gregs[REG_RIP]), to_segfault); + #if defined(__FreeBSD__) || defined(__DragonFly__) + bicopy(reictx->pc, MCTX(.mc_rip), to_segfault); + #elif defined(__NetBSD__) + bicopy(reictx->pc, MCTX(.__gregs[_REG_RIP]), to_segfault); + #elif HOST_OS == OS_LINUX + bicopy(reictx->pc, MCTX(.gregs[REG_RIP]), to_segfault); + #else + #error HOST_OS + #endif #elif HOST_CPU == CPU_MIPS bicopy(reictx->pc, MCTX(.pc), to_segfault); #elif HOST_CPU == CPU_GENERIC diff --git a/core/oslib/audiobackend_oss.cpp b/core/oslib/audiobackend_oss.cpp index ad1a5df17..675a3a90f 100644 --- a/core/oslib/audiobackend_oss.cpp +++ b/core/oslib/audiobackend_oss.cpp @@ -2,7 +2,11 @@ #ifdef USE_OSS #include #include +#ifdef TARGET_BSD +#include +#else #include +#endif #include static int oss_audio_fd = -1; diff --git a/shell/linux/Makefile b/shell/linux/Makefile index 89204d382..77ce5e5b8 100644 --- a/shell/linux/Makefile +++ b/shell/linux/Makefile @@ -3,11 +3,9 @@ FOR_LINUX :=1 #NO_REC := 1 #NO_REND := 1 WEBUI :=1 -USE_ALSA := 1 USE_OSS := 1 #USE_PULSEAUDIO := 1 USE_EVDEV := 1 -USE_JOYSTICK := 1 CXX=${CC_PREFIX}g++ CC=${CC_PREFIX}gcc @@ -23,6 +21,13 @@ LIBS := CFLAGS := CXXFLAGS := +ifneq (, $(filter $(shell uname -s), FreeBSD OpenBSD NetBSD DragonFly)) + CFLAGS += -DTARGET_BSD +else + USE_ALSA := 1 + USE_JOYSTICK := 1 +endif + # Platform auto-detection # Can be overridden by using: # make platform=x64 @@ -30,7 +35,7 @@ ifeq (,$(platform)) ARCH = $(shell uname -m) ifeq ($(ARCH), $(filter $(ARCH), i386 i686)) platform = x86 - else ifeq ($(ARCH), $(filter $(ARCH), x86_64 AMD64)) + else ifeq ($(ARCH), $(filter $(ARCH), x86_64 AMD64 amd64)) platform = x64 else ifneq (,$(findstring aarch64,$(ARCH))) HARDWARE = $(shell grep Hardware /proc/cpuinfo) @@ -281,9 +286,9 @@ ifdef USE_DISPMANX endif ifdef USE_X11 - CFLAGS += -D SUPPORT_X11 - CXXFLAGS += -D SUPPORT_X11 - LIBS += -lX11 + CFLAGS += `pkg-config --cflags x11` -D SUPPORT_X11 + CXXFLAGS += `pkg-config --cflags x11` -D SUPPORT_X11 + LIBS += `pkg-config --libs x11` endif ifdef USE_EVDEV @@ -300,8 +305,8 @@ ifdef USE_OMX endif ifdef USE_ALSA - CXXFLAGS += -D USE_ALSA - LIBS += -lasound + CXXFLAGS += `pkg-config --cflags alsa` -D USE_ALSA + LIBS += `pkg-config --libs alsa` endif ifdef USE_OSS @@ -309,8 +314,8 @@ ifdef USE_OSS endif ifdef USE_PULSEAUDIO - CXXFLAGS += -D USE_PULSEAUDIO - LIBS += -lpulse-simple + CXXFLAGS += `pkg-config --cflags libpulse-simple` -D USE_PULSEAUDIO + LIBS += `pkg-config --libs libpulse-simple` endif ifdef HAS_SOFTREND @@ -378,11 +383,11 @@ $(BUILDDIR)/%.build_obj : $(RZDCY_SRC_DIR)/%.S $(AS) $(ASFLAGS) $(INCS) $< -o $@ install: $(EXECUTABLE) - mkdir -p $(DESTDIR)$(PREFIX)/bin 2>/dev/null || /bin/true - mkdir -p $(DESTDIR)$(PREFIX)/share/reicast/mappings 2>/dev/null || /bin/true - mkdir -p $(DESTDIR)$(MAN_DIR) 2>/dev/null || /bin/true - mkdir -p $(DESTDIR)$(MENUENTRY_DIR) 2>/dev/null || /bin/true - mkdir -p $(DESTDIR)$(ICON_DIR) 2>/dev/null || /bin/true + mkdir -p $(DESTDIR)$(PREFIX)/bin 2>/dev/null || true + mkdir -p $(DESTDIR)$(PREFIX)/share/reicast/mappings 2>/dev/null || true + mkdir -p $(DESTDIR)$(MAN_DIR) 2>/dev/null || true + mkdir -p $(DESTDIR)$(MENUENTRY_DIR) 2>/dev/null || true + mkdir -p $(DESTDIR)$(ICON_DIR) 2>/dev/null || true install -m755 $(EXECUTABLE) $(DESTDIR)$(PREFIX)/bin/$(EXECUTABLE_NAME) install -m755 tools/reicast-joyconfig.py $(DESTDIR)$(PREFIX)/bin/reicast-joyconfig install -m644 mappings/controller_gcwz.cfg $(DESTDIR)$(PREFIX)/share/reicast/mappings From 967de4501f7f93c69d010352fbd0ab754e955c44 Mon Sep 17 00:00:00 2001 From: Greg V Date: Sun, 8 Jul 2018 15:48:05 +0300 Subject: [PATCH 2/2] Install pkgconf on wercker --- wercker.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/wercker.yml b/wercker.yml index 6a8d62d95..2c55a3a61 100644 --- a/wercker.yml +++ b/wercker.yml @@ -4,10 +4,10 @@ build: steps: - script: name: install-dependencies - code: sudo apt-get clean && sudo apt-get update && sudo apt-get install -y build-essential libasound2-dev libgl1-mesa-dev libx11-dev + code: sudo apt-get clean && sudo apt-get update && sudo apt-get install -y build-essential pkgconf libasound2-dev libgl1-mesa-dev libx11-dev - script: name: gcc-version code: gcc --version - script: name: reicast x64 build - code: make -C shell/linux platform=x64 \ No newline at end of file + code: make -C shell/linux platform=x64