Index: Makefile
--- Makefile.orig	2016-12-26 19:55:30.000000000 +0100
+++ Makefile	2016-12-26 23:38:47.939020000 +0100
@@ -88,9 +88,9 @@
 INCLUDEPATH:= $(addprefix $(SOURCEDIR)/, Common/Include CNTKv2LibraryDll CNTKv2LibraryDll/API CNTKv2LibraryDll/proto Math CNTK ActionsLib ComputationNetworkLib SGDLib SequenceTrainingLib CNTK/BrainScript Readers/ReaderLib)
 INCLUDEPATH+=$(PROTOBUF_PATH)/include
 # COMMON_FLAGS include settings that are passed both to NVCC and C++ compilers.
-COMMON_FLAGS:= -D_POSIX_SOURCE -D_XOPEN_SOURCE=600 -D__USE_XOPEN2K -std=c++11
+COMMON_FLAGS:= -std=c++11
 CPPFLAGS:=
-CXXFLAGS:= $(SSE_FLAGS) -std=c++0x -fopenmp -fpermissive -fPIC -Werror -fcheck-new
+CXXFLAGS:= $(SSE_FLAGS) -std=c++0x -fopenmp -fpermissive -fPIC -fcheck-new
 LIBPATH:=
 LIBS_LIST:=
 LDFLAGS:=
@@ -178,7 +178,7 @@
 ifeq ("$(MATHLIB)","openblas")
   INCLUDEPATH += $(OPENBLAS_PATH)/include
   LIBPATH += $(OPENBLAS_PATH)/lib
-  LIBS_LIST += openblas m pthread
+  LIBS_LIST += openblas gfortran quadmath m pthread
   CPPFLAGS += -DUSE_OPENBLAS
 endif
 
@@ -237,10 +237,10 @@
     GENCODE_FLAGS := $(GENCODE_SM30) $(GENCODE_SM35) $(GENCODE_SM50)
   endif
 
-  CXXFLAGS += -g -O4
+  CXXFLAGS += -O2
   LDFLAGS += -rdynamic
   COMMON_FLAGS += -DNDEBUG -DNO_SYNC
-  CUFLAGS += -O3 -g -use_fast_math $(GENCODE_FLAGS)
+  CUFLAGS += -O2 -use_fast_math $(GENCODE_FLAGS)
 endif
 
 ifdef CNTK_CUDA_DEVICE_DEBUGINFO
@@ -981,7 +981,7 @@
 
 UNITTEST_MULTIVERSO := $(BINDIR)/multiversotests
 
-ALL += $(UNITTEST_MULTIVERSO)
+ALL +=
 
 $(UNITTEST_MULTIVERSO): $(UNITTEST_MULTIVERSO_OBJ) | $(MULTIVERSO_LIB)
 	@echo $(SEPARATOR)
@@ -1057,7 +1057,7 @@
 
 UNITTEST_EVAL := $(BINDIR)/evaltests
 
-ALL += $(UNITTEST_EVAL)
+ALL +=
 SRC += $(UNITTEST_EVAL_SRC)
 
 $(UNITTEST_EVAL) : $(UNITTEST_EVAL_OBJ) | $(EVAL_LIB) $(CNTKMATH_LIB)
@@ -1083,7 +1083,7 @@
 
 UNITTEST_READER := $(BINDIR)/readertests
 
-ALL += $(UNITTEST_READER)
+ALL +=
 SRC += $(UNITTEST_READER_SRC)
 
 $(UNITTEST_READER): $(UNITTEST_READER_OBJ) | $(HTKMLFREADER) $(HTKDESERIALIZERS) $(UCIFASTREADER) $(COMPOSITEDATAREADER) $(IMAGEREADER) $(CNTKMATH_LIB)
@@ -1122,7 +1122,7 @@
 
 UNITTEST_NETWORK := $(BINDIR)/networktests
 
-ALL += $(UNITTEST_NETWORK)
+ALL +=
 SRC += $(UNITTEST_NETWORK_SRC)
 
 $(UNITTEST_NETWORK): $(UNITTEST_NETWORK_OBJ) | $(CNTKMATH_LIB) $(CNTKTEXTFORMATREADER) $(MULTIVERSO_LIB)
@@ -1157,7 +1157,7 @@
 
 UNITTEST_MATH := $(BINDIR)/mathtests
 
-ALL += $(UNITTEST_MATH)
+ALL +=
 SRC += $(UNITTEST_MATH_SRC)
 
 $(UNITTEST_MATH): $(UNITTEST_MATH_OBJ) | $(CNTKMATH_LIB) 
@@ -1180,7 +1180,7 @@
 
 UNITTEST_BRAINSCRIPT := $(BINDIR)/brainscripttests
 
-ALL += $(UNITTEST_BRAINSCRIPT)
+ALL +=
 SRC += $(UNITTEST_BRAINSCRIPT_SRC)
 
 $(UNITTEST_BRAINSCRIPT): $(UNITTEST_BRAINSCRIPT_OBJ) | $(CNTKMATH_LIB)
Index: Source/Common/File.cpp
--- Source/Common/File.cpp.orig	2016-12-26 19:55:30.000000000 +0100
+++ Source/Common/File.cpp	2016-12-26 23:37:41.818954000 +0100
@@ -23,7 +23,7 @@
 #endif
 #ifdef __unix__
 #include <unistd.h>
-#include <linux/limits.h> // for PATH_MAX
+#include <limits.h> // for PATH_MAX
 #endif
 
 #define PCLOSE_ERROR -1
Index: Source/Common/Include/Basics.h
--- Source/Common/Include/Basics.h.orig	2016-12-26 19:55:30.000000000 +0100
+++ Source/Common/Include/Basics.h	2016-12-26 23:37:41.819165000 +0100
@@ -461,10 +461,10 @@
 static inline double todouble(const std::string& s)
 {
     double value = 0.0;
+    char *endptr;
 
-    size_t* idx = 0;
-    value = std::stod(s, idx);
-    if (idx)
+    value = strtod(s.c_str(), &endptr);
+    if (endptr == s.c_str())
         RuntimeError("todouble: invalid input string '%s'", s.c_str());
 
     return value;
Index: Source/Common/Include/TensorShape.h
--- Source/Common/Include/TensorShape.h.orig	2016-12-26 19:55:30.000000000 +0100
+++ Source/Common/Include/TensorShape.h	2016-12-26 23:37:41.819378000 +0100
@@ -13,6 +13,14 @@
 #include <string>
 #include <array>
 
+#include <sstream>
+
+template <typename T> std::string my_to_string(const T& n) {
+    std::ostringstream stm;
+    stm << n;
+    return stm.str();
+}
+
 namespace Microsoft { namespace MSR { namespace CNTK {
 
 // -----------------------------------------------------------------------
@@ -722,7 +730,7 @@
         {
             if (!s.empty())
                 s.append(" x ");
-            s.append(std::to_string(m_dims[k]));
+            s.append(my_to_string(m_dims[k]));
         }
 #if 0   // also emit the strides, easier for debugging
         s.append(" {");
Index: Source/Common/Include/TimerUtility.h
--- Source/Common/Include/TimerUtility.h.orig	2016-12-26 19:55:30.000000000 +0100
+++ Source/Common/Include/TimerUtility.h	2016-12-26 23:37:41.819500000 +0100
@@ -1,5 +1,6 @@
 #pragma once
 
+#include <stdio.h>
 #include <string>
 
 #define MILLI_PER_SEC 1000
Index: Source/Common/Include/ssematrix.h
--- Source/Common/Include/ssematrix.h.orig	2016-12-26 19:55:31.000000000 +0100
+++ Source/Common/Include/ssematrix.h	2016-12-26 23:37:41.819825000 +0100
@@ -21,7 +21,7 @@
 #endif
 #include "fileutil.h" // for saving and reading matrices
 #include <limits>     // for NaN
-#include <malloc.h>
+#include <stdlib.h>
 
 #ifdef min
 #undef min // some garbage from some Windows header that conflicts with std::min()
Index: Source/Math/BlockHandlerAVX.cpp
--- Source/Math/BlockHandlerAVX.cpp.orig	2016-12-26 19:55:31.000000000 +0100
+++ Source/Math/BlockHandlerAVX.cpp	2016-12-26 23:37:41.819959000 +0100
@@ -3,7 +3,7 @@
 // Licensed under the MIT license. See LICENSE.md file in the project root for full licence information.
 //
 #include "stdafx.h"
-#include <malloc.h>
+#include <stdlib.h>
 #include <xmmintrin.h>
 #include <emmintrin.h>
 #include <tmmintrin.h>
Index: Source/Math/BlockMultiplier.h
--- Source/Math/BlockMultiplier.h.orig	2016-12-26 19:55:31.000000000 +0100
+++ Source/Math/BlockMultiplier.h	2016-12-26 23:37:41.820218000 +0100
@@ -4,7 +4,7 @@
 //
 #pragma once
 #include "BlockMultiplierPlatform.h"
-#include <malloc.h>
+#include <stdlib.h>
 #include <xmmintrin.h>
 #include <emmintrin.h>
 #include <tmmintrin.h>
Index: Source/Readers/ImageReader/ImageDataDeserializer.cpp
--- Source/Readers/ImageReader/ImageDataDeserializer.cpp.orig	2016-12-26 19:55:31.000000000 +0100
+++ Source/Readers/ImageReader/ImageDataDeserializer.cpp	2016-12-26 23:37:41.820542000 +0100
@@ -277,7 +277,7 @@
             // Assume that only image path and class label is given (old format).
             classId = imagePath;
             imagePath = sequenceKey;
-            sequenceKey = std::to_string(lineIndex);
+            sequenceKey = my_to_string(lineIndex);
 
             if (classId.empty() || imagePath.empty())
                 RuntimeError("Invalid map file format, must contain 2 or 3 tab-delimited columns, line %" PRIu64 " in file %s.", lineIndex, mapPath.c_str());
Index: Source/Readers/Kaldi2Reader/ssematrix.h
--- Source/Readers/Kaldi2Reader/ssematrix.h.orig	2016-12-26 19:55:31.000000000 +0100
+++ Source/Readers/Kaldi2Reader/ssematrix.h	2016-12-26 23:37:41.820862000 +0100
@@ -19,7 +19,7 @@
 #endif
 #include "fileutil.h" // for saving and reading matrices
 #include <limits>     // for NaN
-#include <malloc.h>
+#include <stdlib.h>
 
 namespace msra { namespace math {
 
Index: Source/Readers/LMSequenceReader/SequenceReader.cpp
--- Source/Readers/LMSequenceReader/SequenceReader.cpp.orig	2016-12-26 19:55:31.000000000 +0100
+++ Source/Readers/LMSequenceReader/SequenceReader.cpp	2016-12-26 23:37:41.821208000 +0100
@@ -634,10 +634,10 @@
         tokens = msra::strfun::split(line, "\t ");
         assert(tokens.size() == 4);
 
-        b = stoi(tokens[0]);
-        cnt = (size_t) stof(tokens[1]);
+        b = strtol(tokens[0].c_str(), NULL, 10);
+        cnt = (size_t) strtof(tokens[1].c_str(), NULL);
         strtmp = tokens[2];
-        clsidx = stoi(tokens[3]);
+        clsidx = strtol(tokens[3].c_str(), NULL, 10);
 
         idx4cnt[b] = cnt;
         word4idx[strtmp] = b;
Index: Source/Readers/ReaderLib/TruncatedBpttPacker.cpp
--- Source/Readers/ReaderLib/TruncatedBpttPacker.cpp.orig	2016-12-26 19:55:31.000000000 +0100
+++ Source/Readers/ReaderLib/TruncatedBpttPacker.cpp	2016-12-26 23:37:41.821374000 +0100
@@ -8,6 +8,7 @@
 
 #include <cmath>
 #include <deque>
+#include <cmath>
 #include "TruncatedBpttPacker.h"
 #include "ElementTypeUtils.h"
 
Index: Source/SGDLib/SGD.cpp
--- Source/SGDLib/SGD.cpp.orig	2016-12-26 19:55:31.000000000 +0100
+++ Source/SGDLib/SGD.cpp	2016-12-26 23:37:41.821863000 +0100
@@ -1385,7 +1385,7 @@
                         prefixMsg.c_str(), epochNumber + 1, (int)m_maxEpochs,
                         (int)(numMBsRunSinceLastLogged + 1), numMBsRun);
                 if (epochNumber > 0 || (int)epochSize > 0) // got anything?  --TODO: why cast epochSize to (int) for this comparison?
-                    fprintf(stderr, (", %2." + to_string(mbProgNumPrecision) + "f%%").c_str(), mbProg * 100); // --TODO: use a * format?
+                    fprintf(stderr, (", %2." + my_to_string(mbProgNumPrecision) + "f%%").c_str(), mbProg * 100); // --TODO: use a * format?
                 fprintf(stderr, "]: ");
                 epochCriterionSinceLastLogged.LogCriterion(criterionNodes[0]->NodeName());
                 for (size_t i = 0; i < epochEvalErrors.size(); i++)
Index: Tools/generate_build_info
--- Tools/generate_build_info.orig	2016-12-26 19:55:32.000000000 +0100
+++ Tools/generate_build_info	2016-12-26 23:37:41.822004000 +0100
@@ -107,11 +107,10 @@
 config=$1
 
 # Check whether we have git and what is the SHA-1 value
-if Has_Git; then has_git=1; else has_git=0; usage "git does not exist"; fi
-GIT_STATUS=' (modified)'
-git diff --quiet && git diff --cached --quiet && GIT_STATUS=''
-GIT_COMMIT=`git rev-parse HEAD`$GIT_STATUS
-GIT_BRANCH=`git rev-parse --abbrev-ref HEAD`
+has_git=0
+GIT_STATUS=''
+GIT_COMMIT="0000"
+GIT_BRANCH="master"
 
 # Looking into Config.make
 if [ ! -e $config ] ; then
Index: configure
--- configure.orig	2016-12-26 19:55:34.000000000 +0100
+++ configure	2016-12-26 23:37:41.822213000 +0100
@@ -1064,7 +1064,7 @@
 
 # If we are not in the configure directory, generate a trampoline Makefile
 makefile=$build_top/Makefile
-if test $(is_hardlinked "$configure" "$build_top/configure") = no
+if false
 then
     echo Generating $makefile
     realconf=`readlink -f $configure`
Index: Source/PerformanceProfilerDll/PerformanceProfiler.cpp
--- Source/PerformanceProfilerDll/PerformanceProfiler.cpp.orig	2017-01-01 10:58:55.000000000 +0100
+++ Source/PerformanceProfilerDll/PerformanceProfiler.cpp	2017-01-01 11:10:31.383503000 +0100
@@ -381,8 +381,10 @@
 {
 #ifdef _WIN32
     return (unsigned int)GetCurrentThreadId();
-#else
+#elif defined(SYS_gettid)
     return (unsigned int)syscall(SYS_gettid);
+#else
+    return (unsigned int)0;
 #endif
 }
 
