Merge branch 'master' into sysmgrtooltip_syschaninfo
49
.github/issue_template.md
vendored
|
@ -1,48 +1 @@
|
||||||
# EXTREMELY IMPORTANT NOTICE - PLEASE **READ**!!!!!!!
|
please do not post suggestions, feature requests or non-issue discussions here. go to Discussions if you want to post these instead.
|
||||||
|
|
||||||
BY SUBMITTING AN ISSUE, YOU HEREBY AGREE TO COMPLY WITH THESE TERMS.
|
|
||||||
FAILURE TO DO SO MAY RESULT IN YOUR ISSUE BEING DECLARED VOID.
|
|
||||||
|
|
||||||
**ADDITIONALLY, FAILURE TO COMPLY WITH POINTS 1 AND 2 WILL RESULT IN THE INABILITY TO ISSUE FURTHER ISSUE REPORTS.**
|
|
||||||
|
|
||||||
1. this section is exclusively for ISSUES related to Furnace (bugs, major annoyances and others). ONLY THINGS THAT COUNT AS **ISSUES** (ad pedem litterae).
|
|
||||||
2. **THIS SECTION IS NOT FOR SUGGESTIONS, REQUESTS, QUESTIONS, SHOWCASE OR ANY OTHER DISCUSSIONS THAT DO NOT MEET THE CRITERIA AND DEFINITION OF AN __ISSUE__.**
|
|
||||||
- see the Discussions section if you wish to submit these.
|
|
||||||
3. check whether your issue has been reported already.
|
|
||||||
- go to the Issues section, and use the search bar that appears on top of the Issues list.
|
|
||||||
4. include the following information:
|
|
||||||
- version of Furnace (help > about)
|
|
||||||
- operating system (and version)
|
|
||||||
- whether you have downloaded Furnace, or built it from source.
|
|
||||||
5. provide these details if you believe the issue is operating system and/or computer-specific:
|
|
||||||
- CPU model
|
|
||||||
- Windows: go to Control Panel > System.
|
|
||||||
- macOS: go to the Apple menu and select About This Mac...
|
|
||||||
- Linux: use `lscpu` or `cat /proc/cpuinfo`.
|
|
||||||
- graphics card (and driver version)
|
|
||||||
- Windows: open `dxdiag` and observe the Render tab.
|
|
||||||
- macOS: go to the Apple menu and select About This Mac...
|
|
||||||
- this information is not always shown.
|
|
||||||
- this information is not necessary if you use an Apple silicon Mac.
|
|
||||||
- Linux: use `glxinfo | grep OpenGL`.
|
|
||||||
6. if your issue is an abnormal program termination (a "Crash"), you must provide additional details:
|
|
||||||
- the furnace_crash.txt file that is created by Furnace after a Crash. this file is located in the following paths:
|
|
||||||
- Windows: `C:\Users\<username>\furnace_crash.txt`
|
|
||||||
- Linux/other: `/tmp/furnace_crash.txt`
|
|
||||||
- on macOS this file is not generated. you may retrieve information about the Crash by clicking on "Report..." or "Show Details" in the "quit unexpectedly" dialog that appears following the Crash.
|
|
||||||
- make sure to remove any personal information for privacy reasons.
|
|
||||||
- be sure to select "Don't Send" afterwards.
|
|
||||||
- the furnace.log file located in:
|
|
||||||
- Windows: `C:\Users\<username>\AppData\Roaming\furnace\furnace.log`
|
|
||||||
- macOS: `~/Library/Application Support/furnace/furnace.log`
|
|
||||||
- Linux: `~/.config/furnace/furnace.log`
|
|
||||||
- make sure to remove any personal information for privacy reasons.
|
|
||||||
|
|
||||||
BY SUBMITTING AN ISSUE, YOU HEREBY AGREE TO COMPLY WITH THESE TERMS.
|
|
||||||
FAILURE TO DO SO MAY RESULT IN YOUR ISSUE BEING DECLARED VOID.
|
|
||||||
|
|
||||||
**ADDITIONALLY, FAILURE TO COMPLY WITH POINTS 1 AND 2 WILL RESULT IN THE INABILITY TO ISSUE FURTHER ISSUE REPORTS.**
|
|
||||||
|
|
||||||
***END OF NOTICE***
|
|
||||||
PLEASE REMOVE THIS NOTICE AFTER READING.
|
|
||||||
FAILURE TO REMOVE THIS NOTICE IS NEGLIGENCE.
|
|
||||||
|
|
1
.github/issue_template/config.yml
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
blank_issues_enabled: false
|
33
.github/issue_template/issue.yml
vendored
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
name: Issue Report
|
||||||
|
description: for issues (bugs, annoyances, crashes and similar).
|
||||||
|
body:
|
||||||
|
- type: markdown
|
||||||
|
attributes:
|
||||||
|
value: |
|
||||||
|
Suggestions, feature requests, questions, showcase or anything else? Go to the Discussions section.
|
||||||
|
- type: textarea
|
||||||
|
id: description
|
||||||
|
attributes:
|
||||||
|
label: Description
|
||||||
|
- type: textarea
|
||||||
|
id: steps
|
||||||
|
attributes:
|
||||||
|
label: Steps to Reproduce (if applicable)
|
||||||
|
- type: textarea
|
||||||
|
id: info
|
||||||
|
attributes:
|
||||||
|
label: Additional Information
|
||||||
|
- type: input
|
||||||
|
id: version
|
||||||
|
attributes:
|
||||||
|
label: Furnace version? (help > about)
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: checkboxes
|
||||||
|
id: terms
|
||||||
|
attributes:
|
||||||
|
label: This is an issue
|
||||||
|
description: By submitting this issue, you affirm that this is an actual issue (not a suggestion, question or otherwise non-issue).
|
||||||
|
options:
|
||||||
|
- label: I hereby certify that the ticket I am submitting is an issue.
|
||||||
|
required: true
|
69
.github/workflows/build.yml
vendored
|
@ -2,7 +2,7 @@ name: Build furnace
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches: master
|
branches: [master, locale]
|
||||||
pull_request:
|
pull_request:
|
||||||
branches: master
|
branches: master
|
||||||
|
|
||||||
|
@ -11,7 +11,7 @@ defaults:
|
||||||
shell: bash
|
shell: bash
|
||||||
|
|
||||||
env:
|
env:
|
||||||
BUILD_TYPE: RelWithDebInfo
|
BUILD_TYPE: Debug
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
|
@ -22,11 +22,11 @@ jobs:
|
||||||
- { name: 'Windows MSVC x86_64', os: windows-latest, compiler: msvc, arch: x86_64 }
|
- { name: 'Windows MSVC x86_64', os: windows-latest, compiler: msvc, arch: x86_64 }
|
||||||
#- { name: 'Windows MinGW x86', os: ubuntu-20.04, compiler: mingw, arch: x86 }
|
#- { name: 'Windows MinGW x86', os: ubuntu-20.04, compiler: mingw, arch: x86 }
|
||||||
#- { name: 'Windows MinGW x86_64', os: ubuntu-20.04, compiler: mingw, arch: x86_64 }
|
#- { name: 'Windows MinGW x86_64', os: ubuntu-20.04, compiler: mingw, arch: x86_64 }
|
||||||
- { name: 'macOS x86_64', os: macos-latest, arch: x86_64 }
|
- { name: 'macOS x86_64', os: macos-12, arch: x86_64 }
|
||||||
- { name: 'macOS ARM', os: macos-latest, arch: arm64 }
|
- { name: 'macOS ARM', os: macos-latest, arch: arm64 }
|
||||||
- { name: 'Linux x86_64', os: ubuntu-20.04, arch: x86_64 }
|
- { name: 'Linux x86_64', os: ubuntu-20.04, arch: x86_64 }
|
||||||
#- { name: 'Linux ARM', os: ubuntu-18.04, arch: armhf }
|
#- { name: 'Linux ARM', os: ubuntu-18.04, arch: armhf }
|
||||||
fail-fast: false
|
fail-fast: true
|
||||||
|
|
||||||
name: ${{ matrix.config.name }}
|
name: ${{ matrix.config.name }}
|
||||||
runs-on: ${{ matrix.config.os }}
|
runs-on: ${{ matrix.config.os }}
|
||||||
|
@ -128,7 +128,8 @@ jobs:
|
||||||
librtmidi-dev \
|
librtmidi-dev \
|
||||||
libsndfile1-dev \
|
libsndfile1-dev \
|
||||||
zlib1g-dev \
|
zlib1g-dev \
|
||||||
libjack-jackd2-dev
|
libjack-jackd2-dev \
|
||||||
|
gettext
|
||||||
|
|
||||||
- name: Install Dependencies [Linux armhf]
|
- name: Install Dependencies [Linux armhf]
|
||||||
if: ${{ runner.os == 'Linux' && matrix.config.compiler != 'mingw' && matrix.config.arch == 'armhf' }}
|
if: ${{ runner.os == 'Linux' && matrix.config.compiler != 'mingw' && matrix.config.arch == 'armhf' }}
|
||||||
|
@ -140,7 +141,8 @@ jobs:
|
||||||
sudo apt update
|
sudo apt update
|
||||||
sudo apt install \
|
sudo apt install \
|
||||||
crossbuild-essential-armhf \
|
crossbuild-essential-armhf \
|
||||||
appstream
|
appstream \
|
||||||
|
gettext
|
||||||
sudo apt install \
|
sudo apt install \
|
||||||
libsdl2-dev:armhf \
|
libsdl2-dev:armhf \
|
||||||
libfmt-dev:armhf \
|
libfmt-dev:armhf \
|
||||||
|
@ -150,6 +152,11 @@ jobs:
|
||||||
libjack-jackd2-dev:armhf
|
libjack-jackd2-dev:armhf
|
||||||
ls /usr/arm-linux-gnueabihf/lib
|
ls /usr/arm-linux-gnueabihf/lib
|
||||||
|
|
||||||
|
- name: Build Language Files
|
||||||
|
if: ${{ runner.os == 'Linux' && matrix.config.compiler != 'mingw' }}
|
||||||
|
run: |
|
||||||
|
./scripts/build-po.sh
|
||||||
|
|
||||||
- name: Configure
|
- name: Configure
|
||||||
run: |
|
run: |
|
||||||
export USE_WAE=ON
|
export USE_WAE=ON
|
||||||
|
@ -173,9 +180,9 @@ jobs:
|
||||||
fi
|
fi
|
||||||
elif [ '${{ runner.os }}' == 'macOS' ]; then
|
elif [ '${{ runner.os }}' == 'macOS' ]; then
|
||||||
if [ '${{ matrix.config.arch }}' == 'arm64' ]; then
|
if [ '${{ matrix.config.arch }}' == 'arm64' ]; then
|
||||||
CMAKE_EXTRA_ARGS+=('-DCMAKE_OSX_DEPLOYMENT_TARGET="11.0"' '-DCMAKE_OSX_ARCHITECTURES=arm64')
|
CMAKE_EXTRA_ARGS+=('-DCMAKE_OSX_DEPLOYMENT_TARGET="11.0"' '-DCMAKE_OSX_ARCHITECTURES=arm64' '-DMAKE_BUNDLE=ON')
|
||||||
else
|
else
|
||||||
CMAKE_EXTRA_ARGS+=('-DCMAKE_OSX_DEPLOYMENT_TARGET="10.9"')
|
CMAKE_EXTRA_ARGS+=('-DCMAKE_OSX_DEPLOYMENT_TARGET="10.9"' '-DCMAKE_OSX_ARCHITECTURES=x86_64' '-DMAKE_BUNDLE=ON' '-DCMAKE_C_FLAGS=-march=core2' '-DCMAKE_CXX_FLAGS=-march=core2')
|
||||||
fi
|
fi
|
||||||
elif [ '${{ runner.os }}' == 'Linux' ] && [ '${{ matrix.config.arch }}' == 'armhf' ]; then
|
elif [ '${{ runner.os }}' == 'Linux' ] && [ '${{ matrix.config.arch }}' == 'armhf' ]; then
|
||||||
CMAKE_EXTRA_ARGS+=('-DCMAKE_TOOLCHAIN_FILE=scripts/Cross-Linux-armhf.cmake')
|
CMAKE_EXTRA_ARGS+=('-DCMAKE_TOOLCHAIN_FILE=scripts/Cross-Linux-armhf.cmake')
|
||||||
|
@ -221,6 +228,7 @@ jobs:
|
||||||
|
|
||||||
cp -v ../LICENSE LICENSE.txt
|
cp -v ../LICENSE LICENSE.txt
|
||||||
cp -v ../res/releaseReadme/unstable-win.txt README.txt
|
cp -v ../res/releaseReadme/unstable-win.txt README.txt
|
||||||
|
cp -vr ../po/locale locale
|
||||||
cp -vr ../papers ../${binPath}/furnace.exe ./
|
cp -vr ../papers ../${binPath}/furnace.exe ./
|
||||||
if [ '${{ matrix.config.compiler }}' == 'msvc' ]; then
|
if [ '${{ matrix.config.compiler }}' == 'msvc' ]; then
|
||||||
cp -v ../${binPath}/furnace.pdb ./
|
cp -v ../${binPath}/furnace.pdb ./
|
||||||
|
@ -233,38 +241,22 @@ jobs:
|
||||||
if: ${{ runner.os == 'macOS' }}
|
if: ${{ runner.os == 'macOS' }}
|
||||||
run: |
|
run: |
|
||||||
pushd build
|
pushd build
|
||||||
retries=0
|
|
||||||
while ! cpack; do
|
echo "preparing bundle"
|
||||||
echo "TRYING AGAIN..."
|
mkdir -p Furnace.app/Contents/Resources
|
||||||
retries=$((retries+1))
|
cp -v -r ../po/locale Furnace.app/Contents/Resources/locale
|
||||||
if [ $retries -gt 5 ]; then
|
cp -v ../res/icon.icns Furnace.app/Contents/Resources/Furnace.icns
|
||||||
echo "OH NO, WE'VE FAILED..."
|
|
||||||
exit 1
|
codesign --deep -f -s - Furnace.app
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
echo "making dirs"
|
echo "making dirs"
|
||||||
mkdir orig
|
|
||||||
mkdir new
|
mkdir new
|
||||||
echo "attaching"
|
|
||||||
echo "y" | hdiutil attach Furnace-*-Darwin.dmg -readonly -mount required -mountpoint orig
|
|
||||||
|
|
||||||
echo "copying"
|
echo "copying"
|
||||||
cp -v -r orig/Furnace.app new/Furnace.app
|
cp -v -r Furnace.app new/Furnace.app
|
||||||
|
ln -s /Applications new/Applications
|
||||||
echo "synchronizing"
|
echo "synchronizing"
|
||||||
sync
|
sync
|
||||||
echo "detaching"
|
|
||||||
hdiutil detach orig
|
|
||||||
|
|
||||||
echo "removing orig"
|
|
||||||
rmdir orig
|
|
||||||
rm Furnace-*-Darwin.dmg
|
|
||||||
|
|
||||||
if [ -e new/Furnace.app/Contents/Resources/bin/furnace ]; then
|
|
||||||
rm -v new/Furnace.app/Contents/Resources/bin/furnace
|
|
||||||
rmdir new/Furnace.app/Contents/Resources/bin
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "copying extra stuff"
|
echo "copying extra stuff"
|
||||||
cp -v ../LICENSE new/LICENSE.txt
|
cp -v ../LICENSE new/LICENSE.txt
|
||||||
|
@ -278,7 +270,7 @@ jobs:
|
||||||
|
|
||||||
echo "creating new image"
|
echo "creating new image"
|
||||||
retries=0
|
retries=0
|
||||||
while ! hdiutil create -srcfolder new -volname Furnace -format UDZO furnace.dmg; do
|
while ! hdiutil create -srcfolder new -volname Furnace -format UDZO -fs HFS+ furnace.dmg; do
|
||||||
echo "TRYING AGAIN..."
|
echo "TRYING AGAIN..."
|
||||||
retries=$((retries+1))
|
retries=$((retries+1))
|
||||||
if [ $retries -gt 5 ]; then
|
if [ $retries -gt 5 ]; then
|
||||||
|
@ -315,6 +307,8 @@ jobs:
|
||||||
rm -r share/icons
|
rm -r share/icons
|
||||||
rm -r share/licenses
|
rm -r share/licenses
|
||||||
rm -r share/metainfo
|
rm -r share/metainfo
|
||||||
|
rm -r share/mime
|
||||||
|
mv share/locale ..
|
||||||
|
|
||||||
rmdir share
|
rmdir share
|
||||||
|
|
||||||
|
@ -337,3 +331,10 @@ jobs:
|
||||||
with:
|
with:
|
||||||
name: ${{ steps.package-identify.outputs.id }}
|
name: ${{ steps.package-identify.outputs.id }}
|
||||||
path: ${{ steps.package-identify.outputs.filename }}
|
path: ${{ steps.package-identify.outputs.filename }}
|
||||||
|
|
||||||
|
- name: Upload Metal artifact
|
||||||
|
if: ${{ github.repository == 'tildearrow/furnace' && github.ref_name == 'metal' }}
|
||||||
|
uses: actions/upload-artifact@v4.3.0
|
||||||
|
with:
|
||||||
|
name: ${{ steps.package-identify.outputs.id }}
|
||||||
|
path: ${{ steps.package-identify.outputs.filename }}
|
||||||
|
|
2
.gitignore
vendored
|
@ -5,6 +5,7 @@ nosdl/
|
||||||
release/
|
release/
|
||||||
t/
|
t/
|
||||||
winbuild/
|
winbuild/
|
||||||
|
winCbuild/
|
||||||
win32build/
|
win32build/
|
||||||
xpbuild/
|
xpbuild/
|
||||||
macbuild/
|
macbuild/
|
||||||
|
@ -34,4 +35,5 @@ res/docpdf/manual.html
|
||||||
res/docpdf/manual.pdf
|
res/docpdf/manual.pdf
|
||||||
res/docpdf/.venv
|
res/docpdf/.venv
|
||||||
res/docpdf/htmldoc/
|
res/docpdf/htmldoc/
|
||||||
|
res/fonts/compressed/
|
||||||
res/furnace.appdata.xml
|
res/furnace.appdata.xml
|
||||||
|
|
3
.gitmodules
vendored
|
@ -15,6 +15,3 @@
|
||||||
[submodule "extern/portaudio"]
|
[submodule "extern/portaudio"]
|
||||||
path = extern/portaudio
|
path = extern/portaudio
|
||||||
url = https://github.com/PortAudio/portaudio.git
|
url = https://github.com/PortAudio/portaudio.git
|
||||||
[submodule "extern/adpcm-xq"]
|
|
||||||
path = extern/adpcm-xq
|
|
||||||
url = https://github.com/dbry/adpcm-xq.git
|
|
||||||
|
|
281
CMakeLists.txt
|
@ -16,7 +16,7 @@ set(CMAKE_CXX_EXTENSIONS OFF)
|
||||||
|
|
||||||
set(CMAKE_PROJECT_VERSION_MAJOR 0)
|
set(CMAKE_PROJECT_VERSION_MAJOR 0)
|
||||||
set(CMAKE_PROJECT_VERSION_MINOR 6)
|
set(CMAKE_PROJECT_VERSION_MINOR 6)
|
||||||
set(CMAKE_PROJECT_VERSION_PATCH 1)
|
set(CMAKE_PROJECT_VERSION_PATCH 5)
|
||||||
|
|
||||||
set(BUILD_GUI_DEFAULT ON)
|
set(BUILD_GUI_DEFAULT ON)
|
||||||
set(USE_SDL2_DEFAULT ON)
|
set(USE_SDL2_DEFAULT ON)
|
||||||
|
@ -67,33 +67,58 @@ else()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(WITH_RENDER_SDL_DEFAULT ON)
|
set(WITH_RENDER_SDL_DEFAULT ON)
|
||||||
if (APPLE)
|
set(WITH_RENDER_OPENGL_DEFAULT ON)
|
||||||
set(WITH_RENDER_OPENGL_DEFAULT OFF)
|
|
||||||
else()
|
|
||||||
set(WITH_RENDER_OPENGL_DEFAULT ON)
|
|
||||||
endif()
|
|
||||||
if (WIN32)
|
if (WIN32)
|
||||||
set(WITH_RENDER_DX11_DEFAULT ON)
|
set(WITH_RENDER_DX11_DEFAULT ON)
|
||||||
|
set(WITH_RENDER_DX9_DEFAULT ON)
|
||||||
else()
|
else()
|
||||||
set(WITH_RENDER_DX11_DEFAULT OFF)
|
set(WITH_RENDER_DX11_DEFAULT OFF)
|
||||||
|
set(WITH_RENDER_DX9_DEFAULT OFF)
|
||||||
|
endif()
|
||||||
|
if (APPLE)
|
||||||
|
set(WITH_RENDER_METAL_DEFAULT ON)
|
||||||
|
else()
|
||||||
|
set(WITH_RENDER_METAL_DEFAULT OFF)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (ANDROID)
|
if (ANDROID)
|
||||||
set(USE_GLES_DEFAULT ON)
|
set(USE_GLES_DEFAULT ON)
|
||||||
|
set(WITH_RENDER_OPENGL1_DEFAULT OFF)
|
||||||
else()
|
else()
|
||||||
set(USE_GLES_DEFAULT OFF)
|
set(USE_GLES_DEFAULT OFF)
|
||||||
|
if (APPLE)
|
||||||
|
set(WITH_RENDER_OPENGL1_DEFAULT OFF)
|
||||||
|
else()
|
||||||
|
set(WITH_RENDER_OPENGL1_DEFAULT ON)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(WITH_LOCALE_DEFAULT ON)
|
||||||
|
|
||||||
|
try_compile(HAVE_SETLOCALE ${CMAKE_BINARY_DIR}/check SOURCES ${CMAKE_SOURCE_DIR}/src/check/check_setlocale.c)
|
||||||
|
include(FindIntl)
|
||||||
|
|
||||||
|
if (HAVE_SETLOCALE AND Intl_FOUND AND NOT APPLE)
|
||||||
|
set(USE_MOMO_DEFAULT OFF)
|
||||||
|
else()
|
||||||
|
set(USE_MOMO_DEFAULT ON)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
option(BUILD_GUI "Build the tracker (disable to build only a headless player)" ${BUILD_GUI_DEFAULT})
|
option(BUILD_GUI "Build the tracker (disable to build only a headless player)" ${BUILD_GUI_DEFAULT})
|
||||||
|
option(WITH_LOCALE "Use libintl for language support" ${WITH_LOCALE_DEFAULT})
|
||||||
option(USE_RTMIDI "Build with MIDI support using RtMidi." ${USE_RTMIDI_DEFAULT})
|
option(USE_RTMIDI "Build with MIDI support using RtMidi." ${USE_RTMIDI_DEFAULT})
|
||||||
option(USE_SDL2 "Build with SDL2. Required to build with GUI." ${USE_SDL2_DEFAULT})
|
option(USE_SDL2 "Build with SDL2. Required to build with GUI." ${USE_SDL2_DEFAULT})
|
||||||
option(USE_SNDFILE "Build with libsndfile. Required in order to work with audio files." ${USE_SNDFILE_DEFAULT})
|
option(USE_SNDFILE "Build with libsndfile. Required in order to work with audio files." ${USE_SNDFILE_DEFAULT})
|
||||||
option(USE_BACKWARD "Use backward-cpp to print a backtrace on crash/abort." ${USE_BACKWARD_DEFAULT})
|
option(USE_BACKWARD "Use backward-cpp to print a backtrace on crash/abort." ${USE_BACKWARD_DEFAULT})
|
||||||
|
option(USE_MOMO "Build a libintl implementation instead of using the system one." ${USE_MOMO_DEFAULT})
|
||||||
option(WITH_JACK "Whether to build with JACK support. Auto-detects if JACK is available" ${WITH_JACK_DEFAULT})
|
option(WITH_JACK "Whether to build with JACK support. Auto-detects if JACK is available" ${WITH_JACK_DEFAULT})
|
||||||
option(WITH_PORTAUDIO "Whether to build with PortAudio for audio output." ${WITH_PORTAUDIO_DEFAULT})
|
option(WITH_PORTAUDIO "Whether to build with PortAudio for audio output." ${WITH_PORTAUDIO_DEFAULT})
|
||||||
option(WITH_RENDER_SDL "Whether to build with the SDL_Renderer render backend." ${WITH_RENDER_SDL_DEFAULT})
|
option(WITH_RENDER_SDL "Whether to build with the SDL_Renderer render backend." ${WITH_RENDER_SDL_DEFAULT})
|
||||||
option(WITH_RENDER_OPENGL "Whether to build with the OpenGL render backend." ${WITH_RENDER_OPENGL_DEFAULT})
|
option(WITH_RENDER_OPENGL "Whether to build with the OpenGL render backend." ${WITH_RENDER_OPENGL_DEFAULT})
|
||||||
|
option(WITH_RENDER_OPENGL1 "Whether to build with the OpenGL 1.1 render backend." ${WITH_RENDER_OPENGL1_DEFAULT})
|
||||||
option(WITH_RENDER_DX11 "Whether to build with the DirectX 11 render backend." ${WITH_RENDER_DX11_DEFAULT})
|
option(WITH_RENDER_DX11 "Whether to build with the DirectX 11 render backend." ${WITH_RENDER_DX11_DEFAULT})
|
||||||
|
option(WITH_RENDER_DX9 "Whether to build with the DirectX 9 render backend." ${WITH_RENDER_DX9_DEFAULT})
|
||||||
|
option(WITH_RENDER_METAL "Whether to build with the Metal render backend." ${WITH_RENDER_METAL_DEFAULT})
|
||||||
option(USE_GLES "Use OpenGL ES for the OpenGL render backend." ${USE_GLES_DEFAULT})
|
option(USE_GLES "Use OpenGL ES for the OpenGL render backend." ${USE_GLES_DEFAULT})
|
||||||
option(USE_FREETYPE "Use FreeType for font rendering." ON)
|
option(USE_FREETYPE "Use FreeType for font rendering." ON)
|
||||||
option(SYSTEM_FFTW "Use a system-installed version of FFTW instead of the vendored one" OFF)
|
option(SYSTEM_FFTW "Use a system-installed version of FFTW instead of the vendored one" OFF)
|
||||||
|
@ -110,6 +135,15 @@ option(WITH_DEMOS "Install demo songs" ON)
|
||||||
option(WITH_INSTRUMENTS "Install instruments" ON)
|
option(WITH_INSTRUMENTS "Install instruments" ON)
|
||||||
option(WITH_WAVETABLES "Install wavetables" ON)
|
option(WITH_WAVETABLES "Install wavetables" ON)
|
||||||
option(SHOW_OPEN_ASSETS_MENU_ENTRY "Show option to open built-in assets directory (on supported platforms)" OFF)
|
option(SHOW_OPEN_ASSETS_MENU_ENTRY "Show option to open built-in assets directory (on supported platforms)" OFF)
|
||||||
|
option(CONSOLE_SUBSYSTEM "Build Furnace with Console subsystem on Windows" OFF)
|
||||||
|
if (APPLE)
|
||||||
|
option(FORCE_APPLE_BIN "Force enable binary installation to /bin" OFF)
|
||||||
|
option(MAKE_BUNDLE "Make a bundle" OFF)
|
||||||
|
else()
|
||||||
|
# not Apple - not needed
|
||||||
|
set(FORCE_APPLE_BIN OFF)
|
||||||
|
set(MAKE_BUNDLE OFF)
|
||||||
|
endif()
|
||||||
|
|
||||||
set(DEPENDENCIES_INCLUDE_DIRS extern/IconFontCppHeaders src/icon)
|
set(DEPENDENCIES_INCLUDE_DIRS extern/IconFontCppHeaders src/icon)
|
||||||
|
|
||||||
|
@ -137,19 +171,21 @@ else()
|
||||||
set(SYSTEM_SDL_MIN_VER 2.0.0)
|
set(SYSTEM_SDL_MIN_VER 2.0.0)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (WIN32)
|
|
||||||
# support Windows XP
|
|
||||||
if (SUPPORT_XP)
|
|
||||||
add_compile_definitions("_WIN32_WINNT=0x0501")
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
#list(APPEND DEPENDENCIES_INCLUDE_DIRS "extern/SAASound/include")
|
#list(APPEND DEPENDENCIES_INCLUDE_DIRS "extern/SAASound/include")
|
||||||
list(APPEND DEPENDENCIES_INCLUDE_DIRS "extern/vgsound_emu-modified")
|
list(APPEND DEPENDENCIES_INCLUDE_DIRS "extern/vgsound_emu-modified")
|
||||||
|
|
||||||
find_package(Threads REQUIRED)
|
find_package(Threads REQUIRED)
|
||||||
list(APPEND DEPENDENCIES_LIBRARIES ${CMAKE_THREAD_LIBS_INIT})
|
list(APPEND DEPENDENCIES_LIBRARIES ${CMAKE_THREAD_LIBS_INIT})
|
||||||
|
|
||||||
|
|
||||||
|
if (WIN32)
|
||||||
|
# support Windows XP
|
||||||
|
if (SUPPORT_XP)
|
||||||
|
list(APPEND DEPENDENCIES_DEFINES "_WIN32_WINNT=0x0501")
|
||||||
|
list(APPEND DEPENDENCIES_DEFINES "SUPPORT_XP")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
if (SYSTEM_FFTW)
|
if (SYSTEM_FFTW)
|
||||||
find_package(PkgConfig REQUIRED)
|
find_package(PkgConfig REQUIRED)
|
||||||
pkg_check_modules(FFTW REQUIRED fftw3>=3.3)
|
pkg_check_modules(FFTW REQUIRED fftw3>=3.3)
|
||||||
|
@ -390,15 +426,10 @@ else()
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (BUILD_GUI)
|
|
||||||
if (NOT WITH_RENDER_SDL AND NOT WITH_RENDER_OPENGL AND NOT WITH_RENDER_DX11)
|
|
||||||
message(FATAL_ERROR "No render backends selected!")
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set(AUDIO_SOURCES
|
set(AUDIO_SOURCES
|
||||||
src/audio/abstract.cpp
|
src/audio/abstract.cpp
|
||||||
src/audio/midi.cpp
|
src/audio/midi.cpp
|
||||||
|
src/audio/pipe.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
if (USE_SDL2)
|
if (USE_SDL2)
|
||||||
|
@ -445,6 +476,8 @@ src/baseutils.cpp
|
||||||
src/fileutils.cpp
|
src/fileutils.cpp
|
||||||
src/utfutils.cpp
|
src/utfutils.cpp
|
||||||
|
|
||||||
|
extern/itcompress/compression.c
|
||||||
|
|
||||||
extern/SAASound/src/SAAAmp.cpp
|
extern/SAASound/src/SAAAmp.cpp
|
||||||
extern/SAASound/src/SAADevice.cpp
|
extern/SAASound/src/SAADevice.cpp
|
||||||
extern/SAASound/src/SAAEnv.cpp
|
extern/SAASound/src/SAAEnv.cpp
|
||||||
|
@ -485,7 +518,7 @@ extern/adpcm/yma_codec.c
|
||||||
extern/adpcm/ymb_codec.c
|
extern/adpcm/ymb_codec.c
|
||||||
extern/adpcm/ymz_codec.c
|
extern/adpcm/ymz_codec.c
|
||||||
|
|
||||||
extern/adpcm-xq/adpcm-lib.c
|
extern/adpcm-xq-s/adpcm-lib.c
|
||||||
|
|
||||||
extern/opn/ym3438.c
|
extern/opn/ym3438.c
|
||||||
extern/Nuked-PSG/ympsg.c
|
extern/Nuked-PSG/ympsg.c
|
||||||
|
@ -497,6 +530,10 @@ extern/YMF262-LLE/fmopl3.c
|
||||||
extern/YMF276-LLE/fmopn2.c
|
extern/YMF276-LLE/fmopn2.c
|
||||||
extern/ESFMu/esfm.c
|
extern/ESFMu/esfm.c
|
||||||
extern/ESFMu/esfm_registers.c
|
extern/ESFMu/esfm_registers.c
|
||||||
|
extern/emu2413/emu2413.c
|
||||||
|
extern/YM2608-LLE/fmopna_2608.c
|
||||||
|
extern/YM2608-LLE/fmopna_2610.c
|
||||||
|
extern/YM2608-LLE/fmopna_2612.c
|
||||||
|
|
||||||
extern/pwrnoise/pwrnoise.c
|
extern/pwrnoise/pwrnoise.c
|
||||||
|
|
||||||
|
@ -516,6 +553,8 @@ src/engine/platform/sound/nes/mmc5.c
|
||||||
src/engine/platform/sound/vera_psg.c
|
src/engine/platform/sound/vera_psg.c
|
||||||
src/engine/platform/sound/vera_pcm.c
|
src/engine/platform/sound/vera_pcm.c
|
||||||
|
|
||||||
|
src/engine/platform/sound/atomicssg/ssg.c
|
||||||
|
|
||||||
src/engine/platform/sound/nes_nsfplay/5e01_apu.cpp
|
src/engine/platform/sound/nes_nsfplay/5e01_apu.cpp
|
||||||
src/engine/platform/sound/nes_nsfplay/5e01_dmc.cpp
|
src/engine/platform/sound/nes_nsfplay/5e01_dmc.cpp
|
||||||
src/engine/platform/sound/nes_nsfplay/nes_apu.cpp
|
src/engine/platform/sound/nes_nsfplay/nes_apu.cpp
|
||||||
|
@ -615,6 +654,17 @@ src/engine/platform/sound/dave/dave.cpp
|
||||||
|
|
||||||
src/engine/platform/sound/nds.cpp
|
src/engine/platform/sound/nds.cpp
|
||||||
|
|
||||||
|
src/engine/platform/sound/sid2/envelope.cc
|
||||||
|
src/engine/platform/sound/sid2/filter.cc
|
||||||
|
src/engine/platform/sound/sid2/sid.cc
|
||||||
|
src/engine/platform/sound/sid2/version.cc
|
||||||
|
src/engine/platform/sound/sid2/voice.cc
|
||||||
|
src/engine/platform/sound/sid2/wave8580_PS_.cc
|
||||||
|
src/engine/platform/sound/sid2/wave8580_PST.cc
|
||||||
|
src/engine/platform/sound/sid2/wave8580_P_T.cc
|
||||||
|
src/engine/platform/sound/sid2/wave8580__ST.cc
|
||||||
|
src/engine/platform/sound/sid2/wave.cc
|
||||||
|
|
||||||
src/engine/platform/oplAInterface.cpp
|
src/engine/platform/oplAInterface.cpp
|
||||||
src/engine/platform/ym2608Interface.cpp
|
src/engine/platform/ym2608Interface.cpp
|
||||||
src/engine/platform/ym2610Interface.cpp
|
src/engine/platform/ym2610Interface.cpp
|
||||||
|
@ -624,9 +674,20 @@ src/engine/fileOps/dmf.cpp
|
||||||
src/engine/fileOps/fc.cpp
|
src/engine/fileOps/fc.cpp
|
||||||
src/engine/fileOps/ftm.cpp
|
src/engine/fileOps/ftm.cpp
|
||||||
src/engine/fileOps/fur.cpp
|
src/engine/fileOps/fur.cpp
|
||||||
|
src/engine/fileOps/it.cpp
|
||||||
src/engine/fileOps/mod.cpp
|
src/engine/fileOps/mod.cpp
|
||||||
src/engine/fileOps/s3m.cpp
|
src/engine/fileOps/s3m.cpp
|
||||||
src/engine/fileOps/text.cpp
|
src/engine/fileOps/text.cpp
|
||||||
|
src/engine/fileOps/tfm.cpp
|
||||||
|
src/engine/fileOps/xm.cpp
|
||||||
|
|
||||||
|
src/engine/fileOps/p.cpp
|
||||||
|
src/engine/fileOps/p86.cpp
|
||||||
|
src/engine/fileOps/pdx.cpp
|
||||||
|
src/engine/fileOps/ppc.cpp
|
||||||
|
src/engine/fileOps/pps.cpp
|
||||||
|
src/engine/fileOps/pvi.cpp
|
||||||
|
src/engine/fileOps/pzi.cpp
|
||||||
|
|
||||||
src/engine/blip_buf.c
|
src/engine/blip_buf.c
|
||||||
src/engine/brrUtils.c
|
src/engine/brrUtils.c
|
||||||
|
@ -640,6 +701,7 @@ src/engine/configEngine.cpp
|
||||||
src/engine/dispatchContainer.cpp
|
src/engine/dispatchContainer.cpp
|
||||||
src/engine/engine.cpp
|
src/engine/engine.cpp
|
||||||
src/engine/export.cpp
|
src/engine/export.cpp
|
||||||
|
src/engine/exportDef.cpp
|
||||||
src/engine/fileOpsIns.cpp
|
src/engine/fileOpsIns.cpp
|
||||||
src/engine/fileOpsSample.cpp
|
src/engine/fileOpsSample.cpp
|
||||||
src/engine/filter.cpp
|
src/engine/filter.cpp
|
||||||
|
@ -727,11 +789,14 @@ src/engine/platform/dave.cpp
|
||||||
src/engine/platform/gbadma.cpp
|
src/engine/platform/gbadma.cpp
|
||||||
src/engine/platform/gbaminmod.cpp
|
src/engine/platform/gbaminmod.cpp
|
||||||
src/engine/platform/nds.cpp
|
src/engine/platform/nds.cpp
|
||||||
|
src/engine/platform/bifurcator.cpp
|
||||||
|
src/engine/platform/sid2.cpp
|
||||||
src/engine/platform/pcmdac.cpp
|
src/engine/platform/pcmdac.cpp
|
||||||
src/engine/platform/dummy.cpp
|
src/engine/platform/dummy.cpp
|
||||||
|
|
||||||
src/engine/export/abstract.cpp
|
src/engine/export/abstract.cpp
|
||||||
src/engine/export/amigaValidation.cpp
|
src/engine/export/amigaValidation.cpp
|
||||||
|
src/engine/export/tiuna.cpp
|
||||||
|
|
||||||
src/engine/effect/abstract.cpp
|
src/engine/effect/abstract.cpp
|
||||||
src/engine/effect/dummy.cpp
|
src/engine/effect/dummy.cpp
|
||||||
|
@ -747,6 +812,13 @@ if (WIN32)
|
||||||
list(APPEND ENGINE_SOURCES res/furnace.rc)
|
list(APPEND ENGINE_SOURCES res/furnace.rc)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if (APPLE)
|
||||||
|
if (CMAKE_OSX_DEPLOYMENT_TARGET VERSION_LESS 10.12)
|
||||||
|
list(APPEND DEPENDENCIES_INCLUDE_DIRS extern/macports-legacy-support/include)
|
||||||
|
list(APPEND ENGINE_SOURCES extern/macports-legacy-support/src/time.c)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
set(CLI_SOURCES
|
set(CLI_SOURCES
|
||||||
src/cli/cli.cpp
|
src/cli/cli.cpp
|
||||||
)
|
)
|
||||||
|
@ -757,6 +829,7 @@ extern/imgui_patched/imgui_draw.cpp
|
||||||
extern/imgui_patched/imgui_tables.cpp
|
extern/imgui_patched/imgui_tables.cpp
|
||||||
extern/imgui_patched/imgui_widgets.cpp
|
extern/imgui_patched/imgui_widgets.cpp
|
||||||
extern/imgui_patched/backends/imgui_impl_sdl2.cpp
|
extern/imgui_patched/backends/imgui_impl_sdl2.cpp
|
||||||
|
extern/imgui_software_renderer/imgui_sw.cpp
|
||||||
extern/imgui_patched/misc/cpp/imgui_stdlib.cpp
|
extern/imgui_patched/misc/cpp/imgui_stdlib.cpp
|
||||||
extern/igfd/ImGuiFileDialog.cpp
|
extern/igfd/ImGuiFileDialog.cpp
|
||||||
|
|
||||||
|
@ -764,18 +837,22 @@ src/gui/plot_nolerp.cpp
|
||||||
|
|
||||||
src/gui/render.cpp
|
src/gui/render.cpp
|
||||||
src/gui/render/abstract.cpp
|
src/gui/render/abstract.cpp
|
||||||
|
src/gui/render/renderSoftware.cpp
|
||||||
|
|
||||||
src/gui/font_exo.cpp
|
src/gui/font_exo.cpp
|
||||||
src/gui/font_liberationSans.cpp
|
src/gui/font_liberationSans.cpp
|
||||||
src/gui/font_mononoki.cpp
|
src/gui/font_mononoki.cpp
|
||||||
src/gui/font_plexMono.cpp
|
src/gui/font_plexMono.cpp
|
||||||
src/gui/font_plexSans.cpp
|
src/gui/font_plexSans.cpp
|
||||||
|
src/gui/font_plexSansJP.cpp
|
||||||
|
src/gui/font_plexSansKR.cpp
|
||||||
src/gui/font_proggyClean.cpp
|
src/gui/font_proggyClean.cpp
|
||||||
src/gui/font_ptMono.cpp
|
src/gui/font_ptMono.cpp
|
||||||
src/gui/font_unifont.cpp
|
src/gui/font_unifont.cpp
|
||||||
src/gui/font_icon.cpp
|
src/gui/font_icon.cpp
|
||||||
src/gui/font_furicon.cpp
|
src/gui/font_furicon.cpp
|
||||||
src/gui/fonts.cpp
|
src/gui/fonts.cpp
|
||||||
|
src/gui/fontzlib.cpp
|
||||||
|
|
||||||
src/gui/image_icon.cpp
|
src/gui/image_icon.cpp
|
||||||
src/gui/image_talogo.cpp
|
src/gui/image_talogo.cpp
|
||||||
|
@ -842,6 +919,7 @@ src/gui/sysManager.cpp
|
||||||
src/gui/sysMiscInfo.cpp
|
src/gui/sysMiscInfo.cpp
|
||||||
src/gui/sysPicker.cpp
|
src/gui/sysPicker.cpp
|
||||||
src/gui/tutorial.cpp
|
src/gui/tutorial.cpp
|
||||||
|
src/gui/userPresets.cpp
|
||||||
src/gui/util.cpp
|
src/gui/util.cpp
|
||||||
src/gui/waveEdit.cpp
|
src/gui/waveEdit.cpp
|
||||||
src/gui/volMeter.cpp
|
src/gui/volMeter.cpp
|
||||||
|
@ -881,12 +959,32 @@ if (WITH_RENDER_OPENGL)
|
||||||
endif()
|
endif()
|
||||||
if (WIN32)
|
if (WIN32)
|
||||||
list(APPEND DEPENDENCIES_LIBRARIES opengl32)
|
list(APPEND DEPENDENCIES_LIBRARIES opengl32)
|
||||||
|
elseif(APPLE)
|
||||||
|
list(APPEND DEPENDENCIES_LIBRARIES "-framework OpenGL")
|
||||||
elseif(USE_GLES)
|
elseif(USE_GLES)
|
||||||
list(APPEND DEPENDENCIES_LIBRARIES GLESv2)
|
list(APPEND DEPENDENCIES_LIBRARIES GLESv2)
|
||||||
else()
|
else()
|
||||||
list(APPEND DEPENDENCIES_LIBRARIES GL)
|
list(APPEND DEPENDENCIES_LIBRARIES GL)
|
||||||
endif()
|
endif()
|
||||||
message(STATUS "UI render backend: OpenGL")
|
if (USE_GLES)
|
||||||
|
message(STATUS "UI render backend: OpenGL ES 2.0")
|
||||||
|
else()
|
||||||
|
message(STATUS "UI render backend: OpenGL 3.0/2.0")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (WITH_RENDER_OPENGL1)
|
||||||
|
list(APPEND GUI_SOURCES src/gui/render/renderGL1.cpp)
|
||||||
|
list(APPEND GUI_SOURCES extern/imgui_patched/backends/imgui_impl_opengl2.cpp)
|
||||||
|
list(APPEND DEPENDENCIES_DEFINES HAVE_RENDER_GL1)
|
||||||
|
if (NOT WITH_RENDER_OPENGL)
|
||||||
|
if (WIN32)
|
||||||
|
list(APPEND DEPENDENCIES_LIBRARIES opengl32)
|
||||||
|
else()
|
||||||
|
list(APPEND DEPENDENCIES_LIBRARIES GL)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
message(STATUS "UI render backend: OpenGL 1.1")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (WITH_RENDER_DX11)
|
if (WITH_RENDER_DX11)
|
||||||
|
@ -897,7 +995,7 @@ if (WITH_RENDER_DX11)
|
||||||
list(APPEND GUI_SOURCES src/gui/render/renderDX11.cpp)
|
list(APPEND GUI_SOURCES src/gui/render/renderDX11.cpp)
|
||||||
list(APPEND GUI_SOURCES extern/imgui_patched/backends/imgui_impl_dx11.cpp)
|
list(APPEND GUI_SOURCES extern/imgui_patched/backends/imgui_impl_dx11.cpp)
|
||||||
list(APPEND DEPENDENCIES_DEFINES HAVE_RENDER_DX11)
|
list(APPEND DEPENDENCIES_DEFINES HAVE_RENDER_DX11)
|
||||||
list(APPEND DEPENDENCIES_LIBRARIES d3d11)
|
list(APPEND DEPENDENCIES_LIBRARIES d3d11 dxgi)
|
||||||
message(STATUS "UI render backend: DirectX 11")
|
message(STATUS "UI render backend: DirectX 11")
|
||||||
endif()
|
endif()
|
||||||
else()
|
else()
|
||||||
|
@ -905,6 +1003,31 @@ if (WITH_RENDER_DX11)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if (WITH_RENDER_DX9)
|
||||||
|
if (WIN32)
|
||||||
|
list(APPEND GUI_SOURCES src/gui/render/renderDX9.cpp)
|
||||||
|
list(APPEND GUI_SOURCES extern/imgui_patched/backends/imgui_impl_dx9.cpp)
|
||||||
|
list(APPEND DEPENDENCIES_DEFINES HAVE_RENDER_DX9)
|
||||||
|
list(APPEND DEPENDENCIES_LIBRARIES d3d9)
|
||||||
|
message(STATUS "UI render backend: DirectX 9")
|
||||||
|
else()
|
||||||
|
message(FATAL_ERROR "DirectX 9 render backend only for Windows!")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (WITH_RENDER_METAL)
|
||||||
|
if (APPLE)
|
||||||
|
list(APPEND GUI_SOURCES src/gui/render/renderMetal.mm)
|
||||||
|
list(APPEND GUI_SOURCES extern/imgui_patched/backends/imgui_impl_metal.mm)
|
||||||
|
list(APPEND DEPENDENCIES_DEFINES HAVE_RENDER_METAL)
|
||||||
|
list(APPEND DEPENDENCIES_LIBRARIES "-framework Metal")
|
||||||
|
list(APPEND DEPENDENCIES_LIBRARIES "-framework MetalKit")
|
||||||
|
message(STATUS "UI render backend: Metal")
|
||||||
|
else()
|
||||||
|
message(FATAL_ERROR "Metal render backend only for Apple operating systems!")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
if (NOT WIN32 AND NOT APPLE)
|
if (NOT WIN32 AND NOT APPLE)
|
||||||
CHECK_INCLUDE_FILE(sys/io.h SYS_IO_FOUND)
|
CHECK_INCLUDE_FILE(sys/io.h SYS_IO_FOUND)
|
||||||
CHECK_INCLUDE_FILE(linux/input.h LINUX_INPUT_FOUND)
|
CHECK_INCLUDE_FILE(linux/input.h LINUX_INPUT_FOUND)
|
||||||
|
@ -935,6 +1058,39 @@ if (NOT WIN32)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if (WITH_LOCALE)
|
||||||
|
if (HAVE_SETLOCALE)
|
||||||
|
list(APPEND DEPENDENCIES_DEFINES HAVE_SETLOCALE)
|
||||||
|
message(STATUS "setlocale() found")
|
||||||
|
else()
|
||||||
|
if (NOT USE_MOMO)
|
||||||
|
message(FATAL_ERROR "setlocale() is not defined! This means the C library in your system does not support locale at all. Try enabling USE_MOMO.")
|
||||||
|
else()
|
||||||
|
message(STATUS "setlocale() is not defined")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
if (USE_MOMO)
|
||||||
|
list(APPEND ENGINE_SOURCES src/momo/momo.c)
|
||||||
|
list(APPEND DEPENDENCIES_DEFINES HAVE_LOCALE)
|
||||||
|
list(APPEND DEPENDENCIES_DEFINES HAVE_MOMO)
|
||||||
|
list(APPEND DEPENDENCIES_INCLUDE_DIRS src/momo)
|
||||||
|
message(STATUS "Using libintl (Momo)")
|
||||||
|
else()
|
||||||
|
if ("${CMAKE_VERSION}" VERSION_LESS "3.2")
|
||||||
|
message(FATAL_ERROR "CMake 3.2 or later required for locale support.")
|
||||||
|
else()
|
||||||
|
if (NOT Intl_FOUND)
|
||||||
|
message(FATAL_ERROR "Could not find libintl! Try enabling USE_MOMO.")
|
||||||
|
endif()
|
||||||
|
list(APPEND DEPENDENCIES_DEFINES HAVE_LOCALE)
|
||||||
|
list(APPEND DEPENDENCIES_DEFINES GNULIB_overrides_sprintf)
|
||||||
|
list(APPEND DEPENDENCIES_INCLUDE_DIRS ${Intl_INCLUDE_DIRS})
|
||||||
|
list(APPEND DEPENDENCIES_LIBRARIES ${Intl_LIBRARIES})
|
||||||
|
message(STATUS "Using libintl (system)")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
set(USED_SOURCES ${ENGINE_SOURCES} ${AUDIO_SOURCES} ${CLI_SOURCES} src/main.cpp)
|
set(USED_SOURCES ${ENGINE_SOURCES} ${AUDIO_SOURCES} ${CLI_SOURCES} src/main.cpp)
|
||||||
|
|
||||||
if (USE_BACKWARD)
|
if (USE_BACKWARD)
|
||||||
|
@ -967,6 +1123,7 @@ if (BUILD_GUI)
|
||||||
list(APPEND DEPENDENCIES_INCLUDE_DIRS
|
list(APPEND DEPENDENCIES_INCLUDE_DIRS
|
||||||
extern/imgui_patched
|
extern/imgui_patched
|
||||||
extern/imgui_patched/backends
|
extern/imgui_patched/backends
|
||||||
|
extern/imgui_software_renderer
|
||||||
extern/igfd
|
extern/igfd
|
||||||
)
|
)
|
||||||
if (WIN32 OR APPLE)
|
if (WIN32 OR APPLE)
|
||||||
|
@ -989,7 +1146,7 @@ elseif (APPLE)
|
||||||
find_library(COCOA Cocoa REQUIRED)
|
find_library(COCOA Cocoa REQUIRED)
|
||||||
list(APPEND DEPENDENCIES_LIBRARIES ${COCOA})
|
list(APPEND DEPENDENCIES_LIBRARIES ${COCOA})
|
||||||
else()
|
else()
|
||||||
list(APPEND DEPENDENCIES_LIBRARIES dl)
|
list(APPEND DEPENDENCIES_LIBRARIES ${CMAKE_DL_LIBS})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (NOT MSVC)
|
if (NOT MSVC)
|
||||||
|
@ -1036,41 +1193,56 @@ if (NOT ANDROID OR TERMUX)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(ANDROID AND NOT TERMUX)
|
if (WIN32 AND CONSOLE_SUBSYSTEM)
|
||||||
add_library(furnace SHARED ${USED_SOURCES})
|
list(APPEND DEPENDENCIES_DEFINES "TA_SUBSYSTEM_CONSOLE")
|
||||||
elseif(WIN32)
|
|
||||||
add_executable(furnace WIN32 ${USED_SOURCES})
|
|
||||||
else()
|
|
||||||
add_executable(furnace ${USED_SOURCES})
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
target_include_directories(furnace SYSTEM PRIVATE ${DEPENDENCIES_INCLUDE_DIRS})
|
if (MAKE_BUNDLE)
|
||||||
target_compile_definitions(furnace PRIVATE ${DEPENDENCIES_DEFINES})
|
set(FURNACE Furnace)
|
||||||
target_compile_options(furnace PRIVATE ${DEPENDENCIES_COMPILE_OPTIONS})
|
else()
|
||||||
target_link_libraries(furnace PRIVATE ${DEPENDENCIES_LIBRARIES})
|
set(FURNACE furnace)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(ANDROID AND NOT TERMUX)
|
||||||
|
add_library(${FURNACE} SHARED ${USED_SOURCES})
|
||||||
|
elseif(WIN32 AND NOT CONSOLE_SUBSYSTEM)
|
||||||
|
add_executable(${FURNACE} WIN32 ${USED_SOURCES})
|
||||||
|
else()
|
||||||
|
add_executable(${FURNACE} ${USED_SOURCES})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (MAKE_BUNDLE AND NOT FORCE_APPLE_BIN)
|
||||||
|
set_target_properties(${FURNACE} PROPERTIES
|
||||||
|
MACOSX_BUNDLE True
|
||||||
|
MACOSX_BUNDLE_INFO_PLIST ${CMAKE_SOURCE_DIR}/res/Info.plist)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
target_include_directories(${FURNACE} SYSTEM PRIVATE ${DEPENDENCIES_INCLUDE_DIRS})
|
||||||
|
target_compile_options(${FURNACE} PRIVATE ${DEPENDENCIES_COMPILE_OPTIONS})
|
||||||
|
target_link_libraries(${FURNACE} PRIVATE ${DEPENDENCIES_LIBRARIES})
|
||||||
if (PKG_CONFIG_FOUND AND (SYSTEM_FMT OR SYSTEM_LIBSNDFILE OR SYSTEM_ZLIB OR SYSTEM_SDL2 OR SYSTEM_RTMIDI OR WITH_JACK))
|
if (PKG_CONFIG_FOUND AND (SYSTEM_FMT OR SYSTEM_LIBSNDFILE OR SYSTEM_ZLIB OR SYSTEM_SDL2 OR SYSTEM_RTMIDI OR WITH_JACK))
|
||||||
if ("${CMAKE_VERSION}" VERSION_LESS "3.13")
|
if ("${CMAKE_VERSION}" VERSION_LESS "3.13")
|
||||||
message(WARNING
|
message(WARNING
|
||||||
"CMake version is <3.13, using old pkg-config LDFLAGS. "
|
"CMake version is <3.13, using old pkg-config LDFLAGS. "
|
||||||
"You may encounter linking problems with these!"
|
"You may encounter linking problems with these!"
|
||||||
)
|
)
|
||||||
target_link_libraries(furnace PRIVATE ${DEPENDENCIES_LEGACY_LDFLAGS})
|
target_link_libraries(${FURNACE} PRIVATE ${DEPENDENCIES_LEGACY_LDFLAGS})
|
||||||
else()
|
else()
|
||||||
target_link_directories(furnace PRIVATE ${DEPENDENCIES_LIBRARY_DIRS})
|
target_link_directories(${FURNACE} PRIVATE ${DEPENDENCIES_LIBRARY_DIRS})
|
||||||
target_link_options(furnace PRIVATE ${DEPENDENCIES_LINK_OPTIONS})
|
target_link_options(${FURNACE} PRIVATE ${DEPENDENCIES_LINK_OPTIONS})
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# why 3.16..... why not 3.0?
|
# why 3.16..... why not 3.0?
|
||||||
if (NOT "${CMAKE_VERSION}" VERSION_LESS "3.16")
|
if (NOT "${CMAKE_VERSION}" VERSION_LESS "3.16")
|
||||||
if (BUILD_GUI)
|
if (BUILD_GUI)
|
||||||
target_precompile_headers(furnace PUBLIC
|
target_precompile_headers(${FURNACE} PUBLIC
|
||||||
$<$<COMPILE_LANGUAGE:CXX>:${CMAKE_CURRENT_SOURCE_DIR}/src/pch.h>
|
$<$<COMPILE_LANGUAGE:CXX>:${CMAKE_CURRENT_SOURCE_DIR}/src/pch.h>
|
||||||
$<$<COMPILE_LANGUAGE:CXX>:${CMAKE_CURRENT_SOURCE_DIR}/extern/imgui_patched/imgui.h>
|
$<$<COMPILE_LANGUAGE:CXX>:${CMAKE_CURRENT_SOURCE_DIR}/extern/imgui_patched/imgui.h>
|
||||||
$<$<COMPILE_LANGUAGE:CXX>:${CMAKE_CURRENT_SOURCE_DIR}/extern/imgui_patched/imgui_internal.h>
|
$<$<COMPILE_LANGUAGE:CXX>:${CMAKE_CURRENT_SOURCE_DIR}/extern/imgui_patched/imgui_internal.h>
|
||||||
)
|
)
|
||||||
else()
|
else()
|
||||||
target_precompile_headers(furnace PUBLIC
|
target_precompile_headers(${FURNACE} PUBLIC
|
||||||
$<$<COMPILE_LANGUAGE:CXX>:${CMAKE_CURRENT_SOURCE_DIR}/src/pch.h>
|
$<$<COMPILE_LANGUAGE:CXX>:${CMAKE_CURRENT_SOURCE_DIR}/src/pch.h>
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
@ -1079,14 +1251,17 @@ endif()
|
||||||
if (NOT ANDROID OR TERMUX)
|
if (NOT ANDROID OR TERMUX)
|
||||||
if (NOT WIN32 AND NOT APPLE)
|
if (NOT WIN32 AND NOT APPLE)
|
||||||
include(GNUInstallDirs)
|
include(GNUInstallDirs)
|
||||||
install(TARGETS furnace RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
|
install(TARGETS ${FURNACE} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
|
||||||
install(FILES res/furnace.desktop DESTINATION ${CMAKE_INSTALL_DATADIR}/applications)
|
install(FILES res/furnace.desktop DESTINATION ${CMAKE_INSTALL_DATADIR}/applications)
|
||||||
|
install(FILES res/mime.xml RENAME furnace.xml DESTINATION ${CMAKE_INSTALL_DATADIR}/mime/packages)
|
||||||
if (NOT DONT_HAVE_GIT)
|
if (NOT DONT_HAVE_GIT)
|
||||||
install(FILES ${CMAKE_BINARY_DIR}/furnace.appdata.xml DESTINATION ${CMAKE_INSTALL_DATADIR}/metainfo)
|
install(FILES ${CMAKE_BINARY_DIR}/furnace.appdata.xml DESTINATION ${CMAKE_INSTALL_DATADIR}/metainfo)
|
||||||
endif()
|
endif()
|
||||||
install(DIRECTORY doc DESTINATION ${CMAKE_INSTALL_DOCDIR})
|
install(DIRECTORY doc DESTINATION ${CMAKE_INSTALL_DOCDIR})
|
||||||
install(DIRECTORY papers DESTINATION ${CMAKE_INSTALL_DOCDIR}/other)
|
install(DIRECTORY papers DESTINATION ${CMAKE_INSTALL_DOCDIR}/other)
|
||||||
install(FILES LICENSE DESTINATION ${CMAKE_INSTALL_DATADIR}/licenses/furnace)
|
install(FILES LICENSE DESTINATION ${CMAKE_INSTALL_DATADIR}/licenses/furnace)
|
||||||
|
list(APPEND DEPENDENCIES_DEFINES LOCALE_DIR="${CMAKE_INSTALL_FULL_LOCALEDIR}")
|
||||||
|
install(DIRECTORY po/locale/ DESTINATION ${CMAKE_INSTALL_LOCALEDIR})
|
||||||
if (WITH_DEMOS OR WITH_INSTRUMENTS OR WITH_WAVETABLES)
|
if (WITH_DEMOS OR WITH_INSTRUMENTS OR WITH_WAVETABLES)
|
||||||
set(FURNACE_DATADIR ${CMAKE_INSTALL_FULL_DATADIR}/furnace)
|
set(FURNACE_DATADIR ${CMAKE_INSTALL_FULL_DATADIR}/furnace)
|
||||||
if (WITH_DEMOS)
|
if (WITH_DEMOS)
|
||||||
|
@ -1098,9 +1273,9 @@ if (NOT ANDROID OR TERMUX)
|
||||||
if (WITH_WAVETABLES)
|
if (WITH_WAVETABLES)
|
||||||
install(DIRECTORY wavetables DESTINATION ${FURNACE_DATADIR})
|
install(DIRECTORY wavetables DESTINATION ${FURNACE_DATADIR})
|
||||||
endif()
|
endif()
|
||||||
add_compile_definitions(FURNACE_DATADIR="${FURNACE_DATADIR}")
|
list(APPEND DEPENDENCIES_DEFINES FURNACE_DATADIR="${FURNACE_DATADIR}")
|
||||||
if (SHOW_OPEN_ASSETS_MENU_ENTRY)
|
if (SHOW_OPEN_ASSETS_MENU_ENTRY)
|
||||||
add_compile_definitions(SHOW_OPEN_ASSETS_MENU_ENTRY)
|
list(APPEND DEPENDENCIES_DEFINES SHOW_OPEN_ASSETS_MENU_ENTRY)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
foreach(num 16 32 64 128 256 512)
|
foreach(num 16 32 64 128 256 512)
|
||||||
|
@ -1110,24 +1285,12 @@ if (NOT ANDROID OR TERMUX)
|
||||||
endforeach()
|
endforeach()
|
||||||
install(FILES res/logo.png RENAME furnace.png DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor/1024x1024/apps)
|
install(FILES res/logo.png RENAME furnace.png DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor/1024x1024/apps)
|
||||||
else()
|
else()
|
||||||
install(TARGETS furnace RUNTIME DESTINATION bin)
|
if (MAKE_BUNDLE)
|
||||||
|
install(TARGETS ${FURNACE} BUNDLE DESTINATION Applications RESOURCE DESTINATION Resources)
|
||||||
|
else()
|
||||||
|
install(TARGETS ${FURNACE} RUNTIME DESTINATION bin)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(CPACK_PACKAGE_NAME "Furnace")
|
|
||||||
set(CPACK_PACKAGE_VENDOR "tildearrow")
|
|
||||||
set(CPACK_PACKAGE_DESCRIPTION "free and open-source chiptune tracker")
|
|
||||||
|
|
||||||
if (APPLE)
|
|
||||||
set(CPACK_GENERATOR Bundle)
|
|
||||||
set(CPACK_DMG_SLA_DIR ${CMAKE_SOURCE_DIR}/res/macLicense)
|
|
||||||
set(CPACK_DMG_SLA_LANGUAGES en)
|
|
||||||
set(CPACK_BUNDLE_NAME "Furnace")
|
|
||||||
set(CPACK_DMG_VOLUME_NAME "Furnace")
|
|
||||||
set(CPACK_BUNDLE_PLIST ${CMAKE_SOURCE_DIR}/res/Info.plist)
|
|
||||||
set(CPACK_BUNDLE_ICON ${CMAKE_SOURCE_DIR}/res/icon.icns)
|
|
||||||
set(CPACK_BUNDLE_STARTUP_COMMAND "furnace")
|
|
||||||
set(CPACK_BUNDLE_APPLE_CERT_APP "-")
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
include(CPack)
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
target_compile_definitions(${FURNACE} PRIVATE ${DEPENDENCIES_DEFINES})
|
||||||
|
|
54
README.md
|
@ -80,14 +80,21 @@ for other operating systems, you may [build the source](#developer-info).
|
||||||
- TED used in Commodore Plus/4
|
- TED used in Commodore Plus/4
|
||||||
- Casio PV-1000
|
- Casio PV-1000
|
||||||
- TIA used in Atari 2600
|
- TIA used in Atari 2600
|
||||||
|
- including software tuning engine (TIunA)
|
||||||
- POKEY used in Atari 8-bit computers
|
- POKEY used in Atari 8-bit computers
|
||||||
- **Game Boy**
|
- **Game Boy**
|
||||||
- including SOFTWARE ENVELOPES (zombie mode)
|
- including SOFTWARE ENVELOPES (zombie mode)
|
||||||
- Virtual Boy
|
- Virtual Boy
|
||||||
|
- Game Boy Advance
|
||||||
|
- DMA (direct memory access) two channel mode
|
||||||
|
- MinMod software driver by Natt Akuma
|
||||||
|
- Nintendo DS
|
||||||
- modern/fantasy:
|
- modern/fantasy:
|
||||||
- Commander X16 VERA
|
- Commander X16 VERA
|
||||||
- tildearrow Sound Unit
|
- tildearrow Sound Unit
|
||||||
- PowerNoise
|
- PowerNoise
|
||||||
|
- Bifurcator
|
||||||
|
- SID2
|
||||||
- Generic PCM DAC
|
- Generic PCM DAC
|
||||||
- mix and match sound chips!
|
- mix and match sound chips!
|
||||||
- over 200 ready to use presets from computers, game consoles and arcade boards...
|
- over 200 ready to use presets from computers, game consoles and arcade boards...
|
||||||
|
@ -130,7 +137,7 @@ for other operating systems, you may [build the source](#developer-info).
|
||||||
---
|
---
|
||||||
# quick references
|
# quick references
|
||||||
|
|
||||||
- **discussion**: see the [Discussions](https://github.com/tildearrow/furnace/discussions) section, the [official Revolt](https://rvlt.gg/GRPS6tmc) or the [official Discord server](https://discord.gg/EfrwT2wq7z).
|
- **discussion**: see the [Discussions](https://github.com/tildearrow/furnace/discussions) section.
|
||||||
- **help**: check out the [documentation](doc/README.md).
|
- **help**: check out the [documentation](doc/README.md).
|
||||||
|
|
||||||
## packages
|
## packages
|
||||||
|
@ -175,6 +182,8 @@ otherwise, you may also need the following:
|
||||||
|
|
||||||
some Linux distributions (e.g. Ubuntu or openSUSE) will require you to install the `-dev` versions of these.
|
some Linux distributions (e.g. Ubuntu or openSUSE) will require you to install the `-dev` versions of these.
|
||||||
|
|
||||||
|
having libintl is recommended for locale support, but if it isn't present, Furnace will use its own implementation.
|
||||||
|
|
||||||
## getting the source
|
## getting the source
|
||||||
|
|
||||||
type the following on a terminal/console: (make sure Git is installed)
|
type the following on a terminal/console: (make sure Git is installed)
|
||||||
|
@ -254,11 +263,13 @@ Available options:
|
||||||
| Name | Default | Description |
|
| Name | Default | Description |
|
||||||
| :--: | :-----: | ----------- |
|
| :--: | :-----: | ----------- |
|
||||||
| `BUILD_GUI` | `ON` | Build the tracker (disable to build only a headless player) |
|
| `BUILD_GUI` | `ON` | Build the tracker (disable to build only a headless player) |
|
||||||
|
| `WITH_LOCALE` | `ON` | Enable language support |
|
||||||
| `USE_RTMIDI` | `ON` | Build with MIDI support using RtMidi |
|
| `USE_RTMIDI` | `ON` | Build with MIDI support using RtMidi |
|
||||||
| `USE_SDL2` | `ON` | Build with SDL2 (required to build with GUI) |
|
| `USE_SDL2` | `ON` | Build with SDL2 (required to build with GUI) |
|
||||||
| `USE_SNDFILE` | `ON` | Build with libsndfile (required in order to work with audio files) |
|
| `USE_SNDFILE` | `ON` | Build with libsndfile (required in order to work with audio files) |
|
||||||
| `USE_BACKWARD` | `ON` | Use backward-cpp to print a backtrace on crash/abort |
|
| `USE_BACKWARD` | `ON` | Use backward-cpp to print a backtrace on crash/abort |
|
||||||
| `USE_FREETYPE` | `OFF` | Build with FreeType support |
|
| `USE_FREETYPE` | `OFF` | Build with FreeType support |
|
||||||
|
| `USE_MOMO` | auto\*\*\* | Build a libintl implementation instead of using the system one |
|
||||||
| `WITH_JACK` | auto\* | Whether to build with JACK support. Auto-detects if JACK is available |
|
| `WITH_JACK` | auto\* | Whether to build with JACK support. Auto-detects if JACK is available |
|
||||||
| `WITH_PORTAUDIO` | `ON` | Whether to build with PortAudio. |
|
| `WITH_PORTAUDIO` | `ON` | Whether to build with PortAudio. |
|
||||||
| `SYSTEM_FFTW` | `OFF` | Use a system-installed version of FFTW instead of the vendored one |
|
| `SYSTEM_FFTW` | `OFF` | Use a system-installed version of FFTW instead of the vendored one |
|
||||||
|
@ -267,18 +278,22 @@ Available options:
|
||||||
| `SYSTEM_RTMIDI` | `OFF` | Use a system-installed version of RtMidi instead of the vendored one |
|
| `SYSTEM_RTMIDI` | `OFF` | Use a system-installed version of RtMidi instead of the vendored one |
|
||||||
| `SYSTEM_ZLIB` | `OFF` | Use a system-installed version of zlib instead of the vendored one |
|
| `SYSTEM_ZLIB` | `OFF` | Use a system-installed version of zlib instead of the vendored one |
|
||||||
| `SYSTEM_SDL2` | `OFF` | Use a system-installed version of SDL2 instead of the vendored one |
|
| `SYSTEM_SDL2` | `OFF` | Use a system-installed version of SDL2 instead of the vendored one |
|
||||||
| `SYSTEM_FREETYPE` | `OFF` | Use a system-installed version of SDL2 instead of the vendored one |
|
| `SYSTEM_FREETYPE` | `OFF` | Use a system-installed version of FreeType instead of the vendored one |
|
||||||
| `SUPPORT_XP` | `OFF` | Build a Windows XP-compatible binary |
|
| `SUPPORT_XP` | `OFF` | Build a Windows XP-compatible binary |
|
||||||
| `WARNINGS_ARE_ERRORS` | `OFF`\*\* | Whether warnings in furnace's C++ code should be treated as errors |
|
| `WARNINGS_ARE_ERRORS` | `OFF`\*\* | Whether warnings in furnace's C++ code should be treated as errors |
|
||||||
| `WITH_DEMOS` | `ON` | Install demo songs on `make install` |
|
| `WITH_DEMOS` | `ON` | Install demo songs on `make install` |
|
||||||
| `WITH_INSTRUMENTS` | `ON` | Install demo instruments on `make install` |
|
| `WITH_INSTRUMENTS` | `ON` | Install demo instruments on `make install` |
|
||||||
| `WITH_WAVETABLES` | `ON` | Install wavetables on `make install` |
|
| `WITH_WAVETABLES` | `ON` | Install wavetables on `make install` |
|
||||||
| `SHOW_OPEN_ASSETS_MENU_ENTRY` | `OFF` | Show option to open built-in assets directory (on supported platforms) |
|
| `SHOW_OPEN_ASSETS_MENU_ENTRY` | `OFF` | Show option to open built-in assets directory (on supported platforms) |
|
||||||
|
| `CONSOLE_SUBSYSTEM` | `OFF` | Build with subsystem set to Console on Windows |
|
||||||
|
| `FORCE_APPLE_BIN` | `OFF` | Enable installation of binaries (when doing `make install`) to PREFIX/bin on Apple platforms |
|
||||||
|
|
||||||
(\*) `ON` if system-installed JACK detected, otherwise `OFF`
|
(\*) `ON` if system-installed JACK detected, otherwise `OFF`
|
||||||
|
|
||||||
(\*\*) but consider enabling this & reporting any errors that arise from it!
|
(\*\*) but consider enabling this & reporting any errors that arise from it!
|
||||||
|
|
||||||
|
(\*\*\*) enabled by default if both libintl and setlocale aren't present (MSVC and Android), or on macOS
|
||||||
|
|
||||||
## CMake Error
|
## CMake Error
|
||||||
|
|
||||||
if it says something about a missing subdirectory in `extern`, then either:
|
if it says something about a missing subdirectory in `extern`, then either:
|
||||||
|
@ -317,6 +332,27 @@ this will play a compatible file and enable the commands view.
|
||||||
---
|
---
|
||||||
# frequently asked questions
|
# frequently asked questions
|
||||||
|
|
||||||
|
> where's the manual?
|
||||||
|
|
||||||
|
it is in [doc/](doc/README.md).
|
||||||
|
|
||||||
|
> is there a tutorial?
|
||||||
|
|
||||||
|
[a video tutorial of tracker concepts is available on YouTube](https://www.youtube.com/watch?v=Q37XuOLz0jw). thanks Button Masher!
|
||||||
|
|
||||||
|
> can I import VGM or NSF?
|
||||||
|
|
||||||
|
nope. it's a feature that's been requested many times, but I don't have plans to implement that yet.
|
||||||
|
|
||||||
|
for NSF import, you can use [a modified version of FamiTracker called NSFImport](http://rainwarrior.ca/projects/nes/nsfimport.html), and then import the resulting .ftm into Furnace.
|
||||||
|
it's all speed 1 though, so don't expect any songs to be nicely laid out with instruments and all.
|
||||||
|
|
||||||
|
> how about MIDI? can I import these?
|
||||||
|
|
||||||
|
nope. it's not implemented.
|
||||||
|
|
||||||
|
also, Furnace isn't a MIDI tracker.
|
||||||
|
|
||||||
> it doesn't open under macOS!
|
> it doesn't open under macOS!
|
||||||
|
|
||||||
this is due to Apple's application signing policy. a workaround is to right click on the Furnace app icon and select Open.
|
this is due to Apple's application signing policy. a workaround is to right click on the Furnace app icon and select Open.
|
||||||
|
@ -334,14 +370,6 @@ xattr -d com.apple.quarantine /path/to/Furnace.app
|
||||||
|
|
||||||
you may need to log out and/or reboot after doing this.
|
you may need to log out and/or reboot after doing this.
|
||||||
|
|
||||||
> where's the manual?
|
|
||||||
|
|
||||||
it is in [doc/](doc/README.md).
|
|
||||||
|
|
||||||
> is there a tutorial?
|
|
||||||
|
|
||||||
[a video tutorial (of a previous version) is available on YouTube](https://youtube.com/playlist?list=PLCELB6AsTZUnwv0PC5AAGHjvg47F44YQ1), made by Spinning Square Waves.
|
|
||||||
|
|
||||||
> I've lost my song!
|
> I've lost my song!
|
||||||
|
|
||||||
Furnace keeps backups of the songs you've worked on before. go to **file > restore backup**.
|
Furnace keeps backups of the songs you've worked on before. go to **file > restore backup**.
|
||||||
|
@ -354,6 +382,12 @@ Furnace keeps backups of the songs you've worked on before. go to **file > resto
|
||||||
|
|
||||||
**not yet!** coming in 0.7 though, eventually...
|
**not yet!** coming in 0.7 though, eventually...
|
||||||
|
|
||||||
|
> Roland MT-32 support?
|
||||||
|
|
||||||
|
MT-32 is used with MIDI in 99.999% of situations. it lacks a direct register interface.
|
||||||
|
|
||||||
|
also, Furnace is not a MIDI tracker....
|
||||||
|
|
||||||
> my .dmf song sounds odd at a certain point
|
> my .dmf song sounds odd at a certain point
|
||||||
|
|
||||||
Furnace's .dmf compatibility isn't perfect and it's mostly because DefleMask does things different.
|
Furnace's .dmf compatibility isn't perfect and it's mostly because DefleMask does things different.
|
||||||
|
|
7
TODO.md
|
@ -1,4 +1,9 @@
|
||||||
# to-do
|
# to-do long term
|
||||||
|
|
||||||
|
- CSM macros
|
||||||
- finish auto-clone
|
- finish auto-clone
|
||||||
- new pattern renderer - performance improvements
|
- new pattern renderer - performance improvements
|
||||||
|
- new info header
|
||||||
|
- unlimited channels and chips
|
||||||
|
- fix possible issues when moving selection
|
||||||
|
- fix Metal intro crash
|
||||||
|
|
|
@ -15,11 +15,11 @@ android {
|
||||||
}
|
}
|
||||||
minSdkVersion 21
|
minSdkVersion 21
|
||||||
targetSdkVersion 26
|
targetSdkVersion 26
|
||||||
versionCode 192
|
versionCode 214
|
||||||
versionName "0.6.1"
|
versionName "0.6.5"
|
||||||
externalNativeBuild {
|
externalNativeBuild {
|
||||||
cmake {
|
cmake {
|
||||||
arguments "-DANDROID_APP_PLATFORM=android-21", "-DANDROID_STL=c++_static", "-DWARNINGS_ARE_ERRORS=ON"
|
arguments "-DANDROID_APP_PLATFORM=android-21", "-DANDROID_STL=c++_static", "-DWARNINGS_ARE_ERRORS=ON", "-DWITH_LOCALE=ON", "-DUSE_MOMO=ON"
|
||||||
// abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
|
// abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
|
||||||
abiFilters 'arm64-v8a'
|
abiFilters 'arm64-v8a'
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
package="org.tildearrow.furnace"
|
package="org.tildearrow.furnace"
|
||||||
android:versionCode="192"
|
android:versionCode="214"
|
||||||
android:versionName="0.6.1"
|
android:versionName="0.6.5"
|
||||||
android:installLocation="auto">
|
android:installLocation="auto">
|
||||||
|
|
||||||
<!-- OpenGL ES 2.0 -->
|
<!-- OpenGL ES 2.0 -->
|
||||||
|
|
1
android/app/src/main/assets/locale
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
../../../../../po/locale
|
BIN
demos/a2600/Funky_Afternoon.fur
Normal file
BIN
demos/a2600/Slam_the_Door.fur
Normal file
BIN
demos/a2600/TIADeepIntoCode.fur
Normal file
BIN
demos/a2600/Watch My Tone.fur
Normal file
BIN
demos/a2600/twin.fur
Normal file
BIN
demos/arcade/U.N. Owen Was Her (NS2).fur
Normal file
BIN
demos/arcade/sans_TaitoArcade.fur
Normal file
BIN
demos/ay8910/AyMate.fur
Normal file
BIN
demos/ay8930/Obscure_Temptation.fur
Normal file
BIN
demos/c64/Hellcharger.fur
Normal file
BIN
demos/esfm/WindFjordsESFM.fur
Normal file
BIN
demos/gameboy/GB_WaitForMe.fur
Normal file
BIN
demos/genesis/SpareHalloween2.fur
Normal file
BIN
demos/genesis/forest_freeway_zone.fur
Normal file
BIN
demos/genesis/imaginarium.fur
Normal file
BIN
demos/misc/Special Stage Sonic 3 (GBA).fur
Normal file
BIN
demos/misc/StrobesPowerNoise.fur
Normal file
BIN
demos/misc/Weightlessness_ES5506.fur
Normal file
BIN
demos/misc/ZetaForceLevel2.fur
Normal file
BIN
demos/misc/biffy_bifurcator.fur
Normal file
BIN
demos/misc/brokenspace-msm5232.fur
Normal file
BIN
demos/misc/cavedotwave-msm5232.fur
Normal file
BIN
demos/msx/BREEZE_SENSATION.fur
Normal file
BIN
demos/msx/Juice_Stand.fur
Normal file
BIN
demos/msx/OPLL_OperationPleaseLeaveLeave.fur
Normal file
BIN
demos/msx/Port Sun.fur
Normal file
BIN
demos/multichip/Cossack Stage Boss.fur
Normal file
BIN
demos/multichip/FamiMega Aliance.fur
Normal file
BIN
demos/multichip/Sunset Hill Zone Act 2.fur
Normal file
BIN
demos/multichip/TheOnlyWayIsForward.fur
Normal file
BIN
demos/multichip/satellite_interconnects.fur
Normal file
BIN
demos/nes/Byte-Sized Bop.fur
Normal file
BIN
demos/nes/Famitune1.fur
Normal file
BIN
demos/nes/Super cool and awesome samurai.fur
Normal file
BIN
demos/nes/The East.fur
Normal file
BIN
demos/nes/infinity.fur
Normal file
BIN
demos/opl/I_won_t_be_there_again.fur
Normal file
BIN
demos/opl/Perpetual_Motion.fur
Normal file
BIN
demos/opl/rain.cloud.sunset.fur
Normal file
BIN
demos/pc98/Counterattack.fur
Normal file
BIN
demos/quickstart.fur
Normal file
BIN
demos/sn7/Last Frecuency System.fur
Normal file
BIN
demos/sn7/Tidal_Tempest_Zone.fur
Normal file
BIN
demos/snes/Dear Blue SNES.fur
Normal file
BIN
demos/snes/Sunken Lights.fur
Normal file
BIN
demos/snes/analog.fur
Normal file
BIN
demos/snes/aurora.fur
Normal file
BIN
demos/snes/encjslt.fur
Normal file
BIN
demos/snes/sound processing unit.fur
Normal file
BIN
demos/snes/spd10.fur
Normal file
BIN
demos/snes/spd12.fur
Normal file
BIN
demos/snes/wonders_of_synthia.fur
Normal file
BIN
demos/specs2/acidic_juice_of_hell.fur
Normal file
BIN
demos/virtualboy/wavetablehell4-vb.fur
Normal file
|
@ -6,6 +6,10 @@ it has a large selection of features and sound chips. from the NES, SNES and Gen
|
||||||
|
|
||||||
every chip is emulated using many emulation cores, therefore the sound that Furnace produces is authentic to that of real hardware.
|
every chip is emulated using many emulation cores, therefore the sound that Furnace produces is authentic to that of real hardware.
|
||||||
|
|
||||||
|
## quick start
|
||||||
|
|
||||||
|
if you just want to jump right in and get going, we recommended you go through the [quick start guide](quickstart.md) first. it should get you familiar enough with the program to comprehend the rest of the documentation.
|
||||||
|
|
||||||
## hexadecimal
|
## hexadecimal
|
||||||
|
|
||||||
Furnace uses hexadecimal (abbreviated as "hex") numbers frequently. see [this guide](hex.md) for a crash course.
|
Furnace uses hexadecimal (abbreviated as "hex") numbers frequently. see [this guide](hex.md) for a crash course.
|
||||||
|
@ -16,11 +20,7 @@ Furnace uses a music tracker interface. think of a table with music notes writte
|
||||||
for an introduction to a tracker interface, see [tracker concepts and terms](concepts.md) before using Furnace.
|
for an introduction to a tracker interface, see [tracker concepts and terms](concepts.md) before using Furnace.
|
||||||
there's also a [glossary of common terms](glossary.md).
|
there's also a [glossary of common terms](glossary.md).
|
||||||
|
|
||||||
due to its nature of being feature-packed, it may be technical and somewhat difficult to get around. therefore we added a [basic mode](../2-interface/basic-mode.md), which hides several advanced features.
|
Furnace uses a flexible windowing system which you may move around and organize. see [2-interface](../2-interface/README.md) and [3-pattern](../3-pattern/README.md) for more information.
|
||||||
|
|
||||||
it also has a flexible windowing system which you may move around and organize.
|
|
||||||
|
|
||||||
see [2-interface](../2-interface/README.md) and [3-pattern](../3-pattern/README.md) for more information.
|
|
||||||
|
|
||||||
once familiar with the tracker, look to [9-guides](../9-guides/README.md) for useful techniques.
|
once familiar with the tracker, look to [9-guides](../9-guides/README.md) for useful techniques.
|
||||||
|
|
||||||
|
|
|
@ -51,6 +51,8 @@
|
||||||
**FM**: frequency modulation. this is a method of generating sound that uses one operator's amplitude to modify another operator's frequency.
|
**FM**: frequency modulation. this is a method of generating sound that uses one operator's amplitude to modify another operator's frequency.
|
||||||
- the FM in Yamaha chips is more accurately called _phase modulation,_ which uses a different method of computation to achieve similar results.
|
- the FM in Yamaha chips is more accurately called _phase modulation,_ which uses a different method of computation to achieve similar results.
|
||||||
|
|
||||||
|
**.ftm**: FamiTracker Module.
|
||||||
|
|
||||||
**.fui**: a Furnace instrument file.
|
**.fui**: a Furnace instrument file.
|
||||||
|
|
||||||
**.fur**: a Furnace module file.
|
**.fur**: a Furnace module file.
|
||||||
|
@ -64,6 +66,8 @@
|
||||||
**interpolate**: to fill in the area between two values with a smooth ramp of values in between.
|
**interpolate**: to fill in the area between two values with a smooth ramp of values in between.
|
||||||
- some sample-based chips can interpolate, filtering out unwanted harmonics.
|
- some sample-based chips can interpolate, filtering out unwanted harmonics.
|
||||||
|
|
||||||
|
**.it**: Impulse Tracker module.
|
||||||
|
|
||||||
**ladder effect**: an inaccurate yet common term for the DAC distortion that affects some Yamaha FM chips.
|
**ladder effect**: an inaccurate yet common term for the DAC distortion that affects some Yamaha FM chips.
|
||||||
|
|
||||||
**LFO**: low frequency oscillator. a wave with a slow period (often below hearing range) used to alter other sounds.
|
**LFO**: low frequency oscillator. a wave with a slow period (often below hearing range) used to alter other sounds.
|
||||||
|
@ -105,6 +109,8 @@
|
||||||
|
|
||||||
**register**: a memory location within a sound chip. "register view" shows all the relevant memory of all chips in use.
|
**register**: a memory location within a sound chip. "register view" shows all the relevant memory of all chips in use.
|
||||||
|
|
||||||
|
**.s3m**: ScreamTracker 3 Module.
|
||||||
|
|
||||||
**sample** (1): a digitally recorded sound. usually stored as some variant of PCM.
|
**sample** (1): a digitally recorded sound. usually stored as some variant of PCM.
|
||||||
- these can take up a lot of room depending on length and sample rate, thus older systems tend to use short, lower quality samples.
|
- these can take up a lot of room depending on length and sample rate, thus older systems tend to use short, lower quality samples.
|
||||||
|
|
||||||
|
@ -140,4 +146,6 @@
|
||||||
|
|
||||||
**wavetable** (2): an ordered group of wavetables(1) used in sequence within a single instrument.
|
**wavetable** (2): an ordered group of wavetables(1) used in sequence within a single instrument.
|
||||||
|
|
||||||
|
**.xm**: eXtended Module. the file format of songs made with FastTracker 2.
|
||||||
|
|
||||||
**.zsm**: ZSound Music. a VGM-like file meant specifically for the Commander X16 computer.
|
**.zsm**: ZSound Music. a VGM-like file meant specifically for the Commander X16 computer.
|
||||||
|
|
BIN
doc/1-intro/qs-insteditor.png
Normal file
After Width: | Height: | Size: 29 KiB |
BIN
doc/1-intro/qs-instlist-empty.png
Normal file
After Width: | Height: | Size: 7.4 KiB |
BIN
doc/1-intro/qs-instlist-full.png
Normal file
After Width: | Height: | Size: 13 KiB |
BIN
doc/1-intro/qs-instlist-lessempty.png
Normal file
After Width: | Height: | Size: 9.6 KiB |
BIN
doc/1-intro/qs-interface.png
Normal file
After Width: | Height: | Size: 141 KiB |
BIN
doc/1-intro/qs-macro-release.png
Normal file
After Width: | Height: | Size: 30 KiB |
BIN
doc/1-intro/qs-macro.png
Normal file
After Width: | Height: | Size: 30 KiB |
BIN
doc/1-intro/qs-noteoffs-channels.png
Normal file
After Width: | Height: | Size: 3.7 KiB |
BIN
doc/1-intro/qs-notes-channel.png
Normal file
After Width: | Height: | Size: 3 KiB |
BIN
doc/1-intro/qs-notes-channels.png
Normal file
After Width: | Height: | Size: 3.3 KiB |
BIN
doc/1-intro/qs-notes-effect.png
Normal file
After Width: | Height: | Size: 2.4 KiB |
BIN
doc/1-intro/qs-notes-inst.png
Normal file
After Width: | Height: | Size: 2.9 KiB |
BIN
doc/1-intro/qs-notes-spaced.png
Normal file
After Width: | Height: | Size: 4.2 KiB |
BIN
doc/1-intro/qs-notes-vol.png
Normal file
After Width: | Height: | Size: 3 KiB |
BIN
doc/1-intro/qs-notes-wronginst.png
Normal file
After Width: | Height: | Size: 4.1 KiB |
BIN
doc/1-intro/qs-order-added.png
Normal file
After Width: | Height: | Size: 7.7 KiB |
BIN
doc/1-intro/qs-order-changed.png
Normal file
After Width: | Height: | Size: 7.8 KiB |
BIN
doc/1-intro/qs-order-default.png
Normal file
After Width: | Height: | Size: 6.3 KiB |
BIN
doc/1-intro/qs-playeditcontrols.png
Normal file
After Width: | Height: | Size: 3.2 KiB |
BIN
doc/1-intro/qs-samplist.png
Normal file
After Width: | Height: | Size: 7.8 KiB |
BIN
doc/1-intro/qs-selection.png
Normal file
After Width: | Height: | Size: 2.9 KiB |