aboutsummaryrefslogtreecommitdiff
path: root/utils/winmm_drv/CMakeLists.txt
diff options
context:
space:
mode:
authorVitaly Novichkov <Wohlstand@users.noreply.github.com>2020-09-21 00:43:58 +0300
committerGitHub <noreply@github.com>2020-09-21 00:43:58 +0300
commit9b51dd7d667e97338a92711543fc3e942faae52f (patch)
tree63539cbf427912686565dab81b3aa820346967b5 /utils/winmm_drv/CMakeLists.txt
parente082315b04cbc75b4cfce744e9274bb8c5cedd38 (diff)
downloadlibADLMIDI-9b51dd7d667e97338a92711543fc3e942faae52f.tar.gz
libADLMIDI-9b51dd7d667e97338a92711543fc3e942faae52f.tar.bz2
libADLMIDI-9b51dd7d667e97338a92711543fc3e942faae52f.zip
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
Diffstat (limited to 'utils/winmm_drv/CMakeLists.txt')
-rw-r--r--utils/winmm_drv/CMakeLists.txt126
1 files changed, 126 insertions, 0 deletions
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}")