.PHONY: all all: portaudio include UNAME = ${shell uname} ifeq (${UNAME},Linux) -include ~/.stem.defines STEM_SHARED_DIR ?= /usr/local/stem HOST_PLATFORM = linux else ifeq (${UNAME},Darwin) -include ~/.stem.defines STEM_SHARED_DIR ?= /usr/local/stem HOST_PLATFORM = macosx else STEM_SHARED_DIR ?= C:/stem -include ${STEM_SHARED_DIR}/stem.defines HOST_PLATFORM = windows endif TARGET_PLATFORMS_macosx = macosx TARGET_PLATFORMS_linux = linux32 linux64 TARGET_PLATFORMS_windows = win32 win64 PROJECT_NAME = portaudio PROJECT_VERSION = v190600_20161030 TARGET_NAME = libportaudio LIBRARY_PRISTINE_SUBDIR = pa_stable_v190600_20161030 LIBRARY_WORKING_SUBDIR = build/intermediate/${LIBRARY_PRISTINE_SUBDIR} PLATFORMS = ${filter ${TARGET_PLATFORMS_${HOST_PLATFORM}},macosx linux32 linux64 win32 win64} THIRDPARTY_LIBRARY_DEPENDENCIES = LINKFLAGS_macosx = -framework AudioUnit -framework AudioToolbox -framework CoreAudio LINKFLAGS_linux32 = -lasound LINKFLAGS_linux64 = -lasound CC_win32 = ${CC_win32_i386} CC_win64 = ${CC_win64_x86_64} CC_linux32 = gcc ARCHS_linux32 = i386 CCFLAGS_linux32 = -m32 CC_linux64 = gcc ARCHS_linux64 = x86_64 CCFLAGS_linux64 = -m64 INCLUDES = \ ${LIBRARY_WORKING_SUBDIR}/include/portaudio.h define library_template_macosx #(platform) build/intermediate/${TARGET_NAME}-$1/${TARGET_NAME}.a: cp "${LIBRARY_WORKING_SUBDIR}/configure" "${LIBRARY_WORKING_SUBDIR}/configure_original" ruby -e "print STDIN.read.gsub(/-arch ppc(64)?/, '')" < "${LIBRARY_WORKING_SUBDIR}/configure_original" > "${LIBRARY_WORKING_SUBDIR}/configure" cd ${LIBRARY_WORKING_SUBDIR}; \ ./configure && \ ${MAKE} mkdir -p $${dir $$@} cp ${LIBRARY_WORKING_SUBDIR}/lib/.libs/libportaudio.a $$@ cd ${LIBRARY_WORKING_SUBDIR}; \ ${MAKE} clean endef define library_template_windows #(platform) build/intermediate/${TARGET_NAME}-$1/${TARGET_NAME}.a: cd ${LIBRARY_WORKING_SUBDIR}; \ sh configure --disable-shared CC="${CC_$1}" AR="${AR_$1}" RANLIB="${RANLIB_$1}"; \ make mkdir -p $${dir $$@} cp ${LIBRARY_WORKING_SUBDIR}/lib/.libs/libportaudio.a $$@ cd ${LIBRARY_WORKING_SUBDIR}; \ make clean endef define library_template_linux #(platform) build/intermediate/${TARGET_NAME}-$1/${TARGET_NAME}.a: cd ${LIBRARY_WORKING_SUBDIR}; \ export CC="${CC_$1} ${CCFLAGS_$1}"; \ export LD="${CC_$1} ${CCFLAGS_$1}"; \ export CFLAGS="-fno-stack-protector"; \ ./configure --disable-shared && \ ${MAKE} mkdir -p $${dir $$@} cp ${LIBRARY_WORKING_SUBDIR}/lib/.libs/libportaudio.a $$@ cd ${LIBRARY_WORKING_SUBDIR}; \ ${MAKE} clean endef #Produces static library build targets for each arch/platform/target for library targets ${foreach platform,${PLATFORMS}, \ ${eval ${call library_template_${HOST_PLATFORM},${platform}}} \ } define assemble_library_macosx #(platform) build/${PROJECT_NAME}/$1/${TARGET_NAME}.a: build/intermediate/${TARGET_NAME}-$1/${TARGET_NAME}.a mkdir -p $${dir $$@} lipo -create -output $$@ $$^ endef define assemble_library_linux #(platform) build/${PROJECT_NAME}/$1/${TARGET_NAME}.a: build/intermediate/${TARGET_NAME}-$1/${TARGET_NAME}.a mkdir -p $${dir $$@} cp $$^ $$@ endef define assemble_library_windows #(platform) build/${PROJECT_NAME}/$1/${TARGET_NAME}.a: build/intermediate/${TARGET_NAME}-$1/${TARGET_NAME}.a mkdir -p $${dir $$@} cp $$^ $$@ endef #Produces final library build targets ${foreach platform,${PLATFORMS}, \ ${eval ${call assemble_library_${HOST_PLATFORM},${platform}}} \ } ${LIBRARY_WORKING_SUBDIR}: ${LIBRARY_PRISTINE_SUBDIR} mkdir -p ${dir $@} rm -rf $@ cp -r $^ $@ find $@ -name .svn -print0 | xargs -0 rm -rf .PHONY: ${PROJECT_NAME} ${PROJECT_NAME}: ${LIBRARY_WORKING_SUBDIR} ${foreach platform,${PLATFORMS},build/${PROJECT_NAME}/${platform}/${TARGET_NAME}.a} .PHONY: include include: ${PROJECT_NAME} mkdir -p build/include cp ${INCLUDES} build/include .PHONY: clean clean: rm -rf build INSTALL_DIR = ${STEM_SHARED_DIR}/${PROJECT_NAME}/${PROJECT_VERSION} .PHONY: install install: mkdir -p "${INSTALL_DIR}/include" "${INSTALL_DIR}/library" cp -r build/include/* ${INSTALL_DIR}/include cp -r build/${PROJECT_NAME}/* ${INSTALL_DIR}/library