Post subject: LSNES Compiling Questions! (Mac and Linux)
Gladian00b
He/Him
Joined: 7/10/2015
Posts: 5
I tried compiling LSNES on my Mac but ran into a few snags. I have built LSNES successfully on Linux (I don't remember much other than making a symlink for a recent version of wxWidgets so it builds successfully) and am now trying to make a build on Mac OS X (using El Capitan), but it won't compile after I applied all the patches. After compiling the GCC 6.2.0 C++ compiler for Mac OS X (I assumed the default CLANG didn't do it's job) I tried compiling again, but it stalls at the 'buildaux/makedeps' part, giving me a TON of things like this:
WARNING: Include file 'library/zlibstream.hpp' not found.
What things do I need to do just so I can compile this thing on the Mac? Bizhawk has incomplete support for TASing on the Mac, and I do want to TAS a few SNES games. Do I need to make individual changes to each cpp and hpp file? Or is it as simple as changing a few things in the 'buildaux/makedeps.cpp' file? PS: GCC takes a LONG TIME to compile, so I don't expect a hasty answer per se.
Warepire
He/Him
Editor
Joined: 3/2/2010
Posts: 2178
Location: A little to the left of nowhere (Sweden)
Dumb question, if you look in the source tree, can you find the file?
Gladian00b
He/Him
Joined: 7/10/2015
Posts: 5
As a matter of fact, yes. I copied the output into a text file and also made a link. https://drive.google.com/open?id=0B-c5_ok5SimkbGVaVWpPVGtTQ0U The directory tree is also saved in a text file. (They are abridged - I collapsed the bsnes and gambatte dirs). Any search for the file itself will result in a positive. It is very likely that on compile time, it is not looking in the right place. I still believe 'buildaux/makedeps.cpp' is to blame, but I am just a user that knows how to compile. I will need to try this out on my Linux box to see if the same problem also exists.
Editor, Player (69)
Joined: 1/18/2008
Posts: 663
Ilari would be the one to ask. He is on freenode IRC. The build process isn't very straightforward.
true on twitch - lsnes windows builds 20230425 - the date this site is buried
Gladian00b
He/Him
Joined: 7/10/2015
Posts: 5
I have tried compiling on my Linux box, which has GCC 6.2.1. There is more progress, but it throws a bunch of things like
/usr/include/boost/type_traits/detail/template_arity_spec.hpp:13:84: note: #pragma message: NOTE: Use of this header (template_arity_spec.hpp) is deprecated
When I have compiled LSNES successfully before I used a 5.x.x version of the GCC (this was Fedora 23, I now have 24) and the boost-iostreams was 1.58. I made a copy of the symlink 'wx-config-3.0' and renamed it to 'wx-config', putting an '.old' suffix on the original. If I do get this compiled successfully, I'm tempted to 'AppImage' the Linux version and call it good. Then again, I am trying to compile the Mac version of this. I will see what instructions I can get from the IRC.
Gladian00b
He/Him
Joined: 7/10/2015
Posts: 5
I made a VM of Debian Jessie (unstable SHOULD work, according to Ilari) and I have successfully built LSNES on it. Here is what I did: DEPENDENCIES Run this as root in your favorite terminal
# apt-get install build-essential git libboost-dev libboost-filesystem-dev libboost-iostreams-dev libboost-regex-dev libboost-thread-devel libevdev-dev libgcrypt20-dev liblua5.2-dev liblzma-dev libopus-dev libsamplerate0-dev libswscale-dev libwxgtk3.0-dev lua5.2 portaudio19-dev zlib1g-dev
Download a BSNES tarball in your web browser (I've used 'bsnes_v085-source.tar.bz2', it seems to have the most patches) from https://github.com/Alcaro/bsnes-gc/blob/master/README.md You can also download the GAMBATTE source at https://sourceforge.net/projects/gambatte/files/gambatte/r537/gambatte_src-r537.tar.gz/download Extract the BSNES source and copy the dir contents of 'bsnes' into the 'lsnes/bsnes' dir, and extract the whole GAMBATTE source into 'lsnes/gambatte' dir, then cd into 'lsnes/bsnes'. PATCHING and BUILDING Do the following:
# patch -p1 < ../bsnes-patches/v085/0001-Make-libsnes-compile.patch
# patch -p1 < ../bsnes-patches/v085/0002-Fix-bsnes-version-number-in-libsnes-to-be-v085-not-v.patch
# patch -p1 < ../bsnes-patches/v085/0003-Don-t-use-time-in-emulating-chips.patch
# patch -p1 < ../bsnes-patches/v085/0004-Save-controller-state-when-savestating.patch
# patch -p1 < ../bsnes-patches/v085/0005-Fix-unserialization-of-64-bit-signed-integers.patch
# patch -p1 < ../bsnes-patches/v085/0006-Allow-frontend-to-control-random-number-seed.patch
# patch -p1 < ../bsnes-patches/v085/0007-Fix-mouse-polling.patch
# patch -p1 < ../bsnes-patches/v085/0008-Fix-uninitialized-variables.patch
# patch -p1 < ../bsnes-patches/v085/0009-Add-needed-support-for-detecting-true-polls-as-oppos.patch
# patch -p1 < ../bsnes-patches/v085/0010-Fix-compiling-on-GCC-4.7.patch
# patch -p1 < ../bsnes-patches/v085/0011-Support-notifying-latches.patch
# patch -p1 < ../bsnes-patches/v085/0012-Support-unlimited-number-of-breakpoints.patch
# patch -p1 < ../bsnes-patches/v085/0013-Support-auto-detecting-bsnes-version.patch
# patch -p1 < ../bsnes-patches/v085/0014-Support-alternate-more-accurate-poll-timings.patch
# patch -p1 < ../bsnes-patches/v085/0015-Fix-mouse-speed-support.patch
# patch -p1 < ../bsnes-patches/v085/0016-Fix-tracelog-of-controller-registers.patch
# patch -p1 < ../bsnes-patches/v085/0017-Fix-performance-problem-with-non-bus-breakpoints.patch
# patch -p1 < ../bsnes-patches/v085/0018-Support-VRAM-OAM-CGRAM-and-APURAM-breakpoints.patch
# patch -p1 < ../bsnes-patches/v085/0019-SA1-trace-hook-support.patch
# patch -p1 < ../bsnes-patches/v085/0020-Fixes-to-SA1-open-bus-emulation.patch
# patch -p1 < ../bsnes-patches/v085/0021-Call-notify-latch-function-on-alternate-timings-mode.patch
# patch -p1 < ../bsnes-patches/v085/0022-Support-DMA-tracing.patch
# patch -p1 < ../bsnes-patches/v085/0023-Add-autopoller-and-IRQ-NMI-tracing.patch
# patch -p1 < ../bsnes-patches/v085/0024-Build-fixes-for-GCC-5.X.patch
# patch -p1 < ../bsnes-patches/v085/0025-Fix-MSU-1-bug-where-write-to-MSU1BASE-4-is-mirred-to.patch
# patch -p1 < ../bsnes-patches/v085/0026-Add-vector-to-avoid-compile-error-due-to-missing-std.patch
cd into 'lsnes/gambatte' and do the following:
# patch -p1 < ../0001-Changes-to-make-libgambatte-rerecording-friendly.patch
# patch -p1 < ../0002-Expose-CPU-registers.patch
# patch -p1 < ../0003-Breakpoints-debugging.patch
# patch -p1 < ../0004-Fix-sound-DC-levels.patch
# patch -p1 < ../0005-Crash-on-illegal-instruction-fix-MBC3-bank0.patch
# patch -p1 < ../0006-Fix-read-write-of-A-PC-and-CycleCounter-when-executi.patch
# patch -p1 < ../0007-Fix-bus-write-breaks.patch
# patch -p1 < ../0008-Fix-execute-breaks-on-bus-and-IOAMHRAM.patch
# patch -p1 < ../0009-Fix-savestates-of-MBC3-without-RTC.patch
I've then edited 'lsnes/options.build' like this:
# Lua package to use.
# - Usually either 'lua' or 'lua5.2'.
# - Default value is 'lua'.
LUA=lua5.2

# Regex package to use.
# Currently supported:
# - NATIVE: std::thread
# - BOOST: boost_thread
REGEX=BOOST

# Threading package to use.
# Currently supported:
# - NATIVE: std::thread
# - BOOST: boost_thread
THREADS=BOOST

# Graphics library to use.
# Currently supported:
# - WXWIDGETS: wxWidgets
GRAPHICS=WXWIDGETS

# Sound library to use.
# Currently supported:
# - DUMMY: No sound.
# - PORTAUDIO: Portaudio.
# - LIBAO: Libao.
SOUND=PORTAUDIO

# Joystick library to use.
# Currently supported:
# - DUMMY: No joystick.
# - EVDEV: EVDEV (Linux only)
# - WIN32MM: Windows Multimedia (Win32 only).
# - WXWIDGETS: wxWidgets (GRAPHICS=WXWIDGETS only)
# - MACOSX: Mac OS X (Mac OS X only).
JOYSTICK=EVDEV

# Set to non-empty value (e.g. 'yes') to enable use of Secret Rabbit Code (a.k.a. libsamperate).
# This is used for high-quality samplerate conversion for dumping.
SECRET_RABBIT_CODE=yes

# Set to non-empty value (e.g. 'yes') to build the gambatte core.
BUILD_GAMBATTE=yes

# Set to non-empty value (e.g. 'yes') to build the bsnes core.
BUILD_BSNES=yes

# Set to non-empty value (e.g. 'yes') if bsnes build uses compatiblity core, not accuracy core.
BSNES_IS_COMPAT=yes

# Set to non-empty value (e.g. 'yes') if boost libraries need the '-mt' prefix.
# Useful on Win32 and Mac OS X.
BOOST_NEEDS_MT=

# Set to non-empty value (e.g. 'yes') if host boost libraries need the '-mt' prefix.
# Useful when building on Mac OS X.
HOST_BOOST_NEEDS_MT=

# Set to non-empty value (e.g. 'yes') if the linker exports symbols without -rdynamic.
# Useful on Mac OS X.
NO_RDYNAMIC=

# Set to non-empty vlaue (e.g. 'yes') to disable use of DLFCN.
NO_DLFCN=

# Set to non-empty value (e.g. 'yes') to use boost::filesystem3 instead of boost::filesystem.
BOOST_FILESYSTEM3=

# Set to non-empty value (e.g. 'yes') to enable commentary track support (requires Opus codec).
OPUS_CODEC=yes

# Set to non-empty value (e.g. 'yes') to use Opus codec surround encoding support.
OPUS_CODEC_SUPPORTS_SURROUND=yes

# Set to non-empty value (e.g. 'yes') to use libgcrypt for SHA-256 instead of builtin routines.
USE_LIBGCRYPT=yes

# Postfix for boost for host builds.
HOST_BOOST_POSTFIX=

# Set to non-empty value (e.g. 'yes') to support LZMA/XZ compression via liblzma (the XZ version).
USE_LIBLZMA=yes

# Set to non-empty value (e.g. 'yes') if iconv(3) needs libiconv.
NEED_LIBICONV=

# The target architecture
# I386 - I386/AMD64
# Leave empty for generic/autodetect.
ARCHITECTURE=
Then I just ran make. After a while it will finish and I would have a binary. This appears to be JUST DEBIAN and not my normal OSes like Fedora or Mac OS X. I'll experiment with Fedora and post Build instructions for that later. The Mac will have to wait. This is quite a beast to tame and is already taking a while.
creaothceann
He/Him
Editor
Joined: 4/7/2005
Posts: 1874
Location: Germany
And Unix people wonder why Windows users are OK with binaries...
Amaraticando
It/Its
Editor, Player (159)
Joined: 1/10/2012
Posts: 673
Location: Brazil
Thanks, Gladian00b! I've finally been able to compile the emulator. As I was using Linux Mint, I had two issues. 1) the compilation fails if one uses lua5.3 instead of lua5.2; So I changed to 5.2. 2) the command patch -p1 < ../bsnes-patches/v085/0022-Support-DMA-tracing.patch gives an error for file bsnes/snes/cpu/cpu.hpp, but one can edit the diff by hand. By the way, it's possible to skip all the patches' phase (for bsnes 85), because it's hosted here. Just extract the contents of this zip inside folder bsnes.
Joined: 3/21/2017
Posts: 3
I'm having difficulties compiling lsnes on Ubuntu 16.10. Basically I know nothing about compiling and the inner workings but have managed to compile several libraries using step-by-step dummy-friendly instructions. Unfortunately the manual.txt included in the source is way too advanced for me. Can someone give pointers in how to successfully compile lsnes? I need it for snes and with lua support.
Joined: 2/3/2013
Posts: 320
Location: Germany
eatyourvegetables wrote:
I'm having difficulties compiling lsnes on Ubuntu 16.10. Basically I know nothing about compiling and the inner workings but have managed to compile several libraries using step-by-step dummy-friendly instructions. Unfortunately the manual.txt included in the source is way too advanced for me. Can someone give pointers in how to successfully compile lsnes? I need it for snes and with lua support.
Come to IRC (https://webchat.freenode.net/), and type "/q RGamma", then we can chat and I can guide you.
All syllogisms have three parts, therefore this is not a syllogism.