Side-by-Side compilation for Windows and Linux

This commit is contained in:
David Brownell 2018-06-06 11:49:57 -07:00
Родитель 7882cf052b
Коммит c42a444b87
6 изменённых файлов: 41 добавлений и 38 удалений

6
.gitignore поставляемый
Просмотреть файл

@ -25,8 +25,6 @@ build/
lib/
bin/
Generated Files/
buildinfo.h$$
# Enable "build/" folder in the NuGet Packages folder since NuGet packages use it for MSBuild targets
!packages/*/build/
@ -191,9 +189,7 @@ core
*.lyx~
# prebuild file
Source/CNTK/buildinfo.h
Source/CNTK/buildinfo.h$$
Source/CNTKv2LibraryDll/buildinfo.h
Source/CNTKv2LibraryDll/Generated
Source/CNTKv2LibraryDll/tensorboard/tensorboard.pb.h
Source/CNTKv2LibraryDll/tensorboard/tensorboard.pb.cc

Просмотреть файл

@ -92,7 +92,7 @@ PROTOC = $(PROTOBUF_PATH)/bin/protoc
SOURCEDIR:= Source
GSL_PATH:=$(SOURCEDIR)/../external/gsl
INCLUDEPATH:= $(addprefix $(SOURCEDIR)/, Common/Include CNTKv2LibraryDll CNTKv2LibraryDll/API CNTKv2LibraryDll/proto ../Examples/Extensibility/CPP Math CNTK ActionsLib ComputationNetworkLib SGDLib SequenceTrainingLib CNTK/BrainScript Readers/ReaderLib PerformanceProfilerDll)
INCLUDEPATH:= $(addprefix $(SOURCEDIR)/, Common/Include CNTKv2LibraryDll CNTKv2LibraryDll/API CNTKv2LibraryDll/Generated/Linux CNTKv2LibraryDll/proto ../Examples/Extensibility/CPP Math CNTK ActionsLib ComputationNetworkLib SGDLib SequenceTrainingLib CNTK/BrainScript Readers/ReaderLib PerformanceProfilerDll)
INCLUDEPATH+=$(PROTOBUF_PATH)/include
INCLUDEPATH+=$(GSL_PATH)/include
# COMMON_FLAGS include settings that are passed both to NVCC and C++ compilers.
@ -307,7 +307,7 @@ RPATH=-Wl,-rpath,
# Build info
########################################
BUILDINFO:= $(SOURCEDIR)/CNTKv2LibraryDll/buildinfo.h
BUILDINFO:= $(SOURCEDIR)/CNTKv2LibraryDll/Generated/Linux/buildinfo.h
GENBUILD:=Tools/generate_build_info
BUILDINFO_OUTPUT := $(shell $(GENBUILD) $(BUILD_TOP)/Config.make && echo Success)

Просмотреть файл

@ -56,7 +56,7 @@
</PropertyGroup>
<ItemDefinitionGroup>
<ClCompile>
<AdditionalIncludeDirectories>$(SolutionDir)Source\CNTKv2LibraryDll;$(SolutionDir)Source\CNTKv2LibraryDll\API;$(SolutionDir)Source\Readers\ReaderLib;$(SolutionDir)Source\ActionsLib;$(SolutionDir)Source\SequenceTrainingLib;$(SolutionDir)Source\SGDLib;$(SolutionDir)Source\ComputationNetworkLib;$(SolutionDir)Source\Math;$(SolutionDir)Source\Common\Include;$(SolutionDir)Source\CNTK\BrainScript;$(MSMPI_INC);$(NvmlInclude);$(SolutionDir)Source\PerformanceProfilerDll</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>$(SolutionDir)Source\CNTKv2LibraryDll;$(SolutionDir)Source\CNTKv2LibraryDll\API;$(SolutionDir)Source\CNTKv2LibraryDll\Generated\Windows;$(SolutionDir)Source\Readers\ReaderLib;$(SolutionDir)Source\ActionsLib;$(SolutionDir)Source\SequenceTrainingLib;$(SolutionDir)Source\SGDLib;$(SolutionDir)Source\ComputationNetworkLib;$(SolutionDir)Source\Math;$(SolutionDir)Source\Common\Include;$(SolutionDir)Source\CNTK\BrainScript;$(MSMPI_INC);$(NvmlInclude);$(SolutionDir)Source\PerformanceProfilerDll</AdditionalIncludeDirectories>
<DisableSpecificWarnings>4819</DisableSpecificWarnings>
</ClCompile>
<Link>

Просмотреть файл

@ -66,8 +66,8 @@
</ItemDefinitionGroup>
<ItemDefinitionGroup>
<ClCompile>
<AdditionalIncludeDirectories>.\API;.\proto;$(BOOST_INCLUDE_PATH);$(SolutionDir)\Source\CNTKv2LibraryDll;$(SolutionDir)Source\SGDLib;$(SolutionDir)Source\Readers\ReaderLib;$(SolutionDir)Source\ComputationNetworkLib;$(SolutionDir)Source\SequenceTrainingLib;$(SolutionDir)Source\Math;$(SolutionDir)Source\Common\Include;$(SolutionDir)Source\CNTK\BrainScript;$(SolutionDir)Source\ActionsLib;$(MSMPI_INC);$(NvmlInclude);$(ProtobufInclude);$(SolutionDir)Source\PerformanceProfilerDll;..\..\external\gsl\include</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories Condition="'!$(IsUWP)'">$(SolutionDir)Source\1BitSGD;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>.\API;.\proto;$(BOOST_INCLUDE_PATH);$(SolutionDir)\Source\CNTKv2LibraryDll;$(SolutionDir)Source\SGDLib;$(SolutionDir)Source\Readers\ReaderLib;$(SolutionDir)Source\ComputationNetworkLib;$(SolutionDir)Source\SequenceTrainingLib;$(SolutionDir)Source\Math;$(SolutionDir)Source\Common\Include;$(SolutionDir)Source\CNTK\BrainScript;$(SolutionDir)Source\ActionsLib;$(MSMPI_INC);$(NvmlInclude);$(ProtobufInclude);$(SolutionDir)Source\PerformanceProfilerDll;..\..\external\gsl\include;$(ProjectDir)Generated\Windows</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories Condition="'!$(IsUWP)'">$(SolutionDir)Source\1BitSGD;$(ProjectDir)Generated\Windows;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions Condition="'!$(IsUWP)'">CNTK_PARALLEL_TRAINING_SUPPORT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<OpenMPSupport>true</OpenMPSupport>
</ClCompile>
@ -128,7 +128,7 @@
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="$(GpuBuild)">
<ClCompile>
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(CudaInclude)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(CudaInclude);$(ProjectDir)Generated\Windows</AdditionalIncludeDirectories>
<ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release_NoOpt|x64'">$(IntDir)\$(ProjectName)\$(ConfigurationName)\%(RelativeDir)</ObjectFileName>
<ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)\$(ProjectName)\$(ConfigurationName)\%(RelativeDir)</ObjectFileName>
<ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)\$(ProjectName)\$(ConfigurationName)\%(RelativeDir)</ObjectFileName>

Просмотреть файл

@ -8,7 +8,10 @@ setlocal enableDelayedexpansion
::: ==============================================================================
:::
::: This is called as a pre-build step for the CNTK executable, taking parameters below.
::: It creates buildinfo.h, which makes version information available to the executable itself.
::: It creates Generated\Windows\buildinfo.h, which makes version information available to the executable itself.
if not exist "Generated\Windows" mkdir "Generated\Windows"
set _outfile=Generated\Windows\buildinfo.h
:: Grab the parameters
::
@ -23,8 +26,8 @@ set p_CUDNN_PATH=%~4
set p_CUB_PATH=%~5
set p_CNTK_ENABLE_ASGD=%~6
echo #ifndef _BUILDINFO_H > buildinfo.h$$
echo #define _BUILDINFO_H >> buildinfo.h$$
echo #ifndef _BUILDINFO_H > %_outfile%$$
echo #define _BUILDINFO_H >> %_outfile%$$
FOR /F %%i IN ('hostname') DO SET HOST=%%i
:: assuming hostname always exists
@ -34,30 +37,30 @@ where -q git
if not errorlevel 1 (
call git --version > NUL 2>&1
if not errorlevel 1 (
echo #define _GIT_EXIST >> buildinfo.h$$
echo #define _GIT_EXIST >> %_outfile%$$
FOR /F %%i IN ('call git rev-parse --abbrev-ref HEAD') DO SET l_BRANCH=%%i
FOR /F %%i IN ('call git rev-parse HEAD') DO SET l_COMMIT=%%i
set l_STATUS=
call git diff --quiet --cached
if not errorlevel 1 call git diff --quiet
if errorlevel 1 set l_STATUS= ^(modified^)
echo #define _BUILDBRANCH_ "!l_BRANCH!" >> buildinfo.h$$
echo #define _BUILDSHA1_ "!l_COMMIT!!l_STATUS!">> buildinfo.h$$
echo #define _BUILDBRANCH_ "!l_BRANCH!" >> %_outfile%$$
echo #define _BUILDSHA1_ "!l_COMMIT!!l_STATUS!">> %_outfile%$$
)
)
if "%p_CNTK_MKL_SEQUENTIAL%" == "1" (
echo #define _MATHLIB_ "mkl-sequential">> buildinfo.h$$
echo #define _MATHLIB_ "mkl-sequential">> %_outfile%$$
) else (
echo #define _MATHLIB_ "mkl">> buildinfo.h$$
echo #define _MATHLIB_ "mkl">> %_outfile%$$
)
echo #define _BUILDER_ "%USERNAME%" >> buildinfo.h$$
echo #define _BUILDMACHINE_ "%HOST%" >> buildinfo.h$$
echo #define _BUILDER_ "%USERNAME%" >> %_outfile%$$
echo #define _BUILDMACHINE_ "%HOST%" >> %_outfile%$$
set l_scriptpath=%~dp0
set l_buildpath="%l_scriptpath:\=\\%"
echo #define _BUILDPATH_ %l_buildpath% >> buildinfo.h$$
echo #define _BUILDPATH_ %l_buildpath% >> %_outfile%$$
set l_build_type=Unknown
set l_build_target=Unknown
@ -70,28 +73,28 @@ if /i "%p_Configuration%" == "Release_CpuOnly" set l_build_type=Release&set l_bu
if /i "%p_Configuration%" == "Release_UWP" set l_build_type=Release&set l_build_target=UWP
if /i "%p_Configuration%" == "Release_NoOpt" set l_build_type=Release_NoOpt&set l_build_target=GPU
echo #define _BUILDTYPE_ "%l_build_type%">> buildinfo.h$$
echo #define _BUILDTARGET_ "%l_build_target%">> buildinfo.h$$
echo #define _BUILDTYPE_ "%l_build_type%">> %_outfile%$$
echo #define _BUILDTARGET_ "%l_build_target%">> %_outfile%$$
:: assuming CNTK_ENABLE_ASGD was true as default value
if "%p_CNTK_ENABLE_ASGD%" == "false" (
echo #define _WITH_ASGD_ "no">>buildinfo.h$$
echo #define _WITH_ASGD_ "no">>%_outfile%$$
) else (
echo #define _WITH_ASGD_ "yes">>buildinfo.h$$
echo #define _WITH_ASGD_ "yes">>%_outfile%$$
)
if not %l_build_target% == CPU-only if not %l_build_target% == UWP (
if "%p_CudaPath%" == "" (
echo #define _CUDA_PATH_ "NOT_DEFINED" >> buildinfo.h$$
echo #define _CUDA_PATH_ "NOT_DEFINED" >> %_outfile%$$
) else (
echo #define _CUDA_PATH_ "!p_CudaPath:\=\\!" >> buildinfo.h$$
echo #define _CUDA_PATH_ "!p_CudaPath:\=\\!" >> %_outfile%$$
)
if not "%p_CUDNN_PATH%" == "" (
echo #define _CUDNN_PATH_ "%p_CUDNN_PATH:\=\\%" >> buildinfo.h$$
echo #define _CUDNN_PATH_ "%p_CUDNN_PATH:\=\\%" >> %_outfile%$$
)
if not "%p_CUB_PATH%" == "" (
echo #define _CUB_PATH_ "%p_CUB_PATH:\=\\%" >> buildinfo.h$$
echo #define _CUB_PATH_ "%p_CUB_PATH:\=\\%" >> %_outfile%$$
)
)
@ -110,11 +113,11 @@ if not errorlevel 1 (
)
)
)
echo #define _MPI_NAME_ %MPI_NAME% >> buildinfo.h$$
echo #define _MPI_VERSION_ %MPI_VERSION% >> buildinfo.h$$
echo #define _MPI_NAME_ %MPI_NAME% >> %_outfile%$$
echo #define _MPI_VERSION_ %MPI_VERSION% >> %_outfile%$$
echo #endif >> buildinfo.h$$
echo #endif >> %_outfile%$$
::: update file only if it changed (otherwise CNTK.cpp will get rebuilt each time)
fc buildinfo.h$$ buildinfo.h > NUL 2>&1
if errorlevel 1 move /Y buildinfo.h$$ buildinfo.h
fc %_outfile%$$ %_outfile% > NUL 2>&1
if errorlevel 1 move /Y %_outfile%$$ %_outfile%

Просмотреть файл

@ -26,7 +26,7 @@ usage ()
{
echo "usage: $0 <Config.make>"
echo "-------------------------------------------------------------------"
echo "This script is used to generate buildinfo.h in Source/CNTK"
echo "This script is used to generate buildinfo.h in Source/CNTK/Generated/Linux"
echo "This script needs to be called from the top level directory of CNTK project"
echo "This script assumes git can be used"
echo "This script assumes Config.make has been made"
@ -154,12 +154,16 @@ BUILDER=$USER
BUILDMACHINE=`hostname`
BUILDPATH=`pwd`
# Make buildinfo.h (only update if changed)
target=Source/CNTK/buildinfo.h
target=Source/CNTKv2LibraryDll/Generated/Linux/buildinfo.h
if [ ! -d Source ] ; then
usage
fi
# Make buildinfo.h (only update if changed)
if [ ! -d Source/CNTKv2LibraryDll/Generated/Linux ]; then
mkdir -p Source/CNTKv2LibraryDll/Generated/Linux
fi
makebuildinfo \
"$target\$\$" \
"$BUILDTYPE" \