From 9b51dd7d667e97338a92711543fc3e942faae52f Mon Sep 17 00:00:00 2001 From: Vitaly Novichkov Date: Mon, 21 Sep 2020 00:43:58 +0300 Subject: Added WinMM driver for windows (#236) * ADLMIDI2: Fixed an MSVC build However, it may work glitchy! * Experimental WinMM MIDI driver TODO: Make a control panel to configure the driver * WinMM-DRV: A workaround for older MinGW * WinMM-DRV: WIP control panel appled / tool * WinMM-DRV: Better test a driver's work * WinMM-DRV: More progress on a control panel * WinMM-DRV: And more progress on this control panel It's almost completed, I need to make the working setup through a registry. * WinMM-DRV: Driver is almost ready However, control panel can't ping a driver to reload settings yet * WinMM-DRV: Fix the missing volume model setup * WinMM-DRV: Setup reload on the fly now work! * WinMM-DRV: Stabilize the thing * WinMM-DRV: Stabilizing * WinMM-DRV: Avoid all "setup" in names to avoid a stupid PCA thing: https://stackoverflow.com/questions/17660404/how-to-programmatically-disable-program-compatibility-assistant-in-windows-7-and * A small warning fix at the WOPL module * WinMM-DRV: Fixed some warnings * WinMM-DRV: Avoid PCA dialog on the installer * WiNMM-DRV: Make the linking of pthread being optional Required to use MinGW-w64 toolchain with the "win32" threading mode * WinMM-DRV: Receive the MODM_RESET to reset the MIDI state * WinMM-DRV: Attempt to fix a sound distorsion on song song * WinMM-Drv: Fixed a build on some older MinGW toolchains * WinMM-Drv: Fixed default settings not being loaded --- utils/winmm_drv/CMakeLists.txt | 126 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 126 insertions(+) create mode 100644 utils/winmm_drv/CMakeLists.txt (limited to 'utils/winmm_drv/CMakeLists.txt') diff --git a/utils/winmm_drv/CMakeLists.txt b/utils/winmm_drv/CMakeLists.txt new file mode 100644 index 0000000..e65f281 --- /dev/null +++ b/utils/winmm_drv/CMakeLists.txt @@ -0,0 +1,126 @@ + +if(NOT WIN32) + message(FATAL_ERROR "WinDriver: This component is for Windows Platform only") +endif() + +option(WITH_WINMMDRV_PTHREADS "Link libwinpthreads statically (when using pthread-based builds)" ON) + +#==================================== +# Driver module +#==================================== + +set(ADLMIDI_DRIVER_SRC + src/winmm_drv.def + src/winmm_drv.cpp + src/MidiSynth.cpp + config/regconfig.c +) + +add_library(adlmididrv MODULE ${ADLMIDI_DRIVER_SRC}) +set_target_properties(adlmididrv PROPERTIES PREFIX "") +target_link_libraries(adlmididrv PRIVATE winmm ADLMIDI_static) +target_include_directories(adlmididrv PRIVATE config) +target_compile_definitions(adlmididrv PRIVATE + -D_USRDLL + -D_WINDLL + -DMM_WIN32DRV_EXPORTS + -DENABLE_REG_SERVER +) + +if(WIN32 AND CMAKE_COMPILER_IS_GNUCXX) + set_property(TARGET adlmididrv APPEND_STRING PROPERTY LINK_FLAGS " -static-libgcc -static-libstdc++ -Wl,--enable-stdcall-fixup") + if(WITH_WINMMDRV_PTHREADS) + set_property(TARGET adlmididrv APPEND_STRING PROPERTY LINK_FLAGS " -Wl,-Bstatic,--whole-archive -lpthread -Wl,-Bdynamic,--no-whole-archive") + endif() +endif() + +if(NOT MSVC) + target_compile_options(adlmididrv PRIVATE "-Wno-cast-function-type") +endif() + + + +#==================================== +# Install utility +#==================================== + +set(ADLMIDI_INSTALLER_SRC + installer/drvinst.c +) + +if(NOT MSVC) + list(APPEND ADLMIDI_INSTALLER_SRC + installer/drvinst.rc + ) +endif() + +add_executable(drvsetup ${ADLMIDI_INSTALLER_SRC}) + +target_compile_definitions(drvsetup PRIVATE + -D_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES=1 + -D_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT=1 + -D_CRT_SECURE_NO_WARNINGS +) + +if(WIN32 AND CMAKE_COMPILER_IS_GNUCXX) + set_property(TARGET drvsetup APPEND_STRING PROPERTY LINK_FLAGS " -static-libgcc") +endif() + + +#==================================== +# A unit test to verify the driver +#==================================== + +add_executable(drvtest test/test.c) +target_link_libraries(drvtest PRIVATE winmm) +target_compile_options(drvtest PRIVATE "-Wno-cast-function-type") + + +#==================================== +# Control panel applet +#==================================== + +set(ADLMIDI_DRIVER_SRC + cpl/adlconfig.def + cpl/adlconfig.rc + cpl/config_dialog.c + config/regconfig.c +) + +add_library(adlmidiconfig MODULE ${ADLMIDI_DRIVER_SRC} cpl/adlconfig.c) +set_target_properties(adlmidiconfig PROPERTIES PREFIX "" OUTPUT_NAME "libadlconfig" SUFFIX ".cpl") +target_include_directories(adlmidiconfig PRIVATE config) +target_compile_definitions(adlmidiconfig PRIVATE + -D_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES=1 + -D_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT=1 + -D_CRT_SECURE_NO_WARNINGS + -D_UNICODE + -DUNICODE + -DADL_IS_CPL_APPLET +) + +target_link_libraries(adlmidiconfig PRIVATE comctl32 gdi32 user32) + +add_executable(adlmidiconfigtool ${ADLMIDI_DRIVER_SRC} cpl/adlconfig-tool.c) +set_target_properties(adlmidiconfigtool PROPERTIES WIN32_EXECUTABLE ON) +target_include_directories(adlmidiconfigtool PRIVATE config) +target_compile_definitions(adlmidiconfigtool PRIVATE + -D_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES=1 + -D_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT=1 + -D_CRT_SECURE_NO_WARNINGS + -D_UNICODE + -DUNICODE +) + +target_link_libraries(adlmidiconfigtool PRIVATE comctl32 gdi32 user32) + +if(WIN32 AND CMAKE_COMPILER_IS_GNUCXX) + target_compile_options(adlmidiconfig PRIVATE "-Wno-cast-function-type") + target_compile_options(adlmidiconfigtool PRIVATE "-Wno-cast-function-type") + set_property(TARGET adlmidiconfig APPEND_STRING PROPERTY LINK_FLAGS " -static-libgcc -Wl,--enable-stdcall-fixup") + set_property(TARGET adlmidiconfigtool APPEND_STRING PROPERTY LINK_FLAGS " -static-libgcc -Wl,--enable-stdcall-fixup") +endif() + + +#install(TARGETS adlmididrv +# RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}") -- cgit v1.2.3