Side-by-Side compilation for Windows and Linux
This commit is contained in:
Родитель
7882cf052b
Коммит
c42a444b87
|
@ -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
|
||||
|
||||
|
|
4
Makefile
4
Makefile
|
@ -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" \
|
||||
|
|
Загрузка…
Ссылка в новой задаче