From 68c03edbb563983b6ac3e81a826871bfdf9e3bd4 Mon Sep 17 00:00:00 2001 From: Vitaly Novichkov Date: Thu, 13 Dec 2018 02:28:57 +0300 Subject: Build: Splid the main CMake build script Keep it have library code only but no utils and examples are will be built independently #196 --- .gitignore | 2 +- CMakeLists.txt | 367 ++++--------------------------------- examples/sd2_audio/sdl2_sample.c | 124 ------------- examples/sdl2_audio/CMakeLists.txt | 38 ++++ examples/sdl2_audio/sdl2_sample.c | 124 +++++++++++++ src/adlmidi_midiplay.cpp | 2 +- src/chips/opl_chip_base.tcc | 4 +- src/cvt_xmi2mid.hpp | 16 +- utils/adlmidi-2/CMakeLists.txt | 97 ++++++++++ utils/dumpbank/CMakeLists.txt | 10 + utils/dumpmiles/CMakeLists.txt | 10 + utils/gen_adldata/CMakeLists.txt | 80 ++++++++ utils/midiplay/CMakeLists.txt | 62 +++++++ utils/vlc_codec/CMakeLists.txt | 41 +++++ utils/xmi2mid/CMakeLists.txt | 10 + 15 files changed, 523 insertions(+), 464 deletions(-) delete mode 100644 examples/sd2_audio/sdl2_sample.c create mode 100644 examples/sdl2_audio/CMakeLists.txt create mode 100644 examples/sdl2_audio/sdl2_sample.c create mode 100644 utils/adlmidi-2/CMakeLists.txt create mode 100644 utils/dumpbank/CMakeLists.txt create mode 100644 utils/dumpmiles/CMakeLists.txt create mode 100644 utils/gen_adldata/CMakeLists.txt create mode 100644 utils/midiplay/CMakeLists.txt create mode 100644 utils/vlc_codec/CMakeLists.txt create mode 100644 utils/xmi2mid/CMakeLists.txt 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 - $<$:-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/sd2_audio/sdl2_sample.c b/examples/sd2_audio/sdl2_sample.c deleted file mode 100644 index b6307d7..0000000 --- a/examples/sd2_audio/sdl2_sample.c +++ /dev/null @@ -1,124 +0,0 @@ -#include -#include - -/* prototype for our audio callback */ -/* see the implementation for more information */ -void my_audio_callback(void *midi_player, Uint8 *stream, int len); - -/* variable declarations */ -static Uint32 is_playing = 0; /* remaining length of the sample we have to play */ -static short buffer[4096]; /* Audio buffer */ - - -int main(int argc, char *argv[]) -{ - /* local variables */ - static SDL_AudioSpec spec; /* the specs of our piece of music */ - static struct ADL_MIDIPlayer *midi_player = NULL; /* Instance of ADLMIDI player */ - static const char *music_path = NULL; /* Path to music file */ - - if (argc < 2) - { - fprintf(stderr, "\n" - "\n" - "No given files to play!\n" - "\n" - "Syntax: %s \n" - "\n", argv[0]); - return 2; - } - - music_path = argv[1]; - - /* Initialize SDL.*/ - if(SDL_Init(SDL_INIT_AUDIO) < 0) - return 1; - - spec.freq = 44100; - spec.format = AUDIO_S16SYS; - spec.channels = 2; - spec.samples = 2048; - - /* Initialize ADLMIDI */ - midi_player = adl_init(spec.freq); - if (!midi_player) - { - fprintf(stderr, "Couldn't initialize ADLMIDI: %s\n", adl_errorString()); - return 1; - } - - /* set the callback function */ - spec.callback = my_audio_callback; - /* set ADLMIDI's descriptor as userdata to use it for sound generation */ - spec.userdata = midi_player; - - /* Open the audio device */ - if (SDL_OpenAudio(&spec, NULL) < 0) - { - fprintf(stderr, "Couldn't open audio: %s\n", SDL_GetError()); - return 1; - } - - /* Optionally Setup ADLMIDI as you want */ - - /* Set using of embedded bank by ID */ - /*adl_setBank(midi_player, 68);*/ - - /* Set using of custom bank (WOPL format) loaded from a file */ - /*adl_openBankFile(midi_player, "/home/vitaly/Yandex.Disk/Музыка/Wolfinstein.wopl");*/ - - /* Open the MIDI (or MUS, IMF or CMF) file to play */ - if (adl_openFile(midi_player, music_path) < 0) - { - fprintf(stderr, "Couldn't open music file: %s\n", adl_errorInfo(midi_player)); - SDL_CloseAudio(); - adl_close(midi_player); - return 1; - } - - is_playing = 1; - /* Start playing */ - SDL_PauseAudio(0); - - printf("Playing... Hit Ctrl+C to quit!\n"); - - /* wait until we're don't playing */ - while (is_playing) - { - SDL_Delay(100); - } - - /* shut everything down */ - SDL_CloseAudio(); - adl_close(midi_player); - - return 0; -} - -/* - audio callback function - here you have to copy the data of your audio buffer into the - requesting audio buffer (stream) - you should only copy as much as the requested length (len) -*/ -void my_audio_callback(void *midi_player, Uint8 *stream, int len) -{ - struct ADL_MIDIPlayer* p = (struct ADL_MIDIPlayer*)midi_player; - - /* Convert bytes length into total count of samples in all channels */ - int samples_count = len / 2; - - /* Take some samples from the ADLMIDI */ - samples_count = adl_play(p, samples_count, (short*)buffer); - - if(samples_count <= 0) - { - is_playing = 0; - SDL_memset(stream, 0, len); - return; - } - - /* Send buffer to the audio device */ - SDL_memcpy(stream, (Uint8*)buffer, samples_count * 2); -} - 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/sdl2_audio/sdl2_sample.c b/examples/sdl2_audio/sdl2_sample.c new file mode 100644 index 0000000..b6307d7 --- /dev/null +++ b/examples/sdl2_audio/sdl2_sample.c @@ -0,0 +1,124 @@ +#include +#include + +/* prototype for our audio callback */ +/* see the implementation for more information */ +void my_audio_callback(void *midi_player, Uint8 *stream, int len); + +/* variable declarations */ +static Uint32 is_playing = 0; /* remaining length of the sample we have to play */ +static short buffer[4096]; /* Audio buffer */ + + +int main(int argc, char *argv[]) +{ + /* local variables */ + static SDL_AudioSpec spec; /* the specs of our piece of music */ + static struct ADL_MIDIPlayer *midi_player = NULL; /* Instance of ADLMIDI player */ + static const char *music_path = NULL; /* Path to music file */ + + if (argc < 2) + { + fprintf(stderr, "\n" + "\n" + "No given files to play!\n" + "\n" + "Syntax: %s \n" + "\n", argv[0]); + return 2; + } + + music_path = argv[1]; + + /* Initialize SDL.*/ + if(SDL_Init(SDL_INIT_AUDIO) < 0) + return 1; + + spec.freq = 44100; + spec.format = AUDIO_S16SYS; + spec.channels = 2; + spec.samples = 2048; + + /* Initialize ADLMIDI */ + midi_player = adl_init(spec.freq); + if (!midi_player) + { + fprintf(stderr, "Couldn't initialize ADLMIDI: %s\n", adl_errorString()); + return 1; + } + + /* set the callback function */ + spec.callback = my_audio_callback; + /* set ADLMIDI's descriptor as userdata to use it for sound generation */ + spec.userdata = midi_player; + + /* Open the audio device */ + if (SDL_OpenAudio(&spec, NULL) < 0) + { + fprintf(stderr, "Couldn't open audio: %s\n", SDL_GetError()); + return 1; + } + + /* Optionally Setup ADLMIDI as you want */ + + /* Set using of embedded bank by ID */ + /*adl_setBank(midi_player, 68);*/ + + /* Set using of custom bank (WOPL format) loaded from a file */ + /*adl_openBankFile(midi_player, "/home/vitaly/Yandex.Disk/Музыка/Wolfinstein.wopl");*/ + + /* Open the MIDI (or MUS, IMF or CMF) file to play */ + if (adl_openFile(midi_player, music_path) < 0) + { + fprintf(stderr, "Couldn't open music file: %s\n", adl_errorInfo(midi_player)); + SDL_CloseAudio(); + adl_close(midi_player); + return 1; + } + + is_playing = 1; + /* Start playing */ + SDL_PauseAudio(0); + + printf("Playing... Hit Ctrl+C to quit!\n"); + + /* wait until we're don't playing */ + while (is_playing) + { + SDL_Delay(100); + } + + /* shut everything down */ + SDL_CloseAudio(); + adl_close(midi_player); + + return 0; +} + +/* + audio callback function + here you have to copy the data of your audio buffer into the + requesting audio buffer (stream) + you should only copy as much as the requested length (len) +*/ +void my_audio_callback(void *midi_player, Uint8 *stream, int len) +{ + struct ADL_MIDIPlayer* p = (struct ADL_MIDIPlayer*)midi_player; + + /* Convert bytes length into total count of samples in all channels */ + int samples_count = len / 2; + + /* Take some samples from the ADLMIDI */ + samples_count = adl_play(p, samples_count, (short*)buffer); + + if(samples_count <= 0) + { + is_playing = 0; + SDL_memset(stream, 0, len); + return; + } + + /* Send buffer to the audio device */ + SDL_memcpy(stream, (Uint8*)buffer, samples_count * 2); +} + 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(-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 a64aa7c..e6d3f6b 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 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 -#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 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}") + -- cgit v1.2.3