forked from microsoft/CNTK
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Binary drop script. Linux. First version to test with Jenkins
- Loading branch information
Showing
1 changed file
with
185 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,185 @@ | ||
#!/bin/bash | ||
|
||
# Copyright (c) Microsoft. All rights reserved. | ||
# Licensed under the MIT license. See LICENSE file in the project root for full license information. | ||
|
||
# WARNING. This will run in Microsoft Internal Environment ONLY | ||
# Generating CNTK Binary drops in Jenkins environment | ||
|
||
# Stop on Error | ||
set -e | ||
|
||
# Define variables to be set via command parameters | ||
buildConfig= | ||
targetConfig= | ||
verbose=false | ||
|
||
# Process Command line parameters | ||
|
||
usage="Usage: make_binary_drop_linux -b build_configuration -t target_configuration [-v]\n-v Verbose output\nExample: make_binary_drop_linux -b Release -t gpu -v" | ||
|
||
if [[ $# == 0 ]]; then | ||
echo "Command line parameters are missing" >&2 | ||
echo -e $usage >&2 | ||
exit 1 | ||
fi | ||
|
||
while getopts ":b::t::v" opt; do | ||
case $opt in | ||
b) | ||
# Supposed to be taken from Jenkins BUILD_CONFIGURATION | ||
buildConfig=$OPTARG | ||
;; | ||
t) | ||
# Supposed to be taken from Jenkins TARGET_CONFIGURATION | ||
targetConfig=$OPTARG | ||
;; | ||
v) | ||
# Enables verbose output | ||
verbose=true | ||
;; | ||
\?) | ||
echo "Invalid parameter: -$OPTARG" >&2 | ||
echo -e $usage >&2 | ||
exit 1 | ||
;; | ||
:) | ||
echo "Paremeter -$OPTARG requires an argument." >&2 | ||
echo -e $usage >&2 | ||
exit 1 | ||
;; | ||
esac | ||
done | ||
|
||
# Check mandatory parameters presence | ||
if [[ -z "$buildConfig" ]]; then | ||
echo "Parameter -b is missing." >&2 | ||
echo -e $usage >&2 | ||
exit 1 | ||
fi | ||
|
||
if [[ -z "$targetConfig" ]]; then | ||
echo "Parameter -t is missing." >&2 | ||
echo -e $usage >&2 | ||
exit 1 | ||
fi | ||
|
||
# Make buildConfig and targetConfig lowercase | ||
buildConfig=$(echo $buildConfig | tr '[:upper:]' '[:lower:]') | ||
targetConfig=$(echo $targetConfig | tr '[:upper:]' '[:lower:]') | ||
|
||
# Enable "verbose" mode if needed | ||
# stderr is NOT changed | ||
if [[ "$verbose" == true ]]; then | ||
exec 3>&1 | ||
else | ||
exec 3>/dev/null | ||
fi | ||
|
||
# Define helper function | ||
|
||
# File List Copy function | ||
# usage: CopyFilesFromList source_path file_name_array destination_path | ||
function CopyFilesFromList () | ||
{ | ||
declare -a fileNames=(${!2}) | ||
for fileName in "${fileNames[@]}" | ||
do | ||
cp "$1"/"$fileName" "$3" | ||
done | ||
} | ||
|
||
# Main script | ||
|
||
|
||
echo "Making binary drops..." >&3 | ||
|
||
# If not a Release build quit | ||
if [[ $buildConfig != "release" ]]; then | ||
echo "Not a release build. No binary drops generaion" >&3 | ||
exit 0 | ||
fi | ||
|
||
# Dependency files | ||
|
||
# ACML | ||
declare -a acmlFiles=("libacml_mp.so" "libiomp5.so") | ||
|
||
# Open CV | ||
declare -a opencvFiles=("libopencv_core.so.3.0" "libopencv_imgproc.so.3.0" | ||
"libopencv_imgproc.so.3.0" "libopencv_imgcodecs.so.3.0") | ||
|
||
# CUDA | ||
declare -a cudaFiles=("libcudart.so.7.0" "libcublas.so.7.0" "libcurand.so.7.0" "libcusparse.so.7.0") | ||
|
||
# cuDNN | ||
declare -a cudnnFiles=("libcudnn.so.4") | ||
|
||
# Set dependency sources paths | ||
acmlPath="/usr/local/acml5.3.1/ifort64_mp/lib" | ||
opencvPath="/usr/local/opencv-3.0.0/lib" | ||
cudaPath="/usr/local/cuda/lib64" | ||
cudnnPath="/usr/local/cudnn-4.0/cuda/lib64" | ||
|
||
# Set build paths | ||
buildPath="build/"$targetConfig"/release" | ||
basePath="BinaryDrops" | ||
baseDropPath=$basePath"/cntk" | ||
baseBinariesPath=$baseDropPath"/cntk" | ||
baseDependenciesPath=$baseBinariesPath"/dependencies/lib" | ||
extrasPath="Tools/cntk-binary-drop/linux/"$targetConfig | ||
gzipFile="BinaryDrops.tar.gz" | ||
|
||
# Make BinaryDrops directory | ||
mkdir -p $baseBinariesPath | ||
|
||
# Copy build binaries | ||
echo "Copying build binaries..." >&3 | ||
cp -r $buildPath/* $baseBinariesPath | ||
|
||
# Copy Examples | ||
echo "Copying Examples..." >&3 | ||
cp -r Examples $baseDropPath | ||
|
||
# Copy Extras | ||
echo "Copying Extras..." >&3 | ||
cp -r $extrasPath/* $baseDropPath | ||
|
||
# Copy Dependencies | ||
echo "Copying Dependencies..." >&3 | ||
|
||
# Make dependencies directory | ||
mkdir -p $baseDependenciesPath | ||
|
||
# Copy ACML | ||
echo "Copying ACML..." >&3 | ||
CopyFilesFromList $acmlPath acmlFiles[@] $baseDependenciesPath | ||
|
||
# Copy Open CV | ||
echo "Copying Open CV..." >&3 | ||
CopyFilesFromList $opencvPath opencvFiles[@] $baseDependenciesPath | ||
|
||
# GPU Drops only | ||
if [[ $targetConfig != "cpu" ]]; then | ||
|
||
# Copy CUDA | ||
echo "Copying CUDA..." >&3 | ||
CopyFilesFromList $cudaPath cudaFiles[@] $baseDependenciesPath | ||
|
||
# Copy cuDNN | ||
echo "Copying cuDNN..." >&3 | ||
CopyFilesFromList $cudnnPath cudnnFiles[@] $baseDependenciesPath | ||
|
||
fi | ||
|
||
echo "Making Archive and cleaning up..." >&3 | ||
# Make GZipped TAR | ||
cd $basePath | ||
if [[ "$verbose" == true ]]; then | ||
tar -cvzf $gzipFile cntk | ||
else | ||
tar -czf $gzipFile cntk | ||
fi | ||
|
||
# Remove TAR sources | ||
rm -r cntk |