aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore2
-rw-r--r--CMakeLists.txt367
-rw-r--r--examples/sdl2_audio/CMakeLists.txt38
-rw-r--r--examples/sdl2_audio/sdl2_sample.c (renamed from examples/sd2_audio/sdl2_sample.c)0
-rw-r--r--src/adlmidi_midiplay.cpp2
-rw-r--r--src/chips/opl_chip_base.tcc4
-rw-r--r--src/cvt_xmi2mid.hpp16
-rw-r--r--utils/adlmidi-2/CMakeLists.txt97
-rw-r--r--utils/dumpbank/CMakeLists.txt10
-rw-r--r--utils/dumpmiles/CMakeLists.txt10
-rw-r--r--utils/gen_adldata/CMakeLists.txt80
-rw-r--r--utils/midiplay/CMakeLists.txt62
-rw-r--r--utils/vlc_codec/CMakeLists.txt41
-rw-r--r--utils/xmi2mid/CMakeLists.txt10
14 files changed, 399 insertions, 340 deletions
diff --git a/.gitignore b/.gitignore
index ece8b7c..35f6cf7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -31,7 +31,7 @@ obj/*
# Qt-Creator IDE
build-*
-*.user
+*.user*
# Cmake caches
build/*
diff --git a/CMakeLists.txt b/CMakeLists.txt
index adc1054..888893e 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -38,41 +38,31 @@ endif()
string(TOLOWER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE_LOWER)
if(CMAKE_BUILD_TYPE_LOWER EQUAL "release")
add_definitions(-DNDEBUG)
-ENDIF()
+endif()
# Disable bogus MSVC warnings
if(MSVC)
add_definitions(-D_CRT_SECURE_NO_WARNINGS)
-ENDIF()
+endif()
# -fPIC thing
-IF(NOT WIN32 AND NOT DJGPP AND NOT MSDOS)
+if(NOT WIN32 AND NOT DJGPP AND NOT MSDOS)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
-ENDIF()
+endif()
if(OPENBSD_LOCALBASE)
message("OpenBSD Detected!")
- include_directories(/usr/local/include)
-endif()
-
-if(${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} VERSION_LESS 3.2)
- message("==Legacy CMake detected! Turning C++11 for everything==")
- if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX)
- # Turn on C++11 for everything
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
- endif()
+ include_directories(${OPENBSD_LOCALBASE}/include)
endif()
function(set_legacy_standard destTarget)
- if(${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} VERSION_GREATER 3.2)
- if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX)
- # Turn on warnings and legacy C/C++ standards to support more compilers
- target_compile_options(${destTarget} PRIVATE
- $<$<COMPILE_LANGUAGE:C>:-Wall -pedantic -std=c90 -Wno-long-long>
- $<$<COMPILE_LANGUAGE:CXX>:-Wall -pedantic -std=gnu++98>
- )
- endif()
+ if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX)
+ # Turn on warnings and legacy C/C++ standards to support more compilers
+ target_compile_options(${destTarget} PRIVATE
+ $<$<COMPILE_LANGUAGE:C>:-Wall -pedantic -std=c90 -Wno-long-long>
+ $<$<COMPILE_LANGUAGE:CXX>:-Wall -pedantic -std=gnu++98>
+ )
endif()
endfunction()
@@ -113,115 +103,12 @@ option(WITH_OLD_UTILS "Build also old utilities" OFF)
option(WITH_XMI2MID "Build a XMI to MIDI converter" OFF)
option(EXAMPLE_SDL2_AUDIO "Build also a simple SDL2 demo MIDI player" OFF)
-
-if(CMAKE_VERSION VERSION_EQUAL "3.1" OR CMAKE_VERSION VERSION_GREATER "3.1")
- set(CMAKE_CXX_STANDARD 11)
-endif()
-
set(libADLMIDI_INSTALLS)
include_directories(${libADLMIDI_SOURCE_DIR}/include)
include_directories(${libADLMIDI_SOURCE_DIR}/src/)
link_directories(${libADLMIDI_BINARY_DIR}/)
-if(WITH_OLD_UTILS)
- # Old utility to dump AdLib bank files
- add_executable(adldumpbank
- ${libADLMIDI_SOURCE_DIR}/utils/dumpbank/dumpbank.cpp
- )
- list(APPEND libADLMIDI_INSTALLS adldumpbank)
-
- # Old utility to dump AIL bank files
- add_executable(adldumpmiles
- ${libADLMIDI_SOURCE_DIR}/utils/dumpmiles/dumpmiles.cpp
- )
- list(APPEND libADLMIDI_INSTALLS adldumpmiles)
-endif()
-
-if(WITH_ADLMIDI2 OR (WITH_EMBEDDED_BANKS AND WITH_GENADLDATA))
- find_package(OpenMP)
-endif()
-
-if(WITH_HQ_RESAMPLER)
- find_library(ZITA_RESAMPLER_LIBRARY "zita-resampler" REQUIRED)
-endif()
-
-if(WITH_EMBEDDED_BANKS)
- if(WITH_GENADLDATA)
- set(GEN_ADLDATA_SRC)
- list(APPEND GEN_ADLDATA_SRC
- ${libADLMIDI_SOURCE_DIR}/utils/gen_adldata/gen_adldata.cc
- ${libADLMIDI_SOURCE_DIR}/utils/gen_adldata/progs_cache.cpp
- ${libADLMIDI_SOURCE_DIR}/utils/gen_adldata/measurer.cpp
- ${libADLMIDI_SOURCE_DIR}/utils/gen_adldata/ini/ini_processing.cpp
- )
-
- if(USE_DOSBOX_EMULATOR)
- set(HAS_EMULATOR TRUE)
- list(APPEND GEN_ADLDATA_SRC
- ${libADLMIDI_SOURCE_DIR}/src/chips/dosbox_opl3.cpp
- ${libADLMIDI_SOURCE_DIR}/src/chips/dosbox/dbopl.cpp
- )
- else()
- add_definitions(-DADLMIDI_DISABLE_DOSBOX_EMULATOR)
- endif()
-
- if(USE_NUKED_EMULATOR)
- set(HAS_EMULATOR TRUE)
- list(APPEND GEN_ADLDATA_SRC
- ${libADLMIDI_SOURCE_DIR}/src/chips/nuked_opl3.cpp # v 1.8
- ${libADLMIDI_SOURCE_DIR}/src/chips/nuked/nukedopl3.c
- ${libADLMIDI_SOURCE_DIR}/src/chips/nuked_opl3_v174.cpp # v 1.7.4
- ${libADLMIDI_SOURCE_DIR}/src/chips/nuked/nukedopl3_174.c
- )
- else()
- add_definitions(-DADLMIDI_DISABLE_NUKED_EMULATOR)
- endif()
-
- add_executable(gen_adldata
- ${GEN_ADLDATA_SRC}
- )
- if(NOT MSVC)
- target_link_libraries(gen_adldata pthread m stdc++)
- endif()
- if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR
- "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR
- "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel" OR
- "${CMAKE_CXX_COMPILER_ID}" STREQUAL "MinGW" OR
- CMAKE_COMPILER_IS_MINGW)
- if(${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} VERSION_GREATER 3.2)
- message("Turned on C++11 on GCC/CLang/Intel/MinGW")
- set_target_properties(gen_adldata PROPERTIES
- CXX_STANDARD 11
- CXX_STANDARD_REQUIRED YES)
- if(OPENMP_FOUND)
- target_compile_options(gen_adldata PUBLIC "-fopenmp")
- target_link_libraries(gen_adldata "-fopenmp")
- endif()
- endif()
- else(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
- message("Turned on C++11 on MSVC")
- target_compile_options(gen_adldata PUBLIC "/std:c++latest")
- endif()
-
- if(WITH_GENADLDATA_COMMENTS)
- target_compile_options(gen_adldata PUBLIC "-DADLDATA_WITH_COMMENTS")
- endif()
-
- set(ADLDATA_DATABASE
- "${libADLMIDI_SOURCE_DIR}/src/adldata.cpp"
- )
- add_custom_target(gen-adldata-run #OUTPUT ${ADLDATA_DATABASE}
- COMMAND gen_adldata "${ADLDATA_DATABASE}"
- WORKING_DIRECTORY ${libADLMIDI_SOURCE_DIR}
- DEPENDS gen_adldata "${libADLMIDI_SOURCE_DIR}/banks.ini"
- COMMENT "Running Embedded FM banks database generation"
- VERBATIM
- )
- endif()
-endif()
-
-
set(libADLMIDI_SOURCES)
list(APPEND libADLMIDI_SOURCES
@@ -350,231 +237,40 @@ else()
target_link_libraries(ADLMIDI_IF INTERFACE ADLMIDI_static)
endif()
-if(WITH_MIDIPLAY)
- if(NOT MSDOS AND NOT DJGPP AND NOT MIDIPLAY_WAVE_ONLY)
- find_library(SDL2_LIBRARY SDL2 REQUIRED)
- include_directories(${SDL2_INCLUDE_DIR})
- message("Found ${SDL2_LIBRARY}")
- else()
- unset(SDL2_LIBRARY)
- endif()
-
- add_executable(adlmidiplay
- ${libADLMIDI_SOURCE_DIR}/utils/midiplay/adlmidiplay.cpp
- ${libADLMIDI_SOURCE_DIR}/utils/midiplay/wave_writer.c
- )
-
- if(MIDIPLAY_WAVE_ONLY)
- target_compile_definitions(adlmidiplay PUBLIC "-DOUTPUT_WAVE_ONLY")
- message("Demo tool will only output WAVE file, no playing support.")
- endif()
-
- if(MSDOS OR DJGPP)
- target_compile_definitions(adlmidiplay PUBLIC "-DHARDWARE_OPL3")
- message("Turn on hardware OPL3 support on demo tool")
- endif()
+if(WITH_OLD_UTILS)
+ # Old utility to dump AdLib bank files
+ add_subdirectory(utils/dumpbank)
- if(WIN32)
- if(MSVC)
- target_link_libraries(adlmidiplay ADLMIDI_IF ${SDL2_LIBRARY})
- else()
- target_link_libraries(adlmidiplay ADLMIDI_IF ${SDL2_LIBRARY} pthread)
- endif()
- else()
- if(MSDOS OR DJGPP)
- target_link_libraries(adlmidiplay ADLMIDI_IF)
- else()
- set(ADLMIDIPLAY_LIBS ADLMIDI_IF ${SDL2_LIBRARY} pthread dl m stdc++)
- if(OPENBSD_LOCALBASE)
- list(REMOVE_ITEM ADLMIDIPLAY_LIBS dl)
- endif()
- target_link_libraries(adlmidiplay ${ADLMIDIPLAY_LIBS})
- endif()
- endif()
+ # Old utility to dump AIL bank files
+ add_subdirectory(utils/dumpmiles)
+endif()
- if(MSDOS OR DJGPP)
- set_target_properties(adlmidiplay PROPERTIES OUTPUT_NAME adlmidi)
- endif()
+if(WITH_HQ_RESAMPLER)
+ find_library(ZITA_RESAMPLER_LIBRARY "zita-resampler" REQUIRED)
+endif()
- if(libADLMIDI_SHARED)
- add_dependencies(adlmidiplay ADLMIDI_shared)
- else()
- if(NOT libADLMIDI_STATIC)
- message(FATAL_ERROR "libADLMIDI is required to be built!")
- endif()
- add_dependencies(adlmidiplay ADLMIDI_static)
- endif()
+if(WITH_EMBEDDED_BANKS AND WITH_GENADLDATA)
+ add_subdirectory(utils/gen_adldata)
+endif()
- list(APPEND libADLMIDI_INSTALLS adlmidiplay)
+if(WITH_MIDIPLAY)
+ add_subdirectory(utils/midiplay)
endif()
if(WITH_ADLMIDI2)
- if(NOT WIN32 AND NOT DJGPP AND NOT MSDOS)
- find_library(SDL2_LIBRARY SDL2 REQUIRED)
- include_directories(${SDL2_INCLUDE_DIR})
- message("Found ${SDL2_LIBRARY}")
- endif()
-
- if(NOT WIN32 AND NOT DJGPP AND NOT MSDOS)
- set(ADLMIDI2_HAS_PUZZLE_GAME "TRUE")
- set(ADLMIDI2_VIDEO_OUT_SUPPORT "TRUE")
- endif()
-
-
- set(adlmidi2_src)
- list(APPEND adlmidi2_src
- ${libADLMIDI_SOURCE_DIR}/utils/adlmidi-2/midiplay.cc
- ${libADLMIDI_SOURCE_DIR}/utils/adlmidi-2/input.cc)
-
- if(ADLMIDI2_HAS_PUZZLE_GAME)
- list(APPEND adlmidi2_src ${libADLMIDI_SOURCE_DIR}/utils/adlmidi-2/puzzlegame.cc)
- endif()
-
- add_executable(adlmidi2 ${adlmidi2_src})
-
- if(ADLMIDI2_HAS_PUZZLE_GAME)
- target_compile_definitions(adlmidi2 PUBLIC "-DSUPPORT_PUZZLE_GAME")
- endif()
-
- if(ADLMIDI2_VIDEO_OUT_SUPPORT)
- target_compile_definitions(adlmidi2 PUBLIC "-DSUPPORT_VIDEO_OUTPUT")
- endif()
-
- if(MSDOS OR DJGPP)
- target_compile_definitions(adlmidi2 PUBLIC "-DHARDWARE_OPL3")
- message("Turn on hardware OPL3 support on ADLMIDI2 tool")
- endif()
-
- if(WIN32)
- target_link_libraries(adlmidi2 ADLMIDI_IF winmm)
- elseif(DJGPP OR MSDOS)
- target_link_libraries(adlmidi2 ADLMIDI_IF)
- else()
- set(ADLMIDI2_LIBS ADLMIDI_IF ${SDL2_LIBRARY} pthread dl m stdc++)
- if(OPENBSD_LOCALBASE)
- list(REMOVE_ITEM ADLMIDI2_LIBS dl)
- endif()
- target_link_libraries(adlmidi2 ${ADLMIDI2_LIBS})
- endif()
-
- if(NOT WITH_CPP_EXTRAS)
- message(FATAL_ERROR "ADLMIDI2 Requires C++ Extras. Please enable WITH_CPP_EXTRAS option!")
- endif()
-
- if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR
- "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR
- "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel" OR
- "${CMAKE_CXX_COMPILER_ID}" STREQUAL "MinGW" OR
- CMAKE_COMPILER_IS_MINGW)
- if(${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} VERSION_GREATER 3.2)
- message("Turned on C++11 on GCC/CLang/Intel")
- set_target_properties(adlmidi2 PROPERTIES
- CXX_STANDARD 11
- CXX_STANDARD_REQUIRED YES)
- endif()
- if(OPENMP_FOUND)
- target_compile_options(adlmidi2 PUBLIC "-fopenmp")
- target_link_libraries(adlmidi2 "-fopenmp")
- endif()
- else(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
- message("Turned on C++11 on MSVC")
- target_compile_options(adlmidi2 PUBLIC "/std:c++latest")
- endif()
-
- if(libADLMIDI_SHARED)
- add_dependencies(adlmidi2 ADLMIDI_shared)
- if(NOT MSVC)
- set_target_properties(adlmidi2 PROPERTIES COMPILE_FLAGS "-Wl,-rpath='$$ORIGIN/../lib'")
- endif()
- else()
- if(NOT libADLMIDI_STATIC)
- message(FATAL_ERROR "libADLMIDI is required to be built!")
- endif()
- add_dependencies(adlmidi2 ADLMIDI_static)
- endif()
-
- list(APPEND libADLMIDI_INSTALLS adlmidi2)
+ add_subdirectory(utils/adlmidi-2)
endif()
if(WITH_XMI2MID)
- add_executable(xmi2mid
- ${libADLMIDI_SOURCE_DIR}/utils/xmi2mid/xmi2mid.cpp)
+ add_subdirectory(utils/xmi2mid)
endif()
if(EXAMPLE_SDL2_AUDIO AND NOT MSDOS AND NOT DJGPP)
- find_library(SDL2_LIBRARY SDL2 REQUIRED)
- include_directories(${SDL2_INCLUDE_DIR})
- message("Found ${SDL2_LIBRARY}")
-
- add_executable(adlmidi_sdl2_demo
- ${libADLMIDI_SOURCE_DIR}/examples/sd2_audio/sdl2_sample.c
- )
-
- if(WIN32)
- if(MSVC)
- target_link_libraries(adlmidi_sdl2_demo ADLMIDI_IF ${SDL2_LIBRARY})
- else()
- target_link_libraries(adlmidi_sdl2_demo ADLMIDI_IF ${SDL2_LIBRARY} pthread)
- endif()
- else()
- target_link_libraries(adlmidi_sdl2_demo ADLMIDI_IF ${SDL2_LIBRARY} pthread dl m stdc++)
- endif()
-
- if(MSDOS OR DJGPP)
- set_target_properties(adlmidi_sdl2_demo PROPERTIES OUTPUT_NAME adlmidi)
- endif()
-
- if(libADLMIDI_SHARED)
- add_dependencies(adlmidi_sdl2_demo ADLMIDI_shared)
- set_target_properties(adlmidi_sdl2_demo PROPERTIES COMPILE_FLAGS "-Wl,-rpath='$$ORIGIN/../lib'")
- else()
- if(NOT libADLMIDI_STATIC)
- message(FATAL_ERROR "libADLMIDI is required to be built!")
- endif()
- add_dependencies(adlmidi_sdl2_demo ADLMIDI_static)
- endif()
-
- list(APPEND libADLMIDI_INSTALLS adlmidi_sdl2_demo)
+ add_subdirectory(examples/sdl2_audio)
endif()
if(WITH_VLC_PLUGIN)
- include(cmake/FindLIBVLC.cmake)
- message("Found ${LIBVLCCORE_LIBRARY} of version ${LIBVLC_VERSION} with includes ${LIBVLC_INCLUDE_DIR}")
-
- set(adlmidi_vlc_src)
- list(APPEND adlmidi_vlc_src
- ${libADLMIDI_SOURCE_DIR}/utils/vlc_codec/libadlmidi.c)
-
- add_library(adlmidi_vlc_plugin MODULE ${adlmidi_vlc_src})
- set_target_properties(adlmidi_vlc_plugin PROPERTIES OUTPUT_NAME adlmidi_plugin)
- target_compile_options(adlmidi_vlc_plugin PUBLIC
- "-DVLC_MODULE_COPYRIGHT=\"Copyright \(c\) Vitaly Novichkov\""
- "-DVLC_MODULE_LICENSE=\"GPLv3\""
- "-DMODULE_STRING=\"adlmidi\""
- ${VLCPLUGIN_DEFINITIONS})
- target_include_directories(adlmidi_vlc_plugin PRIVATE
- ${LIBVLC_INCLUDE_DIR}/vlc/plugins
- ${LIBVLC_INCLUDE_DIR}/vlc)
-
- set(ADLMIDIVLC_LIBS ADLMIDI_IF_STATIC ${LIBVLCCORE_LIBRARY} m)
-
- if(CMAKE_SYSTEM_NAME STREQUAL "Windows" AND CMAKE_COMPILER_IS_GNUCXX)
- set_property(TARGET adlmidi_vlc_plugin APPEND_STRING PROPERTY LINK_FLAGS " -static-libgcc -static-libstdc++")
- set_property(TARGET adlmidi_vlc_plugin APPEND_STRING PROPERTY LINK_FLAGS " -Wl,-Bstatic,--whole-archive -lpthread -Wl,-Bdynamic,--no-whole-archive")
- elseif(NOT WIN32)
- list(APPEND ADLMIDIVLC_LIBS stdc++)
- endif()
-
- target_link_libraries(adlmidi_vlc_plugin ${ADLMIDIVLC_LIBS})
- # target_link_libraries(adlmidi_vlc_plugin INTERFACE "-export-symbol-regex ^vlc_entry")
-
- if(NOT VLC_PLUGIN_NOINSTALL)
- install(TARGETS adlmidi_vlc_plugin DESTINATION "${VLCPLUGIN_CODEC_INSTALL_PATH}")
- else()
- install(TARGETS adlmidi_vlc_plugin DESTINATION "${CMAKE_INSTALL_LIBDIR}/vlc-codec/")
- endif()
-
- add_dependencies(adlmidi_vlc_plugin ADLMIDI_static)
+ add_subdirectory(utils/vlc_codec)
endif()
if(WITH_HQ_RESAMPLER)
@@ -605,12 +301,14 @@ if(NOT ANDROID)
DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
endif()
+# === Unit tests ====
option(WITH_UNIT_TESTS "Enable unit testing" OFF)
if(WITH_UNIT_TESTS)
enable_testing()
add_subdirectory(test)
endif()
+
# === Version check ====
set(VERSION_CHECK_SOURCE "
#include \"adlmidi.h\"
@@ -621,6 +319,8 @@ file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/version_check.c" "${VERSION_CHECK_SOURCE
add_library(ADLMIDI_version_check OBJECT "${CMAKE_CURRENT_BINARY_DIR}/version_check.c")
target_include_directories(ADLMIDI_version_check PRIVATE "include")
+
+# === Summary ====
message("==== libADLMIDI options ====")
message("libADLMIDI_STATIC = ${libADLMIDI_STATIC}")
message("libADLMIDI_SHARED = ${libADLMIDI_SHARED}")
@@ -646,3 +346,4 @@ message("WITH_VLC_PLUGIN = ${WITH_VLC_PLUGIN}")
message("WITH_OLD_UTILS = ${WITH_OLD_UTILS}")
message("WITH_XMI2MID = ${WITH_XMI2MID}")
message("EXAMPLE_SDL2_AUDIO = ${EXAMPLE_SDL2_AUDIO}")
+
diff --git a/examples/sdl2_audio/CMakeLists.txt b/examples/sdl2_audio/CMakeLists.txt
new file mode 100644
index 0000000..6061b92
--- /dev/null
+++ b/examples/sdl2_audio/CMakeLists.txt
@@ -0,0 +1,38 @@
+cmake_minimum_required (VERSION 3.2)
+project(adlmidi_vlc_plugin C)
+
+set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
+
+find_library(SDL2_LIBRARY SDL2 REQUIRED)
+include_directories(${SDL2_INCLUDE_DIR})
+message("Found ${SDL2_LIBRARY}")
+
+add_executable(adlmidi_sdl2_demo sdl2_sample.c)
+
+if(WIN32)
+ if(MSVC)
+ target_link_libraries(adlmidi_sdl2_demo ADLMIDI_IF ${SDL2_LIBRARY})
+ else()
+ target_link_libraries(adlmidi_sdl2_demo ADLMIDI_IF ${SDL2_LIBRARY} pthread)
+ endif()
+else()
+ target_link_libraries(adlmidi_sdl2_demo ADLMIDI_IF ${SDL2_LIBRARY} pthread dl m stdc++)
+endif()
+
+if(MSDOS OR DJGPP)
+ set_target_properties(adlmidi_sdl2_demo PROPERTIES OUTPUT_NAME adlmidi)
+endif()
+
+if(libADLMIDI_SHARED)
+ add_dependencies(adlmidi_sdl2_demo ADLMIDI_shared)
+ set_target_properties(adlmidi_sdl2_demo PROPERTIES COMPILE_FLAGS "-Wl,-rpath='$$ORIGIN/../lib'")
+else()
+ if(NOT libADLMIDI_STATIC)
+ message(FATAL_ERROR "libADLMIDI is required to be built!")
+ endif()
+ add_dependencies(adlmidi_sdl2_demo ADLMIDI_static)
+endif()
+
+install(TARGETS adlmidi_sdl2_demo
+ RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}")
+
diff --git a/examples/sd2_audio/sdl2_sample.c b/examples/sdl2_audio/sdl2_sample.c
index b6307d7..b6307d7 100644
--- a/examples/sd2_audio/sdl2_sample.c
+++ b/examples/sdl2_audio/sdl2_sample.c
diff --git a/src/adlmidi_midiplay.cpp b/src/adlmidi_midiplay.cpp
index f96243e..207a300 100644
--- a/src/adlmidi_midiplay.cpp
+++ b/src/adlmidi_midiplay.cpp
@@ -105,7 +105,7 @@ inline bool isXgPercChannel(uint8_t msb, uint8_t lsb)
void MIDIplay::AdlChannel::addAge(int64_t us)
{
- const int64_t neg = 1000 * static_cast<int64_t>(-0x1FFFFFFFll);
+ const int64_t neg = 1000 * static_cast<int64_t>(-0x1FFFFFFFl);
if(users.empty())
{
koff_time_until_neglible_us = std::max(koff_time_until_neglible_us - us, neg);
diff --git a/src/chips/opl_chip_base.tcc b/src/chips/opl_chip_base.tcc
index a64aa7c..e6d3f6b 100644
--- a/src/chips/opl_chip_base.tcc
+++ b/src/chips/opl_chip_base.tcc
@@ -236,8 +236,8 @@ void OPLChipBaseT<T>::resampledGenerate(int32_t *output)
rsm->out_count = 1;
rsm->out_data = f_out;
}
- output[0] = static_cast<int32_t>(std::lround(f_out[0]));
- output[1] = static_cast<int32_t>(std::lround(f_out[1]));
+ output[0] = static_cast<int32_t>(lround(f_out[0]));
+ output[1] = static_cast<int32_t>(lround(f_out[1]));
}
#else
template <class T>
diff --git a/src/cvt_xmi2mid.hpp b/src/cvt_xmi2mid.hpp
index e8d9dbf..435de81 100644
--- a/src/cvt_xmi2mid.hpp
+++ b/src/cvt_xmi2mid.hpp
@@ -58,11 +58,21 @@ typedef unsigned long uint32_t;
#define XMI2MID_MIDI_STATUS_SYSEX 0xF
#if 1
-#define XMI2MID_TRACE(...)
+static int XMI2MID_TRACE(...) { return 0; }
#else
#include <stdio.h>
-#define XMI2MID_TRACE(fmt, ...) \
- fprintf(stderr, "XMI2MID: " fmt "\n", ## __VA_ARGS__)
+#include <stdarg.h>
+static int XMI2MID_TRACE(const char *fmt, int n, ...)
+{
+ int ret;
+ char ff[50] = "";
+ snprintf(ff, 49, "XMI2MID: %s\n", fmt);
+ va_list args;
+ va_start(args, n);
+ ret = vfprintf(stderr, const_cast<const char*>(ff), args);
+ va_end(args);
+ return ret;
+}
#endif
typedef struct _xmi2mid_midi_event {
diff --git a/utils/adlmidi-2/CMakeLists.txt b/utils/adlmidi-2/CMakeLists.txt
new file mode 100644
index 0000000..3f3327b
--- /dev/null
+++ b/utils/adlmidi-2/CMakeLists.txt
@@ -0,0 +1,97 @@
+cmake_minimum_required (VERSION 3.2)
+project(adlmidi2 CXX)
+
+set(CMAKE_CXX_STANDARD 11)
+
+find_package(OpenMP)
+
+set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
+
+if(NOT WIN32 AND NOT DJGPP AND NOT MSDOS)
+ find_library(SDL2_LIBRARY SDL2 REQUIRED)
+ include_directories(${SDL2_INCLUDE_DIR})
+ message("Found ${SDL2_LIBRARY}")
+endif()
+
+if(NOT WIN32 AND NOT DJGPP AND NOT MSDOS)
+ set(ADLMIDI2_HAS_PUZZLE_GAME "TRUE")
+ set(ADLMIDI2_VIDEO_OUT_SUPPORT "TRUE")
+endif()
+
+
+set(adlmidi2_src)
+list(APPEND adlmidi2_src
+ midiplay.cc
+ input.cc
+)
+
+if(ADLMIDI2_HAS_PUZZLE_GAME)
+ list(APPEND adlmidi2_src puzzlegame.cc)
+endif()
+
+add_executable(adlmidi2 ${adlmidi2_src})
+
+if(ADLMIDI2_HAS_PUZZLE_GAME)
+ target_compile_definitions(adlmidi2 PUBLIC "-DSUPPORT_PUZZLE_GAME")
+endif()
+
+if(ADLMIDI2_VIDEO_OUT_SUPPORT)
+ target_compile_definitions(adlmidi2 PUBLIC "-DSUPPORT_VIDEO_OUTPUT")
+endif()
+
+if(MSDOS OR DJGPP)
+ target_compile_definitions(adlmidi2 PUBLIC "-DHARDWARE_OPL3")
+ message("Turn on hardware OPL3 support on ADLMIDI2 tool")
+endif()
+
+if(WIN32)
+ target_link_libraries(adlmidi2 ADLMIDI_IF winmm)
+elseif(DJGPP OR MSDOS)
+ target_link_libraries(adlmidi2 ADLMIDI_IF)
+else()
+ set(ADLMIDI2_LIBS ADLMIDI_IF ${SDL2_LIBRARY} pthread dl m stdc++)
+ if(OPENBSD_LOCALBASE)
+ list(REMOVE_ITEM ADLMIDI2_LIBS dl)
+ endif()
+ target_link_libraries(adlmidi2 ${ADLMIDI2_LIBS})
+endif()
+
+if(NOT WITH_CPP_EXTRAS)
+ message(FATAL_ERROR "ADLMIDI2 Requires C++ Extras. Please enable WITH_CPP_EXTRAS option!")
+endif()
+
+if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR
+ "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR
+ "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel" OR
+ "${CMAKE_CXX_COMPILER_ID}" STREQUAL "MinGW" OR
+ CMAKE_COMPILER_IS_MINGW)
+ if(${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} VERSION_GREATER 3.2)
+ message("Turned on C++11 on GCC/CLang/Intel")
+ set_target_properties(adlmidi2 PROPERTIES
+ CXX_STANDARD 11
+ CXX_STANDARD_REQUIRED YES)
+ endif()
+ if(OPENMP_FOUND)
+ target_compile_options(adlmidi2 PUBLIC "-fopenmp")
+ target_link_libraries(adlmidi2 "-fopenmp")
+ endif()
+else(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
+ message("Turned on C++11 on MSVC")
+ target_compile_options(adlmidi2 PUBLIC "/std:c++latest")
+endif()
+
+if(libADLMIDI_SHARED)
+ add_dependencies(adlmidi2 ADLMIDI_shared)
+ if(NOT MSVC)
+ set_target_properties(adlmidi2 PROPERTIES COMPILE_FLAGS "-Wl,-rpath='$$ORIGIN/../lib'")
+ endif()
+else()
+ if(NOT libADLMIDI_STATIC)
+ message(FATAL_ERROR "libADLMIDI is required to be built!")
+ endif()
+ add_dependencies(adlmidi2 ADLMIDI_static)
+endif()
+
+install(TARGETS adlmidi2
+ RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}")
+
diff --git a/utils/dumpbank/CMakeLists.txt b/utils/dumpbank/CMakeLists.txt
new file mode 100644
index 0000000..d711a88
--- /dev/null
+++ b/utils/dumpbank/CMakeLists.txt
@@ -0,0 +1,10 @@
+cmake_minimum_required (VERSION 3.2)
+project(adldumpbank CXX)
+
+set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
+
+add_executable(adldumpbank dumpbank.cpp)
+
+install(TARGETS adldumpbank
+ RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}")
+
diff --git a/utils/dumpmiles/CMakeLists.txt b/utils/dumpmiles/CMakeLists.txt
new file mode 100644
index 0000000..399b417
--- /dev/null
+++ b/utils/dumpmiles/CMakeLists.txt
@@ -0,0 +1,10 @@
+cmake_minimum_required (VERSION 3.2)
+project(adldumpmiles CXX)
+
+set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
+
+add_executable(adldumpmiles dumpmiles.cpp)
+
+install(TARGETS adldumpmiles
+ RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}")
+
diff --git a/utils/gen_adldata/CMakeLists.txt b/utils/gen_adldata/CMakeLists.txt
new file mode 100644
index 0000000..63f255f
--- /dev/null
+++ b/utils/gen_adldata/CMakeLists.txt
@@ -0,0 +1,80 @@
+cmake_minimum_required (VERSION 3.2)
+project(gen_adldata CXX)
+
+set(CMAKE_CXX_STANDARD 11)
+
+find_package(OpenMP)
+
+set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
+
+set(GEN_ADLDATA_SRC)
+list(APPEND GEN_ADLDATA_SRC
+ gen_adldata.cc
+ progs_cache.cpp
+ measurer.cpp
+ ini/ini_processing.cpp
+)
+
+if(USE_DOSBOX_EMULATOR)
+ set(HAS_EMULATOR TRUE)
+ list(APPEND GEN_ADLDATA_SRC
+ ${libADLMIDI_SOURCE_DIR}/src/chips/dosbox_opl3.cpp
+ ${libADLMIDI_SOURCE_DIR}/src/chips/dosbox/dbopl.cpp
+ )
+else()
+ add_definitions(-DADLMIDI_DISABLE_DOSBOX_EMULATOR)
+endif()
+
+if(USE_NUKED_EMULATOR)
+ set(HAS_EMULATOR TRUE)
+ list(APPEND GEN_ADLDATA_SRC
+ ${libADLMIDI_SOURCE_DIR}/src/chips/nuked_opl3.cpp # v 1.8
+ ${libADLMIDI_SOURCE_DIR}/src/chips/nuked/nukedopl3.c
+ ${libADLMIDI_SOURCE_DIR}/src/chips/nuked_opl3_v174.cpp # v 1.7.4
+ ${libADLMIDI_SOURCE_DIR}/src/chips/nuked/nukedopl3_174.c
+ )
+else()
+ add_definitions(-DADLMIDI_DISABLE_NUKED_EMULATOR)
+endif()
+
+add_executable(gen_adldata
+ ${GEN_ADLDATA_SRC}
+)
+if(NOT MSVC)
+ target_link_libraries(gen_adldata pthread m stdc++)
+endif()
+if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR
+ "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR
+ "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel" OR
+ "${CMAKE_CXX_COMPILER_ID}" STREQUAL "MinGW" OR
+ CMAKE_COMPILER_IS_MINGW)
+ if(${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} VERSION_GREATER 3.2)
+ message("Turned on C++11 on GCC/CLang/Intel/MinGW")
+ set_target_properties(gen_adldata PROPERTIES
+ CXX_STANDARD 11
+ CXX_STANDARD_REQUIRED YES)
+ if(OPENMP_FOUND)
+ target_compile_options(gen_adldata PUBLIC "-fopenmp")
+ target_link_libraries(gen_adldata "-fopenmp")
+ endif()
+ endif()
+else(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
+ message("Turned on C++11 on MSVC")
+ target_compile_options(gen_adldata PUBLIC "/std:c++latest")
+endif()
+
+if(WITH_GENADLDATA_COMMENTS)
+ target_compile_options(gen_adldata PUBLIC "-DADLDATA_WITH_COMMENTS")
+endif()
+
+set(ADLDATA_DATABASE
+ "${libADLMIDI_SOURCE_DIR}/src/adldata.cpp"
+)
+add_custom_target(gen-adldata-run #OUTPUT ${ADLDATA_DATABASE}
+ COMMAND gen_adldata "${ADLDATA_DATABASE}"
+ WORKING_DIRECTORY ${libADLMIDI_SOURCE_DIR}
+ DEPENDS gen_adldata "${libADLMIDI_SOURCE_DIR}/banks.ini"
+ COMMENT "Running Embedded FM banks database generation"
+ VERBATIM
+)
+
diff --git a/utils/midiplay/CMakeLists.txt b/utils/midiplay/CMakeLists.txt
new file mode 100644
index 0000000..ac5d4c2
--- /dev/null
+++ b/utils/midiplay/CMakeLists.txt
@@ -0,0 +1,62 @@
+cmake_minimum_required (VERSION 3.2)
+project(adlmidiplay CXX)
+
+set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
+
+if(NOT MSDOS AND NOT DJGPP AND NOT MIDIPLAY_WAVE_ONLY)
+ find_library(SDL2_LIBRARY SDL2 REQUIRED)
+ include_directories(${SDL2_INCLUDE_DIR})
+ message("Found ${SDL2_LIBRARY}")
+else()
+ unset(SDL2_LIBRARY)
+endif()
+
+add_executable(adlmidiplay
+ adlmidiplay.cpp
+ wave_writer.c
+)
+
+if(MIDIPLAY_WAVE_ONLY)
+ target_compile_definitions(adlmidiplay PUBLIC "-DOUTPUT_WAVE_ONLY")
+ message("Demo tool will only output WAVE file, no playing support.")
+endif()
+
+if(MSDOS OR DJGPP)
+ target_compile_definitions(adlmidiplay PUBLIC "-DHARDWARE_OPL3")
+ message("Turn on hardware OPL3 support on demo tool")
+endif()
+
+if(WIN32)
+ if(MSVC)
+ target_link_libraries(adlmidiplay ADLMIDI_IF ${SDL2_LIBRARY})
+ else()
+ target_link_libraries(adlmidiplay ADLMIDI_IF ${SDL2_LIBRARY} pthread)
+ endif()
+else()
+ if(MSDOS OR DJGPP)
+ target_link_libraries(adlmidiplay ADLMIDI_IF)
+ else()
+ set(ADLMIDIPLAY_LIBS ADLMIDI_IF ${SDL2_LIBRARY} pthread dl m stdc++)
+ if(OPENBSD_LOCALBASE)
+ list(REMOVE_ITEM ADLMIDIPLAY_LIBS dl)
+ endif()
+ target_link_libraries(adlmidiplay ${ADLMIDIPLAY_LIBS})
+ endif()
+endif()
+
+if(MSDOS OR DJGPP)
+ set_target_properties(adlmidiplay PROPERTIES OUTPUT_NAME adlmidi)
+endif()
+
+if(libADLMIDI_SHARED)
+ add_dependencies(adlmidiplay ADLMIDI_shared)
+else()
+ if(NOT libADLMIDI_STATIC)
+ message(FATAL_ERROR "libADLMIDI is required to be built!")
+ endif()
+ add_dependencies(adlmidiplay ADLMIDI_static)
+endif()
+
+install(TARGETS adlmidiplay
+ RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}")
+
diff --git a/utils/vlc_codec/CMakeLists.txt b/utils/vlc_codec/CMakeLists.txt
new file mode 100644
index 0000000..66dac0b
--- /dev/null
+++ b/utils/vlc_codec/CMakeLists.txt
@@ -0,0 +1,41 @@
+cmake_minimum_required (VERSION 3.2)
+project(adlmidi_vlc_plugin C)
+
+include(../../cmake/FindLIBVLC.cmake)
+message("Found ${LIBVLCCORE_LIBRARY} of version ${LIBVLC_VERSION} with includes ${LIBVLC_INCLUDE_DIR}")
+
+set(adlmidi_vlc_src)
+list(APPEND adlmidi_vlc_src libadlmidi.c)
+
+add_library(adlmidi_vlc_plugin MODULE ${adlmidi_vlc_src})
+set_target_properties(adlmidi_vlc_plugin PROPERTIES OUTPUT_NAME adlmidi_plugin)
+target_compile_options(adlmidi_vlc_plugin PUBLIC
+ "-DVLC_MODULE_COPYRIGHT=\"Copyright \(c\) Vitaly Novichkov\""
+ "-DVLC_MODULE_LICENSE=\"GPLv3\""
+ "-DMODULE_STRING=\"adlmidi\""
+ ${VLCPLUGIN_DEFINITIONS})
+
+target_include_directories(adlmidi_vlc_plugin PRIVATE
+ ${LIBVLC_INCLUDE_DIR}/vlc/plugins
+ ${LIBVLC_INCLUDE_DIR}/vlc)
+
+set(ADLMIDIVLC_LIBS ADLMIDI_IF_STATIC ${LIBVLCCORE_LIBRARY} m)
+
+if(CMAKE_SYSTEM_NAME STREQUAL "Windows" AND CMAKE_COMPILER_IS_GNUCXX)
+ set_property(TARGET adlmidi_vlc_plugin APPEND_STRING PROPERTY LINK_FLAGS " -static-libgcc -static-libstdc++")
+ set_property(TARGET adlmidi_vlc_plugin APPEND_STRING PROPERTY LINK_FLAGS " -Wl,-Bstatic,--whole-archive -lpthread -Wl,-Bdynamic,--no-whole-archive")
+elseif(NOT WIN32)
+ list(APPEND ADLMIDIVLC_LIBS stdc++)
+endif()
+
+target_link_libraries(adlmidi_vlc_plugin ${ADLMIDIVLC_LIBS})
+# target_link_libraries(adlmidi_vlc_plugin INTERFACE "-export-symbol-regex ^vlc_entry")
+
+if(NOT VLC_PLUGIN_NOINSTALL)
+ install(TARGETS adlmidi_vlc_plugin DESTINATION "${VLCPLUGIN_CODEC_INSTALL_PATH}")
+else()
+ install(TARGETS adlmidi_vlc_plugin DESTINATION "${CMAKE_INSTALL_LIBDIR}/vlc-codec/")
+endif()
+
+add_dependencies(adlmidi_vlc_plugin ADLMIDI_static)
+
diff --git a/utils/xmi2mid/CMakeLists.txt b/utils/xmi2mid/CMakeLists.txt
new file mode 100644
index 0000000..9a6c478
--- /dev/null
+++ b/utils/xmi2mid/CMakeLists.txt
@@ -0,0 +1,10 @@
+cmake_minimum_required (VERSION 3.2)
+project(xmi2mid CXX)
+
+set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
+
+add_executable(xmi2mid xmi2mid.cpp)
+
+install(TARGETS xmi2mid
+ RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}")
+