diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..40ddc46 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,38 @@ +cmake_minimum_required(VERSION 2.8) +project(PLAYREC) + +set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake) + +#CMake 'debug' build does an optimized build? +#TODO: Q&D now -check for compiler, and move to a separate file +SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -O0 -g") +SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0 -g") + +IF(CMAKE_BUILD_TYPE MATCHES Debug) + message(STATUS "configuring DEBUG build...") + SET(CMAKE_BUILD_TYPE DEBUG) +ELSE(CMAKE_BUILD_TYPE MATCHES Debug) + message(STATUS "configuring RELEASE build...") + SET(CMAKE_BUILD_TYPE RELEASE) +ENDIF(CMAKE_BUILD_TYPE MATCHES Debug) + +#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") +#set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c11") + +if(PLAYREC_TARGET MATCHES Octave) + find_package(Octave REQUIRED) +else(PLAYREC_TARGET MATCHES Octave) + find_package(Matlab REQUIRED) +endif(PLAYREC_TARGET MATCHES Octave) +find_package(Portaudio REQUIRED) + +IF((MATLAB_FOUND AND PORTAUDIO_FOUND) OR (OCTAVE_FOUND AND PORTAUDIO_FOUND)) + set(CMAKE_INSTALL_PREFIX ${CMAKE_SOURCE_DIR}) + message(STATUS "All found, Playrec will be compiled.") + #FILE(GLOB matlab_stuff "*.m") + #INSTALL(FILES ${matlab_stuff} DESTINATION .) + add_subdirectory(src) + ELSE((MATLAB_FOUND AND PORTAUDIO_FOUND) OR (OCTAVE_FOUND AND PORTAUDIO_FOUND)) + MESSAGE("Nothing will be built.") +ENDIF((MATLAB_FOUND AND PORTAUDIO_FOUND) OR (OCTAVE_FOUND AND PORTAUDIO_FOUND)) + diff --git a/README.md b/README.md index 498b35e..02e5156 100644 --- a/README.md +++ b/README.md @@ -47,4 +47,114 @@ the need for reconfiguration. By using PortAudio to access the soundcard, Playrec should function on all platforms and with all host APIs that PortAudio supports. -To use this utility it must first be downloaded and compiled. +### Download and compilation with cmake +cmake based build will install playrec.mex to the top level of +playrec source directory. It can be moved from there to desired location. + +Clone the playrec repository from github +``` +% git clone git@github.com:hbe72/playrec.git +``` +####Compilation with system's installation of portaudio + +#####Ubuntu: +``` +% sudo apt-get install cmake +% sudo apt-get install portaudio19-dev +% export MATLAB_ROOT=/opt/MATLAB/R2015b +``` + +#####Mac: + Install homebrew install homebrew (see. brew.sh) +``` +% brew install cmake +% brew install portaudio +% export MATLAB_ROOT=/Applications/MATLAB_R2015b.app +``` + +#####Compile: +``` + +% cd playrec +% mkdir build; cd build +% cmake .. +% make +% make install +``` +#### Compilation from scratch from portaudio sources: +##### Ubuntu, Mac & MinGW +``` +% mkdir portaudio; cd portaudio +% ../playrec/compile_portaudio.sh [installation directory] +``` + +See further instructions from the end of compile_portaudio.sh for setting the +environment variables +``` +% export PKG_CONFIG_PATH=/lib/pkgconfig:$PKG_CONFIG_PATH +% export MATLAB_ROOT=/Applications/MATLAB_R2015b.app +% cd ../playrec +% mkdir build; cd build +% cmake .. +% make +% make install +``` +##### Windows with Visual Studio +Suggested directory structure for FindPortaudio.cmake +``` +--- portaudio --- portaudio + | | + | -- ASIOSDK2.3 + | | + | -- build + | -- lib + | -- bin + | -- include + -- playrec +``` +Thus download and uncompress portaudio and asiosdk accordingly from +http://www.portaudio.com/archives/pa_snapshot.tgz and http://www.steinberg.net/sdk_downloads/asiosdk2.3.zip + +Open "VS x64 Cross Tools Command Prompt" and browse to +portaudio subdirectory +###### Build portaudio +``` +> mkdir build +> cd build +> cmake -G "NMake Makefiles" -DCMAKE_INSTALL_PREFIX= -DCMAKE_BUILD_TYPE=Release ../portaudio +> nmake /f Makefile +> nmake /f Makefile install +``` +Thus installation is done to lib, bin and include subdirectories of +portaudio_install_dir. portaudio_install_dir has to be absolute path +to the portaudio subdirectory beside playrec subdirectory for +FindPortaudio.cmake to find it. + +###### Build playrec +Have MATLAB_ROOT environment variable point to Matlab installation directory +``` +> cd ../../playrec +> mkdir build +> cd build +> cmake -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=Release .. +> nmake /f Makefile +> nmake /f Makefile install +``` + +#### Test the installation + +On Matlab command prompt at playrec directory: +``` +>> playrec('about') +``` + +Clone playrec-examples from +``` +% git clone git@github.com:PlayrecForMatlab/playrec-examples.git +``` + +Add playrec to Matlab path and execute test_playrec.m from +playrec-examples directory +``` +>> test_playrec +``` diff --git a/cmake/FindMatlab.cmake b/cmake/FindMatlab.cmake new file mode 100644 index 0000000..119a9d4 --- /dev/null +++ b/cmake/FindMatlab.cmake @@ -0,0 +1,126 @@ +# Try to find Matlab +# This will define +# +# MATLAB_INCLUDE_DIRS: include path for mex.h +# MATLAB_LIBRARY_DIRS: include path for mex.h +# MATLAB_LIBRARIES: required libraries: libmex, libmx +# MATLAB_MEX_SUFFIX: mexw32, mexw64, mexmaci64, mexglx or mexa64 +if (MATLAB_LIBRARIES AND MATLAB_INCLUDE_DIRS AND MATLAB_MEX_SUFFIX) + # in cache already + set(MATLAB_FOUND TRUE) +else (MATLAB_LIBRARIES AND MATLAB_INCLUDE_DIRS AND MATLAB_MEX_SUFFIX) + if( "$ENV{MATLAB_ROOT}" STREQUAL "" ) + MESSAGE(STATUS "MATLAB_ROOT environment variable not set." ) + MESSAGE(STATUS "In Linux: export MATLAB_ROOT=/usr/local/MATLAB/R2014b" ) + MESSAGE(STATUS "In Mac OS X: export MATLAB_ROOT=/Applications/MATLAB_R2014b.app" ) + MESSAGE(STATUS "Windows: add system variable, e.g:" ) + MESSAGE(STATUS "MATLAB_ROOT=C:\\Program Files\\MATLAB\\R2014b" ) + else("$ENV{MATLAB_ROOT}" STREQUAL "" ) + message(STATUS "You say that matlab is in: $ENV{MATLAB_ROOT} ... let's see") + + find_path(MATLAB_INCLUDE_DIR + NAMES mex.h + PATHS + $ENV{MATLAB_ROOT}/extern/include + NO_DEFAULT_PATH) + set(MATLAB_INCLUDE_DIRS ${MATLAB_INCLUDE_DIR}) + + + if (WIN32 AND (NOT MINGW)) #Windows seems to have problems with find_library + find_path(MATLAB_LIBRARY_DIR + NAMES + libmex.lib + PATHS + $ENV{MATLAB_ROOT}/extern/lib/win64/microsoft + $ENV{MATLAB_ROOT}/extern/lib/win32/microsoft) + + set(MATLAB_LIBRARIES + libmx + libmex + libmat) + set(MATLAB_COMP_FLAGS_RELEASE "/O2 /Oy- /DNDEBUG /MD /DMX_COMPAT_32 /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0 /DMATLAB_MEX_FILE") + set(MATLAB_COMP_FLAGS_DEBUG "/Z7 /MD /DMX_COMPAT_32 /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0 /DMATLAB_MEX_FILE") + set(MATLAB_LINK_FLAGS_RELEASE "/nologo /manifest /EXPORT:mexFunction") + set(MATLAB_LINK_FLAGS_DEBUG "/debug /nologo /manifest /EXPORT:mexFunction") + else (WIN32 AND (NOT MINGW)) + find_path(MATLAB_LIBRARY_DIR + NAMES + libmex.lib libmex.dylib libmex.so libmex.dll + PATHS + $ENV{MATLAB_ROOT}/bin/glnxa64 + $ENV{MATLAB_ROOT}/bin/glnx86 + $ENV{MATLAB_ROOT}/bin/maci64 + $ENV{MATLAB_ROOT}/bin/win64 + $ENV{MATLAB_ROOT}/bin/win32) + set(MATLAB_LIBRARIES + mx + mex + mat) + set(MATLAB_COMP_FLAGS_RELEASE "-O3 -DMATLAB_MEX_FILE") + set(MATLAB_COMP_FLAGS_DEBUG "-O0 -g -DMATLAB_MEX_FILE") + set(MATLAB_LINK_FLAGS_DEBUG "-g") + endif (WIN32 AND (NOT MINGW)) + set(MATLAB_LIBRARY_DIRS ${MATLAB_LIBRARY_DIR}) + + if (CMAKE_BUILD_TYPE MATCHES RELEASE) + set(MATLAB_COMP_FLAGS ${MATLAB_COMP_FLAGS_RELEASE}) + set(MATLAB_LINK_FLAGS ${MATLAB_LINK_FLAGS_RELEASE}) + else (CMAKE_BUILD_TYPE MATCHES RELEASE) + set(MATLAB_COMP_FLAGS ${MATLAB_COMP_FLAGS_DEBUG}) + set(MATLAB_LINK_FLAGS ${MATLAB_LINK_FLAGS_DEBUG}) + endif (CMAKE_BUILD_TYPE MATCHES RELEASE) + + STRING(REGEX MATCH glnxa64 + MATLAB_ARCH_GLNXA64 ${MATLAB_LIBRARY_DIR}) + STRING(REGEX MATCH glnx86 + MATLAB_ARCH_GLNX86 ${MATLAB_LIBRARY_DIR}) + STRING(REGEX MATCH maci64 + MATLAB_ARCH_MACI64 ${MATLAB_LIBRARY_DIR}) + STRING(REGEX MATCH win64 + MATLAB_ARCH_WIN64 ${MATLAB_LIBRARY_DIR}) + STRING(REGEX MATCH win32 + MATLAB_ARCH_WIN32 ${MATLAB_LIBRARY_DIR}) + if (MATLAB_ARCH_GLNXA64) + set (MATLAB_MEX_SUFFIX ".mexa64") + endif (MATLAB_ARCH_GLNXA64) + if (MATLAB_ARCH_GLNX86) + set (MATLAB_MEX_SUFFIX ".mexglx") + endif (MATLAB_ARCH_GLNX86) + if (MATLAB_ARCH_MACI64) + set (MATLAB_MEX_SUFFIX ".mexmaci64") + endif (MATLAB_ARCH_MACI64) + if (MATLAB_ARCH_WIN64) + set (MATLAB_MEX_SUFFIX ".mexw64") + endif (MATLAB_ARCH_WIN64) + if (MATLAB_ARCH_WIN32) + set (MATLAB_MEX_SUFFIX ".mexw32") + endif (MATLAB_ARCH_WIN32) + + if (MATLAB_INCLUDE_DIRS AND MATLAB_LIBRARY_DIRS) + set(MATLAB_FOUND TRUE) + endif (MATLAB_INCLUDE_DIRS AND MATLAB_LIBRARY_DIRS) + + if (MATLAB_FOUND) + if (NOT Matlab_FIND_QUIETLY) + message(STATUS "Found Matlab libraries for building mex:") + message(STATUS " include dir: ${MATLAB_INCLUDE_DIRS}") + message(STATUS " library dir: ${MATLAB_LIBRARY_DIRS}") + message(STATUS " libraries: ${MATLAB_LIBRARIES}") + message(STATUS " mex suffix: ${MATLAB_MEX_SUFFIX}") + message(STATUS " comp flags: ${MATLAB_COMP_FLAGS}") + message(STATUS " link flags: ${MATLAB_LINK_FLAGS}") + endif (NOT Matlab_FIND_QUIETLY) + else (MATLAB_FOUND) + if (Matlab_FIND_REQUIRED) + message(FATAL_ERROR "Could not find Matlab, bailing out") + endif (Matlab_FIND_REQUIRED) + endif (MATLAB_FOUND) + mark_as_advanced( + MATLAB_LIBRARIES + MATLAB_MEX_SUFFIX + MATLAB_INCLUDE_DIRS + MATLAB_LIBRARY_DIRS + MATLAB_COMP_FLAGS + MATLAB_LINK_FLAGS) + endif("$ENV{MATLAB_ROOT}" STREQUAL "" ) +endif (MATLAB_LIBRARIES AND MATLAB_INCLUDE_DIRS AND MATLAB_MEX_SUFFIX) diff --git a/cmake/FindOctave.cmake b/cmake/FindOctave.cmake new file mode 100644 index 0000000..07dfe33 --- /dev/null +++ b/cmake/FindOctave.cmake @@ -0,0 +1,100 @@ +# Try to find Octave +# This will define +# +# OCTAVE_INCLUDE_DIRS: include path for mex.h +# OCTAVE_LIBRARY_DIRS: include path for mex.h +# OCTAVE_LIBRARIES: required libraries: libmex, libmx +# OCTAVE_MEX_SUFFIX: mexw32, mexw64, mexmaci64, mexglx or mexa64 +if (OCTAVE_LIBRARIES AND OCTAVE_INCLUDE_DIRS AND OCTAVE_MEX_SUFFIX) + # in cache already + set(OCTAVE_FOUND TRUE) +else (OCTAVE_LIBRARIES AND OCTAVE_INCLUDE_DIRS AND OCTAVE_MEX_SUFFIX) + if( "$ENV{OCTAVE_ROOT}" STREQUAL "" ) + MESSAGE(STATUS "OCTAVE_ROOT environment variable not set" ) + MESSAGE(STATUS "...Trying the usual paths" ) + endif("$ENV{OCTAVE_ROOT}" STREQUAL "" ) + + FILE(GLOB system-oct1 "/usr/local/include/octave-*") + FILE(GLOB system-oct2 "/usr/include/octave-*") + FILE(GLOB system-oct3 "$ENV{OCTAVE_ROOT}/include/octave-*") + FILE(GLOB system-oct1-lib "/usr/local/lib/octave/*") + FILE(GLOB system-oct2-lib "$ENV{OCTAVE_ROOT}/lib/octave/*") + + find_path(OCTAVE_INCLUDE_DIR + NAMES mex.h + PATHS + ${system-oct1}/octave + ${system-oct2}/octave + ${system-oct3}/octave) + set(OCTAVE_INCLUDE_DIRS ${OCTAVE_INCLUDE_DIR}) + + if (WIN32 AND (NOT MINGW)) #Windows seems to have problems with find_library + find_path(OCTAVE_LIBRARY_DIR + NAMES + liboctave.lib + PATHS + ${system-oct1-lib} + ${system-oct2-lib}) + + set(OCTAVE_LIBRARIES + liboctave + liboctinterp) + #set(OCTAVE_COMP_FLAGS_RELEASE "") + #set(OCTAVE_COMP_FLAGS_DEBUG "") + #set(OCTAVE_LINK_FLAGS_RELEASE "/EXPORT:mexFunction") + #set(OCTAVE_LINK_FLAGS_DEBUG "/debug /nologo /manifest /EXPORT:mexFunction") + else (WIN32 AND (NOT MINGW)) + find_path(OCTAVE_LIBRARY_DIR + NAMES + liboctave.lib liboctave.dylib liboctave.so liboctave.dll + PATHS + ${system-oct1-lib} + ${system-oct2-lib} + /usr/lib/x86_64-linux-gnu) + + set(OCTAVE_LIBRARIES + octave + octinterp) + set(OCTAVE_COMP_FLAGS_RELEASE "-O3 -D_THREAD_SAFE -pthread -D_REENTRANT -I.") + set(OCTAVE_COMP_FLAGS_DEBUG "-O0 -D_THREAD_SAFE -pthread -D_REENTRANT -I.") + set(OCTAVE_LINK_FLAGS_DEBUG "-g") + endif (WIN32 AND (NOT MINGW)) + set(OCTAVE_LIBRARY_DIRS ${OCTAVE_LIBRARY_DIR}) + + if (CMAKE_BUILD_TYPE MATCHES RELEASE) + set(OCTAVE_COMP_FLAGS ${OCTAVE_COMP_FLAGS_RELEASE}) + set(OCTAVE_LINK_FLAGS ${OCTAVE_LINK_FLAGS_RELEASE}) + else (CMAKE_BUILD_TYPE MATCHES RELEASE) + set(OCTAVE_COMP_FLAGS ${OCTAVE_COMP_FLAGS_DEBUG}) + set(OCTAVE_LINK_FLAGS ${OCTAVE_LINK_FLAGS_DEBUG}) + endif (CMAKE_BUILD_TYPE MATCHES RELEASE) + + set (OCTAVE_MEX_SUFFIX ".mex") + + if (OCTAVE_INCLUDE_DIRS AND OCTAVE_LIBRARY_DIRS) + set(OCTAVE_FOUND TRUE) + endif (OCTAVE_INCLUDE_DIRS AND OCTAVE_LIBRARY_DIRS) + + if (OCTAVE_FOUND) + if (NOT Octave_FIND_QUIETLY) + message(STATUS "Found Octave libraries for building mex:") + message(STATUS " include dir: ${OCTAVE_INCLUDE_DIRS}") + message(STATUS " library dir: ${OCTAVE_LIBRARY_DIRS}") + message(STATUS " libraries: ${OCTAVE_LIBRARIES}") + message(STATUS " mex suffix: ${OCTAVE_MEX_SUFFIX}") + message(STATUS " comp flags: ${OCTAVE_COMP_FLAGS}") + message(STATUS " link flags: ${OCTAVE_LINK_FLAGS}") + endif (NOT Octave_FIND_QUIETLY) + else (OCTAVE_FOUND) + if (Matlab_FIND_REQUIRED) + message(FATAL_ERROR "Could not find Octave, bailing out") + endif (Matlab_FIND_REQUIRED) + endif (OCTAVE_FOUND) + mark_as_advanced( + OCTAVE_LIBRARIES + OCTAVE_MEX_SUFFIX + OCTAVE_INCLUDE_DIRS + OCTAVE_LIBRARY_DIRS + OCTAVE_COMP_FLAGS + OCTAVE_LINK_FLAGS) +endif (OCTAVE_LIBRARIES AND OCTAVE_INCLUDE_DIRS AND OCTAVE_MEX_SUFFIX) diff --git a/cmake/FindPortaudio.cmake b/cmake/FindPortaudio.cmake new file mode 100644 index 0000000..5d38389 --- /dev/null +++ b/cmake/FindPortaudio.cmake @@ -0,0 +1,114 @@ +# - Try to find Portaudio +# Once done this will define +# +# PORTAUDIO_FOUND - system has Portaudio +# PORTAUDIO_INCLUDE_DIRS - the Portaudio include directory +# PORTAUDIO_LIBRARIES - Link these to use Portaudio +# PORTAUDIO_DEFINITIONS - Compiler switches required for using Portaudio +# PORTAUDIO_VERSION - Portaudio version +# +# Copyright (c) 2006 Andreas Schneider +# +# Redistribution and use is allowed according to the terms of the New BSD license. +# For details see the accompanying COPYING-CMAKE-SCRIPTS file. +# + + +if (PORTAUDIO_LIBRARIES AND PORTAUDIO_INCLUDE_DIRS) + # in cache already + set(PORTAUDIO_FOUND TRUE) +else (PORTAUDIO_LIBRARIES AND PORTAUDIO_INCLUDE_DIRS) + if ((NOT WIN32) OR MINGW) + include(FindPkgConfig) + pkg_check_modules(PORTAUDIO2 portaudio-2.0) + endif ((NOT WIN32) OR MINGW) + + if (PORTAUDIO2_FOUND) + set(PORTAUDIO_INCLUDE_DIRS + ${PORTAUDIO2_INCLUDE_DIRS} + ) + if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") + set(PORTAUDIO_LIBRARIES "${PORTAUDIO2_LIBRARY_DIRS}/lib${PORTAUDIO2_LIBRARIES}.dylib") + else (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") + set(PORTAUDIO_LIBRARIES + ${PORTAUDIO2_LIBRARIES} + ) + endif (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") + set(PORTAUDIO_VERSION + 19 + ) + set(PORTAUDIO_FOUND TRUE) + else (PORTAUDIO2_FOUND) + find_path(PORTAUDIO_INCLUDE_DIR + NAMES + portaudio.h + PATHS + ../portaudio/include + /usr/include + /usr/local/include + /opt/local/include + /sw/include + ) + + find_library(PORTAUDIO_LIBRARY + NAMES + portaudio + portaudio_static_x64 + portaudio_static_x86 + PATHS + ../portaudio/lib + /usr/lib + /usr/local/lib + /opt/local/lib + /sw/lib + ) + + find_path(PORTAUDIO_LIBRARY_DIR + NAMES + portaudio + portaudio_static_x64 + portaudio_static_x86 + PATHS + ../portaudio/lib + /usr/lib + /usr/local/lib + /opt/local/lib + /sw/lib + ) + + set(PORTAUDIO_INCLUDE_DIRS + ${PORTAUDIO_INCLUDE_DIR} + ) + set(PORTAUDIO_LIBRARIES + ${PORTAUDIO_LIBRARY} + ) + + set(PORTAUDIO_LIBRARY_DIRS + ${PORTAUDIO_LIBRARY_DIR} + ) + + set(PORTAUDIO_VERSION + 18 + ) + + if (PORTAUDIO_INCLUDE_DIRS AND PORTAUDIO_LIBRARIES) + set(PORTAUDIO_FOUND TRUE) + endif (PORTAUDIO_INCLUDE_DIRS AND PORTAUDIO_LIBRARIES) + + if (PORTAUDIO_FOUND) + if (NOT Portaudio_FIND_QUIETLY) + message(STATUS "Found Portaudio: ${PORTAUDIO_LIBRARIES}") + endif (NOT Portaudio_FIND_QUIETLY) + else (PORTAUDIO_FOUND) + if (Portaudio_FIND_REQUIRED) + message(FATAL_ERROR "Could not find Portaudio") + endif (Portaudio_FIND_REQUIRED) + endif (PORTAUDIO_FOUND) + endif (PORTAUDIO2_FOUND) + + + # show the PORTAUDIO_INCLUDE_DIRS and PORTAUDIO_LIBRARIES variables only in the advanced view + mark_as_advanced(PORTAUDIO_INCLUDE_DIRS PORTAUDIO_LIBRARIES) + +endif (PORTAUDIO_LIBRARIES AND PORTAUDIO_INCLUDE_DIRS) + diff --git a/compile_portaudio.sh b/compile_portaudio.sh new file mode 100755 index 0000000..1a97e3a --- /dev/null +++ b/compile_portaudio.sh @@ -0,0 +1,96 @@ +#!/bin/bash + +# Without any command line parameters, this should be executed +# in the directory you want to install portaudio. +# Usage: ./compile_portaudio.sh [installation directory] [--debug-build] +# +# If Matlab installation is 64-bit, please use 64-bit installation of +# MinGW tools such as TDM-GCC for compiling portaudio for playrec +# Creates following directory structure: +# current directory ----- portaudio +# | +# -- ASIOSDK2.3 +# | +# -- build +# Executes configure and make in build subdirectory. +# +# Without any parameters, installation is done to current directory +# to subdirectories include, lib. In addition in mingw dll will be in bin +# subdirectory + +TARGET_DIR=$1 + +if test "x$2" == "x--debug-build"; +then +export CFLAGS=-O0 +export CPPFLAGS=-O0 +export CXXFLAGS=-O0 +else +export CFLAGS=-O3 +export CPPFLAGS=-O3 +export CXXFLAGS=-O3 +fi + +portaudio_release_url=http://www.portaudio.com/archives +#portaudio_tgz=pa_stable_v19_20140130.tgz #Latest stable +portaudio_tgz=pa_snapshot.tgz #Latest snapshot +steinberg_asio_url=http://www.steinberg.net/sdk_downloads +steinberg_asio_zip=asiosdk2.3.zip + +function eexit { + echo $1 + exit 1 +} + +# Fetch portaudio release. +if ! test -f $portaudio_tgz; +then + wget $portaudio_release_url/$portaudio_tgz \ + || eexit "wget of portaudio failed" +fi + +if test -d portaudio; +then + rm -rf portaudio +fi +tar -xzf $portaudio_tgz \ +|| eexit "portaudio tar.gz extraction failed" + + +if ! test -f $steinberg_asio_zip; +then + wget $steinberg_asio_url/$steinberg_asio_zip \ + || eexit "wget of Steinberg ASIO SDK failed" +fi + +if test -d ASIOSDK2.3; +then + rm -rf ASIOSDK2.3 +fi +unzip $steinberg_asio_zip \ +|| eexit "Steinberg ASIO SDK extraction failed" + +if test "x$1" == "x" +then + install_prefix=$PWD +else + install_prefix=$1 +fi + +build_dir=build +mkdir -p $build_dir +cd $build_dir + +../portaudio/configure --prefix=$install_prefix +make -j8 || eexit "Building portaudio failed" +make install || eexit "Install of portaudio failed" + +# For compiling playrec in all platforms (Mac OS X, Linux, MinGW-MSYS) +# export PKG_CONFIG_PATH=$install_prefix/lib/pkgconfig:$PKG_CONFIG_PATH + +# You may need to set +# export LD_LIBRARY_PATH=$install_prefix/lib:$LD_LIBRARY_PATH in Linux +# export DYLD_LIBRARY_PATH=$install_prefix/lib:$DYLD_LIBRARY_PATH in Mac + +# And in Windows add $install_prefix/bin to the "PATH" Environment Variable + diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt new file mode 100644 index 0000000..6f3cb59 --- /dev/null +++ b/src/CMakeLists.txt @@ -0,0 +1,45 @@ +# compile mex +cmake_minimum_required(VERSION 2.8) + +set(PLAYREC_SOURCE_FILES + pa_dll_playrec.c + mex_dll_core.c + ) +set(PLAYREC_HEADER_FILES + pa_dll_playrec.h + mex_dll_core.h + ) + +if (PLAYREC_TARGET MATCHES Octave) + set(PLAYREC_INCLUDE_DIRS ${OCTAVE_INCLUDE_DIRS}) + set(PLAYREC_LIBRARY_DIRS ${OCTAVE_LIBRARY_DIRS}) + set(PLAYREC_LIBRARIES ${OCTAVE_LIBRARIES}) + set(PLAYREC_MEX_SUFFIX ${OCTAVE_MEX_SUFFIX}) + set(PLAYREC_COMP_FLAGS ${OCTAVE_COMP_FLAGS}) + set(PLAYREC_LINK_FLAGS ${OCTAVE_LINK_FLAGS}) +else (PLAYREC_TARGET MATCHES Octave) + set(PLAYREC_INCLUDE_DIRS ${MATLAB_INCLUDE_DIRS}) + set(PLAYREC_LIBRARY_DIRS ${MATLAB_LIBRARY_DIRS}) + set(PLAYREC_LIBRARIES ${MATLAB_LIBRARIES}) + set(PLAYREC_MEX_SUFFIX ${MATLAB_MEX_SUFFIX}) + set(PLAYREC_COMP_FLAGS ${MATLAB_COMP_FLAGS}) + set(PLAYREC_LINK_FLAGS ${MATLAB_LINK_FLAGS}) +endif (PLAYREC_TARGET MATCHES Octave) + +include_directories(${PLAYREC_INCLUDE_DIRS} ${PORTAUDIO_INCLUDE_DIRS}) +link_directories(${PLAYREC_LIBRARY_DIRS}) + +add_library(playrec SHARED ${PLAYREC_SOURCE_FILES}) +target_link_libraries(playrec ${PLAYREC_LIBRARIES} ${PORTAUDIO_LIBRARIES}) +set_target_properties(playrec PROPERTIES SUFFIX ${PLAYREC_MEX_SUFFIX} + PREFIX "") + +if (NOT ${PLAYREC_COMP_FLAGS} MATCHES "") + set_target_properties(playrec PROPERTIES COMP_FLAGS ${PLAYREC_COMP_FLAGS}) +endif (NOT ${PLAYREC_COMP_FLAGS} MATCHES "") +if (PLAYREC_LINK_FLAGS) + set_target_properties(playrec PROPERTIES LINK_FLAGS ${PLAYREC_LINK_FLAGS}) +endif (PLAYREC_LINK_FLAGS) + +install(TARGETS playrec DESTINATION .) +#INSTALL(FILES playrec.m DESTINATION .)