CMakeLists.txt (5536B)
1 # pm_dylib 2 3 # set the build directory for libraries to be in portmidi, not in 4 # portmidi/pm_dylib 5 if(APPLE OR WIN32) 6 # set the build directory for .dylib libraries 7 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}) 8 set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}) 9 # the "archive" output directory says where to put portmidi.lib, the 10 # static part of the lib/dll pair: 11 set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}) 12 13 # the first time CMake configures, save off CMake's built-in flags 14 if(NOT DEFAULT_DEBUG_FLAGS) 15 set(DEFAULT_DEBUG_FLAGS ${CMAKE_C_FLAGS_DEBUG} CACHE 16 STRING "CMake's default debug flags" FORCE) 17 set(DEFAULT_RELEASE_FLAGS ${CMAKE_C_FLAGS_RELEASE} CACHE 18 STRING "CMake's default release flags" FORCE) 19 else(NOT DEFAULT_DEBUG_FLAGS) 20 message(STATUS "DEFAULT_DEBUG_FLAGS not nil: " ${DEFAULT_DEBUG_FLAGS}) 21 endif(NOT DEFAULT_DEBUG_FLAGS) 22 else(APPLE OR WIN32) 23 set(LINUX_FLAGS "-DPMALSA") 24 endif(APPLE OR WIN32) 25 26 macro(prepend_path RESULT PATH) 27 set(${RESULT}) 28 foreach(FILE ${ARGN}) 29 list(APPEND ${RESULT} "${PATH}${FILE}") 30 endforeach(FILE) 31 endmacro(prepend_path) 32 33 set(CMAKE_C_FLAGS_DEBUG 34 "${DEFAULT_DEBUG_FLAGS} -DPM_CHECK_ERRORS=1 -DDEBUG ${LINUX_FLAGS}" 35 CACHE STRING "enable extra checks for debugging" FORCE) 36 37 set(CMAKE_C_FLAGS_RELEASE "${DEFAULT_RELEASE_FLAGS} ${LINUX_FLAGS}" 38 CACHE STRING "flags for release version" FORCE) 39 40 # first include the appropriate system-dependent file: 41 if(UNIX) 42 # add the -g switch for Linux and Mac OS X (not used in Win32) 43 set (CMAKE_C_FLAGS_DEBUG "-g ${CMAKE_C_FLAGS_DEBUG}" 44 CACHE STRING "enable extra checks for debugging" FORCE) 45 if(APPLE) 46 set(MACSRC pmmacosxcm pmmac readbinaryplist finddefault) 47 prepend_path(LIBSRC ../pm_mac/ ${MACSRC}) 48 list(APPEND LIBSRC ../porttime/ptmacosx_mach) 49 50 include_directories(${CMAKE_OSX_SYSROOT}/Developer/Headers/FlatCarbon) 51 set(FRAMEWORK_PATH ${CMAKE_OSX_SYSROOT}/System/Library/Frameworks) 52 set(COREAUDIO_LIB "${FRAMEWORK_PATH}/CoreAudio.framework") 53 set(COREFOUNDATION_LIB "${FRAMEWORK_PATH}/CoreFoundation.framework") 54 set(COREMIDI_LIB "${FRAMEWORK_PATH}/CoreMIDI.framework") 55 set(CORESERVICES_LIB "${FRAMEWORK_PATH}/CoreServices.framework") 56 set(PM_NEEDED_LIBS ${COREAUDIO_LIB} ${COREFOUNDATION_LIB} 57 ${COREMIDI_LIB} ${CORESERVICES_LIB} 58 CACHE INTERNAL "") 59 60 if(PMJAVA) 61 set(JAVAVM_LIB "${FRAMEWORK_PATH}/JavaVM.framework") 62 set(JAVA_INCLUDE_PATHS ${JAVAVM_LIB}/Headers) 63 set(INSTALL_NAME_DIR "/usr/local/lib") 64 message(STATUS "SYSROOT: " ${CMAKE_OSX_SYSROOT}) 65 endif() 66 else(APPLE) 67 # LINUX settings... 68 if(PMJAVA) 69 include(FindJNI) 70 # message(STATUS "JAVA_JVM_LIB_PATH is " ${JAVA_JVM_LIB_PATH}) 71 # message(STATUS "JAVA_INCLUDE_PATH is " ${JAVA_INCLUDE_PATH}) 72 # note: should use JAVA_JVM_LIB_PATH, but it is not set properly 73 # note: user might need to set JAVA_INCLUDE_PATH manually 74 # 75 # this will probably break on BSD and other Unix systems; the fix 76 # depends on whether FindJNI can find Java or not. If yes, then 77 # we should try to rely on automatically set JAVA_INCLUDE_PATH and 78 # JAVA_INCLUDE_PATH2; if no, then we need to make both JAVA_INCLUDE_PATH 79 # and JAVA_INCLUDE_PATH2 set by user (will need clear documentation 80 # because JAVA_INCLUDE_PATH2 is pretty obscure) 81 set(JAVA_INCLUDE_PATH ${JAVA_INCLUDE_PATH-UNKNOWN} 82 CACHE STRING "where to find Java SDK include directory") 83 set(JAVA_INCLUDE_PATHS ${JAVA_INCLUDE_PATH} ${JAVA_INCLUDE_PATH}/linux) 84 # libjvm.so is found relative to JAVA_INCLUDE_PATH: 85 set(JAVAVM_LIB ${JAVA_INCLUDE_PATH}/../jre/lib/i386/client/libjvm.so) 86 endif() 87 set(LINUXSRC pmlinuxalsa pmlinux finddefault) 88 prepend_path(LIBSRC ../pm_linux/ ${LINUXSRC}) 89 list(APPEND LIBSRC ../porttime/ptlinux) 90 91 if(NOT ANDROID) 92 set(PM_NEEDED_LIBS pthread asound) 93 endif() 94 endif(APPLE) 95 else(UNIX) 96 if(WIN32) 97 # /MDd is multithread debug DLL, /MTd is multithread debug 98 # /MD is multithread DLL, /MT is multithread 99 100 if(PMJAVA) 101 include(FindJNI) 102 # note: should use JAVA_JVM_LIB_PATH, but it is not set properly 103 set(JAVAVM_LIB ${JAVA_INCLUDE_PATH}/../lib/jvm.lib) 104 105 set(JAVA_INCLUDE_PATHS ${JAVA_INCLUDE_PATH} ${JAVA_INCLUDE_PATH2}) 106 # message(STATUS "JAVA_INCLUDE_PATHS: " ${JAVA_INCLUDE_PATHS}) 107 endif() 108 109 set(WINSRC pmwin pmwinmm) 110 prepend_path(LIBSRC ../pm_win/ ${WINSRC}) 111 list(APPEND LIBSRC ../porttime/ptwinmm) 112 set(PM_NEEDED_LIBS winmm.lib) 113 if(PMJAVA) 114 # message(STATUS "JAVAVM_LIB: " ${JAVAVM_LIB}) 115 endif() 116 endif(WIN32) 117 endif(UNIX) 118 if(PMJAVA) 119 set(JNI_EXTRA_LIBS ${PM_NEEDED_LIBS} ${JAVAVM_LIB}) 120 endif() 121 122 # this completes the list of library sources by adding shared code 123 set(SHARED_FILES pmutil portmidi) 124 prepend_path(SHARED_PATHS ../pm_common/ ${SHARED_FILES}) 125 list(APPEND LIBSRC ${SHARED_PATHS}) 126 127 add_library(portmidi-dynamic SHARED ${LIBSRC}) 128 set_target_properties(portmidi-dynamic PROPERTIES OUTPUT_NAME "portmidi") 129 target_link_libraries(portmidi-dynamic ${PM_NEEDED_LIBS}) 130 131 # install the libraries (Linux and Mac OS X command line) 132 if(UNIX) 133 INSTALL(TARGETS portmidi-dynamic 134 LIBRARY DESTINATION /usr/local/lib 135 ARCHIVE DESTINATION /usr/local/lib) 136 INSTALL(FILES ../pm_common/portmidi.h ../porttime/porttime.h 137 DESTINATION /usr/local/include) 138 endif(UNIX)