diff --git a/.gitignore b/.gitignore index ece8b7c8..35f6cf7b 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 adc1054f..888893e7 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 - $<$:-Wall -pedantic -std=c90 -Wno-long-long> - $<$:-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 + $<$:-Wall -pedantic -std=c90 -Wno-long-long> + $<$:-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 00000000..6061b929 --- /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 similarity index 100% rename from examples/sd2_audio/sdl2_sample.c rename to examples/sdl2_audio/sdl2_sample.c diff --git a/src/adlmidi_midiplay.cpp b/src/adlmidi_midiplay.cpp index f96243e1..207a300c 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(-0x1FFFFFFFll); + const int64_t neg = 1000 * static_cast(-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 a64aa7c1..e6d3f6b1 100644 --- a/src/chips/opl_chip_base.tcc +++ b/src/chips/opl_chip_base.tcc @@ -236,8 +236,8 @@ void OPLChipBaseT::resampledGenerate(int32_t *output) rsm->out_count = 1; rsm->out_data = f_out; } - output[0] = static_cast(std::lround(f_out[0])); - output[1] = static_cast(std::lround(f_out[1])); + output[0] = static_cast(lround(f_out[0])); + output[1] = static_cast(lround(f_out[1])); } #else template diff --git a/src/cvt_xmi2mid.hpp b/src/cvt_xmi2mid.hpp index e8d9dbf7..435de81a 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 -#define XMI2MID_TRACE(fmt, ...) \ - fprintf(stderr, "XMI2MID: " fmt "\n", ## __VA_ARGS__) +#include +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(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 00000000..3f3327bc --- /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 00000000..d711a88d --- /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 00000000..399b4175 --- /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 00000000..63f255fa --- /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 00000000..ac5d4c2b --- /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 00000000..66dac0b9 --- /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 00000000..9a6c4781 --- /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}") +