mirror of
https://github.com/facebookresearch/pytorch3d.git
synced 2026-02-06 14:02:19 +08:00
Initial commit
fbshipit-source-id: ad58e416e3ceeca85fae0583308968d04e78fe0d
This commit is contained in:
15
packaging/build_conda.sh
Executable file
15
packaging/build_conda.sh
Executable file
@@ -0,0 +1,15 @@
|
||||
#!/bin/bash
|
||||
# Copyright (c) Facebook, Inc. and its affiliates. All rights reserved.
|
||||
set -ex
|
||||
|
||||
script_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
|
||||
. "$script_dir/pkg_helpers.bash"
|
||||
|
||||
export BUILD_TYPE=conda
|
||||
setup_env 0.1.0
|
||||
export SOURCE_ROOT_DIR="$PWD"
|
||||
setup_conda_pytorch_constraint
|
||||
setup_conda_cudatoolkit_constraint
|
||||
setup_visual_studio_constraint
|
||||
# shellcheck disable=SC2086
|
||||
conda build $CONDA_CHANNEL_FLAGS ${TEST_FLAG:-} -c defaults -c conda-forge --no-anaconda-upload -c takatosp1 --python "$PYTHON_VERSION" packaging/pytorch3d
|
||||
14
packaging/build_wheel.sh
Executable file
14
packaging/build_wheel.sh
Executable file
@@ -0,0 +1,14 @@
|
||||
#!/bin/bash
|
||||
# Copyright (c) Facebook, Inc. and its affiliates. All rights reserved.
|
||||
set -ex
|
||||
|
||||
script_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
|
||||
. "$script_dir/pkg_helpers.bash"
|
||||
|
||||
export BUILD_TYPE=wheel
|
||||
setup_env 0.1.0
|
||||
setup_wheel_python
|
||||
pip_install numpy
|
||||
setup_pip_pytorch_version
|
||||
python setup.py clean
|
||||
IS_WHEEL=1 python setup.py bdist_wheel
|
||||
215
packaging/conda/build_pytorch3d.sh
Executable file
215
packaging/conda/build_pytorch3d.sh
Executable file
@@ -0,0 +1,215 @@
|
||||
#!/usr/bin/env bash
|
||||
# Copyright (c) Facebook, Inc. and its affiliates. All rights reserved.
|
||||
if [[ -x "/remote/anaconda_token" ]]; then
|
||||
. /remote/anaconda_token || true
|
||||
fi
|
||||
|
||||
set -ex
|
||||
|
||||
# Function to retry functions that sometimes timeout or have flaky failures
|
||||
retry () {
|
||||
$* || (sleep 1 && $*) || (sleep 2 && $*) || (sleep 4 && $*) || (sleep 8 && $*)
|
||||
}
|
||||
|
||||
# Parse arguments and determmine version
|
||||
###########################################################
|
||||
|
||||
if [ "$#" -ne 3 ]; then
|
||||
echo "Illegal number of parameters. Pass cuda version, pytorch3d version, pytorch3d build number"
|
||||
echo "CUDA version should be Mm with no dot, e.g. '80'"
|
||||
echo "DESIRED_PYTHON should be M.m, e.g. '2.7'"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
desired_cuda="$1"
|
||||
build_version="$2"
|
||||
build_number="$3"
|
||||
|
||||
if [[ "$desired_cuda" != cpu ]]; then
|
||||
desired_cuda="$(echo $desired_cuda | tr -d cuda. )"
|
||||
fi
|
||||
echo "Building cuda version $desired_cuda and pytorch3d version: $build_version build_number: $build_number"
|
||||
|
||||
if [[ "$desired_cuda" == 'cpu' ]]; then
|
||||
cpu_only=1
|
||||
cuver="cpu"
|
||||
else
|
||||
# Switch desired_cuda to be M.m to be consistent with other scripts in
|
||||
# pytorch/builder
|
||||
export FORCE_CUDA=1
|
||||
cuda_nodot="$desired_cuda"
|
||||
|
||||
if [[ ${#cuda_nodot} -eq 2 ]]; then
|
||||
desired_cuda="${desired_cuda:0:1}.${desired_cuda:1:1}"
|
||||
elif [[ ${#cuda_nodot} -eq 3 ]]; then
|
||||
desired_cuda="${desired_cuda:0:2}.${desired_cuda:2:1}"
|
||||
else
|
||||
echo "unknown cuda version $cuda_nodot"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
cuver="cu$cuda_nodot"
|
||||
fi
|
||||
|
||||
export PYTORCH3D_BUILD_VERSION=$build_version
|
||||
export PYTORCH3D_BUILD_NUMBER=$build_number
|
||||
|
||||
if [[ -z "$DESIRED_PYTHON" ]]; then
|
||||
DESIRED_PYTHON=('3.5' '3.6' '3.7')
|
||||
fi
|
||||
|
||||
SOURCE_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )"
|
||||
|
||||
if [[ -z "$WIN_PACKAGE_WORK_DIR" ]]; then
|
||||
WIN_PACKAGE_WORK_DIR="$(echo $(pwd -W) | tr '/' '\\')\\tmp_conda_$(date +%H%M%S)"
|
||||
fi
|
||||
|
||||
mkdir -p "$WIN_PACKAGE_WORK_DIR" || true
|
||||
pytorch3d_rootdir="$(realpath ${WIN_PACKAGE_WORK_DIR})/pytorch3d-src"
|
||||
git config --system core.longpaths true
|
||||
|
||||
if [[ ! -d "$pytorch3d_rootdir" ]]; then
|
||||
rm -rf "$pytorch3d_rootdir"
|
||||
git clone SOURCE_DIR/../.. "$pytorch3d_rootdir"
|
||||
|
||||
# pushd "$vision_rootdir"
|
||||
# git checkout $PYTORCH_BRANCH
|
||||
# popd
|
||||
fi
|
||||
|
||||
cd "$SOURCE_DIR"
|
||||
|
||||
export tmp_conda="${WIN_PACKAGE_WORK_DIR}\\conda"
|
||||
export miniconda_exe="${WIN_PACKAGE_WORK_DIR}\\miniconda.exe"
|
||||
rm -rf "$tmp_conda"
|
||||
rm -f "$miniconda_exe"
|
||||
curl -sSk https://repo.continuum.io/miniconda/Miniconda3-latest-Windows-x86_64.exe -o "$miniconda_exe"
|
||||
"$SOURCE_DIR/install_conda.bat" && rm "$miniconda_exe"
|
||||
pushd $tmp_conda
|
||||
export PATH="$(pwd):$(pwd)/Library/usr/bin:$(pwd)/Library/bin:$(pwd)/Scripts:$(pwd)/bin:$PATH"
|
||||
popd
|
||||
retry conda install -yq conda-build
|
||||
|
||||
ANACONDA_USER=pytorch-nightly
|
||||
conda config --set anaconda_upload no
|
||||
|
||||
|
||||
export TORCHVISION_PACKAGE_SUFFIX=""
|
||||
if [[ "$desired_cuda" == 'cpu' ]]; then
|
||||
export CONDA_CUDATOOLKIT_CONSTRAINT=""
|
||||
export CONDA_CPUONLY_FEATURE="- cpuonly # [not osx]"
|
||||
export CUDA_VERSION="None"
|
||||
else
|
||||
export CONDA_CPUONLY_FEATURE=""
|
||||
. ./switch_cuda_version.sh $desired_cuda
|
||||
if [[ "$desired_cuda" == "10.1" ]]; then
|
||||
export CONDA_CUDATOOLKIT_CONSTRAINT="- cudatoolkit >=10.1,<10.2 # [not osx]"
|
||||
elif [[ "$desired_cuda" == "10.0" ]]; then
|
||||
export CONDA_CUDATOOLKIT_CONSTRAINT="- cudatoolkit >=10.0,<10.1 # [not osx]"
|
||||
elif [[ "$desired_cuda" == "9.2" ]]; then
|
||||
export CONDA_CUDATOOLKIT_CONSTRAINT="- cudatoolkit >=9.2,<9.3 # [not osx]"
|
||||
elif [[ "$desired_cuda" == "9.0" ]]; then
|
||||
export CONDA_CUDATOOLKIT_CONSTRAINT="- cudatoolkit >=9.0,<9.1 # [not osx]"
|
||||
elif [[ "$desired_cuda" == "8.0" ]]; then
|
||||
export CONDA_CUDATOOLKIT_CONSTRAINT="- cudatoolkit >=8.0,<8.1 # [not osx]"
|
||||
else
|
||||
echo "unhandled desired_cuda: $desired_cuda"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ -z "$PYTORCH_VERSION" ]]; then
|
||||
export CONDA_CHANNEL_FLAGS="-c pytorch-nightly"
|
||||
export PYTORCH_VERSION="$(conda search --json 'pytorch[channel=pytorch-nightly]' | \
|
||||
python -c "import os, sys, json, re; cuver = '$cuver'; \
|
||||
cuver = cuver.replace('cu', 'cuda') if cuver != 'cpu' else cuver; \
|
||||
print(re.sub(r'\\+.*$', '', \
|
||||
[x['version'] for x in json.load(sys.stdin)['pytorch'] \
|
||||
if (x['platform'] == 'darwin' or cuver in x['fn']) \
|
||||
and 'py' + os.environ['DESIRED_PYTHON'] in x['fn']][-1]))")"
|
||||
if [[ -z "$PYTORCH_VERSION" ]]; then
|
||||
echo "PyTorch version auto detection failed"
|
||||
echo "No package found for desired_cuda=$desired_cuda and DESIRED_PYTHON=$DESIRED_PYTHON"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
export CONDA_CHANNEL_FLAGS="-c pytorch -c pytorch-nightly"
|
||||
fi
|
||||
if [[ "$desired_cuda" == 'cpu' ]]; then
|
||||
export CONDA_PYTORCH_BUILD_CONSTRAINT="- pytorch==$PYTORCH_VERSION"
|
||||
export CONDA_PYTORCH_CONSTRAINT="- pytorch==$PYTORCH_VERSION"
|
||||
else
|
||||
export CONDA_PYTORCH_BUILD_CONSTRAINT="- pytorch==${PYTORCH_VERSION}"
|
||||
export CONDA_PYTORCH_CONSTRAINT="- pytorch==${PYTORCH_VERSION}"
|
||||
fi
|
||||
|
||||
# Loop through all Python versions to build a package for each
|
||||
for py_ver in "${DESIRED_PYTHON[@]}"; do
|
||||
build_string="py${py_ver}_${build_string_suffix}"
|
||||
folder_tag="${build_string}_$(date +'%Y%m%d')"
|
||||
|
||||
# Create the conda package into this temporary folder. This is so we can find
|
||||
# the package afterwards, as there's no easy way to extract the final filename
|
||||
# from conda-build
|
||||
output_folder="out_$folder_tag"
|
||||
rm -rf "$output_folder"
|
||||
mkdir "$output_folder"
|
||||
|
||||
export VSTOOLCHAIN_PACKAGE=vs2017
|
||||
|
||||
# We need to build the compiler activation scripts first on Windows
|
||||
time VSDEVCMD_ARGS=${VSDEVCMD_ARGS[@]} \
|
||||
conda build -c "$ANACONDA_USER" \
|
||||
--no-anaconda-upload \
|
||||
--output-folder "$output_folder" \
|
||||
../$VSTOOLCHAIN_PACKAGE
|
||||
|
||||
cp ../$VSTOOLCHAIN_PACKAGE/conda_build_config.yaml ../torchvision/conda_build_config.yaml
|
||||
|
||||
conda config --set anaconda_upload no
|
||||
echo "Calling conda-build at $(date)"
|
||||
if [[ "$desired_cuda" == "9.2" ]]; then
|
||||
time CMAKE_ARGS=${CMAKE_ARGS[@]} \
|
||||
BUILD_VERSION="$PYTORCH3D_BUILD_VERSION" \
|
||||
CU_VERSION="$cuver" \
|
||||
SOURCE_ROOT_DIR="$pytorch3d_rootdir" \
|
||||
conda build -c "$ANACONDA_USER" \
|
||||
-c defaults \
|
||||
-c conda-forge \
|
||||
-c "numba/label/dev" \
|
||||
--no-anaconda-upload \
|
||||
--python "$py_ver" \
|
||||
--output-folder "$output_folder" \
|
||||
--no-verify \
|
||||
--no-test \
|
||||
../torchvision
|
||||
else
|
||||
time CMAKE_ARGS=${CMAKE_ARGS[@]} \
|
||||
BUILD_VERSION="$PYTORCH3D_BUILD_VERSION" \
|
||||
CU_VERSION="$cuver" \
|
||||
SOURCE_ROOT_DIR="$pytorch3d_rootdir" \
|
||||
conda build -c "$ANACONDA_USER" \
|
||||
-c defaults \
|
||||
-c conda-forge \
|
||||
--no-anaconda-upload \
|
||||
--python "$py_ver" \
|
||||
--output-folder "$output_folder" \
|
||||
--no-verify \
|
||||
--no-test \
|
||||
../torchvision
|
||||
fi
|
||||
echo "Finished conda-build at $(date)"
|
||||
|
||||
# Extract the package for testing
|
||||
ls -lah "$output_folder"
|
||||
built_package="$(find $output_folder/ -name '*torchvision*.tar.bz2')"
|
||||
|
||||
# Copy the built package to the host machine for persistence before testing
|
||||
if [[ -n "$PYTORCH_FINAL_PACKAGE_DIR" ]]; then
|
||||
mkdir -p "$PYTORCH_FINAL_PACKAGE_DIR" || true
|
||||
cp "$built_package" "$PYTORCH_FINAL_PACKAGE_DIR/"
|
||||
fi
|
||||
done
|
||||
|
||||
|
||||
set +e
|
||||
2
packaging/conda/install_conda.bat
Normal file
2
packaging/conda/install_conda.bat
Normal file
@@ -0,0 +1,2 @@
|
||||
:: Copyright (c) Facebook, Inc. and its affiliates. All rights reserved.
|
||||
start /wait "" "%miniconda_exe%" /S /InstallationType=JustMe /RegisterPython=0 /AddToPath=0 /D=%tmp_conda%
|
||||
30
packaging/conda/switch_cuda_version.sh
Executable file
30
packaging/conda/switch_cuda_version.sh
Executable file
@@ -0,0 +1,30 @@
|
||||
#!/usr/bin/env bash
|
||||
# Copyright (c) Facebook, Inc. and its affiliates. All rights reserved.
|
||||
if [[ "$OSTYPE" == "msys" ]]; then
|
||||
CUDA_DIR="/c/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v$1"
|
||||
else
|
||||
CUDA_DIR="/usr/local/cuda-$1"
|
||||
fi
|
||||
|
||||
if ! ls "$CUDA_DIR"
|
||||
then
|
||||
echo "folder $CUDA_DIR not found to switch"
|
||||
fi
|
||||
|
||||
echo "Switching symlink to $CUDA_DIR"
|
||||
mkdir -p /usr/local
|
||||
rm -fr /usr/local/cuda
|
||||
ln -s "$CUDA_DIR" /usr/local/cuda
|
||||
|
||||
if [[ "$OSTYPE" == "msys" ]]; then
|
||||
export CUDA_VERSION=`ls /usr/local/cuda/bin/cudart64*.dll | head -1 | tr '._' ' ' | cut -d ' ' -f2`
|
||||
export CUDNN_VERSION=`ls /usr/local/cuda/bin/cudnn64*.dll | head -1 | tr '._' ' ' | cut -d ' ' -f2`
|
||||
else
|
||||
export CUDA_VERSION=$(ls /usr/local/cuda/lib64/libcudart.so.*|sort|tac | head -1 | rev | cut -d"." -f -3 | rev)
|
||||
export CUDNN_VERSION=$(ls /usr/local/cuda/lib64/libcudnn.so.*|sort|tac | head -1 | rev | cut -d"." -f -3 | rev)
|
||||
fi
|
||||
|
||||
ls -alh /usr/local/cuda
|
||||
|
||||
echo "CUDA_VERSION=$CUDA_VERSION"
|
||||
echo "CUDNN_VERSION=$CUDNN_VERSION"
|
||||
265
packaging/pkg_helpers.bash
Normal file
265
packaging/pkg_helpers.bash
Normal file
@@ -0,0 +1,265 @@
|
||||
# Copyright (c) Facebook, Inc. and its affiliates. All rights reserved.
|
||||
# shellcheck shell=bash
|
||||
# A set of useful bash functions for common functionality we need to do in
|
||||
# many build scripts
|
||||
|
||||
|
||||
# Setup CUDA environment variables, based on CU_VERSION
|
||||
#
|
||||
# Inputs:
|
||||
# CU_VERSION (cu92, cu100, cu101)
|
||||
# NO_CUDA_PACKAGE (bool)
|
||||
# BUILD_TYPE (conda, wheel)
|
||||
#
|
||||
# Outputs:
|
||||
# VERSION_SUFFIX (e.g., "")
|
||||
# PYTORCH_VERSION_SUFFIX (e.g., +cpu)
|
||||
# WHEEL_DIR (e.g., cu100/)
|
||||
# CUDA_HOME (e.g., /usr/local/cuda-9.2, respected by torch.utils.cpp_extension)
|
||||
# FORCE_CUDA (respected by pytorch3d setup.py)
|
||||
# NVCC_FLAGS (respected by pytorch3d setup.py)
|
||||
#
|
||||
# Precondition: CUDA versions are installed in their conventional locations in
|
||||
# /usr/local/cuda-*
|
||||
#
|
||||
# NOTE: Why VERSION_SUFFIX versus PYTORCH_VERSION_SUFFIX? If you're building
|
||||
# a package with CUDA on a platform we support CUDA on, VERSION_SUFFIX ==
|
||||
# PYTORCH_VERSION_SUFFIX and everyone is happy. However, if you are building a
|
||||
# package with only CPU bits (e.g., torchaudio), then VERSION_SUFFIX is always
|
||||
# empty, but PYTORCH_VERSION_SUFFIX is +cpu (because that's how you get a CPU
|
||||
# version of a Python package. But that doesn't apply if you're on OS X,
|
||||
# since the default CU_VERSION on OS X is cpu.
|
||||
setup_cuda() {
|
||||
|
||||
# First, compute version suffixes. By default, assume no version suffixes
|
||||
export VERSION_SUFFIX=""
|
||||
export PYTORCH_VERSION_SUFFIX=""
|
||||
export WHEEL_DIR=""
|
||||
# Wheel builds need suffixes (but not if they're on OS X, which never has suffix)
|
||||
if [[ "$BUILD_TYPE" == "wheel" ]] && [[ "$(uname)" != Darwin ]]; then
|
||||
# The default CUDA has no suffix
|
||||
if [[ "$CU_VERSION" != "cu101" ]]; then
|
||||
export PYTORCH_VERSION_SUFFIX="+$CU_VERSION"
|
||||
fi
|
||||
# Match the suffix scheme of pytorch, unless this package does not have
|
||||
# CUDA builds (in which case, use default)
|
||||
if [[ -z "$NO_CUDA_PACKAGE" ]]; then
|
||||
export VERSION_SUFFIX="$PYTORCH_VERSION_SUFFIX"
|
||||
export WHEEL_DIR="$CU_VERSION/"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Now work out the CUDA settings
|
||||
case "$CU_VERSION" in
|
||||
cu101)
|
||||
if [[ "$OSTYPE" == "msys" ]]; then
|
||||
export CUDA_HOME="C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v10.1"
|
||||
else
|
||||
export CUDA_HOME=/usr/local/cuda-10.1/
|
||||
fi
|
||||
export FORCE_CUDA=1
|
||||
# Hard-coding gencode flags is temporary situation until
|
||||
# https://github.com/pytorch/pytorch/pull/23408 lands
|
||||
export NVCC_FLAGS="-gencode=arch=compute_35,code=sm_35 -gencode=arch=compute_50,code=sm_50 -gencode=arch=compute_60,code=sm_60 -gencode=arch=compute_70,code=sm_70 -gencode=arch=compute_75,code=sm_75 -gencode=arch=compute_50,code=compute_50"
|
||||
;;
|
||||
cu100)
|
||||
if [[ "$OSTYPE" == "msys" ]]; then
|
||||
export CUDA_HOME="C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v10.0"
|
||||
else
|
||||
export CUDA_HOME=/usr/local/cuda-10.0/
|
||||
fi
|
||||
export FORCE_CUDA=1
|
||||
# Hard-coding gencode flags is temporary situation until
|
||||
# https://github.com/pytorch/pytorch/pull/23408 lands
|
||||
export NVCC_FLAGS="-gencode=arch=compute_35,code=sm_35 -gencode=arch=compute_50,code=sm_50 -gencode=arch=compute_60,code=sm_60 -gencode=arch=compute_70,code=sm_70 -gencode=arch=compute_75,code=sm_75 -gencode=arch=compute_50,code=compute_50"
|
||||
;;
|
||||
cu92)
|
||||
if [[ "$OSTYPE" == "msys" ]]; then
|
||||
export CUDA_HOME="C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v9.2"
|
||||
else
|
||||
export CUDA_HOME=/usr/local/cuda-9.2/
|
||||
fi
|
||||
export FORCE_CUDA=1
|
||||
export NVCC_FLAGS="-gencode=arch=compute_35,code=sm_35 -gencode=arch=compute_50,code=sm_50 -gencode=arch=compute_60,code=sm_60 -gencode=arch=compute_70,code=sm_70 -gencode=arch=compute_50,code=compute_50"
|
||||
;;
|
||||
cpu)
|
||||
;;
|
||||
*)
|
||||
echo "Unrecognized CU_VERSION=$CU_VERSION"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
# Populate build version if necessary, and add version suffix
|
||||
#
|
||||
# Inputs:
|
||||
# BUILD_VERSION (e.g., 0.2.0 or empty)
|
||||
# VERSION_SUFFIX (e.g., +cpu)
|
||||
#
|
||||
# Outputs:
|
||||
# BUILD_VERSION (e.g., 0.2.0.dev20190807+cpu)
|
||||
#
|
||||
# Fill BUILD_VERSION if it doesn't exist already with a nightly string
|
||||
# Usage: setup_build_version 0.2.0
|
||||
setup_build_version() {
|
||||
if [[ -z "$BUILD_VERSION" ]]; then
|
||||
export BUILD_VERSION="$1.dev$(date "+%Y%m%d")$VERSION_SUFFIX"
|
||||
else
|
||||
export BUILD_VERSION="$BUILD_VERSION$VERSION_SUFFIX"
|
||||
fi
|
||||
}
|
||||
|
||||
# Set some useful variables for OS X, if applicable
|
||||
setup_macos() {
|
||||
if [[ "$(uname)" == Darwin ]]; then
|
||||
export MACOSX_DEPLOYMENT_TARGET=10.9 CC=clang CXX=clang++
|
||||
fi
|
||||
}
|
||||
|
||||
# Top-level entry point for things every package will need to do
|
||||
#
|
||||
# Usage: setup_env 0.2.0
|
||||
setup_env() {
|
||||
setup_cuda
|
||||
setup_build_version "$1"
|
||||
setup_macos
|
||||
}
|
||||
|
||||
# Function to retry functions that sometimes timeout or have flaky failures
|
||||
retry () {
|
||||
$* || (sleep 1 && $*) || (sleep 2 && $*) || (sleep 4 && $*) || (sleep 8 && $*)
|
||||
}
|
||||
|
||||
# Inputs:
|
||||
# PYTHON_VERSION (2.7, 3.5, 3.6, 3.7)
|
||||
# UNICODE_ABI (bool)
|
||||
#
|
||||
# Outputs:
|
||||
# PATH modified to put correct Python version in PATH
|
||||
#
|
||||
# Precondition: If Linux, you are in a soumith/manylinux-cuda* Docker image
|
||||
setup_wheel_python() {
|
||||
if [[ "$(uname)" == Darwin ]]; then
|
||||
eval "$(conda shell.bash hook)"
|
||||
conda env remove -n "env$PYTHON_VERSION" || true
|
||||
conda create -yn "env$PYTHON_VERSION" python="$PYTHON_VERSION"
|
||||
conda activate "env$PYTHON_VERSION"
|
||||
else
|
||||
case "$PYTHON_VERSION" in
|
||||
2.7)
|
||||
if [[ -n "$UNICODE_ABI" ]]; then
|
||||
python_abi=cp27-cp27mu
|
||||
else
|
||||
python_abi=cp27-cp27m
|
||||
fi
|
||||
;;
|
||||
3.5) python_abi=cp35-cp35m ;;
|
||||
3.6) python_abi=cp36-cp36m ;;
|
||||
3.7) python_abi=cp37-cp37m ;;
|
||||
3.8) python_abi=cp38-cp38 ;;
|
||||
*)
|
||||
echo "Unrecognized PYTHON_VERSION=$PYTHON_VERSION"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
export PATH="/opt/python/$python_abi/bin:$PATH"
|
||||
fi
|
||||
}
|
||||
|
||||
# Install with pip a bit more robustly than the default
|
||||
pip_install() {
|
||||
retry pip install --progress-bar off "$@"
|
||||
}
|
||||
|
||||
# Install torch with pip, respecting PYTORCH_VERSION, and record the installed
|
||||
# version into PYTORCH_VERSION, if applicable
|
||||
setup_pip_pytorch_version() {
|
||||
if [[ -z "$PYTORCH_VERSION" ]]; then
|
||||
# Install latest prerelease version of torch, per our nightlies, consistent
|
||||
# with the requested cuda version
|
||||
pip_install --pre torch -f "https://download.pytorch.org/whl/nightly/${WHEEL_DIR}torch_nightly.html"
|
||||
if [[ "$CUDA_VERSION" == "cpu" ]]; then
|
||||
# CUDA and CPU are ABI compatible on the CPU-only parts, so strip
|
||||
# in this case
|
||||
export PYTORCH_VERSION="$(pip show torch | grep ^Version: | sed 's/Version: *//' | sed 's/+.\+//')"
|
||||
else
|
||||
export PYTORCH_VERSION="$(pip show torch | grep ^Version: | sed 's/Version: *//')"
|
||||
fi
|
||||
else
|
||||
pip_install "torch==$PYTORCH_VERSION$CUDA_SUFFIX" \
|
||||
-f https://download.pytorch.org/whl/torch_stable.html \
|
||||
-f https://download.pytorch.org/whl/nightly/torch_nightly.html
|
||||
fi
|
||||
}
|
||||
|
||||
# Fill PYTORCH_VERSION with the latest conda nightly version, and
|
||||
# CONDA_CHANNEL_FLAGS with appropriate flags to retrieve these versions
|
||||
#
|
||||
# You MUST have populated CUDA_SUFFIX before hand.
|
||||
setup_conda_pytorch_constraint() {
|
||||
if [[ -z "$PYTORCH_VERSION" ]]; then
|
||||
export CONDA_CHANNEL_FLAGS="-c pytorch-nightly"
|
||||
export PYTORCH_VERSION="$(conda search --json 'pytorch[channel=pytorch-nightly]' | \
|
||||
python -c "import os, sys, json, re; cuver = os.environ.get('CU_VERSION'); \
|
||||
cuver_1 = cuver.replace('cu', 'cuda') if cuver != 'cpu' else cuver; \
|
||||
cuver_2 = (cuver[:-1] + '.' + cuver[-1]).replace('cu', 'cuda') if cuver != 'cpu' else cuver; \
|
||||
print(re.sub(r'\\+.*$', '', \
|
||||
[x['version'] for x in json.load(sys.stdin)['pytorch'] \
|
||||
if (x['platform'] == 'darwin' or cuver_1 in x['fn'] or cuver_2 in x['fn']) \
|
||||
and 'py' + os.environ['PYTHON_VERSION'] in x['fn']][-1]))")"
|
||||
if [[ -z "$PYTORCH_VERSION" ]]; then
|
||||
echo "PyTorch version auto detection failed"
|
||||
echo "No package found for CU_VERSION=$CU_VERSION and PYTHON_VERSION=$PYTHON_VERSION"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
export CONDA_CHANNEL_FLAGS="-c pytorch -c pytorch-nightly"
|
||||
fi
|
||||
if [[ "$CU_VERSION" == cpu ]]; then
|
||||
export CONDA_PYTORCH_BUILD_CONSTRAINT="- pytorch==$PYTORCH_VERSION${PYTORCH_VERSION_SUFFIX}"
|
||||
export CONDA_PYTORCH_CONSTRAINT="- pytorch==$PYTORCH_VERSION"
|
||||
else
|
||||
export CONDA_PYTORCH_BUILD_CONSTRAINT="- pytorch==${PYTORCH_VERSION}${PYTORCH_VERSION_SUFFIX}"
|
||||
export CONDA_PYTORCH_CONSTRAINT="- pytorch==${PYTORCH_VERSION}${PYTORCH_VERSION_SUFFIX}"
|
||||
fi
|
||||
}
|
||||
|
||||
# Translate CUDA_VERSION into CUDA_CUDATOOLKIT_CONSTRAINT
|
||||
setup_conda_cudatoolkit_constraint() {
|
||||
export CONDA_CPUONLY_FEATURE=""
|
||||
if [[ "$(uname)" == Darwin ]]; then
|
||||
export CONDA_CUDATOOLKIT_CONSTRAINT=""
|
||||
else
|
||||
case "$CU_VERSION" in
|
||||
cu101)
|
||||
export CONDA_CUDATOOLKIT_CONSTRAINT="- cudatoolkit >=10.1,<10.2 # [not osx]"
|
||||
;;
|
||||
cu100)
|
||||
export CONDA_CUDATOOLKIT_CONSTRAINT="- cudatoolkit >=10.0,<10.1 # [not osx]"
|
||||
;;
|
||||
cu92)
|
||||
export CONDA_CUDATOOLKIT_CONSTRAINT="- cudatoolkit >=9.2,<9.3 # [not osx]"
|
||||
;;
|
||||
cpu)
|
||||
export CONDA_CUDATOOLKIT_CONSTRAINT=""
|
||||
export CONDA_CPUONLY_FEATURE="- cpuonly"
|
||||
;;
|
||||
*)
|
||||
echo "Unrecognized CU_VERSION=$CU_VERSION"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
}
|
||||
|
||||
# Build the proper compiler package before building the final package
|
||||
setup_visual_studio_constraint() {
|
||||
if [[ "$OSTYPE" == "msys" ]]; then
|
||||
export VSTOOLCHAIN_PACKAGE=vs2019
|
||||
export VSDEVCMD_ARGS=''
|
||||
# shellcheck disable=SC2086
|
||||
conda build $CONDA_CHANNEL_FLAGS --no-anaconda-upload packaging/$VSTOOLCHAIN_PACKAGE
|
||||
cp packaging/$VSTOOLCHAIN_PACKAGE/conda_build_config.yaml packaging/torchvision/conda_build_config.yaml
|
||||
fi
|
||||
}
|
||||
24
packaging/pytorch3d/conda_build_config.yaml
Normal file
24
packaging/pytorch3d/conda_build_config.yaml
Normal file
@@ -0,0 +1,24 @@
|
||||
blas_impl:
|
||||
- mkl # [x86_64]
|
||||
c_compiler:
|
||||
- vs2017 # [win]
|
||||
cxx_compiler:
|
||||
- vs2017 # [win]
|
||||
python:
|
||||
- 3.5
|
||||
- 3.6
|
||||
# This differs from target_platform in that it determines what subdir the compiler
|
||||
# will target, not what subdir the compiler package will be itself.
|
||||
# For example, we need a win-64 vs2008_win-32 package, so that we compile win-32
|
||||
# code on win-64 miniconda.
|
||||
cross_compiler_target_platform:
|
||||
- win-64 # [win]
|
||||
target_platform:
|
||||
- win-64 # [win]
|
||||
vc:
|
||||
- 14
|
||||
zip_keys:
|
||||
- # [win]
|
||||
- vc # [win]
|
||||
- c_compiler # [win]
|
||||
- cxx_compiler # [win]
|
||||
60
packaging/pytorch3d/meta.yaml
Normal file
60
packaging/pytorch3d/meta.yaml
Normal file
@@ -0,0 +1,60 @@
|
||||
package:
|
||||
name: pytorch3d
|
||||
version: "{{ environ.get('BUILD_VERSION') }}"
|
||||
|
||||
source:
|
||||
path: "{{ environ.get('SOURCE_ROOT_DIR') }}"
|
||||
|
||||
requirements:
|
||||
build:
|
||||
- {{ compiler('c') }} # [win]
|
||||
|
||||
host:
|
||||
- python
|
||||
- setuptools
|
||||
{{ environ.get('CONDA_PYTORCH_BUILD_CONSTRAINT') }}
|
||||
{{ environ.get('CONDA_CUDATOOLKIT_CONSTRAINT') }}
|
||||
{{ environ.get('CONDA_CPUONLY_FEATURE') }}
|
||||
|
||||
run:
|
||||
- python
|
||||
- numpy >=1.11
|
||||
- six
|
||||
- torchvision >=0.5
|
||||
- fvcore
|
||||
{{ environ.get('CONDA_PYTORCH_CONSTRAINT') }}
|
||||
{{ environ.get('CONDA_CUDATOOLKIT_CONSTRAINT') }}
|
||||
|
||||
build:
|
||||
string: py{{py}}_{{ environ['CU_VERSION'] }}
|
||||
script: python setup.py install --single-version-externally-managed --record=record.txt # [not win]
|
||||
script_env:
|
||||
- CUDA_HOME
|
||||
- FORCE_CUDA
|
||||
- NVCC_FLAGS
|
||||
features:
|
||||
{{ environ.get('CONDA_CPUONLY_FEATURE') }}
|
||||
|
||||
test:
|
||||
imports:
|
||||
- pytorch3d
|
||||
source_files:
|
||||
- tests
|
||||
- docs
|
||||
requires:
|
||||
- pytest
|
||||
- scipy
|
||||
- mock
|
||||
- av
|
||||
- ca-certificates
|
||||
- typing
|
||||
commands:
|
||||
#pytest .
|
||||
python -m unittest discover -v -s tests
|
||||
|
||||
|
||||
about:
|
||||
home: https://github.com/facebookresearch/pytorch3d
|
||||
license: BSD
|
||||
license_file: LICENSE
|
||||
summary: '3d Geometry for pytorch'
|
||||
45
packaging/vs2017/activate.bat
Normal file
45
packaging/vs2017/activate.bat
Normal file
@@ -0,0 +1,45 @@
|
||||
:: Copyright (c) Facebook, Inc. and its affiliates. All rights reserved.
|
||||
:: Set env vars that tell distutils to use the compiler that we put on path
|
||||
SET DISTUTILS_USE_SDK=1
|
||||
SET MSSdk=1
|
||||
|
||||
SET "VS_VERSION=15.0"
|
||||
SET "VS_MAJOR=15"
|
||||
SET "VS_YEAR=2017"
|
||||
|
||||
set "MSYS2_ARG_CONV_EXCL=/AI;/AL;/OUT;/out"
|
||||
set "MSYS2_ENV_CONV_EXCL=CL"
|
||||
|
||||
:: For Python 3.5+, ensure that we link with the dynamic runtime. See
|
||||
:: http://stevedower.id.au/blog/building-for-python-3-5-part-two/ for more info
|
||||
set "PY_VCRUNTIME_REDIST=%PREFIX%\\bin\\vcruntime140.dll"
|
||||
|
||||
for /f "usebackq tokens=*" %%i in (`"%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" -legacy -products * -version [15^,16^) -property installationPath`) do (
|
||||
if exist "%%i" if exist "%%i\VC\Auxiliary\Build\vcvarsall.bat" (
|
||||
set "VSINSTALLDIR=%%i\"
|
||||
goto :vswhere
|
||||
)
|
||||
)
|
||||
|
||||
:vswhere
|
||||
|
||||
:: Shorten PATH to avoid the `input line too long` error.
|
||||
SET MyPath=%PATH%
|
||||
|
||||
setlocal EnableDelayedExpansion
|
||||
|
||||
SET TempPath="%MyPath:;=";"%"
|
||||
SET var=
|
||||
FOR %%a IN (%TempPath%) DO (
|
||||
IF EXIST %%~sa (
|
||||
SET "var=!var!;%%~sa"
|
||||
)
|
||||
)
|
||||
|
||||
set "TempPath=!var:~1!"
|
||||
endlocal & set "PATH=%TempPath%"
|
||||
|
||||
:: Shorten current directory too
|
||||
FOR %%A IN (.) DO CD "%%~sA"
|
||||
|
||||
:: other things added by install_activate.bat at package build time
|
||||
24
packaging/vs2017/conda_build_config.yaml
Normal file
24
packaging/vs2017/conda_build_config.yaml
Normal file
@@ -0,0 +1,24 @@
|
||||
blas_impl:
|
||||
- mkl # [x86_64]
|
||||
c_compiler:
|
||||
- vs2017 # [win]
|
||||
cxx_compiler:
|
||||
- vs2017 # [win]
|
||||
python:
|
||||
- 3.5
|
||||
- 3.6
|
||||
# This differs from target_platform in that it determines what subdir the compiler
|
||||
# will target, not what subdir the compiler package will be itself.
|
||||
# For example, we need a win-64 vs2008_win-32 package, so that we compile win-32
|
||||
# code on win-64 miniconda.
|
||||
cross_compiler_target_platform:
|
||||
- win-64 # [win]
|
||||
target_platform:
|
||||
- win-64 # [win]
|
||||
vc:
|
||||
- 14
|
||||
zip_keys:
|
||||
- # [win]
|
||||
- vc # [win]
|
||||
- c_compiler # [win]
|
||||
- cxx_compiler # [win]
|
||||
30
packaging/vs2017/install_activate.bat
Normal file
30
packaging/vs2017/install_activate.bat
Normal file
@@ -0,0 +1,30 @@
|
||||
:: Copyright (c) Facebook, Inc. and its affiliates. All rights reserved.
|
||||
set YEAR=2017
|
||||
set VER=15
|
||||
|
||||
mkdir "%PREFIX%\etc\conda\activate.d"
|
||||
COPY "%RECIPE_DIR%\activate.bat" "%PREFIX%\etc\conda\activate.d\vs%YEAR%_compiler_vars.bat"
|
||||
|
||||
IF "%cross_compiler_target_platform%" == "win-64" (
|
||||
set "target_platform=amd64"
|
||||
echo SET "CMAKE_GENERATOR=Visual Studio %VER% %YEAR% Win64" >> "%PREFIX%\etc\conda\activate.d\vs%YEAR%_compiler_vars.bat"
|
||||
echo pushd "%%VSINSTALLDIR%%" >> "%PREFIX%\etc\conda\activate.d\vs%YEAR%_compiler_vars.bat"
|
||||
IF "%VSDEVCMD_ARGS%" == "" (
|
||||
echo CALL "VC\Auxiliary\Build\vcvarsall.bat" x64 >> "%PREFIX%\etc\conda\activate.d\vs%YEAR%_compiler_vars.bat"
|
||||
echo popd >> "%PREFIX%\etc\conda\activate.d\vs%YEAR%_compiler_vars.bat"
|
||||
echo pushd "%%VSINSTALLDIR%%" >> "%PREFIX%\etc\conda\activate.d\vs%YEAR%_compiler_vars.bat"
|
||||
echo CALL "VC\Auxiliary\Build\vcvarsall.bat" x86_amd64 >> "%PREFIX%\etc\conda\activate.d\vs%YEAR%_compiler_vars.bat"
|
||||
) ELSE (
|
||||
echo CALL "VC\Auxiliary\Build\vcvarsall.bat" x64 %VSDEVCMD_ARGS% >> "%PREFIX%\etc\conda\activate.d\vs%YEAR%_compiler_vars.bat"
|
||||
echo popd >> "%PREFIX%\etc\conda\activate.d\vs%YEAR%_compiler_vars.bat"
|
||||
echo pushd "%%VSINSTALLDIR%%" >> "%PREFIX%\etc\conda\activate.d\vs%YEAR%_compiler_vars.bat"
|
||||
echo CALL "VC\Auxiliary\Build\vcvarsall.bat" x86_amd64 %VSDEVCMD_ARGS% >> "%PREFIX%\etc\conda\activate.d\vs%YEAR%_compiler_vars.bat"
|
||||
)
|
||||
echo popd >> "%PREFIX%\etc\conda\activate.d\vs%YEAR%_compiler_vars.bat"
|
||||
) else (
|
||||
set "target_platform=x86"
|
||||
echo SET "CMAKE_GENERATOR=Visual Studio %VER% %YEAR%" >> "%PREFIX%\etc\conda\activate.d\vs%YEAR%_compiler_vars.bat"
|
||||
echo pushd "%%VSINSTALLDIR%%" >> "%PREFIX%\etc\conda\activate.d\vs%YEAR%_compiler_vars.bat"
|
||||
echo CALL "VC\Auxiliary\Build\vcvars32.bat" >> "%PREFIX%\etc\conda\activate.d\vs%YEAR%_compiler_vars.bat"
|
||||
echo popd
|
||||
)
|
||||
50
packaging/vs2017/install_runtime.bat
Normal file
50
packaging/vs2017/install_runtime.bat
Normal file
@@ -0,0 +1,50 @@
|
||||
:: Copyright (c) Facebook, Inc. and its affiliates. All rights reserved.
|
||||
set VC_PATH=x86
|
||||
if "%ARCH%"=="64" (
|
||||
set VC_PATH=x64
|
||||
)
|
||||
|
||||
set MSC_VER=2017
|
||||
|
||||
rem :: This should always be present for VC installed with VS. Not sure about VC installed with Visual C++ Build Tools 2015
|
||||
rem FOR /F "usebackq tokens=3*" %%A IN (`REG QUERY "HKEY_LOCAL_MACHINE\Software\Microsoft\DevDiv\VC\Servicing\14.0\IDE.x64" /v UpdateVersion`) DO (
|
||||
rem set SP=%%A
|
||||
rem )
|
||||
|
||||
rem if not "%SP%" == "%PKG_VERSION%" (
|
||||
rem echo "Version detected from registry: %SP%"
|
||||
rem echo "does not match version of package being built (%PKG_VERSION%)"
|
||||
rem echo "Do you have current updates for VS 2015 installed?"
|
||||
rem exit 1
|
||||
rem )
|
||||
|
||||
|
||||
REM ========== REQUIRES Win 10 SDK be installed, or files otherwise copied to location below!
|
||||
robocopy "C:\Program Files (x86)\Windows Kits\10\Redist\ucrt\DLLs\%VC_PATH%" "%LIBRARY_BIN%" *.dll /E
|
||||
robocopy "C:\Program Files (x86)\Windows Kits\10\Redist\ucrt\DLLs\%VC_PATH%" "%PREFIX%" *.dll /E
|
||||
if %ERRORLEVEL% GEQ 8 exit 1
|
||||
|
||||
REM ========== This one comes from visual studio 2017
|
||||
set "VC_VER=141"
|
||||
|
||||
for /f "usebackq tokens=*" %%i in (`"%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" -legacy -products * -version [15^,16^) -property installationPath`) do (
|
||||
if exist "%%i" if exist "%%i\VC\Auxiliary\Build\vcvarsall.bat" (
|
||||
set "VS15VCVARSALL=%%i\VC\Auxiliary\Build\vcvarsall.bat"
|
||||
goto :eof
|
||||
)
|
||||
)
|
||||
|
||||
@setlocal
|
||||
call "%VS15VARSALL%" x64
|
||||
|
||||
set "REDIST_ROOT=%VCToolsRedistDir%%VC_PATH%"
|
||||
|
||||
robocopy "%REDIST_ROOT%\Microsoft.VC%VC_VER%.CRT" "%LIBRARY_BIN%" *.dll /E
|
||||
if %ERRORLEVEL% LSS 8 exit 0
|
||||
robocopy "%REDIST_ROOT%\Microsoft.VC%VC_VER%.CRT" "%PREFIX%" *.dll /E
|
||||
if %ERRORLEVEL% LSS 8 exit 0
|
||||
robocopy "%REDIST_ROOT%\Microsoft.VC%VC_VER%.OpenMP" "%LIBRARY_BIN%" *.dll /E
|
||||
if %ERRORLEVEL% LSS 8 exit 0
|
||||
robocopy "%REDIST_ROOT%\Microsoft.VC%VC_VER%.OpenMP" "%PREFIX%" *.dll /E
|
||||
if %ERRORLEVEL% LSS 8 exit 0
|
||||
@endlocal
|
||||
45
packaging/vs2017/meta.yaml
Normal file
45
packaging/vs2017/meta.yaml
Normal file
@@ -0,0 +1,45 @@
|
||||
{% set vcver="14.1" %}
|
||||
{% set vcfeature="14" %}
|
||||
{% set vsyear="2017" %}
|
||||
{% set fullver="15.4.27004.2010" %}
|
||||
|
||||
package:
|
||||
name: vs{{ vsyear }}
|
||||
version: {{ fullver }}
|
||||
|
||||
build:
|
||||
skip: True [not win]
|
||||
script_env:
|
||||
- VSDEVCMD_ARGS # [win]
|
||||
|
||||
outputs:
|
||||
- name: vs{{ vsyear }}_{{ cross_compiler_target_platform }}
|
||||
script: install_activate.bat
|
||||
track_features:
|
||||
# VS 2017 is binary-compatible with VS 2015/vc14. Tools are "v141".
|
||||
strong:
|
||||
- vc{{ vcfeature }}
|
||||
run_exports:
|
||||
- vc {{ vcver }}
|
||||
about:
|
||||
summary: Activation and version verification of MSVC {{ vcver }} (VS {{ vsyear }}) compiler
|
||||
license: BSD 3-clause
|
||||
- name: vs{{ vsyear }}_runtime
|
||||
script: install_runtime.bat
|
||||
- name: vc
|
||||
version: {{ vcver }}
|
||||
track_features:
|
||||
- vc{{ vcfeature }}
|
||||
requirements:
|
||||
run:
|
||||
- {{ pin_subpackage('vs' ~ vsyear ~ '_runtime') }}
|
||||
about:
|
||||
home: https://github.com/conda/conda/wiki/VC-features
|
||||
license: Modified BSD License (3-clause)
|
||||
license_family: BSD
|
||||
summary: A meta-package to track VC features.
|
||||
description: |
|
||||
This metapackage is used to activate vc features without
|
||||
depending on Python.
|
||||
doc_url: https://github.com/conda/conda/wiki/VC-features
|
||||
dev_url: https://github.com/conda/conda/wiki/VC-features
|
||||
45
packaging/vs2019/activate.bat
Normal file
45
packaging/vs2019/activate.bat
Normal file
@@ -0,0 +1,45 @@
|
||||
:: Copyright (c) Facebook, Inc. and its affiliates. All rights reserved.
|
||||
:: Set env vars that tell distutils to use the compiler that we put on path
|
||||
SET DISTUTILS_USE_SDK=1
|
||||
SET MSSdk=1
|
||||
|
||||
SET "VS_VERSION=16.0"
|
||||
SET "VS_MAJOR=16"
|
||||
SET "VS_YEAR=2019"
|
||||
|
||||
set "MSYS2_ARG_CONV_EXCL=/AI;/AL;/OUT;/out"
|
||||
set "MSYS2_ENV_CONV_EXCL=CL"
|
||||
|
||||
:: For Python 3.5+, ensure that we link with the dynamic runtime. See
|
||||
:: http://stevedower.id.au/blog/building-for-python-3-5-part-two/ for more info
|
||||
set "PY_VCRUNTIME_REDIST=%PREFIX%\\bin\\vcruntime140.dll"
|
||||
|
||||
for /f "usebackq tokens=*" %%i in (`"%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" -legacy -products * -version [16^,17^) -property installationPath`) do (
|
||||
if exist "%%i" if exist "%%i\VC\Auxiliary\Build\vcvarsall.bat" (
|
||||
set "VSINSTALLDIR=%%i\"
|
||||
goto :vswhere
|
||||
)
|
||||
)
|
||||
|
||||
:vswhere
|
||||
|
||||
:: Shorten PATH to avoid the `input line too long` error.
|
||||
SET MyPath=%PATH%
|
||||
|
||||
setlocal EnableDelayedExpansion
|
||||
|
||||
SET TempPath="%MyPath:;=";"%"
|
||||
SET var=
|
||||
FOR %%a IN (%TempPath%) DO (
|
||||
IF EXIST %%~sa (
|
||||
SET "var=!var!;%%~sa"
|
||||
)
|
||||
)
|
||||
|
||||
set "TempPath=!var:~1!"
|
||||
endlocal & set "PATH=%TempPath%"
|
||||
|
||||
:: Shorten current directory too
|
||||
FOR %%A IN (.) DO CD "%%~sA"
|
||||
|
||||
:: other things added by install_activate.bat at package build time
|
||||
24
packaging/vs2019/conda_build_config.yaml
Normal file
24
packaging/vs2019/conda_build_config.yaml
Normal file
@@ -0,0 +1,24 @@
|
||||
blas_impl:
|
||||
- mkl # [x86_64]
|
||||
c_compiler:
|
||||
- vs2019 # [win]
|
||||
cxx_compiler:
|
||||
- vs2019 # [win]
|
||||
python:
|
||||
- 3.5
|
||||
- 3.6
|
||||
# This differs from target_platform in that it determines what subdir the compiler
|
||||
# will target, not what subdir the compiler package will be itself.
|
||||
# For example, we need a win-64 vs2008_win-32 package, so that we compile win-32
|
||||
# code on win-64 miniconda.
|
||||
cross_compiler_target_platform:
|
||||
- win-64 # [win]
|
||||
target_platform:
|
||||
- win-64 # [win]
|
||||
vc:
|
||||
- 14
|
||||
zip_keys:
|
||||
- # [win]
|
||||
- vc # [win]
|
||||
- c_compiler # [win]
|
||||
- cxx_compiler # [win]
|
||||
30
packaging/vs2019/install_activate.bat
Normal file
30
packaging/vs2019/install_activate.bat
Normal file
@@ -0,0 +1,30 @@
|
||||
:: Copyright (c) Facebook, Inc. and its affiliates. All rights reserved.
|
||||
set YEAR=2019
|
||||
set VER=16
|
||||
|
||||
mkdir "%PREFIX%\etc\conda\activate.d"
|
||||
COPY "%RECIPE_DIR%\activate.bat" "%PREFIX%\etc\conda\activate.d\vs%YEAR%_compiler_vars.bat"
|
||||
|
||||
IF "%cross_compiler_target_platform%" == "win-64" (
|
||||
set "target_platform=amd64"
|
||||
echo SET "CMAKE_GENERATOR=Visual Studio %VER% %YEAR% Win64" >> "%PREFIX%\etc\conda\activate.d\vs%YEAR%_compiler_vars.bat"
|
||||
echo pushd "%%VSINSTALLDIR%%" >> "%PREFIX%\etc\conda\activate.d\vs%YEAR%_compiler_vars.bat"
|
||||
IF "%VSDEVCMD_ARGS%" == "" (
|
||||
echo CALL "VC\Auxiliary\Build\vcvarsall.bat" x64 >> "%PREFIX%\etc\conda\activate.d\vs%YEAR%_compiler_vars.bat"
|
||||
echo popd >> "%PREFIX%\etc\conda\activate.d\vs%YEAR%_compiler_vars.bat"
|
||||
echo pushd "%%VSINSTALLDIR%%" >> "%PREFIX%\etc\conda\activate.d\vs%YEAR%_compiler_vars.bat"
|
||||
echo CALL "VC\Auxiliary\Build\vcvarsall.bat" x86_amd64 >> "%PREFIX%\etc\conda\activate.d\vs%YEAR%_compiler_vars.bat"
|
||||
) ELSE (
|
||||
echo CALL "VC\Auxiliary\Build\vcvarsall.bat" x64 %VSDEVCMD_ARGS% >> "%PREFIX%\etc\conda\activate.d\vs%YEAR%_compiler_vars.bat"
|
||||
echo popd >> "%PREFIX%\etc\conda\activate.d\vs%YEAR%_compiler_vars.bat"
|
||||
echo pushd "%%VSINSTALLDIR%%" >> "%PREFIX%\etc\conda\activate.d\vs%YEAR%_compiler_vars.bat"
|
||||
echo CALL "VC\Auxiliary\Build\vcvarsall.bat" x86_amd64 %VSDEVCMD_ARGS% >> "%PREFIX%\etc\conda\activate.d\vs%YEAR%_compiler_vars.bat"
|
||||
)
|
||||
echo popd >> "%PREFIX%\etc\conda\activate.d\vs%YEAR%_compiler_vars.bat"
|
||||
) else (
|
||||
set "target_platform=x86"
|
||||
echo SET "CMAKE_GENERATOR=Visual Studio %VER% %YEAR%" >> "%PREFIX%\etc\conda\activate.d\vs%YEAR%_compiler_vars.bat"
|
||||
echo pushd "%%VSINSTALLDIR%%" >> "%PREFIX%\etc\conda\activate.d\vs%YEAR%_compiler_vars.bat"
|
||||
echo CALL "VC\Auxiliary\Build\vcvars32.bat" >> "%PREFIX%\etc\conda\activate.d\vs%YEAR%_compiler_vars.bat"
|
||||
echo popd
|
||||
)
|
||||
50
packaging/vs2019/install_runtime.bat
Normal file
50
packaging/vs2019/install_runtime.bat
Normal file
@@ -0,0 +1,50 @@
|
||||
:: Copyright (c) Facebook, Inc. and its affiliates. All rights reserved.
|
||||
set VC_PATH=x86
|
||||
if "%ARCH%"=="64" (
|
||||
set VC_PATH=x64
|
||||
)
|
||||
|
||||
set MSC_VER=2019
|
||||
|
||||
rem :: This should always be present for VC installed with VS. Not sure about VC installed with Visual C++ Build Tools 2015
|
||||
rem FOR /F "usebackq tokens=3*" %%A IN (`REG QUERY "HKEY_LOCAL_MACHINE\Software\Microsoft\DevDiv\VC\Servicing\14.0\IDE.x64" /v UpdateVersion`) DO (
|
||||
rem set SP=%%A
|
||||
rem )
|
||||
|
||||
rem if not "%SP%" == "%PKG_VERSION%" (
|
||||
rem echo "Version detected from registry: %SP%"
|
||||
rem echo "does not match version of package being built (%PKG_VERSION%)"
|
||||
rem echo "Do you have current updates for VS 2015 installed?"
|
||||
rem exit 1
|
||||
rem )
|
||||
|
||||
|
||||
REM ========== REQUIRES Win 10 SDK be installed, or files otherwise copied to location below!
|
||||
robocopy "C:\Program Files (x86)\Windows Kits\10\Redist\ucrt\DLLs\%VC_PATH%" "%LIBRARY_BIN%" *.dll /E
|
||||
robocopy "C:\Program Files (x86)\Windows Kits\10\Redist\ucrt\DLLs\%VC_PATH%" "%PREFIX%" *.dll /E
|
||||
if %ERRORLEVEL% GEQ 8 exit 1
|
||||
|
||||
REM ========== This one comes from visual studio 2019
|
||||
set "VC_VER=142"
|
||||
|
||||
for /f "usebackq tokens=*" %%i in (`"%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" -legacy -products * -version [16^,17^) -property installationPath`) do (
|
||||
if exist "%%i" if exist "%%i\VC\Auxiliary\Build\vcvarsall.bat" (
|
||||
set "VS15VCVARSALL=%%i\VC\Auxiliary\Build\vcvarsall.bat"
|
||||
goto :eof
|
||||
)
|
||||
)
|
||||
|
||||
@setlocal
|
||||
call "%VS15VARSALL%" x64
|
||||
|
||||
set "REDIST_ROOT=%VCToolsRedistDir%%VC_PATH%"
|
||||
|
||||
robocopy "%REDIST_ROOT%\Microsoft.VC%VC_VER%.CRT" "%LIBRARY_BIN%" *.dll /E
|
||||
if %ERRORLEVEL% LSS 8 exit 0
|
||||
robocopy "%REDIST_ROOT%\Microsoft.VC%VC_VER%.CRT" "%PREFIX%" *.dll /E
|
||||
if %ERRORLEVEL% LSS 8 exit 0
|
||||
robocopy "%REDIST_ROOT%\Microsoft.VC%VC_VER%.OpenMP" "%LIBRARY_BIN%" *.dll /E
|
||||
if %ERRORLEVEL% LSS 8 exit 0
|
||||
robocopy "%REDIST_ROOT%\Microsoft.VC%VC_VER%.OpenMP" "%PREFIX%" *.dll /E
|
||||
if %ERRORLEVEL% LSS 8 exit 0
|
||||
@endlocal
|
||||
45
packaging/vs2019/meta.yaml
Normal file
45
packaging/vs2019/meta.yaml
Normal file
@@ -0,0 +1,45 @@
|
||||
{% set vcver="14.2" %}
|
||||
{% set vcfeature="14" %}
|
||||
{% set vsyear="2019" %}
|
||||
{% set fullver="15.4.27004.2010" %}
|
||||
|
||||
package:
|
||||
name: vs{{ vsyear }}
|
||||
version: {{ fullver }}
|
||||
|
||||
build:
|
||||
skip: True [not win]
|
||||
script_env:
|
||||
- VSDEVCMD_ARGS # [win]
|
||||
|
||||
outputs:
|
||||
- name: vs{{ vsyear }}_{{ cross_compiler_target_platform }}
|
||||
script: install_activate.bat
|
||||
track_features:
|
||||
# VS 2019 is binary-compatible with VS 2017/vc 14.1 and 2015/vc14. Tools are "v142".
|
||||
strong:
|
||||
- vc{{ vcfeature }}
|
||||
run_exports:
|
||||
- vc {{ vcver }}
|
||||
about:
|
||||
summary: Activation and version verification of MSVC {{ vcver }} (VS {{ vsyear }}) compiler
|
||||
license: BSD 3-clause
|
||||
- name: vs{{ vsyear }}_runtime
|
||||
script: install_runtime.bat
|
||||
- name: vc
|
||||
version: {{ vcver }}
|
||||
track_features:
|
||||
- vc{{ vcfeature }}
|
||||
requirements:
|
||||
run:
|
||||
- {{ pin_subpackage('vs' ~ vsyear ~ '_runtime') }}
|
||||
about:
|
||||
home: https://github.com/conda/conda/wiki/VC-features
|
||||
license: Modified BSD License (3-clause)
|
||||
license_family: BSD
|
||||
summary: A meta-package to track VC features.
|
||||
description: |
|
||||
This metapackage is used to activate vc features without
|
||||
depending on Python.
|
||||
doc_url: https://github.com/conda/conda/wiki/VC-features
|
||||
dev_url: https://github.com/conda/conda/wiki/VC-features
|
||||
Reference in New Issue
Block a user