From a6efdae988b7cd39a8b815140078f6419f800ed3 Mon Sep 17 00:00:00 2001 From: moto <855818+mthrok@users.noreply.github.com> Date: Fri, 28 Aug 2020 18:45:40 +0000 Subject: [PATCH 01/29] Usae cmake for build --- .circleci/config.yml | 2 +- .circleci/config.yml.in | 2 +- .circleci/torchscript_bc_test/environment.yml | 3 +- CMakeLists.txt | 120 ++++++++++++ build_tools/setup_helpers/extension.py | 185 +++++++----------- packaging/build_wheel.sh | 2 +- packaging/torchaudio/meta.yaml | 3 +- run_build.sh | 30 +++ setup.py | 7 +- third_party/CMakeLists.txt | 128 +++++++++--- third_party/build_codec_helper.sh | 13 -- 11 files changed, 340 insertions(+), 155 deletions(-) create mode 100644 CMakeLists.txt create mode 100755 run_build.sh delete mode 100755 third_party/build_codec_helper.sh diff --git a/.circleci/config.yml b/.circleci/config.yml index f0ee6764b1..7fa2e8f0dc 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -43,7 +43,7 @@ commands: steps: - run: name: Install cmake and pkg-config - command: HOMEBREW_NO_AUTO_UPDATE=1 brew install cmake pkg-config wget + command: HOMEBREW_NO_AUTO_UPDATE=1 brew install pkg-config wget # Disable brew auto update which is very slow binary_common: &binary_common diff --git a/.circleci/config.yml.in b/.circleci/config.yml.in index bdbc3c774d..2023c48b23 100644 --- a/.circleci/config.yml.in +++ b/.circleci/config.yml.in @@ -43,7 +43,7 @@ commands: steps: - run: name: Install cmake and pkg-config - command: HOMEBREW_NO_AUTO_UPDATE=1 brew install cmake pkg-config wget + command: HOMEBREW_NO_AUTO_UPDATE=1 brew install pkg-config wget # Disable brew auto update which is very slow binary_common: &binary_common diff --git a/.circleci/torchscript_bc_test/environment.yml b/.circleci/torchscript_bc_test/environment.yml index 108d97d193..3d3e170db2 100644 --- a/.circleci/torchscript_bc_test/environment.yml +++ b/.circleci/torchscript_bc_test/environment.yml @@ -7,7 +7,8 @@ dependencies: - pytest - pytest-cov - codecov - - librosa + - cmake>=3.14 + - librosa>=0.8.0 - llvmlite==0.31 # See https://github.com/pytorch/audio/pull/766 - pip - pip: diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000000..57719d25f9 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,120 @@ +cmake_minimum_required(VERSION 3.14) + +project(torchaudio) + +option(BUILD_SOX "Build SoX and bind statically" OFF) +option(BUILD_LIBTORCHAUDIO "Build C++ Library" ON) +option(BUILD_PYTHON_EXTENSION "Build Python extension" OFF) + +set(CMAKE_CXX_STANDARD 14 CACHE STRING "The C++ standard whose features are requested to build this target.") + +find_package(Torch REQUIRED) +# TORCH_CXX_FLAGS contains proper _GLIBCXX_USE_CXX11_ABI +# We propagate it to CMAKE_CXX_FLAGS so that third party libraries are built +# with the same flag +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${TORCH_CXX_FLAGS}") + +add_subdirectory(third_party) + +################################################################################ +# Beggning of torchaudio extension configuration +################################################################################ + +set(TORCHAUDIO_CSRC "${CMAKE_CURRENT_SOURCE_DIR}/torchaudio/csrc") + +set( + LIBTORCHAUDIO_SOURCES + "${TORCHAUDIO_CSRC}/sox_io.cpp" + "${TORCHAUDIO_CSRC}/sox_utils.cpp" + "${TORCHAUDIO_CSRC}/sox_effects.cpp" + "${TORCHAUDIO_CSRC}/sox_effects_chain.cpp" + "${TORCHAUDIO_CSRC}/register.cpp" +) + +################################################################################ +# libtorchaudio.so +################################################################################ +if(BUILD_LIBTORCHAUDIO) +add_library( + libtorchaudio + SHARED + ${LIBTORCHAUDIO_SOURCES} +) + +set_target_properties(libtorchaudio PROPERTIES PREFIX "") + +target_include_directories( + libtorchaudio + PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR} +) + +target_link_libraries( + libtorchaudio + "${TORCHAUDIO_THIRD_PARTIES}" + "${TORCH_LIBRARIES}" +) + +install( + TARGETS + libtorchaudio + ) + +set(TORCHAUDIO_LIBRARY -Wl,--no-as-needed libtorchaudio -Wl,--as-needed CACHE INTERNAL "") + +endif() + +################################################################################ +# _torchaudio.so +################################################################################ +if (BUILD_PYTHON_EXTENSION) + + # Note: + # It seems that there is a bug in find_package and + # the resulting Python_LIBRARIES point a directory instead of the library + # file, and it causes the link step to fail. + # So, until find_package is fixed (and we change the cmake_minimum_required + # to that specific version), we request Python_LIBRARIES and Python_INCLUDE_DIRS + # to be manually specified. + # This is approach does not require extra step from a user, because we do so in + # setup.py + # find_package(Python REQUIRED COMPONENTS Development) + + if (NOT Python_LIBRARIES) + message(FATAL_ERROR "Python_LIBRARIES is not defined. Try with -DPython_LIBRARIES=...") + endif() + if (NOT Python_INCLUDE_DIRS) + message(FATAL_ERROR "Python_include_dirs is not defined. Try with -DPython_INCLUDE_DIR=...?") + endif() + + add_library( + _torchaudio + SHARED + ${TORCHAUDIO_CSRC}/sox.cpp + ${LIBTORCHAUDIO_SOURCES} + ) + + set_target_properties(_torchaudio PROPERTIES PREFIX "") + + target_include_directories( + _torchaudio + PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR} + ${Python_INCLUDE_DIRS} + ) + + # See https://github.com/pytorch/pytorch/issues/38122 + find_library(TORCH_PYTHON_LIBRARY torch_python PATHS "${TORCH_INSTALL_PREFIX}/lib") + + target_link_libraries( + _torchaudio + ${TORCHAUDIO_THIRD_PARTIES} + ${TORCH_LIBRARIES} + ${TORCH_PYTHON_LIBRARY} + ${Python_LIBRARIES} + ) + + # We do not define install for _torchaudio.so + # The location of installation is controlled by "CMAKE_LIBRARY_OUTPUT_DIRECTORY" and the + # resulting file is handled by setuptools. +endif() diff --git a/build_tools/setup_helpers/extension.py b/build_tools/setup_helpers/extension.py index b9fb30e114..a06b2166ab 100644 --- a/build_tools/setup_helpers/extension.py +++ b/build_tools/setup_helpers/extension.py @@ -1,23 +1,22 @@ import os +import sys +from sysconfig import get_config_var import platform import subprocess from pathlib import Path +from setuptools import Extension +from setuptools.command.build_ext import build_ext -from torch.utils.cpp_extension import ( - CppExtension, - BuildExtension as TorchBuildExtension -) +import torch __all__ = [ 'get_ext_modules', - 'BuildExtension', + 'CMakeBuild', ] _THIS_DIR = Path(__file__).parent.resolve() _ROOT_DIR = _THIS_DIR.parent.parent.resolve() -_CSRC_DIR = _ROOT_DIR / 'torchaudio' / 'csrc' -_TP_BASE_DIR = _ROOT_DIR / 'third_party' -_TP_INSTALL_DIR = _TP_BASE_DIR / 'install' +_TORCHAUDIO_DIR = _ROOT_DIR / 'torchaudio' def _get_build_sox(): @@ -33,108 +32,76 @@ def _get_build_sox(): return False -_BUILD_SOX = _get_build_sox() - - -def _get_eca(debug): - eca = [] - if debug: - eca += ["-O0", "-g"] - else: - eca += ["-O3"] - return eca - - -def _get_ela(debug): - ela = [] - if debug: - if platform.system() == "Windows": - ela += ["/DEBUG:FULL"] - else: - ela += ["-O0", "-g"] - else: - ela += ["-O3"] - return ela - - -def _get_srcs(): - return [str(p) for p in _CSRC_DIR.glob('**/*.cpp')] - - -def _get_include_dirs(): - dirs = [ - str(_ROOT_DIR), - ] - if _BUILD_SOX: - dirs.append(str(_TP_INSTALL_DIR / 'include')) - return dirs - - -def _get_extra_objects(): - objs = [] - if _BUILD_SOX: - # NOTE: The order of the library listed bellow matters. - # - # (the most important thing is that dependencies come after a library - # e.g., sox comes first, flac/vorbis comes before ogg, and - # vorbisenc/vorbisfile comes before vorbis - libs = [ - 'libsox.a', - 'libmad.a', - 'libFLAC.a', - 'libmp3lame.a', - 'libopusfile.a', - 'libopus.a', - 'libvorbisenc.a', - 'libvorbisfile.a', - 'libvorbis.a', - 'libogg.a', - ] - for lib in libs: - objs.append(str(_TP_INSTALL_DIR / 'lib' / lib)) - return objs - - -def _get_libraries(): - return [] if _BUILD_SOX else ['sox'] - - -def _build_third_party(): - build_dir = str(_TP_BASE_DIR / 'build') - os.makedirs(build_dir, exist_ok=True) - subprocess.run( - args=['cmake', '..'], - cwd=build_dir, - check=True, - ) - subprocess.run( - args=['cmake', '--build', '.'], - cwd=build_dir, - check=True, - ) - +def get_ext_modules(): + if platform.system() == 'Windows': + return None + return [Extension(name='torchaudio._torchaudio', sources=[])] -_EXT_NAME = 'torchaudio._torchaudio' +# Based off of +# https://github.com/pybind/cmake_example/blob/580c5fd29d4651db99d8874714b07c0c49a53f8a/setup.py +class CMakeBuild(build_ext): + def run(self): + try: + subprocess.check_output(['cmake', '--version']) + except OSError: + raise RuntimeError("CMake is not available.") + super().run() -def get_ext_modules(debug=False): - if platform.system() == 'Windows': - return None - return [ - CppExtension( - _EXT_NAME, - _get_srcs(), - libraries=_get_libraries(), - include_dirs=_get_include_dirs(), - extra_compile_args=_get_eca(debug), - extra_objects=_get_extra_objects(), - extra_link_args=_get_ela(debug), - ), - ] - - -class BuildExtension(TorchBuildExtension): def build_extension(self, ext): - if ext.name == _EXT_NAME and _BUILD_SOX: - _build_third_party() - super().build_extension(ext) + extdir = os.path.abspath( + os.path.dirname(self.get_ext_fullpath(ext.name))) + + # required for auto-detection of auxiliary "native" libs + if not extdir.endswith(os.path.sep): + extdir += os.path.sep + + cfg = "Debug" if self.debug else "Release" + + library_path = os.path.join(get_config_var('LIBDIR'), get_config_var('LDLIBRARY')) + cmake_args = [ + f"-DCMAKE_LIBRARY_OUTPUT_DIRECTORY={extdir}", + f"-DCMAKE_BUILD_TYPE={cfg}", + f"-DCMAKE_PREFIX_PATH={torch.utils.cmake_prefix_path}", + f"-DPython_LIBRARIES={library_path}", + f"-DPython_INCLUDE_DIRS={get_config_var('INCLUDEPY')}", + f"-DBUILD_SOX:BOOL={_get_build_sox()}", + "-DBUILD_PYTHON_EXTENSION:BOOL=ON", + "-DBUILD_LIBTORCHAUDIO:BOOL=OFF", + ] + build_args = [ + "--verbose", + ] + + if 'CMAKE_CXX_FLAGS' in os.environ: + cmake_args += [f"-DCMAKE_CXX_FLAGS={os.environ['CMAKE_CXX_FLAGS']}"] + + # Default to Ninja + if 'CMAKE_GENERATOR' not in os.environ: + cmake_args += ["-GNinja"] + + # Set CMAKE_BUILD_PARALLEL_LEVEL to control the parallel build level + # across all generators. + if "CMAKE_BUILD_PARALLEL_LEVEL" not in os.environ: + # self.parallel is a Python 3 only way to set parallel jobs by hand + # using -j in the build_ext call, not supported by pip or PyPA-build. + if hasattr(self, "parallel") and self.parallel: + # CMake 3.12+ only. + build_args += ["-j{}".format(self.parallel)] + + if not os.path.exists(self.build_temp): + os.makedirs(self.build_temp) + + subprocess.check_call( + ["cmake", str(_ROOT_DIR)] + cmake_args, cwd=self.build_temp + ) + subprocess.check_call( + ["cmake", "--build", "."] + build_args, cwd=self.build_temp + ) + + def get_ext_filename(self, fullname): + ext_filename = super().get_ext_filename(fullname) + ext_filename_parts = ext_filename.split('.') + without_abi = ext_filename_parts[:-2] + ext_filename_parts[-1:] + ext_filename = '.'.join(without_abi) + return ext_filename diff --git a/packaging/build_wheel.sh b/packaging/build_wheel.sh index ad45a08d59..cb9bddf808 100755 --- a/packaging/build_wheel.sh +++ b/packaging/build_wheel.sh @@ -8,7 +8,7 @@ export BUILD_TYPE="wheel" export NO_CUDA_PACKAGE=1 setup_env 0.8.0 setup_wheel_python -pip_install numpy future +pip_install numpy future cmake>=3.18 ninja setup_pip_pytorch_version python setup.py clean if [[ "$OSTYPE" == "msys" ]]; then diff --git a/packaging/torchaudio/meta.yaml b/packaging/torchaudio/meta.yaml index bd4f004a1b..b5b107c210 100644 --- a/packaging/torchaudio/meta.yaml +++ b/packaging/torchaudio/meta.yaml @@ -9,6 +9,8 @@ requirements: build: - {{ compiler('c') }} # [win] - {{ compiler('cxx') }} # [win] + - cmake >=3.18 + - ninja host: - python @@ -18,7 +20,6 @@ requirements: run: - python - - typing # [py2k] {{ environ.get('CONDA_PYTORCH_CONSTRAINT') }} build: diff --git a/run_build.sh b/run_build.sh new file mode 100755 index 0000000000..7559b9af89 --- /dev/null +++ b/run_build.sh @@ -0,0 +1,30 @@ +#!/usr/bin/env bash + +set -e + +this_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" +build_dir="${this_dir}/tmp" + +# rm -rf "${build_dir}" +mkdir -p "${build_dir}" + +( +cd "${build_dir}" +cmake -GNinja \ + -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON \ + -DCMAKE_PREFIX_PATH="$(python -c 'import torch;print(torch.utils.cmake_prefix_path)')" \ + _GLIBCXX_USE_CXX11_ABI=1 \ + -DBUILD_PYTHON_EXTENSION:BOOL=ON \ + -DBUILD_LIBTORCHAUDIO:BOOL=OFF \ + -DCMAKE_LIBRARY_OUTPUT_DIRECTORY:PATH="${this_dir}/torchaudio" \ + -DCMAKE_INSTALL_PREFIX:PATH="${this_dir}/torchaudio" \ + .. + +cmake --build . --target _torchaudio +) + +# BUILD_SOX=1 python setup.py clean develop +# cd "${this_dir}" +# rm -rf torchaudio/_torchaudio.so +# cp tmp/install/lib/_torchaudio.so torchaudio/ +python -c 'import torchaudio' diff --git a/setup.py b/setup.py index 4ced5fc8fd..6d210cf34e 100644 --- a/setup.py +++ b/setup.py @@ -80,11 +80,10 @@ def run(self): "Topic :: Multimedia :: Sound/Audio", "Topic :: Scientific/Engineering :: Artificial Intelligence" ], - packages=find_packages(exclude=["build*", "test*", "torchaudio.csrc*", "third_party*", "build_tools*"]), + packages=find_packages(exclude=["build*", "test*", "csrc*", "third_party*", "build_tools*"]), + package_data={'torchaudio': ['_torchaudio.so']}, ext_modules=setup_helpers.get_ext_modules(), - cmdclass={ - 'build_ext': setup_helpers.BuildExtension.with_options(no_python_abi_suffix=True) - }, + cmdclass={'build_ext': setup_helpers.CMakeBuild}, install_requires=[pytorch_package_dep], zip_safe=False, ) diff --git a/third_party/CMakeLists.txt b/third_party/CMakeLists.txt index da068be8f3..8cc392d12a 100644 --- a/third_party/CMakeLists.txt +++ b/third_party/CMakeLists.txt @@ -1,82 +1,162 @@ cmake_minimum_required(VERSION 3.1) -project(torchaudio_third_parties) +if (BUILD_SOX) + include(ExternalProject) set(INSTALL_DIR ${CMAKE_CURRENT_SOURCE_DIR}/install) set(ARCHIVE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/archives) set(COMMON_ARGS --quiet --disable-shared --enable-static --prefix=${INSTALL_DIR} --with-pic --disable-dependency-tracking --disable-debug --disable-examples --disable-doc) +set(envs "PKG_CONFIG_PATH=${INSTALL_DIR}/lib/pkgconfig" "LDFLAGS=-L${INSTALL_DIR}/lib $ENV{LDFLAGS}" "CPPFLAGS=-I${INSTALL_DIR}/include $ENV{CPPFLAGS}" "CXXFLAGS=${TORCH_CXX_FLAGS} $ENV{CXXFLAGS}") + -ExternalProject_Add(libmad +ExternalProject_Add(mad_ PREFIX ${CMAKE_CURRENT_SOURCE_DIR} DOWNLOAD_DIR ${ARCHIVE_DIR} URL https://downloads.sourceforge.net/project/mad/libmad/0.15.1b/libmad-0.15.1b.tar.gz URL_HASH SHA256=bbfac3ed6bfbc2823d3775ebb931087371e142bb0e9bb1bee51a76a6e0078690 PATCH_COMMAND patch < ${CMAKE_CURRENT_SOURCE_DIR}/patch/libmad.patch - CONFIGURE_COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/src/libmad/configure ${COMMON_ARGS} + CONFIGURE_COMMAND ${CMAKE_COMMAND} -E env ${envs} ${CMAKE_CURRENT_SOURCE_DIR}/src/mad_/configure ${COMMON_ARGS} + BUILD_BYPRODUCTS ${INSTALL_DIR}/lib/libmad.a ) -ExternalProject_Add(libmp3lame +add_library(mad INTERFACE) +add_dependencies(mad mad_) +target_link_libraries(mad INTERFACE ${INSTALL_DIR}/lib/libmad.a) +target_include_directories(mad INTERFACE ${INSTALL_DIR}/include) + +ExternalProject_Add(mp3lame_ PREFIX ${CMAKE_CURRENT_SOURCE_DIR} DOWNLOAD_DIR ${ARCHIVE_DIR} URL https://downloads.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz URL_HASH SHA256=24346b4158e4af3bd9f2e194bb23eb473c75fb7377011523353196b19b9a23ff - CONFIGURE_COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/src/libmp3lame/configure ${COMMON_ARGS} --enable-nasm + CONFIGURE_COMMAND ${CMAKE_COMMAND} -E env ${envs} ${CMAKE_CURRENT_SOURCE_DIR}/src/mp3lame_/configure ${COMMON_ARGS} --enable-nasm + BUILD_BYPRODUCTS ${INSTALL_DIR}/lib/libmp3lame.a ) -ExternalProject_Add(libogg +add_library(mp3lame INTERFACE) +add_dependencies(mp3lame mp3lame_) +target_link_libraries(mp3lame INTERFACE ${INSTALL_DIR}/lib/libmp3lame.a) +target_include_directories(mp3lame INTERFACE ${INSTALL_DIR}/include) + +ExternalProject_Add(ogg_ PREFIX ${CMAKE_CURRENT_SOURCE_DIR} DOWNLOAD_DIR ${ARCHIVE_DIR} URL https://ftp.osuosl.org/pub/xiph/releases/ogg/libogg-1.3.3.tar.gz URL_HASH SHA256=c2e8a485110b97550f453226ec644ebac6cb29d1caef2902c007edab4308d985 - CONFIGURE_COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/src/libogg/configure ${COMMON_ARGS} + CONFIGURE_COMMAND ${CMAKE_COMMAND} -E env ${envs} ${CMAKE_CURRENT_SOURCE_DIR}/src/ogg_/configure ${COMMON_ARGS} + BUILD_BYPRODUCTS ${INSTALL_DIR}/lib/libogg.a ) -ExternalProject_Add(libflac +add_library(ogg INTERFACE) +add_dependencies(ogg ogg_) +target_link_libraries(ogg INTERFACE ${INSTALL_DIR}/lib/libogg.a) +target_include_directories(ogg INTERFACE ${INSTALL_DIR}/include) + +ExternalProject_Add(flac_ PREFIX ${CMAKE_CURRENT_SOURCE_DIR} - DEPENDS libogg + DEPENDS ogg_ DOWNLOAD_DIR ${ARCHIVE_DIR} URL https://ftp.osuosl.org/pub/xiph/releases/flac/flac-1.3.2.tar.xz URL_HASH SHA256=91cfc3ed61dc40f47f050a109b08610667d73477af6ef36dcad31c31a4a8d53f - CONFIGURE_COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/build_codec_helper.sh ${CMAKE_CURRENT_SOURCE_DIR}/src/libflac/configure ${COMMON_ARGS} --with-ogg + CONFIGURE_COMMAND ${CMAKE_COMMAND} -E env ${envs} ${CMAKE_CURRENT_SOURCE_DIR}/src/flac_/configure ${COMMON_ARGS} --with-ogg + BUILD_BYPRODUCTS + ${INSTALL_DIR}/lib/libFLAC.a + ${INSTALL_DIR}/lib/libFLAC++.a +) + +add_library(flac INTERFACE) +add_dependencies(flac flac_) +target_link_libraries( + flac INTERFACE + ${INSTALL_DIR}/lib/libFLAC.a + ${INSTALL_DIR}/lib/libFLAC++.a ) +target_include_directories(flac INTERFACE ${INSTALL_DIR}/include) -ExternalProject_Add(libvorbis +ExternalProject_Add(vorbis_ PREFIX ${CMAKE_CURRENT_SOURCE_DIR} - DEPENDS libogg + DEPENDS ogg_ DOWNLOAD_DIR ${ARCHIVE_DIR} URL https://ftp.osuosl.org/pub/xiph/releases/vorbis/libvorbis-1.3.6.tar.gz URL_HASH SHA256=6ed40e0241089a42c48604dc00e362beee00036af2d8b3f46338031c9e0351cb - CONFIGURE_COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/build_codec_helper.sh ${CMAKE_CURRENT_SOURCE_DIR}/src/libvorbis/configure ${COMMON_ARGS} --with-ogg + CONFIGURE_COMMAND ${CMAKE_COMMAND} -E env ${envs} ${CMAKE_CURRENT_SOURCE_DIR}/src/vorbis_/configure ${COMMON_ARGS} --with-ogg + BUILD_BYPRODUCTS + ${INSTALL_DIR}/lib/libvorbisenc.a + ${INSTALL_DIR}/lib/libvorbisfile.a + ${INSTALL_DIR}/lib/libvorbis.a ) -ExternalProject_Add(libopus +add_library(vorbis INTERFACE) +add_dependencies(vorbis vorbis_) +target_link_libraries( + vorbis INTERFACE + ${INSTALL_DIR}/lib/libvorbisenc.a + ${INSTALL_DIR}/lib/libvorbisfile.a + ${INSTALL_DIR}/lib/libvorbis.a +) +target_include_directories(vorbis INTERFACE ${INSTALL_DIR}/include) + +ExternalProject_Add(opus_ PREFIX ${CMAKE_CURRENT_SOURCE_DIR} - DEPENDS libogg + DEPENDS ogg_ DOWNLOAD_DIR ${ARCHIVE_DIR} URL https://ftp.osuosl.org/pub/xiph/releases/opus/opus-1.3.1.tar.gz URL_HASH SHA256=65b58e1e25b2a114157014736a3d9dfeaad8d41be1c8179866f144a2fb44ff9d - CONFIGURE_COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/build_codec_helper.sh ${CMAKE_CURRENT_SOURCE_DIR}/src/libopus/configure ${COMMON_ARGS} --with-ogg + CONFIGURE_COMMAND ${CMAKE_COMMAND} -E env ${envs} ${CMAKE_CURRENT_SOURCE_DIR}/src/opus_/configure ${COMMON_ARGS} --with-ogg + BUILD_BYPRODUCTS ${INSTALL_DIR}/lib/libopus.a ) -ExternalProject_Add(opusfile +add_library(opus INTERFACE) +add_dependencies(opus opus_) +target_link_libraries(opus INTERFACE ${INSTALL_DIR}/lib/libopus.a) +target_include_directories(opus INTERFACE ${INSTALL_DIR}/include) + +ExternalProject_Add(opusfile_ PREFIX ${CMAKE_CURRENT_SOURCE_DIR} - DEPENDS libopus + DEPENDS opus_ DOWNLOAD_DIR ${ARCHIVE_DIR} STAMP_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src/opusfile-stamp SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src/opusfile URL https://ftp.osuosl.org/pub/xiph/releases/opus/opusfile-0.12.tar.gz URL_HASH SHA256=118d8601c12dd6a44f52423e68ca9083cc9f2bfe72da7a8c1acb22a80ae3550b - CONFIGURE_COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/build_codec_helper.sh ${CMAKE_CURRENT_SOURCE_DIR}/src/opusfile/configure ${COMMON_ARGS} --disable-http + CONFIGURE_COMMAND ${CMAKE_COMMAND} -E env ${envs} ${CMAKE_CURRENT_SOURCE_DIR}/src/opusfile/configure ${COMMON_ARGS} --disable-http + BUILD_BYPRODUCTS ${INSTALL_DIR}/lib/libopusfile.a ) -ExternalProject_Add(libsox +add_library(opusfile INTERFACE) +add_dependencies(opusfile opusfile_) +target_link_libraries(opusfile INTERFACE ${INSTALL_DIR}/lib/libopusfile.a) +target_include_directories(opusfile INTERFACE ${INSTALL_DIR}/include) + +ExternalProject_Add(sox_ PREFIX ${CMAKE_CURRENT_SOURCE_DIR} - DEPENDS libogg libflac libvorbis opusfile libmp3lame libmad + DEPENDS ogg_ flac_ vorbis_ opusfile_ mp3lame_ mad_ DOWNLOAD_DIR ${ARCHIVE_DIR} URL https://downloads.sourceforge.net/project/sox/sox/14.4.2/sox-14.4.2.tar.bz2 URL_HASH SHA256=81a6956d4330e75b5827316e44ae381e6f1e8928003c6aa45896da9041ea149c - # OpenMP is by default compiled against GNU OpenMP, which conflicts with the version of OpenMP that PyTorch uses. - # See https://github.com/pytorch/audio/pull/1026 - CONFIGURE_COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/build_codec_helper.sh ${CMAKE_CURRENT_SOURCE_DIR}/src/libsox/configure ${COMMON_ARGS} --with-lame --with-flac --with-mad --with-oggvorbis --without-alsa --without-coreaudio --without-png --without-oss --without-sndfile --with-opus --disable-openmp + CONFIGURE_COMMAND ${CMAKE_COMMAND} -E env ${envs} ${CMAKE_CURRENT_SOURCE_DIR}/src/sox_/configure ${COMMON_ARGS} --with-lame --with-flac --with-mad --with-oggvorbis --without-alsa --without-coreaudio --without-png --without-oss --without-sndfile --with-opus --disable-openmp + BUILD_BYPRODUCTS ${INSTALL_DIR}/lib/libsox.a ) + +add_library(sox INTERFACE) +add_dependencies(sox sox_) +target_link_libraries(sox INTERFACE ${INSTALL_DIR}/lib/libsox.a) +target_include_directories(sox INTERFACE ${INSTALL_DIR}/include) + +set( + TORCHAUDIO_THIRD_PARTIES + sox + mad + flac + mp3lame + opusfile + opus + vorbis + ogg + PARENT_SCOPE +) + +else() + set(TORCHAUDIO_THIRD_PARTIES sox) +endif() diff --git a/third_party/build_codec_helper.sh b/third_party/build_codec_helper.sh deleted file mode 100755 index e7f2614781..0000000000 --- a/third_party/build_codec_helper.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/env bash -# Helper script for building codecs depending on libogg, such as libopus and opus. -# It is difficult to set environment variable inside of ExternalProject_Add, -# so this script sets necessary environment variables before running the given command - -this_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" -install_dir="${this_dir}/install" - -export PKG_CONFIG_PATH="${install_dir}/lib/pkgconfig" -export LDFLAGS="-L${install_dir}/lib ${LDFLAGS}" -export CPPFLAGS="-I${install_dir}/include ${CPPFLAGS}" - -$@ From 0a18ac6a5ff15cf088e39d1ee65d453568d26f0d Mon Sep 17 00:00:00 2001 From: moto <855818+mthrok@users.noreply.github.com> Date: Mon, 30 Nov 2020 17:12:57 +0000 Subject: [PATCH 02/29] fixup! Usae cmake for build --- CMakeLists.txt | 43 +++++++++++++++++++++---------------------- 1 file changed, 21 insertions(+), 22 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 57719d25f9..cbc5e3b032 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -35,33 +35,32 @@ set( # libtorchaudio.so ################################################################################ if(BUILD_LIBTORCHAUDIO) -add_library( - libtorchaudio - SHARED - ${LIBTORCHAUDIO_SOURCES} -) - -set_target_properties(libtorchaudio PROPERTIES PREFIX "") + add_library( + libtorchaudio + SHARED + ${LIBTORCHAUDIO_SOURCES} + ) -target_include_directories( - libtorchaudio - PRIVATE - ${CMAKE_CURRENT_SOURCE_DIR} -) + set_target_properties(libtorchaudio PROPERTIES PREFIX "") -target_link_libraries( - libtorchaudio - "${TORCHAUDIO_THIRD_PARTIES}" - "${TORCH_LIBRARIES}" -) + target_include_directories( + libtorchaudio + PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR} + ) -install( - TARGETS - libtorchaudio - ) + target_link_libraries( + libtorchaudio + "${TORCHAUDIO_THIRD_PARTIES}" + "${TORCH_LIBRARIES}" + ) -set(TORCHAUDIO_LIBRARY -Wl,--no-as-needed libtorchaudio -Wl,--as-needed CACHE INTERNAL "") + install( + TARGETS + libtorchaudio + ) + set(TORCHAUDIO_LIBRARY -Wl,--no-as-needed libtorchaudio -Wl,--as-needed CACHE INTERNAL "") endif() ################################################################################ From d87c5e9cc08b878b9e287e01a349f060c18b3893 Mon Sep 17 00:00:00 2001 From: moto <855818+mthrok@users.noreply.github.com> Date: Mon, 30 Nov 2020 17:21:23 +0000 Subject: [PATCH 03/29] fixup! fixup! Usae cmake for build --- CMakeLists.txt | 10 ++++------ packaging/torchaudio/meta.yaml | 4 ++-- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index cbc5e3b032..9ff4dfd76c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -17,7 +17,7 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${TORCH_CXX_FLAGS}") add_subdirectory(third_party) ################################################################################ -# Beggning of torchaudio extension configuration +# Begining of torchaudio extension configuration ################################################################################ set(TORCHAUDIO_CSRC "${CMAKE_CURRENT_SOURCE_DIR}/torchaudio/csrc") @@ -29,7 +29,7 @@ set( "${TORCHAUDIO_CSRC}/sox_effects.cpp" "${TORCHAUDIO_CSRC}/sox_effects_chain.cpp" "${TORCHAUDIO_CSRC}/register.cpp" -) + ) ################################################################################ # libtorchaudio.so @@ -40,7 +40,6 @@ if(BUILD_LIBTORCHAUDIO) SHARED ${LIBTORCHAUDIO_SOURCES} ) - set_target_properties(libtorchaudio PROPERTIES PREFIX "") target_include_directories( @@ -67,15 +66,14 @@ endif() # _torchaudio.so ################################################################################ if (BUILD_PYTHON_EXTENSION) - # Note: - # It seems that there is a bug in find_package and + # It seems that there is a bug in find_package(Python COMPONENTS Development) and # the resulting Python_LIBRARIES point a directory instead of the library # file, and it causes the link step to fail. # So, until find_package is fixed (and we change the cmake_minimum_required # to that specific version), we request Python_LIBRARIES and Python_INCLUDE_DIRS # to be manually specified. - # This is approach does not require extra step from a user, because we do so in + # This approach does not require an extra step from a user, because we do so in # setup.py # find_package(Python REQUIRED COMPONENTS Development) diff --git a/packaging/torchaudio/meta.yaml b/packaging/torchaudio/meta.yaml index b5b107c210..ad12821d0e 100644 --- a/packaging/torchaudio/meta.yaml +++ b/packaging/torchaudio/meta.yaml @@ -9,13 +9,13 @@ requirements: build: - {{ compiler('c') }} # [win] - {{ compiler('cxx') }} # [win] - - cmake >=3.18 - - ninja host: - python - setuptools - cpuonly + - cmake + - ninja {{ environ.get('CONDA_PYTORCH_BUILD_CONSTRAINT') }} run: From 48a501b3fff4a8b8e04f15bc67523086fe7de55b Mon Sep 17 00:00:00 2001 From: moto <855818+mthrok@users.noreply.github.com> Date: Mon, 30 Nov 2020 17:30:41 +0000 Subject: [PATCH 04/29] fixup! fixup! fixup! Usae cmake for build --- third_party/CMakeLists.txt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/third_party/CMakeLists.txt b/third_party/CMakeLists.txt index 8cc392d12a..11acdc904a 100644 --- a/third_party/CMakeLists.txt +++ b/third_party/CMakeLists.txt @@ -158,5 +158,9 @@ set( ) else() - set(TORCHAUDIO_THIRD_PARTIES sox) + set( + TORCHAUDIO_THIRD_PARTIES + sox + PARENT_SCOPE + ) endif() From 564988d5f9873a9ff21aa32ec08722a92869a7c7 Mon Sep 17 00:00:00 2001 From: moto <855818+mthrok@users.noreply.github.com> Date: Mon, 30 Nov 2020 17:35:59 +0000 Subject: [PATCH 05/29] use findpython3 --- CMakeLists.txt | 10 +++++----- build_tools/setup_helpers/extension.py | 6 +++--- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9ff4dfd76c..3c58be329c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -75,12 +75,12 @@ if (BUILD_PYTHON_EXTENSION) # to be manually specified. # This approach does not require an extra step from a user, because we do so in # setup.py - # find_package(Python REQUIRED COMPONENTS Development) + find_package(Python3 REQUIRED COMPONENTS Development) - if (NOT Python_LIBRARIES) + if (NOT Python3_LIBRARIES) message(FATAL_ERROR "Python_LIBRARIES is not defined. Try with -DPython_LIBRARIES=...") endif() - if (NOT Python_INCLUDE_DIRS) + if (NOT Python3_INCLUDE_DIRS) message(FATAL_ERROR "Python_include_dirs is not defined. Try with -DPython_INCLUDE_DIR=...?") endif() @@ -97,7 +97,7 @@ if (BUILD_PYTHON_EXTENSION) _torchaudio PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} - ${Python_INCLUDE_DIRS} + ${Python3_INCLUDE_DIRS} ) # See https://github.com/pytorch/pytorch/issues/38122 @@ -108,7 +108,7 @@ if (BUILD_PYTHON_EXTENSION) ${TORCHAUDIO_THIRD_PARTIES} ${TORCH_LIBRARIES} ${TORCH_PYTHON_LIBRARY} - ${Python_LIBRARIES} + ${Python3_LIBRARIES} ) # We do not define install for _torchaudio.so diff --git a/build_tools/setup_helpers/extension.py b/build_tools/setup_helpers/extension.py index a06b2166ab..fbc1163397 100644 --- a/build_tools/setup_helpers/extension.py +++ b/build_tools/setup_helpers/extension.py @@ -58,13 +58,13 @@ def build_extension(self, ext): cfg = "Debug" if self.debug else "Release" - library_path = os.path.join(get_config_var('LIBDIR'), get_config_var('LDLIBRARY')) + # library_path = os.path.join(get_config_var('LIBDIR'), get_config_var('LDLIBRARY')) cmake_args = [ f"-DCMAKE_LIBRARY_OUTPUT_DIRECTORY={extdir}", f"-DCMAKE_BUILD_TYPE={cfg}", f"-DCMAKE_PREFIX_PATH={torch.utils.cmake_prefix_path}", - f"-DPython_LIBRARIES={library_path}", - f"-DPython_INCLUDE_DIRS={get_config_var('INCLUDEPY')}", + f"-DPython_LIBRARY={get_config_var('LIBDIR')}", + f"-DPython_INCLUDE_DIR={get_config_var('INCLUDEPY')}", f"-DBUILD_SOX:BOOL={_get_build_sox()}", "-DBUILD_PYTHON_EXTENSION:BOOL=ON", "-DBUILD_LIBTORCHAUDIO:BOOL=OFF", From 888c546b4a36a16759a6e8772b691e1b301cfb37 Mon Sep 17 00:00:00 2001 From: moto <855818+mthrok@users.noreply.github.com> Date: Mon, 30 Nov 2020 17:41:01 +0000 Subject: [PATCH 06/29] fixup! use findpython3 --- build_tools/setup_helpers/extension.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build_tools/setup_helpers/extension.py b/build_tools/setup_helpers/extension.py index fbc1163397..a313482e23 100644 --- a/build_tools/setup_helpers/extension.py +++ b/build_tools/setup_helpers/extension.py @@ -63,8 +63,8 @@ def build_extension(self, ext): f"-DCMAKE_LIBRARY_OUTPUT_DIRECTORY={extdir}", f"-DCMAKE_BUILD_TYPE={cfg}", f"-DCMAKE_PREFIX_PATH={torch.utils.cmake_prefix_path}", - f"-DPython_LIBRARY={get_config_var('LIBDIR')}", - f"-DPython_INCLUDE_DIR={get_config_var('INCLUDEPY')}", + f"-DPython3_LIBRARY={get_config_var('LIBDIR')}", + f"-DPython3_INCLUDE_DIR={get_config_var('INCLUDEPY')}", f"-DBUILD_SOX:BOOL={_get_build_sox()}", "-DBUILD_PYTHON_EXTENSION:BOOL=ON", "-DBUILD_LIBTORCHAUDIO:BOOL=OFF", From 1d3aed7befc04c69f5f37963abd70486d9176990 Mon Sep 17 00:00:00 2001 From: moto <855818+mthrok@users.noreply.github.com> Date: Mon, 30 Nov 2020 17:50:03 +0000 Subject: [PATCH 07/29] fixup! fixup! use findpython3 --- build_tools/setup_helpers/extension.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/build_tools/setup_helpers/extension.py b/build_tools/setup_helpers/extension.py index a313482e23..1e4c822a68 100644 --- a/build_tools/setup_helpers/extension.py +++ b/build_tools/setup_helpers/extension.py @@ -63,8 +63,9 @@ def build_extension(self, ext): f"-DCMAKE_LIBRARY_OUTPUT_DIRECTORY={extdir}", f"-DCMAKE_BUILD_TYPE={cfg}", f"-DCMAKE_PREFIX_PATH={torch.utils.cmake_prefix_path}", - f"-DPython3_LIBRARY={get_config_var('LIBDIR')}", - f"-DPython3_INCLUDE_DIR={get_config_var('INCLUDEPY')}", + f"-DPython3_EXECUTABLE={sys.executable}", + # f"-DPython3_LIBRARY={get_config_var('LIBDIR')}", + # f"-DPython3_INCLUDE_DIR={get_config_var('INCLUDEPY')}", f"-DBUILD_SOX:BOOL={_get_build_sox()}", "-DBUILD_PYTHON_EXTENSION:BOOL=ON", "-DBUILD_LIBTORCHAUDIO:BOOL=OFF", From f927516c1c3708b0659c680422e306a1f03fa05f Mon Sep 17 00:00:00 2001 From: moto <855818+mthrok@users.noreply.github.com> Date: Mon, 30 Nov 2020 18:25:26 +0000 Subject: [PATCH 08/29] fixup! fixup! fixup! use findpython3 --- .circleci/torchscript_bc_test/environment.yml | 2 +- .circleci/unittest/linux/scripts/setup_env.sh | 10 +--------- CMakeLists.txt | 4 ++-- packaging/torchaudio/meta.yaml | 2 +- 4 files changed, 5 insertions(+), 13 deletions(-) diff --git a/.circleci/torchscript_bc_test/environment.yml b/.circleci/torchscript_bc_test/environment.yml index 3d3e170db2..a4a73c6dbe 100644 --- a/.circleci/torchscript_bc_test/environment.yml +++ b/.circleci/torchscript_bc_test/environment.yml @@ -7,7 +7,7 @@ dependencies: - pytest - pytest-cov - codecov - - cmake>=3.14 + - cmake>=3.18 - librosa>=0.8.0 - llvmlite==0.31 # See https://github.com/pytorch/audio/pull/766 - pip diff --git a/.circleci/unittest/linux/scripts/setup_env.sh b/.circleci/unittest/linux/scripts/setup_env.sh index 26292a00d5..f243fddfe7 100755 --- a/.circleci/unittest/linux/scripts/setup_env.sh +++ b/.circleci/unittest/linux/scripts/setup_env.sh @@ -40,12 +40,4 @@ fi conda activate "${env_dir}" # 3. Install minimal build tools -pip --quiet install cmake ninja - -# 4. Buld codecs -mkdir -p third_party/build -( - cd third_party/build - cmake -GNinja .. - cmake --build . -) +pip --quiet install 'cmake>=3.18' ninja diff --git a/CMakeLists.txt b/CMakeLists.txt index 3c58be329c..ffbc31e102 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.14) +cmake_minimum_required(VERSION 3.18) project(torchaudio) @@ -75,7 +75,7 @@ if (BUILD_PYTHON_EXTENSION) # to be manually specified. # This approach does not require an extra step from a user, because we do so in # setup.py - find_package(Python3 REQUIRED COMPONENTS Development) + find_package(Python3 REQUIRED COMPONENTS Development.Module) if (NOT Python3_LIBRARIES) message(FATAL_ERROR "Python_LIBRARIES is not defined. Try with -DPython_LIBRARIES=...") diff --git a/packaging/torchaudio/meta.yaml b/packaging/torchaudio/meta.yaml index ad12821d0e..15c0d42e00 100644 --- a/packaging/torchaudio/meta.yaml +++ b/packaging/torchaudio/meta.yaml @@ -14,7 +14,7 @@ requirements: - python - setuptools - cpuonly - - cmake + - cmake >=3.18 - ninja {{ environ.get('CONDA_PYTORCH_BUILD_CONSTRAINT') }} From 3e80b0c4692813fe2f82d1e3bc318a9f705445f5 Mon Sep 17 00:00:00 2001 From: moto <855818+mthrok@users.noreply.github.com> Date: Mon, 30 Nov 2020 19:01:58 +0000 Subject: [PATCH 09/29] fixup! fixup! fixup! fixup! use findpython3 --- CMakeLists.txt | 34 ++++++++++++-------------- build_tools/setup_helpers/extension.py | 2 +- 2 files changed, 16 insertions(+), 20 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ffbc31e102..7784ea2725 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -66,23 +66,20 @@ endif() # _torchaudio.so ################################################################################ if (BUILD_PYTHON_EXTENSION) - # Note: - # It seems that there is a bug in find_package(Python COMPONENTS Development) and - # the resulting Python_LIBRARIES point a directory instead of the library - # file, and it causes the link step to fail. - # So, until find_package is fixed (and we change the cmake_minimum_required - # to that specific version), we request Python_LIBRARIES and Python_INCLUDE_DIRS - # to be manually specified. - # This approach does not require an extra step from a user, because we do so in - # setup.py - find_package(Python3 REQUIRED COMPONENTS Development.Module) - - if (NOT Python3_LIBRARIES) - message(FATAL_ERROR "Python_LIBRARIES is not defined. Try with -DPython_LIBRARIES=...") - endif() - if (NOT Python3_INCLUDE_DIRS) - message(FATAL_ERROR "Python_include_dirs is not defined. Try with -DPython_INCLUDE_DIR=...?") - endif() + + find_package(Python3 REQUIRED COMPONENTS Interpreter Development) + message(STATUS ${Python3_FOUND}) + message(STATUS ${Python3_EXECUTABLE}) + message(STATUS ${Python3_LIBRARY}) + message(STATUS ${Python3_INCLUDE_DIRS}) + message(STATUS Python3::Module) + + # if (NOT Python3_LIBRARIES) + # message(FATAL_ERROR "Python_LIBRARIES is not defined. Try with -DPython_LIBRARIES=...") + # endif() + # if (NOT Python3_INCLUDE_DIRS) + # message(FATAL_ERROR "Python_include_dirs is not defined. Try with -DPython_INCLUDE_DIR=...?") + # endif() add_library( _torchaudio @@ -97,7 +94,6 @@ if (BUILD_PYTHON_EXTENSION) _torchaudio PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} - ${Python3_INCLUDE_DIRS} ) # See https://github.com/pytorch/pytorch/issues/38122 @@ -108,7 +104,7 @@ if (BUILD_PYTHON_EXTENSION) ${TORCHAUDIO_THIRD_PARTIES} ${TORCH_LIBRARIES} ${TORCH_PYTHON_LIBRARY} - ${Python3_LIBRARIES} + Python3::Module ) # We do not define install for _torchaudio.so diff --git a/build_tools/setup_helpers/extension.py b/build_tools/setup_helpers/extension.py index 1e4c822a68..b7c8a8dfa4 100644 --- a/build_tools/setup_helpers/extension.py +++ b/build_tools/setup_helpers/extension.py @@ -63,7 +63,7 @@ def build_extension(self, ext): f"-DCMAKE_LIBRARY_OUTPUT_DIRECTORY={extdir}", f"-DCMAKE_BUILD_TYPE={cfg}", f"-DCMAKE_PREFIX_PATH={torch.utils.cmake_prefix_path}", - f"-DPython3_EXECUTABLE={sys.executable}", + # f"-DPython3_EXECUTABLE={sys.executable}", # f"-DPython3_LIBRARY={get_config_var('LIBDIR')}", # f"-DPython3_INCLUDE_DIR={get_config_var('INCLUDEPY')}", f"-DBUILD_SOX:BOOL={_get_build_sox()}", From dbfc8ea5e2acf5771dd9336373a72ff135df0309 Mon Sep 17 00:00:00 2001 From: moto <855818+mthrok@users.noreply.github.com> Date: Mon, 30 Nov 2020 19:06:56 +0000 Subject: [PATCH 10/29] fixup! fixup! fixup! fixup! fixup! use findpython3 --- build_tools/setup_helpers/extension.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/build_tools/setup_helpers/extension.py b/build_tools/setup_helpers/extension.py index b7c8a8dfa4..b6257d769f 100644 --- a/build_tools/setup_helpers/extension.py +++ b/build_tools/setup_helpers/extension.py @@ -63,9 +63,9 @@ def build_extension(self, ext): f"-DCMAKE_LIBRARY_OUTPUT_DIRECTORY={extdir}", f"-DCMAKE_BUILD_TYPE={cfg}", f"-DCMAKE_PREFIX_PATH={torch.utils.cmake_prefix_path}", - # f"-DPython3_EXECUTABLE={sys.executable}", - # f"-DPython3_LIBRARY={get_config_var('LIBDIR')}", - # f"-DPython3_INCLUDE_DIR={get_config_var('INCLUDEPY')}", + f"-DPython3_EXECUTABLE={sys.executable}", + f"-DPython3_LIBRARY={get_config_var('LIBDIR')}", + f"-DPython3_INCLUDE_DIR={get_config_var('INCLUDEPY')}", f"-DBUILD_SOX:BOOL={_get_build_sox()}", "-DBUILD_PYTHON_EXTENSION:BOOL=ON", "-DBUILD_LIBTORCHAUDIO:BOOL=OFF", From 1f30957a98c80f181d60fc46329c503854103197 Mon Sep 17 00:00:00 2001 From: moto <855818+mthrok@users.noreply.github.com> Date: Mon, 30 Nov 2020 19:14:53 +0000 Subject: [PATCH 11/29] fixup! fixup! fixup! fixup! fixup! fixup! use findpython3 --- CMakeLists.txt | 5 +++-- build_tools/setup_helpers/extension.py | 7 ++++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7784ea2725..e2d311b0ba 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -67,10 +67,11 @@ endif() ################################################################################ if (BUILD_PYTHON_EXTENSION) - find_package(Python3 REQUIRED COMPONENTS Interpreter Development) + cmake_policy(SET CMP0074 NEW) + find_package(Python3 REQUIRED COMPONENTS Interpreter Development.Module) message(STATUS ${Python3_FOUND}) message(STATUS ${Python3_EXECUTABLE}) - message(STATUS ${Python3_LIBRARY}) + message(STATUS ${Python3_LIBRARIES}) message(STATUS ${Python3_INCLUDE_DIRS}) message(STATUS Python3::Module) diff --git a/build_tools/setup_helpers/extension.py b/build_tools/setup_helpers/extension.py index b6257d769f..509cd7b78a 100644 --- a/build_tools/setup_helpers/extension.py +++ b/build_tools/setup_helpers/extension.py @@ -63,9 +63,10 @@ def build_extension(self, ext): f"-DCMAKE_LIBRARY_OUTPUT_DIRECTORY={extdir}", f"-DCMAKE_BUILD_TYPE={cfg}", f"-DCMAKE_PREFIX_PATH={torch.utils.cmake_prefix_path}", - f"-DPython3_EXECUTABLE={sys.executable}", - f"-DPython3_LIBRARY={get_config_var('LIBDIR')}", - f"-DPython3_INCLUDE_DIR={get_config_var('INCLUDEPY')}", + # f"-DPython3_EXECUTABLE={sys.executable}", + f"-DPython3_ROOT_DIR={os.path.join(sys.executable, '..', '..')}", + # f"-DPython3_LIBRARY={get_config_var('LIBDIR')}", + # f"-DPython3_INCLUDE_DIR={get_config_var('INCLUDEPY')}", f"-DBUILD_SOX:BOOL={_get_build_sox()}", "-DBUILD_PYTHON_EXTENSION:BOOL=ON", "-DBUILD_LIBTORCHAUDIO:BOOL=OFF", From 999cbaa8b40a2ee885b36ece0233e211b740ad8f Mon Sep 17 00:00:00 2001 From: moto <855818+mthrok@users.noreply.github.com> Date: Mon, 30 Nov 2020 19:29:50 +0000 Subject: [PATCH 12/29] fixup! fixup! fixup! fixup! fixup! fixup! fixup! use findpython3 --- .circleci/config.yml | 2 +- .circleci/config.yml.in | 2 +- .circleci/torchscript_bc_test/environment.yml | 2 +- .circleci/unittest/linux/scripts/setup_env.sh | 2 +- CMakeLists.txt | 2 +- packaging/build_wheel.sh | 2 +- packaging/torchaudio/meta.yaml | 2 +- run_build.sh | 30 -- setup.py | 3 +- third_party/CMakeLists.txt | 309 +++++++++--------- 10 files changed, 162 insertions(+), 194 deletions(-) delete mode 100755 run_build.sh diff --git a/.circleci/config.yml b/.circleci/config.yml index 7fa2e8f0dc..4e672c534c 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -42,7 +42,7 @@ commands: description: "installs tools required to build torchaudio" steps: - run: - name: Install cmake and pkg-config + name: Install pkg-config command: HOMEBREW_NO_AUTO_UPDATE=1 brew install pkg-config wget # Disable brew auto update which is very slow diff --git a/.circleci/config.yml.in b/.circleci/config.yml.in index 2023c48b23..842c546db2 100644 --- a/.circleci/config.yml.in +++ b/.circleci/config.yml.in @@ -42,7 +42,7 @@ commands: description: "installs tools required to build torchaudio" steps: - run: - name: Install cmake and pkg-config + name: Install pkg-config command: HOMEBREW_NO_AUTO_UPDATE=1 brew install pkg-config wget # Disable brew auto update which is very slow diff --git a/.circleci/torchscript_bc_test/environment.yml b/.circleci/torchscript_bc_test/environment.yml index a4a73c6dbe..3b8d239fd9 100644 --- a/.circleci/torchscript_bc_test/environment.yml +++ b/.circleci/torchscript_bc_test/environment.yml @@ -7,7 +7,7 @@ dependencies: - pytest - pytest-cov - codecov - - cmake>=3.18 + - cmake - librosa>=0.8.0 - llvmlite==0.31 # See https://github.com/pytorch/audio/pull/766 - pip diff --git a/.circleci/unittest/linux/scripts/setup_env.sh b/.circleci/unittest/linux/scripts/setup_env.sh index f243fddfe7..bc3c19a02f 100755 --- a/.circleci/unittest/linux/scripts/setup_env.sh +++ b/.circleci/unittest/linux/scripts/setup_env.sh @@ -40,4 +40,4 @@ fi conda activate "${env_dir}" # 3. Install minimal build tools -pip --quiet install 'cmake>=3.18' ninja +pip --quiet install cmake ninja diff --git a/CMakeLists.txt b/CMakeLists.txt index e2d311b0ba..f89fb77534 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.18) +cmake_minimum_required(VERSION 3.14) project(torchaudio) diff --git a/packaging/build_wheel.sh b/packaging/build_wheel.sh index cb9bddf808..738ab41322 100755 --- a/packaging/build_wheel.sh +++ b/packaging/build_wheel.sh @@ -8,7 +8,7 @@ export BUILD_TYPE="wheel" export NO_CUDA_PACKAGE=1 setup_env 0.8.0 setup_wheel_python -pip_install numpy future cmake>=3.18 ninja +pip_install numpy future cmake ninja setup_pip_pytorch_version python setup.py clean if [[ "$OSTYPE" == "msys" ]]; then diff --git a/packaging/torchaudio/meta.yaml b/packaging/torchaudio/meta.yaml index 15c0d42e00..ad12821d0e 100644 --- a/packaging/torchaudio/meta.yaml +++ b/packaging/torchaudio/meta.yaml @@ -14,7 +14,7 @@ requirements: - python - setuptools - cpuonly - - cmake >=3.18 + - cmake - ninja {{ environ.get('CONDA_PYTORCH_BUILD_CONSTRAINT') }} diff --git a/run_build.sh b/run_build.sh deleted file mode 100755 index 7559b9af89..0000000000 --- a/run_build.sh +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/env bash - -set -e - -this_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" -build_dir="${this_dir}/tmp" - -# rm -rf "${build_dir}" -mkdir -p "${build_dir}" - -( -cd "${build_dir}" -cmake -GNinja \ - -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON \ - -DCMAKE_PREFIX_PATH="$(python -c 'import torch;print(torch.utils.cmake_prefix_path)')" \ - _GLIBCXX_USE_CXX11_ABI=1 \ - -DBUILD_PYTHON_EXTENSION:BOOL=ON \ - -DBUILD_LIBTORCHAUDIO:BOOL=OFF \ - -DCMAKE_LIBRARY_OUTPUT_DIRECTORY:PATH="${this_dir}/torchaudio" \ - -DCMAKE_INSTALL_PREFIX:PATH="${this_dir}/torchaudio" \ - .. - -cmake --build . --target _torchaudio -) - -# BUILD_SOX=1 python setup.py clean develop -# cd "${this_dir}" -# rm -rf torchaudio/_torchaudio.so -# cp tmp/install/lib/_torchaudio.so torchaudio/ -python -c 'import torchaudio' diff --git a/setup.py b/setup.py index 6d210cf34e..3fa08aa241 100644 --- a/setup.py +++ b/setup.py @@ -80,8 +80,7 @@ def run(self): "Topic :: Multimedia :: Sound/Audio", "Topic :: Scientific/Engineering :: Artificial Intelligence" ], - packages=find_packages(exclude=["build*", "test*", "csrc*", "third_party*", "build_tools*"]), - package_data={'torchaudio': ['_torchaudio.so']}, + packages=find_packages(exclude=["build*", "test*", "torchaudio.csrc*", "third_party*", "build_tools*"]), ext_modules=setup_helpers.get_ext_modules(), cmdclass={'build_ext': setup_helpers.CMakeBuild}, install_requires=[pytorch_package_dep], diff --git a/third_party/CMakeLists.txt b/third_party/CMakeLists.txt index 11acdc904a..818e2b4bb8 100644 --- a/third_party/CMakeLists.txt +++ b/third_party/CMakeLists.txt @@ -1,162 +1,161 @@ -cmake_minimum_required(VERSION 3.1) +cmake_minimum_required(VERSION 3.14) if (BUILD_SOX) -include(ExternalProject) - -set(INSTALL_DIR ${CMAKE_CURRENT_SOURCE_DIR}/install) -set(ARCHIVE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/archives) -set(COMMON_ARGS --quiet --disable-shared --enable-static --prefix=${INSTALL_DIR} --with-pic --disable-dependency-tracking --disable-debug --disable-examples --disable-doc) -set(envs "PKG_CONFIG_PATH=${INSTALL_DIR}/lib/pkgconfig" "LDFLAGS=-L${INSTALL_DIR}/lib $ENV{LDFLAGS}" "CPPFLAGS=-I${INSTALL_DIR}/include $ENV{CPPFLAGS}" "CXXFLAGS=${TORCH_CXX_FLAGS} $ENV{CXXFLAGS}") - - -ExternalProject_Add(mad_ - PREFIX ${CMAKE_CURRENT_SOURCE_DIR} - DOWNLOAD_DIR ${ARCHIVE_DIR} - URL https://downloads.sourceforge.net/project/mad/libmad/0.15.1b/libmad-0.15.1b.tar.gz - URL_HASH SHA256=bbfac3ed6bfbc2823d3775ebb931087371e142bb0e9bb1bee51a76a6e0078690 - PATCH_COMMAND patch < ${CMAKE_CURRENT_SOURCE_DIR}/patch/libmad.patch - CONFIGURE_COMMAND ${CMAKE_COMMAND} -E env ${envs} ${CMAKE_CURRENT_SOURCE_DIR}/src/mad_/configure ${COMMON_ARGS} - BUILD_BYPRODUCTS ${INSTALL_DIR}/lib/libmad.a -) - -add_library(mad INTERFACE) -add_dependencies(mad mad_) -target_link_libraries(mad INTERFACE ${INSTALL_DIR}/lib/libmad.a) -target_include_directories(mad INTERFACE ${INSTALL_DIR}/include) - -ExternalProject_Add(mp3lame_ - PREFIX ${CMAKE_CURRENT_SOURCE_DIR} - DOWNLOAD_DIR ${ARCHIVE_DIR} - URL https://downloads.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz - URL_HASH SHA256=24346b4158e4af3bd9f2e194bb23eb473c75fb7377011523353196b19b9a23ff - CONFIGURE_COMMAND ${CMAKE_COMMAND} -E env ${envs} ${CMAKE_CURRENT_SOURCE_DIR}/src/mp3lame_/configure ${COMMON_ARGS} --enable-nasm - BUILD_BYPRODUCTS ${INSTALL_DIR}/lib/libmp3lame.a -) - -add_library(mp3lame INTERFACE) -add_dependencies(mp3lame mp3lame_) -target_link_libraries(mp3lame INTERFACE ${INSTALL_DIR}/lib/libmp3lame.a) -target_include_directories(mp3lame INTERFACE ${INSTALL_DIR}/include) - -ExternalProject_Add(ogg_ - PREFIX ${CMAKE_CURRENT_SOURCE_DIR} - DOWNLOAD_DIR ${ARCHIVE_DIR} - URL https://ftp.osuosl.org/pub/xiph/releases/ogg/libogg-1.3.3.tar.gz - URL_HASH SHA256=c2e8a485110b97550f453226ec644ebac6cb29d1caef2902c007edab4308d985 - CONFIGURE_COMMAND ${CMAKE_COMMAND} -E env ${envs} ${CMAKE_CURRENT_SOURCE_DIR}/src/ogg_/configure ${COMMON_ARGS} - BUILD_BYPRODUCTS ${INSTALL_DIR}/lib/libogg.a -) - -add_library(ogg INTERFACE) -add_dependencies(ogg ogg_) -target_link_libraries(ogg INTERFACE ${INSTALL_DIR}/lib/libogg.a) -target_include_directories(ogg INTERFACE ${INSTALL_DIR}/include) - -ExternalProject_Add(flac_ - PREFIX ${CMAKE_CURRENT_SOURCE_DIR} - DEPENDS ogg_ - DOWNLOAD_DIR ${ARCHIVE_DIR} - URL https://ftp.osuosl.org/pub/xiph/releases/flac/flac-1.3.2.tar.xz - URL_HASH SHA256=91cfc3ed61dc40f47f050a109b08610667d73477af6ef36dcad31c31a4a8d53f - CONFIGURE_COMMAND ${CMAKE_COMMAND} -E env ${envs} ${CMAKE_CURRENT_SOURCE_DIR}/src/flac_/configure ${COMMON_ARGS} --with-ogg - BUILD_BYPRODUCTS - ${INSTALL_DIR}/lib/libFLAC.a - ${INSTALL_DIR}/lib/libFLAC++.a -) - -add_library(flac INTERFACE) -add_dependencies(flac flac_) -target_link_libraries( - flac INTERFACE - ${INSTALL_DIR}/lib/libFLAC.a - ${INSTALL_DIR}/lib/libFLAC++.a -) -target_include_directories(flac INTERFACE ${INSTALL_DIR}/include) - -ExternalProject_Add(vorbis_ - PREFIX ${CMAKE_CURRENT_SOURCE_DIR} - DEPENDS ogg_ - DOWNLOAD_DIR ${ARCHIVE_DIR} - URL https://ftp.osuosl.org/pub/xiph/releases/vorbis/libvorbis-1.3.6.tar.gz - URL_HASH SHA256=6ed40e0241089a42c48604dc00e362beee00036af2d8b3f46338031c9e0351cb - CONFIGURE_COMMAND ${CMAKE_COMMAND} -E env ${envs} ${CMAKE_CURRENT_SOURCE_DIR}/src/vorbis_/configure ${COMMON_ARGS} --with-ogg - BUILD_BYPRODUCTS - ${INSTALL_DIR}/lib/libvorbisenc.a - ${INSTALL_DIR}/lib/libvorbisfile.a - ${INSTALL_DIR}/lib/libvorbis.a -) - -add_library(vorbis INTERFACE) -add_dependencies(vorbis vorbis_) -target_link_libraries( - vorbis INTERFACE - ${INSTALL_DIR}/lib/libvorbisenc.a - ${INSTALL_DIR}/lib/libvorbisfile.a - ${INSTALL_DIR}/lib/libvorbis.a -) -target_include_directories(vorbis INTERFACE ${INSTALL_DIR}/include) - -ExternalProject_Add(opus_ - PREFIX ${CMAKE_CURRENT_SOURCE_DIR} - DEPENDS ogg_ - DOWNLOAD_DIR ${ARCHIVE_DIR} - URL https://ftp.osuosl.org/pub/xiph/releases/opus/opus-1.3.1.tar.gz - URL_HASH SHA256=65b58e1e25b2a114157014736a3d9dfeaad8d41be1c8179866f144a2fb44ff9d - CONFIGURE_COMMAND ${CMAKE_COMMAND} -E env ${envs} ${CMAKE_CURRENT_SOURCE_DIR}/src/opus_/configure ${COMMON_ARGS} --with-ogg - BUILD_BYPRODUCTS ${INSTALL_DIR}/lib/libopus.a -) - -add_library(opus INTERFACE) -add_dependencies(opus opus_) -target_link_libraries(opus INTERFACE ${INSTALL_DIR}/lib/libopus.a) -target_include_directories(opus INTERFACE ${INSTALL_DIR}/include) - -ExternalProject_Add(opusfile_ - PREFIX ${CMAKE_CURRENT_SOURCE_DIR} - DEPENDS opus_ - DOWNLOAD_DIR ${ARCHIVE_DIR} - STAMP_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src/opusfile-stamp - SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src/opusfile - URL https://ftp.osuosl.org/pub/xiph/releases/opus/opusfile-0.12.tar.gz - URL_HASH SHA256=118d8601c12dd6a44f52423e68ca9083cc9f2bfe72da7a8c1acb22a80ae3550b - CONFIGURE_COMMAND ${CMAKE_COMMAND} -E env ${envs} ${CMAKE_CURRENT_SOURCE_DIR}/src/opusfile/configure ${COMMON_ARGS} --disable-http - BUILD_BYPRODUCTS ${INSTALL_DIR}/lib/libopusfile.a -) - -add_library(opusfile INTERFACE) -add_dependencies(opusfile opusfile_) -target_link_libraries(opusfile INTERFACE ${INSTALL_DIR}/lib/libopusfile.a) -target_include_directories(opusfile INTERFACE ${INSTALL_DIR}/include) - -ExternalProject_Add(sox_ - PREFIX ${CMAKE_CURRENT_SOURCE_DIR} - DEPENDS ogg_ flac_ vorbis_ opusfile_ mp3lame_ mad_ - DOWNLOAD_DIR ${ARCHIVE_DIR} - URL https://downloads.sourceforge.net/project/sox/sox/14.4.2/sox-14.4.2.tar.bz2 - URL_HASH SHA256=81a6956d4330e75b5827316e44ae381e6f1e8928003c6aa45896da9041ea149c - CONFIGURE_COMMAND ${CMAKE_COMMAND} -E env ${envs} ${CMAKE_CURRENT_SOURCE_DIR}/src/sox_/configure ${COMMON_ARGS} --with-lame --with-flac --with-mad --with-oggvorbis --without-alsa --without-coreaudio --without-png --without-oss --without-sndfile --with-opus --disable-openmp - BUILD_BYPRODUCTS ${INSTALL_DIR}/lib/libsox.a -) - -add_library(sox INTERFACE) -add_dependencies(sox sox_) -target_link_libraries(sox INTERFACE ${INSTALL_DIR}/lib/libsox.a) -target_include_directories(sox INTERFACE ${INSTALL_DIR}/include) - -set( - TORCHAUDIO_THIRD_PARTIES - sox - mad - flac - mp3lame - opusfile - opus - vorbis - ogg - PARENT_SCOPE -) + include(ExternalProject) + set(INSTALL_DIR ${CMAKE_CURRENT_SOURCE_DIR}/install) + set(ARCHIVE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/archives) + set(COMMON_ARGS --quiet --disable-shared --enable-static --prefix=${INSTALL_DIR} --with-pic --disable-dependency-tracking --disable-debug --disable-examples --disable-doc) + set(envs "PKG_CONFIG_PATH=${INSTALL_DIR}/lib/pkgconfig" "LDFLAGS=-L${INSTALL_DIR}/lib $ENV{LDFLAGS}" "CPPFLAGS=-I${INSTALL_DIR}/include $ENV{CPPFLAGS}" "CXXFLAGS=${TORCH_CXX_FLAGS} $ENV{CXXFLAGS}") + + + ExternalProject_Add(mad_ + PREFIX ${CMAKE_CURRENT_SOURCE_DIR} + DOWNLOAD_DIR ${ARCHIVE_DIR} + URL https://downloads.sourceforge.net/project/mad/libmad/0.15.1b/libmad-0.15.1b.tar.gz + URL_HASH SHA256=bbfac3ed6bfbc2823d3775ebb931087371e142bb0e9bb1bee51a76a6e0078690 + PATCH_COMMAND patch < ${CMAKE_CURRENT_SOURCE_DIR}/patch/libmad.patch + CONFIGURE_COMMAND ${CMAKE_COMMAND} -E env ${envs} ${CMAKE_CURRENT_SOURCE_DIR}/src/mad_/configure ${COMMON_ARGS} + BUILD_BYPRODUCTS ${INSTALL_DIR}/lib/libmad.a + ) + + add_library(mad INTERFACE) + add_dependencies(mad mad_) + target_link_libraries(mad INTERFACE ${INSTALL_DIR}/lib/libmad.a) + target_include_directories(mad INTERFACE ${INSTALL_DIR}/include) + + ExternalProject_Add(mp3lame_ + PREFIX ${CMAKE_CURRENT_SOURCE_DIR} + DOWNLOAD_DIR ${ARCHIVE_DIR} + URL https://downloads.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz + URL_HASH SHA256=24346b4158e4af3bd9f2e194bb23eb473c75fb7377011523353196b19b9a23ff + CONFIGURE_COMMAND ${CMAKE_COMMAND} -E env ${envs} ${CMAKE_CURRENT_SOURCE_DIR}/src/mp3lame_/configure ${COMMON_ARGS} --enable-nasm + BUILD_BYPRODUCTS ${INSTALL_DIR}/lib/libmp3lame.a + ) + + add_library(mp3lame INTERFACE) + add_dependencies(mp3lame mp3lame_) + target_link_libraries(mp3lame INTERFACE ${INSTALL_DIR}/lib/libmp3lame.a) + target_include_directories(mp3lame INTERFACE ${INSTALL_DIR}/include) + + ExternalProject_Add(ogg_ + PREFIX ${CMAKE_CURRENT_SOURCE_DIR} + DOWNLOAD_DIR ${ARCHIVE_DIR} + URL https://ftp.osuosl.org/pub/xiph/releases/ogg/libogg-1.3.3.tar.gz + URL_HASH SHA256=c2e8a485110b97550f453226ec644ebac6cb29d1caef2902c007edab4308d985 + CONFIGURE_COMMAND ${CMAKE_COMMAND} -E env ${envs} ${CMAKE_CURRENT_SOURCE_DIR}/src/ogg_/configure ${COMMON_ARGS} + BUILD_BYPRODUCTS ${INSTALL_DIR}/lib/libogg.a + ) + + add_library(ogg INTERFACE) + add_dependencies(ogg ogg_) + target_link_libraries(ogg INTERFACE ${INSTALL_DIR}/lib/libogg.a) + target_include_directories(ogg INTERFACE ${INSTALL_DIR}/include) + + ExternalProject_Add(flac_ + PREFIX ${CMAKE_CURRENT_SOURCE_DIR} + DEPENDS ogg_ + DOWNLOAD_DIR ${ARCHIVE_DIR} + URL https://ftp.osuosl.org/pub/xiph/releases/flac/flac-1.3.2.tar.xz + URL_HASH SHA256=91cfc3ed61dc40f47f050a109b08610667d73477af6ef36dcad31c31a4a8d53f + CONFIGURE_COMMAND ${CMAKE_COMMAND} -E env ${envs} ${CMAKE_CURRENT_SOURCE_DIR}/src/flac_/configure ${COMMON_ARGS} --with-ogg + BUILD_BYPRODUCTS + ${INSTALL_DIR}/lib/libFLAC.a + ${INSTALL_DIR}/lib/libFLAC++.a + ) + + add_library(flac INTERFACE) + add_dependencies(flac flac_) + target_link_libraries( + flac INTERFACE + ${INSTALL_DIR}/lib/libFLAC.a + ${INSTALL_DIR}/lib/libFLAC++.a + ) + target_include_directories(flac INTERFACE ${INSTALL_DIR}/include) + + ExternalProject_Add(vorbis_ + PREFIX ${CMAKE_CURRENT_SOURCE_DIR} + DEPENDS ogg_ + DOWNLOAD_DIR ${ARCHIVE_DIR} + URL https://ftp.osuosl.org/pub/xiph/releases/vorbis/libvorbis-1.3.6.tar.gz + URL_HASH SHA256=6ed40e0241089a42c48604dc00e362beee00036af2d8b3f46338031c9e0351cb + CONFIGURE_COMMAND ${CMAKE_COMMAND} -E env ${envs} ${CMAKE_CURRENT_SOURCE_DIR}/src/vorbis_/configure ${COMMON_ARGS} --with-ogg + BUILD_BYPRODUCTS + ${INSTALL_DIR}/lib/libvorbisenc.a + ${INSTALL_DIR}/lib/libvorbisfile.a + ${INSTALL_DIR}/lib/libvorbis.a + ) + + add_library(vorbis INTERFACE) + add_dependencies(vorbis vorbis_) + target_link_libraries( + vorbis INTERFACE + ${INSTALL_DIR}/lib/libvorbisenc.a + ${INSTALL_DIR}/lib/libvorbisfile.a + ${INSTALL_DIR}/lib/libvorbis.a + ) + target_include_directories(vorbis INTERFACE ${INSTALL_DIR}/include) + + ExternalProject_Add(opus_ + PREFIX ${CMAKE_CURRENT_SOURCE_DIR} + DEPENDS ogg_ + DOWNLOAD_DIR ${ARCHIVE_DIR} + URL https://ftp.osuosl.org/pub/xiph/releases/opus/opus-1.3.1.tar.gz + URL_HASH SHA256=65b58e1e25b2a114157014736a3d9dfeaad8d41be1c8179866f144a2fb44ff9d + CONFIGURE_COMMAND ${CMAKE_COMMAND} -E env ${envs} ${CMAKE_CURRENT_SOURCE_DIR}/src/opus_/configure ${COMMON_ARGS} --with-ogg + BUILD_BYPRODUCTS ${INSTALL_DIR}/lib/libopus.a + ) + + add_library(opus INTERFACE) + add_dependencies(opus opus_) + target_link_libraries(opus INTERFACE ${INSTALL_DIR}/lib/libopus.a) + target_include_directories(opus INTERFACE ${INSTALL_DIR}/include) + + ExternalProject_Add(opusfile_ + PREFIX ${CMAKE_CURRENT_SOURCE_DIR} + DEPENDS opus_ + DOWNLOAD_DIR ${ARCHIVE_DIR} + STAMP_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src/opusfile-stamp + SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src/opusfile + URL https://ftp.osuosl.org/pub/xiph/releases/opus/opusfile-0.12.tar.gz + URL_HASH SHA256=118d8601c12dd6a44f52423e68ca9083cc9f2bfe72da7a8c1acb22a80ae3550b + CONFIGURE_COMMAND ${CMAKE_COMMAND} -E env ${envs} ${CMAKE_CURRENT_SOURCE_DIR}/src/opusfile/configure ${COMMON_ARGS} --disable-http + BUILD_BYPRODUCTS ${INSTALL_DIR}/lib/libopusfile.a + ) + + add_library(opusfile INTERFACE) + add_dependencies(opusfile opusfile_) + target_link_libraries(opusfile INTERFACE ${INSTALL_DIR}/lib/libopusfile.a) + target_include_directories(opusfile INTERFACE ${INSTALL_DIR}/include) + + ExternalProject_Add(sox_ + PREFIX ${CMAKE_CURRENT_SOURCE_DIR} + DEPENDS ogg_ flac_ vorbis_ opusfile_ mp3lame_ mad_ + DOWNLOAD_DIR ${ARCHIVE_DIR} + URL https://downloads.sourceforge.net/project/sox/sox/14.4.2/sox-14.4.2.tar.bz2 + URL_HASH SHA256=81a6956d4330e75b5827316e44ae381e6f1e8928003c6aa45896da9041ea149c + CONFIGURE_COMMAND ${CMAKE_COMMAND} -E env ${envs} ${CMAKE_CURRENT_SOURCE_DIR}/src/sox_/configure ${COMMON_ARGS} --with-lame --with-flac --with-mad --with-oggvorbis --without-alsa --without-coreaudio --without-png --without-oss --without-sndfile --with-opus --disable-openmp + BUILD_BYPRODUCTS ${INSTALL_DIR}/lib/libsox.a + ) + + add_library(sox INTERFACE) + add_dependencies(sox sox_) + target_link_libraries(sox INTERFACE ${INSTALL_DIR}/lib/libsox.a) + target_include_directories(sox INTERFACE ${INSTALL_DIR}/include) + + set( + TORCHAUDIO_THIRD_PARTIES + sox + mad + flac + mp3lame + opusfile + opus + vorbis + ogg + PARENT_SCOPE + ) else() set( TORCHAUDIO_THIRD_PARTIES From f9cce63c52c3c53e29793077247979d1dc4af4c5 Mon Sep 17 00:00:00 2001 From: moto <855818+mthrok@users.noreply.github.com> Date: Mon, 30 Nov 2020 20:36:18 +0000 Subject: [PATCH 13/29] fixup! fixup! fixup! fixup! fixup! fixup! fixup! fixup! use findpython3 --- CMakeLists.txt | 22 +++++++++++----------- build_tools/setup_helpers/extension.py | 4 ++-- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f89fb77534..0b321262ad 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -67,20 +67,20 @@ endif() ################################################################################ if (BUILD_PYTHON_EXTENSION) - cmake_policy(SET CMP0074 NEW) - find_package(Python3 REQUIRED COMPONENTS Interpreter Development.Module) - message(STATUS ${Python3_FOUND}) - message(STATUS ${Python3_EXECUTABLE}) - message(STATUS ${Python3_LIBRARIES}) - message(STATUS ${Python3_INCLUDE_DIRS}) - message(STATUS Python3::Module) + # cmake_policy(SET CMP0074 NEW) + # find_package(Python3 REQUIRED COMPONENTS Interpreter Development.Module) + # message(STATUS ${Python3_FOUND}) + # message(STATUS ${Python3_EXECUTABLE}) + # message(STATUS ${Python3_LIBRARIES}) + # message(STATUS ${Python3_INCLUDE_DIRS}) + # message(STATUS Python3::Module) # if (NOT Python3_LIBRARIES) # message(FATAL_ERROR "Python_LIBRARIES is not defined. Try with -DPython_LIBRARIES=...") # endif() - # if (NOT Python3_INCLUDE_DIRS) - # message(FATAL_ERROR "Python_include_dirs is not defined. Try with -DPython_INCLUDE_DIR=...?") - # endif() + if (NOT Python3_INCLUDE_DIR) + message(FATAL_ERROR "Python3_INCLUDE_DIR is not defined. Try with -DPython3_INCLUDE_DIR=...") + endif() add_library( _torchaudio @@ -95,6 +95,7 @@ if (BUILD_PYTHON_EXTENSION) _torchaudio PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} + ${Python3_INCLUDE_DIR} ) # See https://github.com/pytorch/pytorch/issues/38122 @@ -105,7 +106,6 @@ if (BUILD_PYTHON_EXTENSION) ${TORCHAUDIO_THIRD_PARTIES} ${TORCH_LIBRARIES} ${TORCH_PYTHON_LIBRARY} - Python3::Module ) # We do not define install for _torchaudio.so diff --git a/build_tools/setup_helpers/extension.py b/build_tools/setup_helpers/extension.py index 509cd7b78a..6844c4a996 100644 --- a/build_tools/setup_helpers/extension.py +++ b/build_tools/setup_helpers/extension.py @@ -64,9 +64,9 @@ def build_extension(self, ext): f"-DCMAKE_BUILD_TYPE={cfg}", f"-DCMAKE_PREFIX_PATH={torch.utils.cmake_prefix_path}", # f"-DPython3_EXECUTABLE={sys.executable}", - f"-DPython3_ROOT_DIR={os.path.join(sys.executable, '..', '..')}", + # f"-DPython3_ROOT_DIR={os.path.join(sys.executable, '..', '..')}", # f"-DPython3_LIBRARY={get_config_var('LIBDIR')}", - # f"-DPython3_INCLUDE_DIR={get_config_var('INCLUDEPY')}", + f"-DPython3_INCLUDE_DIR={get_config_var('INCLUDEPY')}", f"-DBUILD_SOX:BOOL={_get_build_sox()}", "-DBUILD_PYTHON_EXTENSION:BOOL=ON", "-DBUILD_LIBTORCHAUDIO:BOOL=OFF", From 6c33ad4f0648ed6ae9aca0695709b8cc5a26f891 Mon Sep 17 00:00:00 2001 From: moto <855818+mthrok@users.noreply.github.com> Date: Wed, 2 Dec 2020 20:35:28 +0000 Subject: [PATCH 14/29] revert comments --- third_party/CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/third_party/CMakeLists.txt b/third_party/CMakeLists.txt index 818e2b4bb8..8b93533d1d 100644 --- a/third_party/CMakeLists.txt +++ b/third_party/CMakeLists.txt @@ -135,6 +135,8 @@ if (BUILD_SOX) DOWNLOAD_DIR ${ARCHIVE_DIR} URL https://downloads.sourceforge.net/project/sox/sox/14.4.2/sox-14.4.2.tar.bz2 URL_HASH SHA256=81a6956d4330e75b5827316e44ae381e6f1e8928003c6aa45896da9041ea149c + # OpenMP is by default compiled against GNU OpenMP, which conflicts with the version of OpenMP that PyTorch uses. + # See https://github.com/pytorch/audio/pull/1026 CONFIGURE_COMMAND ${CMAKE_COMMAND} -E env ${envs} ${CMAKE_CURRENT_SOURCE_DIR}/src/sox_/configure ${COMMON_ARGS} --with-lame --with-flac --with-mad --with-oggvorbis --without-alsa --without-coreaudio --without-png --without-oss --without-sndfile --with-opus --disable-openmp BUILD_BYPRODUCTS ${INSTALL_DIR}/lib/libsox.a ) From f84b64b030a2481b87a21163075d3996a37561fd Mon Sep 17 00:00:00 2001 From: moto <855818+mthrok@users.noreply.github.com> Date: Wed, 2 Dec 2020 20:53:46 +0000 Subject: [PATCH 15/29] Use FindPythonLibs --- CMakeLists.txt | 24 +++++++++--------------- build_tools/setup_helpers/extension.py | 4 ---- 2 files changed, 9 insertions(+), 19 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0b321262ad..96a2be01ee 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -67,20 +67,13 @@ endif() ################################################################################ if (BUILD_PYTHON_EXTENSION) - # cmake_policy(SET CMP0074 NEW) - # find_package(Python3 REQUIRED COMPONENTS Interpreter Development.Module) - # message(STATUS ${Python3_FOUND}) - # message(STATUS ${Python3_EXECUTABLE}) - # message(STATUS ${Python3_LIBRARIES}) - # message(STATUS ${Python3_INCLUDE_DIRS}) - # message(STATUS Python3::Module) - - # if (NOT Python3_LIBRARIES) - # message(FATAL_ERROR "Python_LIBRARIES is not defined. Try with -DPython_LIBRARIES=...") - # endif() - if (NOT Python3_INCLUDE_DIR) - message(FATAL_ERROR "Python3_INCLUDE_DIR is not defined. Try with -DPython3_INCLUDE_DIR=...") - endif() + # FindPythonLibs is deprecated and it is encouraged to use FindPython or + # FindPython3, but their behaviors are not consistent across platforms so we use + # FindPytonInterp and FindPythonLibs, like in PyTorch + # https://github.com/pytorch/pytorch/blob/7f869dca70606c42994d822ba11362a353411a1c/cmake/Dependencies.cmake#L936-L940 + set(Python_ADDITIONAL_VERSIONS ${PYTHON_VERSION}) + find_package(PythonInterp 3.6 REQUIRED) + find_package(PythonLibs 3.6 REQUIRED) add_library( _torchaudio @@ -95,7 +88,7 @@ if (BUILD_PYTHON_EXTENSION) _torchaudio PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} - ${Python3_INCLUDE_DIR} + ${PYTHON_INCLUDE_DIRS} ) # See https://github.com/pytorch/pytorch/issues/38122 @@ -106,6 +99,7 @@ if (BUILD_PYTHON_EXTENSION) ${TORCHAUDIO_THIRD_PARTIES} ${TORCH_LIBRARIES} ${TORCH_PYTHON_LIBRARY} + ${PYTHON_LIBRARIES} ) # We do not define install for _torchaudio.so diff --git a/build_tools/setup_helpers/extension.py b/build_tools/setup_helpers/extension.py index 6844c4a996..a2cb4919ea 100644 --- a/build_tools/setup_helpers/extension.py +++ b/build_tools/setup_helpers/extension.py @@ -63,10 +63,6 @@ def build_extension(self, ext): f"-DCMAKE_LIBRARY_OUTPUT_DIRECTORY={extdir}", f"-DCMAKE_BUILD_TYPE={cfg}", f"-DCMAKE_PREFIX_PATH={torch.utils.cmake_prefix_path}", - # f"-DPython3_EXECUTABLE={sys.executable}", - # f"-DPython3_ROOT_DIR={os.path.join(sys.executable, '..', '..')}", - # f"-DPython3_LIBRARY={get_config_var('LIBDIR')}", - f"-DPython3_INCLUDE_DIR={get_config_var('INCLUDEPY')}", f"-DBUILD_SOX:BOOL={_get_build_sox()}", "-DBUILD_PYTHON_EXTENSION:BOOL=ON", "-DBUILD_LIBTORCHAUDIO:BOOL=OFF", From 87d4bde50cecfb3ab722c0e9c09cb7410735c5c8 Mon Sep 17 00:00:00 2001 From: moto <855818+mthrok@users.noreply.github.com> Date: Wed, 2 Dec 2020 21:39:23 +0000 Subject: [PATCH 16/29] debug GPU --- .circleci/config.yml | 2 +- .circleci/config.yml.in | 2 +- .circleci/unittest/linux/scripts/install.sh | 2 ++ 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 4e672c534c..dbbd43edb6 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -463,7 +463,7 @@ jobs: - third_party/src - run: name: Install torchaudio - command: docker run -t --gpus all -e UPLOAD_CHANNEL -v $PWD:$PWD -w $PWD "${image_name}" .circleci/unittest/linux/scripts/install.sh + command: docker run -t --gpus all -e UPLOAD_CHANNEL -e CUDA_HOME -v $PWD:$PWD -w $PWD "${image_name}" .circleci/unittest/linux/scripts/install.sh - run: name: Run tests command: docker run -t --gpus all -v $PWD:$PWD -w $PWD "${image_name}" .circleci/unittest/linux/scripts/run_test.sh diff --git a/.circleci/config.yml.in b/.circleci/config.yml.in index 842c546db2..c8cc4fd1d0 100644 --- a/.circleci/config.yml.in +++ b/.circleci/config.yml.in @@ -463,7 +463,7 @@ jobs: - third_party/src - run: name: Install torchaudio - command: docker run -t --gpus all -e UPLOAD_CHANNEL -v $PWD:$PWD -w $PWD "${image_name}" .circleci/unittest/linux/scripts/install.sh + command: docker run -t --gpus all -e UPLOAD_CHANNEL -e CUDA_HOME -v $PWD:$PWD -w $PWD "${image_name}" .circleci/unittest/linux/scripts/install.sh - run: name: Run tests command: docker run -t --gpus all -v $PWD:$PWD -w $PWD "${image_name}" .circleci/unittest/linux/scripts/run_test.sh diff --git a/.circleci/unittest/linux/scripts/install.sh b/.circleci/unittest/linux/scripts/install.sh index 27dec79251..0878a91d42 100755 --- a/.circleci/unittest/linux/scripts/install.sh +++ b/.circleci/unittest/linux/scripts/install.sh @@ -38,6 +38,8 @@ conda install -y -c "pytorch-${UPLOAD_CHANNEL}" pytorch ${cudatoolkit} # 2. Install torchaudio printf "* Installing torchaudio\n" +python -m torch.utils.collect_env +echo "CUDA_HOME: ${CUDA_HOME}" BUILD_SOX=1 python setup.py install # 3. Install Test tools From bfbf62be8ee9474d655788a7bedfe0450d3b3db3 Mon Sep 17 00:00:00 2001 From: moto <855818+mthrok@users.noreply.github.com> Date: Wed, 2 Dec 2020 21:48:59 +0000 Subject: [PATCH 17/29] Set so on apple --- CMakeLists.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 96a2be01ee..e4f0dea074 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,6 +16,10 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${TORCH_CXX_FLAGS}") add_subdirectory(third_party) +if (APPLE) + SET(CMAKE_SHARED_LIBRARY_SUFFIX ".so") +endif() + ################################################################################ # Begining of torchaudio extension configuration ################################################################################ From 1e3a5119f4e9f5c8043d524205a0c6c0a5a686f2 Mon Sep 17 00:00:00 2001 From: moto <855818+mthrok@users.noreply.github.com> Date: Wed, 2 Dec 2020 22:31:48 +0000 Subject: [PATCH 18/29] fixup! Set so on apple --- CMakeLists.txt | 24 +++++++++++--------- build_tools/setup_helpers/extension.py | 31 +++++++++++++++++++++++--- 2 files changed, 41 insertions(+), 14 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e4f0dea074..75e8880e82 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -21,7 +21,7 @@ if (APPLE) endif() ################################################################################ -# Begining of torchaudio extension configuration +# Beginning of torchaudio extension configuration ################################################################################ set(TORCHAUDIO_CSRC "${CMAKE_CURRENT_SOURCE_DIR}/torchaudio/csrc") @@ -70,14 +70,16 @@ endif() # _torchaudio.so ################################################################################ if (BUILD_PYTHON_EXTENSION) - - # FindPythonLibs is deprecated and it is encouraged to use FindPython or - # FindPython3, but their behaviors are not consistent across platforms so we use - # FindPytonInterp and FindPythonLibs, like in PyTorch - # https://github.com/pytorch/pytorch/blob/7f869dca70606c42994d822ba11362a353411a1c/cmake/Dependencies.cmake#L936-L940 - set(Python_ADDITIONAL_VERSIONS ${PYTHON_VERSION}) - find_package(PythonInterp 3.6 REQUIRED) - find_package(PythonLibs 3.6 REQUIRED) + # Since this part of code is expected to be called from setup.py, we expect + # that PYTHON_INCLUDE_DIR and PYTHON_LIBRARY are provided. + # If needed, we can add search here, like + # https://github.com/pytorch/pytorch/blob/7f869dca70606c42994d822ba11362a353411a1c/cmake/Dependencies.cmake#L904-L940 + if (NOT PYTHON_INCLUDE_DIR) + message(FATAL_ERROR "PYTHON_INCLUDE_DIR is not provided.") + endif() + if (NOT PYTHON_LIBRARY) + message(FATAL_ERROR "PYTHON_LIBRARY is not provided.") + endif() add_library( _torchaudio @@ -92,7 +94,7 @@ if (BUILD_PYTHON_EXTENSION) _torchaudio PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} - ${PYTHON_INCLUDE_DIRS} + ${PYTHON_INCLUDE_DIR} ) # See https://github.com/pytorch/pytorch/issues/38122 @@ -103,7 +105,7 @@ if (BUILD_PYTHON_EXTENSION) ${TORCHAUDIO_THIRD_PARTIES} ${TORCH_LIBRARIES} ${TORCH_PYTHON_LIBRARY} - ${PYTHON_LIBRARIES} + ${PYTHON_LIBRARY} ) # We do not define install for _torchaudio.so diff --git a/build_tools/setup_helpers/extension.py b/build_tools/setup_helpers/extension.py index a2cb4919ea..0e3d95a7d7 100644 --- a/build_tools/setup_helpers/extension.py +++ b/build_tools/setup_helpers/extension.py @@ -1,13 +1,14 @@ import os -import sys -from sysconfig import get_config_var import platform import subprocess +import sysconfig from pathlib import Path + +import distutils.sysconfig from setuptools import Extension from setuptools.command.build_ext import build_ext - import torch +import torch.utils.cpp_extension __all__ = [ 'get_ext_modules', @@ -38,6 +39,24 @@ def get_ext_modules(): return [Extension(name='torchaudio._torchaudio', sources=[])] +def _get_python_include_dir(): + # https://github.com/pytorch/pytorch/blob/7f869dca70606c42994d822ba11362a353411a1c/cmake/Dependencies.cmake#L904-L940 + dir_ = distutils.sysconfig.get_python_inc() + if os.path.exists(dir_): + return dir_ + dir_ = sysconfig.get_paths()['include'] + if os.path.exists(dir_): + return dir_ + raise ValueError('Cannot find Python development include directory.') + + +def _get_python_library(): + lib = sysconfig.get_paths()['stdlib'] + if os.path.exists(lib): + return lib + raise ValueError('Cannot find Python library.') + + # Based off of # https://github.com/pybind/cmake_example/blob/580c5fd29d4651db99d8874714b07c0c49a53f8a/setup.py class CMakeBuild(build_ext): @@ -64,6 +83,8 @@ def build_extension(self, ext): f"-DCMAKE_BUILD_TYPE={cfg}", f"-DCMAKE_PREFIX_PATH={torch.utils.cmake_prefix_path}", f"-DBUILD_SOX:BOOL={_get_build_sox()}", + f"-DPYTHON_INCLUDE_DIR={_get_python_include_dir()}", + f"-DPYTHON_LIBRARY={_get_python_library()}", "-DBUILD_PYTHON_EXTENSION:BOOL=ON", "-DBUILD_LIBTORCHAUDIO:BOOL=OFF", ] @@ -78,6 +99,10 @@ def build_extension(self, ext): if 'CMAKE_GENERATOR' not in os.environ: cmake_args += ["-GNinja"] + print('setting CUDA_HOME: torch.utils.cpp_extension.CUDA_HOME') + if torch.utils.cpp_extension.CUDA_HOME is not None: + cmake_args += [f"-DCUDA_HOME={torch.utils.cpp_extension.CUDA_HOME}"] + # Set CMAKE_BUILD_PARALLEL_LEVEL to control the parallel build level # across all generators. if "CMAKE_BUILD_PARALLEL_LEVEL" not in os.environ: From 2a739d3cd318a849674b098a6d784dc82a57a825 Mon Sep 17 00:00:00 2001 From: moto <855818+mthrok@users.noreply.github.com> Date: Wed, 2 Dec 2020 22:43:35 +0000 Subject: [PATCH 19/29] fixup! fixup! Set so on apple --- .circleci/config.yml | 8 ++++---- .circleci/config.yml.in | 8 ++++---- .circleci/unittest/linux/scripts/install.sh | 2 +- .circleci/unittest/linux/scripts/setup_env.sh | 2 +- build_tools/setup_helpers/extension.py | 2 +- 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index dbbd43edb6..739e1f793a 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -399,14 +399,14 @@ jobs: - restore_cache: keys: - - env-v3-linux-{{ arch }}-py<< parameters.python_version >>-{{ checksum ".circleci/unittest/linux/scripts/setup_env.sh" }}-{{ checksum "third_party/CMakeLists.txt" }}-{{ checksum ".cachekey" }} + - env-v3-linux-{{ arch }}-py<< parameters.python_version >>-cpu-{{ checksum ".circleci/unittest/linux/scripts/setup_env.sh" }}-{{ checksum "third_party/CMakeLists.txt" }}-{{ checksum ".cachekey" }} - run: name: Setup command: .circleci/unittest/linux/scripts/setup_env.sh - save_cache: - key: env-v3-linux-{{ arch }}-py<< parameters.python_version >>-{{ checksum ".circleci/unittest/linux/scripts/setup_env.sh" }}-{{ checksum "third_party/CMakeLists.txt" }}-{{ checksum ".cachekey" }} + key: env-v3-linux-{{ arch }}-py<< parameters.python_version >>-cpu-{{ checksum ".circleci/unittest/linux/scripts/setup_env.sh" }}-{{ checksum "third_party/CMakeLists.txt" }}-{{ checksum ".cachekey" }} paths: - conda @@ -443,7 +443,7 @@ jobs: - restore_cache: keys: - - env-v3-linux-{{ arch }}-py<< parameters.python_version >>-{{ checksum ".circleci/unittest/linux/scripts/setup_env.sh" }}-{{ checksum "third_party/CMakeLists.txt" }}-{{ checksum ".cachekey" }} + - env-v3-linux-{{ arch }}-py<< parameters.python_version >>-gpu-{{ checksum ".circleci/unittest/linux/scripts/setup_env.sh" }}-{{ checksum "third_party/CMakeLists.txt" }}-{{ checksum ".cachekey" }} - run: name: Pull Docker image @@ -453,7 +453,7 @@ jobs: command: docker run -t --gpus all -e PYTHON_VERSION -v $PWD:$PWD -w $PWD "${image_name}" .circleci/unittest/linux/scripts/setup_env.sh - save_cache: - key: env-v3-linux-{{ arch }}-py<< parameters.python_version >>-{{ checksum ".circleci/unittest/linux/scripts/setup_env.sh" }}-{{ checksum "third_party/CMakeLists.txt" }}-{{ checksum ".cachekey" }} + key: env-v3-linux-{{ arch }}-py<< parameters.python_version >>-gpu-{{ checksum ".circleci/unittest/linux/scripts/setup_env.sh" }}-{{ checksum "third_party/CMakeLists.txt" }}-{{ checksum ".cachekey" }} paths: - conda diff --git a/.circleci/config.yml.in b/.circleci/config.yml.in index c8cc4fd1d0..450f4386ba 100644 --- a/.circleci/config.yml.in +++ b/.circleci/config.yml.in @@ -399,14 +399,14 @@ jobs: - restore_cache: {% raw %} keys: - - env-v3-linux-{{ arch }}-py<< parameters.python_version >>-{{ checksum ".circleci/unittest/linux/scripts/setup_env.sh" }}-{{ checksum "third_party/CMakeLists.txt" }}-{{ checksum ".cachekey" }} + - env-v3-linux-{{ arch }}-py<< parameters.python_version >>-cpu-{{ checksum ".circleci/unittest/linux/scripts/setup_env.sh" }}-{{ checksum "third_party/CMakeLists.txt" }}-{{ checksum ".cachekey" }} {% endraw %} - run: name: Setup command: .circleci/unittest/linux/scripts/setup_env.sh - save_cache: {% raw %} - key: env-v3-linux-{{ arch }}-py<< parameters.python_version >>-{{ checksum ".circleci/unittest/linux/scripts/setup_env.sh" }}-{{ checksum "third_party/CMakeLists.txt" }}-{{ checksum ".cachekey" }} + key: env-v3-linux-{{ arch }}-py<< parameters.python_version >>-cpu-{{ checksum ".circleci/unittest/linux/scripts/setup_env.sh" }}-{{ checksum "third_party/CMakeLists.txt" }}-{{ checksum ".cachekey" }} {% endraw %} paths: - conda @@ -443,7 +443,7 @@ jobs: - restore_cache: {% raw %} keys: - - env-v3-linux-{{ arch }}-py<< parameters.python_version >>-{{ checksum ".circleci/unittest/linux/scripts/setup_env.sh" }}-{{ checksum "third_party/CMakeLists.txt" }}-{{ checksum ".cachekey" }} + - env-v3-linux-{{ arch }}-py<< parameters.python_version >>-gpu-{{ checksum ".circleci/unittest/linux/scripts/setup_env.sh" }}-{{ checksum "third_party/CMakeLists.txt" }}-{{ checksum ".cachekey" }} {% endraw %} - run: name: Pull Docker image @@ -453,7 +453,7 @@ jobs: command: docker run -t --gpus all -e PYTHON_VERSION -v $PWD:$PWD -w $PWD "${image_name}" .circleci/unittest/linux/scripts/setup_env.sh - save_cache: {% raw %} - key: env-v3-linux-{{ arch }}-py<< parameters.python_version >>-{{ checksum ".circleci/unittest/linux/scripts/setup_env.sh" }}-{{ checksum "third_party/CMakeLists.txt" }}-{{ checksum ".cachekey" }} + key: env-v3-linux-{{ arch }}-py<< parameters.python_version >>-gpu-{{ checksum ".circleci/unittest/linux/scripts/setup_env.sh" }}-{{ checksum "third_party/CMakeLists.txt" }}-{{ checksum ".cachekey" }} {% endraw %} paths: - conda diff --git a/.circleci/unittest/linux/scripts/install.sh b/.circleci/unittest/linux/scripts/install.sh index 0878a91d42..309fbc34d6 100755 --- a/.circleci/unittest/linux/scripts/install.sh +++ b/.circleci/unittest/linux/scripts/install.sh @@ -5,7 +5,7 @@ unset PYTORCH_VERSION # so no need to set PYTORCH_VERSION. # In fact, keeping PYTORCH_VERSION forces us to hardcode PyTorch version in config. -set -e +set -ex root_dir="$(git rev-parse --show-toplevel)" conda_dir="${root_dir}/conda" diff --git a/.circleci/unittest/linux/scripts/setup_env.sh b/.circleci/unittest/linux/scripts/setup_env.sh index bc3c19a02f..085dc61a5b 100755 --- a/.circleci/unittest/linux/scripts/setup_env.sh +++ b/.circleci/unittest/linux/scripts/setup_env.sh @@ -5,7 +5,7 @@ # # Do not install PyTorch and torchaudio here, otherwise they also get cached. -set -e +set -ex root_dir="$(git rev-parse --show-toplevel)" conda_dir="${root_dir}/conda" diff --git a/build_tools/setup_helpers/extension.py b/build_tools/setup_helpers/extension.py index 0e3d95a7d7..58c56add65 100644 --- a/build_tools/setup_helpers/extension.py +++ b/build_tools/setup_helpers/extension.py @@ -99,7 +99,7 @@ def build_extension(self, ext): if 'CMAKE_GENERATOR' not in os.environ: cmake_args += ["-GNinja"] - print('setting CUDA_HOME: torch.utils.cpp_extension.CUDA_HOME') + print(f'setting CUDA_HOME: {torch.utils.cpp_extension.CUDA_HOME}') if torch.utils.cpp_extension.CUDA_HOME is not None: cmake_args += [f"-DCUDA_HOME={torch.utils.cpp_extension.CUDA_HOME}"] From 40a89426abf43a16d65002b8a1c004bcd8228470 Mon Sep 17 00:00:00 2001 From: moto <855818+mthrok@users.noreply.github.com> Date: Thu, 3 Dec 2020 00:35:20 +0000 Subject: [PATCH 20/29] Update GPU test image --- .circleci/config.yml | 2 +- .circleci/config.yml.in | 2 +- .circleci/unittest/linux/docker/build_and_push.sh | 7 ++++--- CMakeLists.txt | 11 +++++++++-- build_tools/setup_helpers/extension.py | 8 +++++--- 5 files changed, 20 insertions(+), 10 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 739e1f793a..16bcc460f3 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -433,7 +433,7 @@ jobs: resource_class: gpu.small environment: <<: *environment - image_name: "pytorch/torchaudio_unittest_base:manylinux-cuda10.1" + image_name: pytorch/torchaudio_unittest_base:manylinux-cuda10.1-20201202 steps: - checkout - attach_workspace: diff --git a/.circleci/config.yml.in b/.circleci/config.yml.in index 450f4386ba..9fb3e077e2 100644 --- a/.circleci/config.yml.in +++ b/.circleci/config.yml.in @@ -433,7 +433,7 @@ jobs: resource_class: gpu.small environment: <<: *environment - image_name: "pytorch/torchaudio_unittest_base:manylinux-cuda10.1" + image_name: pytorch/torchaudio_unittest_base:manylinux-cuda10.1-20201202 steps: - checkout - attach_workspace: diff --git a/.circleci/unittest/linux/docker/build_and_push.sh b/.circleci/unittest/linux/docker/build_and_push.sh index 8bf33eaaa3..b3573acb0c 100755 --- a/.circleci/unittest/linux/docker/build_and_push.sh +++ b/.circleci/unittest/linux/docker/build_and_push.sh @@ -7,12 +7,13 @@ if [ $# -ne 1 ]; then exit 1 fi +datestr="$(date "+%Y%m%d")" if [ "$1" = "cpu" ]; then base_image="ubuntu:18.04" - image="pytorch/torchaudio_unittest_base:manylinux" + image="pytorch/torchaudio_unittest_base:manylinux-${datestr}" elif [[ "$1" =~ ^(9.2|10.1)$ ]]; then - base_image="nvidia/cuda:$1-runtime-ubuntu18.04" - image="pytorch/torchaudio_unittest_base:manylinux-cuda$1" + base_image="nvidia/cuda:$1-devel-ubuntu18.04" + image="pytorch/torchaudio_unittest_base:manylinux-cuda$1-${datestr}" else printf "Unexpected string: %s" "$1" exit 1; diff --git a/CMakeLists.txt b/CMakeLists.txt index 75e8880e82..756b23c21c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -74,12 +74,19 @@ if (BUILD_PYTHON_EXTENSION) # that PYTHON_INCLUDE_DIR and PYTHON_LIBRARY are provided. # If needed, we can add search here, like # https://github.com/pytorch/pytorch/blob/7f869dca70606c42994d822ba11362a353411a1c/cmake/Dependencies.cmake#L904-L940 + message(STATUS "PYTHON_INCLUDE_DIR: ${PYTHON_INCLUDE_DIR}") + message(STATUS "PYTHON_LIBRARY: ${PYTHON_LIBRARY}") if (NOT PYTHON_INCLUDE_DIR) message(FATAL_ERROR "PYTHON_INCLUDE_DIR is not provided.") endif() if (NOT PYTHON_LIBRARY) message(FATAL_ERROR "PYTHON_LIBRARY is not provided.") endif() + set(Python_ADDITIONAL_VERSIONS ${PYTHON_VERSION}) + find_package(PythonInterp 3.6) + find_package(PythonLibs 3.6 REQUIRED) + message(STATUS "PYTHON_INCLUDE_DIRS: ${PYTHON_INCLUDE_DIRS}") + message(STATUS "PYTHON_LIBRARIES: ${PYTHON_LIBRARIES}") add_library( _torchaudio @@ -94,7 +101,7 @@ if (BUILD_PYTHON_EXTENSION) _torchaudio PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} - ${PYTHON_INCLUDE_DIR} + ${PYTHON_INCLUDE_DIRS} ) # See https://github.com/pytorch/pytorch/issues/38122 @@ -105,7 +112,7 @@ if (BUILD_PYTHON_EXTENSION) ${TORCHAUDIO_THIRD_PARTIES} ${TORCH_LIBRARIES} ${TORCH_PYTHON_LIBRARY} - ${PYTHON_LIBRARY} + python${PYTHON_VERSION} ) # We do not define install for _torchaudio.so diff --git a/build_tools/setup_helpers/extension.py b/build_tools/setup_helpers/extension.py index 58c56add65..e345c03d17 100644 --- a/build_tools/setup_helpers/extension.py +++ b/build_tools/setup_helpers/extension.py @@ -1,4 +1,5 @@ import os +import sys import platform import subprocess import sysconfig @@ -47,14 +48,14 @@ def _get_python_include_dir(): dir_ = sysconfig.get_paths()['include'] if os.path.exists(dir_): return dir_ - raise ValueError('Cannot find Python development include directory.') + raise RuntimeError('Cannot find Python development include directory.') def _get_python_library(): lib = sysconfig.get_paths()['stdlib'] if os.path.exists(lib): return lib - raise ValueError('Cannot find Python library.') + raise RuntimeError(f'Cannot find Python library. {lib}') # Based off of @@ -81,10 +82,11 @@ def build_extension(self, ext): cmake_args = [ f"-DCMAKE_LIBRARY_OUTPUT_DIRECTORY={extdir}", f"-DCMAKE_BUILD_TYPE={cfg}", - f"-DCMAKE_PREFIX_PATH={torch.utils.cmake_prefix_path}", + f"-DCMAKE_PREFIX_PATH={torch.utils.cmake_prefix_path}:{}", f"-DBUILD_SOX:BOOL={_get_build_sox()}", f"-DPYTHON_INCLUDE_DIR={_get_python_include_dir()}", f"-DPYTHON_LIBRARY={_get_python_library()}", + f"-DPYTHON_VERSION={sys.version_info[0]}.{sys.version_info[1]}", "-DBUILD_PYTHON_EXTENSION:BOOL=ON", "-DBUILD_LIBTORCHAUDIO:BOOL=OFF", ] From 448f8e6a9ee2f2893b4a39f567d18c6ba8e59563 Mon Sep 17 00:00:00 2001 From: moto <855818+mthrok@users.noreply.github.com> Date: Thu, 3 Dec 2020 00:42:54 +0000 Subject: [PATCH 21/29] fixup! Update GPU test image --- build_tools/setup_helpers/extension.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build_tools/setup_helpers/extension.py b/build_tools/setup_helpers/extension.py index e345c03d17..83ea2b5416 100644 --- a/build_tools/setup_helpers/extension.py +++ b/build_tools/setup_helpers/extension.py @@ -82,7 +82,7 @@ def build_extension(self, ext): cmake_args = [ f"-DCMAKE_LIBRARY_OUTPUT_DIRECTORY={extdir}", f"-DCMAKE_BUILD_TYPE={cfg}", - f"-DCMAKE_PREFIX_PATH={torch.utils.cmake_prefix_path}:{}", + f"-DCMAKE_PREFIX_PATH={torch.utils.cmake_prefix_path}", f"-DBUILD_SOX:BOOL={_get_build_sox()}", f"-DPYTHON_INCLUDE_DIR={_get_python_include_dir()}", f"-DPYTHON_LIBRARY={_get_python_library()}", From 44a96e97ff140f9c5dc0a89ee50d76efb73c0d6a Mon Sep 17 00:00:00 2001 From: moto <855818+mthrok@users.noreply.github.com> Date: Thu, 3 Dec 2020 00:50:45 +0000 Subject: [PATCH 22/29] fixup! fixup! Update GPU test image --- CMakeLists.txt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 756b23c21c..e3d142086a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -107,12 +107,15 @@ if (BUILD_PYTHON_EXTENSION) # See https://github.com/pytorch/pytorch/issues/38122 find_library(TORCH_PYTHON_LIBRARY torch_python PATHS "${TORCH_INSTALL_PREFIX}/lib") + target_link_directories( + _torchaudio + ) target_link_libraries( _torchaudio ${TORCHAUDIO_THIRD_PARTIES} ${TORCH_LIBRARIES} ${TORCH_PYTHON_LIBRARY} - python${PYTHON_VERSION} + ${PYTHON_LIBRARIES} ) # We do not define install for _torchaudio.so From 32fab537dff6ef5f5d6014ac1f44a3dc09e691aa Mon Sep 17 00:00:00 2001 From: moto <855818+mthrok@users.noreply.github.com> Date: Thu, 3 Dec 2020 00:54:53 +0000 Subject: [PATCH 23/29] fixup! fixup! fixup! Update GPU test image --- CMakeLists.txt | 3 --- 1 file changed, 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e3d142086a..7e21dd6360 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -107,9 +107,6 @@ if (BUILD_PYTHON_EXTENSION) # See https://github.com/pytorch/pytorch/issues/38122 find_library(TORCH_PYTHON_LIBRARY torch_python PATHS "${TORCH_INSTALL_PREFIX}/lib") - target_link_directories( - _torchaudio - ) target_link_libraries( _torchaudio ${TORCHAUDIO_THIRD_PARTIES} From 5eb755eab6af7249e993c2614283b38f11211826 Mon Sep 17 00:00:00 2001 From: moto <855818+mthrok@users.noreply.github.com> Date: Thu, 3 Dec 2020 08:27:39 -0800 Subject: [PATCH 24/29] Update GPU docker image --- .circleci/config.yml.in | 2 +- .circleci/unittest/linux/docker/build_and_push.sh | 6 ++---- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/.circleci/config.yml.in b/.circleci/config.yml.in index 9fb3e077e2..b841ac1d58 100644 --- a/.circleci/config.yml.in +++ b/.circleci/config.yml.in @@ -433,7 +433,7 @@ jobs: resource_class: gpu.small environment: <<: *environment - image_name: pytorch/torchaudio_unittest_base:manylinux-cuda10.1-20201202 + image_name: pytorch/torchaudio_unittest_base:manylinux-cuda10.1-cudnn7-20201203 steps: - checkout - attach_workspace: diff --git a/.circleci/unittest/linux/docker/build_and_push.sh b/.circleci/unittest/linux/docker/build_and_push.sh index b3573acb0c..e7ced13ad3 100755 --- a/.circleci/unittest/linux/docker/build_and_push.sh +++ b/.circleci/unittest/linux/docker/build_and_push.sh @@ -11,12 +11,10 @@ datestr="$(date "+%Y%m%d")" if [ "$1" = "cpu" ]; then base_image="ubuntu:18.04" image="pytorch/torchaudio_unittest_base:manylinux-${datestr}" -elif [[ "$1" =~ ^(9.2|10.1)$ ]]; then +else base_image="nvidia/cuda:$1-devel-ubuntu18.04" + docker pull "${base_image}" image="pytorch/torchaudio_unittest_base:manylinux-cuda$1-${datestr}" -else - printf "Unexpected string: %s" "$1" - exit 1; fi cd "$( dirname "${BASH_SOURCE[0]}" )" From 14b34a0161674f4e48dc5b891aab5da53ba794c0 Mon Sep 17 00:00:00 2001 From: moto <855818+mthrok@users.noreply.github.com> Date: Thu, 3 Dec 2020 16:28:46 +0000 Subject: [PATCH 25/29] fixup! Update GPU docker image --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 16bcc460f3..83a084dbbb 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -433,7 +433,7 @@ jobs: resource_class: gpu.small environment: <<: *environment - image_name: pytorch/torchaudio_unittest_base:manylinux-cuda10.1-20201202 + image_name: pytorch/torchaudio_unittest_base:manylinux-cuda10.1-cudnn7-20201203 steps: - checkout - attach_workspace: From 432a1f4918c90fc0de5c43ba757bb4cbcd90b395 Mon Sep 17 00:00:00 2001 From: moto <855818+mthrok@users.noreply.github.com> Date: Thu, 3 Dec 2020 21:13:28 +0000 Subject: [PATCH 26/29] fixup! fixup! Update GPU docker image --- CMakeLists.txt | 8 ++++---- build_tools/setup_helpers/extension.py | 13 ++++++++----- third_party/CMakeLists.txt | 10 +++++----- 3 files changed, 17 insertions(+), 14 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7e21dd6360..659ee34ffc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,10 +9,10 @@ option(BUILD_PYTHON_EXTENSION "Build Python extension" OFF) set(CMAKE_CXX_STANDARD 14 CACHE STRING "The C++ standard whose features are requested to build this target.") find_package(Torch REQUIRED) -# TORCH_CXX_FLAGS contains proper _GLIBCXX_USE_CXX11_ABI -# We propagate it to CMAKE_CXX_FLAGS so that third party libraries are built -# with the same flag -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${TORCH_CXX_FLAGS}") +# Set -D_GLIBCXX_USE_CXX11_ABI for third party builds +if (DEFINED _GLIBCXX_USE_CXX11_ABI) + set(CXXFLAGS "${CXXFLAGS} -D_GLIBCXX_USE_CXX11_ABI=${_GLIBCXX_USE_CXX11_ABI}") +endif() add_subdirectory(third_party) diff --git a/build_tools/setup_helpers/extension.py b/build_tools/setup_helpers/extension.py index 83ea2b5416..9c0f81971f 100644 --- a/build_tools/setup_helpers/extension.py +++ b/build_tools/setup_helpers/extension.py @@ -9,7 +9,6 @@ from setuptools import Extension from setuptools.command.build_ext import build_ext import torch -import torch.utils.cpp_extension __all__ = [ 'get_ext_modules', @@ -34,6 +33,13 @@ def _get_build_sox(): return False +def _get_cxx11_abi(): + try: + return int(torch._C._GLIBCXX_USE_CXX11_ABI) + except ImportError: + return 0 + + def get_ext_modules(): if platform.system() == 'Windows': return None @@ -87,6 +93,7 @@ def build_extension(self, ext): f"-DPYTHON_INCLUDE_DIR={_get_python_include_dir()}", f"-DPYTHON_LIBRARY={_get_python_library()}", f"-DPYTHON_VERSION={sys.version_info[0]}.{sys.version_info[1]}", + f"-D_GLIBCXX_USE_CXX11_ABI={_get_cxx11_abi()}", "-DBUILD_PYTHON_EXTENSION:BOOL=ON", "-DBUILD_LIBTORCHAUDIO:BOOL=OFF", ] @@ -101,10 +108,6 @@ def build_extension(self, ext): if 'CMAKE_GENERATOR' not in os.environ: cmake_args += ["-GNinja"] - print(f'setting CUDA_HOME: {torch.utils.cpp_extension.CUDA_HOME}') - if torch.utils.cpp_extension.CUDA_HOME is not None: - cmake_args += [f"-DCUDA_HOME={torch.utils.cpp_extension.CUDA_HOME}"] - # Set CMAKE_BUILD_PARALLEL_LEVEL to control the parallel build level # across all generators. if "CMAKE_BUILD_PARALLEL_LEVEL" not in os.environ: diff --git a/third_party/CMakeLists.txt b/third_party/CMakeLists.txt index 8b93533d1d..2b132febfc 100644 --- a/third_party/CMakeLists.txt +++ b/third_party/CMakeLists.txt @@ -6,9 +6,11 @@ if (BUILD_SOX) set(INSTALL_DIR ${CMAKE_CURRENT_SOURCE_DIR}/install) set(ARCHIVE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/archives) - set(COMMON_ARGS --quiet --disable-shared --enable-static --prefix=${INSTALL_DIR} --with-pic --disable-dependency-tracking --disable-debug --disable-examples --disable-doc) - set(envs "PKG_CONFIG_PATH=${INSTALL_DIR}/lib/pkgconfig" "LDFLAGS=-L${INSTALL_DIR}/lib $ENV{LDFLAGS}" "CPPFLAGS=-I${INSTALL_DIR}/include $ENV{CPPFLAGS}" "CXXFLAGS=${TORCH_CXX_FLAGS} $ENV{CXXFLAGS}") + set(COMMON_ARGS --quiet --disable-silent-rules --disable-shared --enable-static --prefix=${INSTALL_DIR} --with-pic --disable-dependency-tracking --disable-debug --disable-examples --disable-doc) + # We need to use `${CMAKE_COMMAND} -E env ${envs} ` pattern, to propagate custom environment variables + # to ExternalProject_Add. We constrcut the custom environment variables here + set(envs "PKG_CONFIG_PATH=${INSTALL_DIR}/lib/pkgconfig" "LDFLAGS=-L${INSTALL_DIR}/lib $ENV{LDFLAGS}" "CPPFLAGS=-I${INSTALL_DIR}/include $ENV{CPPFLAGS}") ExternalProject_Add(mad_ PREFIX ${CMAKE_CURRENT_SOURCE_DIR} @@ -59,10 +61,9 @@ if (BUILD_SOX) DOWNLOAD_DIR ${ARCHIVE_DIR} URL https://ftp.osuosl.org/pub/xiph/releases/flac/flac-1.3.2.tar.xz URL_HASH SHA256=91cfc3ed61dc40f47f050a109b08610667d73477af6ef36dcad31c31a4a8d53f - CONFIGURE_COMMAND ${CMAKE_COMMAND} -E env ${envs} ${CMAKE_CURRENT_SOURCE_DIR}/src/flac_/configure ${COMMON_ARGS} --with-ogg + CONFIGURE_COMMAND ${CMAKE_COMMAND} -E env ${envs} ${CMAKE_CURRENT_SOURCE_DIR}/src/flac_/configure ${COMMON_ARGS} --with-ogg --disable-cpplibs BUILD_BYPRODUCTS ${INSTALL_DIR}/lib/libFLAC.a - ${INSTALL_DIR}/lib/libFLAC++.a ) add_library(flac INTERFACE) @@ -70,7 +71,6 @@ if (BUILD_SOX) target_link_libraries( flac INTERFACE ${INSTALL_DIR}/lib/libFLAC.a - ${INSTALL_DIR}/lib/libFLAC++.a ) target_include_directories(flac INTERFACE ${INSTALL_DIR}/include) From f5f24e29e9d5d4a004fa6aa9859683b0b74005de Mon Sep 17 00:00:00 2001 From: moto <855818+mthrok@users.noreply.github.com> Date: Fri, 4 Dec 2020 12:19:06 -0500 Subject: [PATCH 27/29] Fix for apple --- CMakeLists.txt | 24 +++++------------------- build_tools/setup_helpers/extension.py | 4 +--- third_party/CMakeLists.txt | 2 +- 3 files changed, 7 insertions(+), 23 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 659ee34ffc..b27f9821a8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -70,23 +70,9 @@ endif() # _torchaudio.so ################################################################################ if (BUILD_PYTHON_EXTENSION) - # Since this part of code is expected to be called from setup.py, we expect - # that PYTHON_INCLUDE_DIR and PYTHON_LIBRARY are provided. - # If needed, we can add search here, like - # https://github.com/pytorch/pytorch/blob/7f869dca70606c42994d822ba11362a353411a1c/cmake/Dependencies.cmake#L904-L940 - message(STATUS "PYTHON_INCLUDE_DIR: ${PYTHON_INCLUDE_DIR}") - message(STATUS "PYTHON_LIBRARY: ${PYTHON_LIBRARY}") - if (NOT PYTHON_INCLUDE_DIR) - message(FATAL_ERROR "PYTHON_INCLUDE_DIR is not provided.") - endif() - if (NOT PYTHON_LIBRARY) - message(FATAL_ERROR "PYTHON_LIBRARY is not provided.") - endif() - set(Python_ADDITIONAL_VERSIONS ${PYTHON_VERSION}) - find_package(PythonInterp 3.6) - find_package(PythonLibs 3.6 REQUIRED) - message(STATUS "PYTHON_INCLUDE_DIRS: ${PYTHON_INCLUDE_DIRS}") - message(STATUS "PYTHON_LIBRARIES: ${PYTHON_LIBRARIES}") + find_package(Python3 REQUIRED Interpreter Development) + message(STATUS "Python3_INCLUDE_DIRS: ${Python3_INCLUDE_DIRS}") + message(STATUS "Python3_LIBRARIES: ${Python3_LIBRARIES}") add_library( _torchaudio @@ -101,7 +87,7 @@ if (BUILD_PYTHON_EXTENSION) _torchaudio PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} - ${PYTHON_INCLUDE_DIRS} + ${Python3_INCLUDE_DIRS} ) # See https://github.com/pytorch/pytorch/issues/38122 @@ -112,7 +98,7 @@ if (BUILD_PYTHON_EXTENSION) ${TORCHAUDIO_THIRD_PARTIES} ${TORCH_LIBRARIES} ${TORCH_PYTHON_LIBRARY} - ${PYTHON_LIBRARIES} + ${Python3_LIBRARIES} ) # We do not define install for _torchaudio.so diff --git a/build_tools/setup_helpers/extension.py b/build_tools/setup_helpers/extension.py index 9c0f81971f..91a1c1ded2 100644 --- a/build_tools/setup_helpers/extension.py +++ b/build_tools/setup_helpers/extension.py @@ -90,9 +90,7 @@ def build_extension(self, ext): f"-DCMAKE_BUILD_TYPE={cfg}", f"-DCMAKE_PREFIX_PATH={torch.utils.cmake_prefix_path}", f"-DBUILD_SOX:BOOL={_get_build_sox()}", - f"-DPYTHON_INCLUDE_DIR={_get_python_include_dir()}", - f"-DPYTHON_LIBRARY={_get_python_library()}", - f"-DPYTHON_VERSION={sys.version_info[0]}.{sys.version_info[1]}", + f"-DPYTHON_INCLUDE_DIR={sys.executable}", f"-D_GLIBCXX_USE_CXX11_ABI={_get_cxx11_abi()}", "-DBUILD_PYTHON_EXTENSION:BOOL=ON", "-DBUILD_LIBTORCHAUDIO:BOOL=OFF", diff --git a/third_party/CMakeLists.txt b/third_party/CMakeLists.txt index 2b132febfc..3754454888 100644 --- a/third_party/CMakeLists.txt +++ b/third_party/CMakeLists.txt @@ -137,7 +137,7 @@ if (BUILD_SOX) URL_HASH SHA256=81a6956d4330e75b5827316e44ae381e6f1e8928003c6aa45896da9041ea149c # OpenMP is by default compiled against GNU OpenMP, which conflicts with the version of OpenMP that PyTorch uses. # See https://github.com/pytorch/audio/pull/1026 - CONFIGURE_COMMAND ${CMAKE_COMMAND} -E env ${envs} ${CMAKE_CURRENT_SOURCE_DIR}/src/sox_/configure ${COMMON_ARGS} --with-lame --with-flac --with-mad --with-oggvorbis --without-alsa --without-coreaudio --without-png --without-oss --without-sndfile --with-opus --disable-openmp + CONFIGURE_COMMAND ${CMAKE_COMMAND} -E env ${envs} ${CMAKE_CURRENT_SOURCE_DIR}/src/sox_/configure ${COMMON_ARGS} --with-lame --with-flac --with-mad --with-oggvorbis --without-alsa --without-coreaudio --without-png --without-oss --without-sndfile --with-opus --without-amrnb --without-amrwb --disable-openmp BUILD_BYPRODUCTS ${INSTALL_DIR}/lib/libsox.a ) From 2a2a87240a8308f1ce27df522fdce5c78ff145d1 Mon Sep 17 00:00:00 2001 From: moto <855818+mthrok@users.noreply.github.com> Date: Fri, 4 Dec 2020 13:14:40 -0500 Subject: [PATCH 28/29] Update --- CMakeLists.txt | 15 ++++++++++----- build_tools/setup_helpers/extension.py | 3 ++- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b27f9821a8..94ca1344bd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -70,9 +70,14 @@ endif() # _torchaudio.so ################################################################################ if (BUILD_PYTHON_EXTENSION) - find_package(Python3 REQUIRED Interpreter Development) - message(STATUS "Python3_INCLUDE_DIRS: ${Python3_INCLUDE_DIRS}") - message(STATUS "Python3_LIBRARIES: ${Python3_LIBRARIES}") + if (APPLE) + # On Linux, build succeeds without these and fails with these. + # On macOS, build fails without these + message(STATUS "Python_ROOT_DIR: ${Python_ROOT_DIR}") + find_package(Python REQUIRED Interpreter Development) + message(STATUS "Python_INCLUDE_DIRS: ${Python_INCLUDE_DIRS}") + message(STATUS "Python_LIBRARIES: ${Python_LIBRARIES}") + endif() add_library( _torchaudio @@ -87,7 +92,7 @@ if (BUILD_PYTHON_EXTENSION) _torchaudio PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} - ${Python3_INCLUDE_DIRS} + ${Python_INCLUDE_DIRS} ) # See https://github.com/pytorch/pytorch/issues/38122 @@ -98,7 +103,7 @@ if (BUILD_PYTHON_EXTENSION) ${TORCHAUDIO_THIRD_PARTIES} ${TORCH_LIBRARIES} ${TORCH_PYTHON_LIBRARY} - ${Python3_LIBRARIES} + ${Python_LIBRARIES} ) # We do not define install for _torchaudio.so diff --git a/build_tools/setup_helpers/extension.py b/build_tools/setup_helpers/extension.py index 91a1c1ded2..d24abb934a 100644 --- a/build_tools/setup_helpers/extension.py +++ b/build_tools/setup_helpers/extension.py @@ -83,6 +83,7 @@ def build_extension(self, ext): extdir += os.path.sep cfg = "Debug" if self.debug else "Release" + root_dir = Path(sys.executable).parent.parent.resolve() # library_path = os.path.join(get_config_var('LIBDIR'), get_config_var('LDLIBRARY')) cmake_args = [ @@ -90,7 +91,7 @@ def build_extension(self, ext): f"-DCMAKE_BUILD_TYPE={cfg}", f"-DCMAKE_PREFIX_PATH={torch.utils.cmake_prefix_path}", f"-DBUILD_SOX:BOOL={_get_build_sox()}", - f"-DPYTHON_INCLUDE_DIR={sys.executable}", + f"-DPython_ROOT_DIR={root_dir}", f"-D_GLIBCXX_USE_CXX11_ABI={_get_cxx11_abi()}", "-DBUILD_PYTHON_EXTENSION:BOOL=ON", "-DBUILD_LIBTORCHAUDIO:BOOL=OFF", From a60e5b2c7d836eb0d54d8645557a1fad697f44ff Mon Sep 17 00:00:00 2001 From: moto <855818+mthrok@users.noreply.github.com> Date: Fri, 4 Dec 2020 15:02:28 -0500 Subject: [PATCH 29/29] fixup! Update --- CMakeLists.txt | 16 +++++++--------- build_tools/setup_helpers/extension.py | 10 +++------- 2 files changed, 10 insertions(+), 16 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 94ca1344bd..2654cf0265 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -70,14 +70,7 @@ endif() # _torchaudio.so ################################################################################ if (BUILD_PYTHON_EXTENSION) - if (APPLE) - # On Linux, build succeeds without these and fails with these. - # On macOS, build fails without these - message(STATUS "Python_ROOT_DIR: ${Python_ROOT_DIR}") - find_package(Python REQUIRED Interpreter Development) - message(STATUS "Python_INCLUDE_DIRS: ${Python_INCLUDE_DIRS}") - message(STATUS "Python_LIBRARIES: ${Python_LIBRARIES}") - endif() + find_package(Python REQUIRED Interpreter Development) add_library( _torchaudio @@ -88,6 +81,12 @@ if (BUILD_PYTHON_EXTENSION) set_target_properties(_torchaudio PROPERTIES PREFIX "") + if (APPLE) + # https://github.com/facebookarchive/caffe2/issues/854#issuecomment-364538485 + # https://github.com/pytorch/pytorch/commit/73f6715f4725a0723d8171d3131e09ac7abf0666 + set_target_properties(_torchaudio PROPERTIES LINK_FLAGS "-undefined dynamic_lookup") + endif() + target_include_directories( _torchaudio PRIVATE @@ -103,7 +102,6 @@ if (BUILD_PYTHON_EXTENSION) ${TORCHAUDIO_THIRD_PARTIES} ${TORCH_LIBRARIES} ${TORCH_PYTHON_LIBRARY} - ${Python_LIBRARIES} ) # We do not define install for _torchaudio.so diff --git a/build_tools/setup_helpers/extension.py b/build_tools/setup_helpers/extension.py index d24abb934a..ce98900a2f 100644 --- a/build_tools/setup_helpers/extension.py +++ b/build_tools/setup_helpers/extension.py @@ -83,15 +83,13 @@ def build_extension(self, ext): extdir += os.path.sep cfg = "Debug" if self.debug else "Release" - root_dir = Path(sys.executable).parent.parent.resolve() - # library_path = os.path.join(get_config_var('LIBDIR'), get_config_var('LDLIBRARY')) cmake_args = [ f"-DCMAKE_LIBRARY_OUTPUT_DIRECTORY={extdir}", f"-DCMAKE_BUILD_TYPE={cfg}", f"-DCMAKE_PREFIX_PATH={torch.utils.cmake_prefix_path}", f"-DBUILD_SOX:BOOL={_get_build_sox()}", - f"-DPython_ROOT_DIR={root_dir}", + f"-DPython_ROOT_DIR={Path(sys.executable).parent.parent.resolve()}", f"-D_GLIBCXX_USE_CXX11_ABI={_get_cxx11_abi()}", "-DBUILD_PYTHON_EXTENSION:BOOL=ON", "-DBUILD_LIBTORCHAUDIO:BOOL=OFF", @@ -120,11 +118,9 @@ def build_extension(self, ext): os.makedirs(self.build_temp) subprocess.check_call( - ["cmake", str(_ROOT_DIR)] + cmake_args, cwd=self.build_temp - ) + ["cmake", str(_ROOT_DIR)] + cmake_args, cwd=self.build_temp) subprocess.check_call( - ["cmake", "--build", "."] + build_args, cwd=self.build_temp - ) + ["cmake", "--build", "."] + build_args, cwd=self.build_temp) def get_ext_filename(self, fullname): ext_filename = super().get_ext_filename(fullname)