diff options
| author | Mitja Felicijan <mitja.felicijan@gmail.com> | 2024-10-07 06:50:04 +0200 |
|---|---|---|
| committer | Mitja Felicijan <mitja.felicijan@gmail.com> | 2024-10-07 06:50:04 +0200 |
| commit | 988f5d2b5343850e19ad1512cefe6c53953aa02e (patch) | |
| tree | 1ff29934294e73b2575488c06df91866ce251dbe /portmidi/CMakeLists.txt | |
| parent | 9b5839c58a2e1df8bddf6b98805998508ea417d5 (diff) | |
| download | ttdaw-988f5d2b5343850e19ad1512cefe6c53953aa02e.tar.gz | |
Added bunch of examples
Diffstat (limited to 'portmidi/CMakeLists.txt')
| -rw-r--r-- | portmidi/CMakeLists.txt | 188 |
1 files changed, 188 insertions, 0 deletions
diff --git a/portmidi/CMakeLists.txt b/portmidi/CMakeLists.txt new file mode 100644 index 0000000..0107e8c --- /dev/null +++ b/portmidi/CMakeLists.txt @@ -0,0 +1,188 @@ +# portmidi +# Roger B. Dannenberg (and others) +# Sep 2009 - 2021 + +cmake_minimum_required(VERSION 3.21) +# (ALSA::ALSA new in 3.12 and used in pm_common/CMakeLists.txt) +# Some Java stuff failed on 3.17 but works with 3.20+ + +cmake_policy(SET CMP0091 NEW) # enables MSVC_RUNTIME_LIBRARY target property + +# Previously, PortMidi versions were simply SVN commit version numbers. +# Versions are now in the form x.y.z +# Changed 1.0 to 2.0 because API is extended with virtual ports: +set(SOVERSION "2") +set(VERSION "2.0.4") + +project(portmidi VERSION "${VERSION}" + DESCRIPTION "Cross-Platform MIDI IO") + +set(LIBRARY_SOVERSION "${SOVERSION}") +set(LIBRARY_VERSION "${VERSION}") + +option(BUILD_SHARED_LIBS "Build shared libraries" ON) + +option(PM_USE_STATIC_RUNTIME + "Use MSVC static runtime. Only applies when BUILD_SHARED_LIBS is OFF" + ON) + +option(USE_SNDIO "Use sndio" OFF) + +# MSVCRT_DLL is used to construct the MSVC_RUNTIME_LIBRARY property +# (see pm_common/CMakeLists.txt and pm_test/CMakeLists.txt) +if(PM_USE_STATIC_RUNTIME AND NOT BUILD_SHARED_LIBS) + set(MSVCRT_DLL "") +else() + set(MSVCRT_DLL "DLL") +endif() + +# Always build with position-independent code (-fPIC) +set(CMAKE_POSITION_INDEPENDENT_CODE ON) + +set(CMAKE_OSX_DEPLOYMENT_TARGET 10.9 CACHE STRING + "make for this OS version or higher") + +# PM_ACTUAL_LIB_NAME is in this scope -- see pm_common/CMakeLists.txt +# PM_NEEDED_LIBS is in this scope -- see pm_common/CMakeLists.txt + +include(GNUInstallDirs) + +# Build Types +# credit: http://cliutils.gitlab.io/modern-cmake/chapters/features.html +set(DEFAULT_BUILD_TYPE "Release") +if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + message(STATUS + "Setting build type to '${DEFAULT_BUILD_TYPE}' as none was specified.") + set(CMAKE_BUILD_TYPE "${DEFAULT_BUILD_TYPE}" CACHE + STRING "Choose the type of build." FORCE) + # Set the possible values of build type for cmake-gui + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Release" "MinSizeRel" "RelWithDebInfo") +endif() + +# where to put libraries? Everything goes here in this directory +# (or Debug or Release, depending on the OS) +set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) +set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) + +option(BUILD_JAVA_NATIVE_INTERFACE + "build the Java PortMidi interface library" OFF) + +# Defines are used in both portmidi (in pm_common/) and pmjni (in pm_java), +# so define them here to be inherited by both libraries. +# +# PortMidi software architecture supports multiple system API's to lower- +# level MIDI drivers, e.g. PMNULL (no drivers), Jack (but not supported yet), +# and sndio (BSD, not supported yet). Interfaces are selected by defining, +# e.g., PMALSA. (In principle, we should require PMCOREMIDI (for macOS) +# and PMWINMM (for windows), but these are assumed. +# +if(APPLE OR WIN32) +else(APPLE_OR_WIN32) + set(LINUX_DEFINES "PMALSA" CACHE STRING "must define either PMALSA or PMNULL") + add_compile_definitions(${LINUX_DEFINES}) +endif(APPLE OR WIN32) + +if(BUILD_JAVA_NATIVE_INTERFACE) + message(WARNING + "Java API and PmDefaults program updated 2021, but support has " + "been discontinued. If you need/use this, let developers know.") + set(PMJNI_IF_EXISTS "pmjni") # used by INSTALL below +else(BUILD_JAVA_NATIVE_INTERFACE) + set(PMJNI_IF_EXISTS "") # used by INSTALL below +endif(BUILD_JAVA_NATIVE_INTERFACE) + + +# Something like this might help if you need to build for a specific cpu type: +# set(CMAKE_OSX_ARCHITECTURES x86_64 CACHE STRING +# "change to support other architectures" FORCE) + +include_directories(pm_common porttime) +add_subdirectory(pm_common) + +option(BUILD_PORTMIDI_TESTS + "Build test programs, including midi monitor (mm)" OFF) +if(BUILD_PORTMIDI_TESTS) + add_subdirectory(pm_test) +endif(BUILD_PORTMIDI_TESTS) + +# See note above about Java support (probably) discontinued +if(BUILD_JAVA_NATIVE_INTERFACE) + add_subdirectory(pm_java) +endif(BUILD_JAVA_NATIVE_INTERFACE) + +# Install the libraries and headers (Linux and Mac OS X command line) +INSTALL(TARGETS portmidi ${PMJNI_IF_EXISTS} + EXPORT PortMidiTargets + LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" + ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" + RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" + INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}") + +INSTALL(FILES + pm_common/portmidi.h + pm_common/pmutil.h + porttime/porttime.h + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) + +# pkgconfig - generate pc file +# See https://cmake.org/cmake/help/latest/command/configure_file.html +if(IS_ABSOLUTE "${CMAKE_INSTALL_INCLUDEDIR}") + set(PKGCONFIG_INCLUDEDIR "${CMAKE_INSTALL_INCLUDEDIR}") +else() + set(PKGCONFIG_INCLUDEDIR "\${prefix}/${CMAKE_INSTALL_INCLUDEDIR}") +endif() +if(IS_ABSOLUTE "${CMAKE_INSTALL_LIBDIR}") + set(PKGCONFIG_LIBDIR "${CMAKE_INSTALL_LIBDIR}") +else() + set(PKGCONFIG_LIBDIR "\${exec_prefix}/${CMAKE_INSTALL_LIBDIR}") +endif() +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/packaging/portmidi.pc.in + ${CMAKE_CURRENT_BINARY_DIR}/packaging/portmidi.pc @ONLY) +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/packaging/portmidi.pc + DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) + +# CMake config +set(PORTMIDI_INSTALL_CMAKEDIR "${CMAKE_INSTALL_LIBDIR}/cmake/PortMidi") +install( + EXPORT PortMidiTargets + FILE PortMidiTargets.cmake + NAMESPACE PortMidi:: + DESTINATION "${PORTMIDI_INSTALL_CMAKEDIR}" +) +include(CMakePackageConfigHelpers) +configure_package_config_file(packaging/PortMidiConfig.cmake.in + "${CMAKE_CURRENT_BINARY_DIR}/packaging/PortMidiConfig.cmake" + INSTALL_DESTINATION "${PORTMIDI_INSTALL_CMAKEDIR}" +) +write_basic_package_version_file( + "${CMAKE_CURRENT_BINARY_DIR}/packaging/PortMidiConfigVersion.cmake" + VERSION "${CMAKE_PROJECT_VERSION}" + COMPATIBILITY SameMajorVersion +) +install( + FILES + "${CMAKE_CURRENT_BINARY_DIR}/packaging/PortMidiConfig.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/packaging/PortMidiConfigVersion.cmake" + DESTINATION "${PORTMIDI_INSTALL_CMAKEDIR}" +) + + + + +# Finding out what CMake is doing is really hard, e.g. COMPILE_FLAGS +# does not include COMPILE_OPTIONS or COMPILE_DEFINTIONS. Thus, the +# following report is probably not complete... +MESSAGE(STATUS "PortMidi Library name: " ${PM_ACTUAL_LIB_NAME}) +MESSAGE(STATUS "Build type: " ${CMAKE_BUILD_TYPE}) +MESSAGE(STATUS "Library Type: " ${LIB_TYPE}) +MESSAGE(STATUS "Compiler flags: " ${CMAKE_CXX_COMPILE_FLAGS}) +get_directory_property(prop COMPILE_DEFINITIONS) +MESSAGE(STATUS "Compile definitions: " ${prop}) +get_directory_property(prop COMPILE_OPTIONS) +MESSAGE(STATUS "Compile options: " ${prop}) +MESSAGE(STATUS "Compiler cxx debug flags: " ${CMAKE_CXX_FLAGS_DEBUG}) +MESSAGE(STATUS "Compiler cxx release flags: " ${CMAKE_CXX_FLAGS_RELEASE}) +MESSAGE(STATUS "Compiler cxx min size flags: " ${CMAKE_CXX_FLAGS_MINSIZEREL}) +MESSAGE(STATUS "Compiler cxx flags: " ${CMAKE_CXX_FLAGS}) + |
