Fixed build errors resulting from upgrading to VS2019 compilers - #3894

Merged
harishsk merged 3 commits into
dotnet:masterfrom
harishsk:master
Jun 21, 2019
Merged

Fixed build errors resulting from upgrading to VS2019 compilers#3894
harishsk merged 3 commits into
dotnet:masterfrom
harishsk:master

Conversation

@harishsk

Copy link
Copy Markdown
Contributor

Fixes#3893

The default CMAKE_C_FLAG for debug configuration sets /ZI to generate a PDB capable of edit and continue. In the new compilers, this is incompatible with /guard:cf which we set for security reasons. So to fix, we need to go back to a regular pdb generated by the /Zi flag.

Since this part of the default CMake rules, we need to override the full default set and update only that particular flag.

# which is incompatible with the /guard:cf flag we set below
# for security. So we use the default flags set by CMake
# and reset /ZI with /Zi
set(CMAKE_C_FLAGS_DEBUG "/MDd /Zi /Ob0 /Od /RTC1 /JMC")

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Where do those flags /MDd /Zi /Ob0 /Od /RTC1 /JMC come from? Are they default flags in CMake? Could you please add more details for maintaining them in the future?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, those are the default flags in CMake. I will add a bit more detail and submit another PR soon.

@codemzs
codemzs self-requested a review June 21, 2019 17:24

@codemzscodemzs left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

thanks, @harishsk

@harishsk
harishsk merged commit e66e19e into dotnet:masterJun 21, 2019
@harishsk

Copy link
Copy Markdown
ContributorAuthor

Purely for educational purposes...these are the recent changes in Windows-MSVC.cmake that caused this issue:

# default value for Just My Code flag
set(_JMC "")
# default value for Debug Information Format flag
set(_DEBUGINFOFORMAT_DEBUG "/Zi")
if("x${CMAKE_C_COMPILER_ID}" STREQUAL "xMSVC" OR "x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xMSVC" )
# JMC only supported in MSVC
if(MSVC_VERSION GREATER_EQUAL 1915)
set(_JMC "/JMC")
endif()
# /ZI is supported by MSVC only, not by clang-cl for example.
set(_DEBUGINFOFORMAT_DEBUG "/ZI")
endif()
string(APPEND CMAKE_${lang}_FLAGS_DEBUG_INIT " /MDd ${_DEBUGINFOFORMAT_DEBUG} /Ob0 /Od ${_RTC1} ${_JMC}")

@janvorli

Copy link
Copy Markdown
Member

@harishsk where have you found the stuff above? I've looked at the Windows-MSVC.cmake in all versions from 3.14 till 3.15 and none of this was there (looking via https://github.com/Kitware/CMake). And cmake 3.14.2 with VS2019 builds fine without your change (And the vcxproj files contain /Zi, not /ZI).

@eerhardt

Copy link
Copy Markdown
Member

I am experiencing the same as @janvorli. I can build successfully on VS 2019 with CMake 3.14.5 without this change.

I sort of think this change should be reverted until we know more. I don't like the fact that we are clobbering the defaults.

@harishsk

Copy link
Copy Markdown
ContributorAuthor

Where is your CMake located? And what is the version reported for CMake.exe --version

Mine is here: "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake.exe"

And it reports: cmake version 3.14.19050301-MSVC_2

The changes I reported above are in this file:
c:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\share\cmake-3.14\Modules\Platform\Windows-MSVC.cmake

@eerhardt

Copy link
Copy Markdown
Member

My CMake is located at C:\Program Files\CMake and I installed 3.14.5 from https://cmake.org/download/ and added it to my $PATH. This is all documented on https://github.com/dotnet/machinelearning/blob/master/docs/building/windows-instructions.md#required-software.

@janvorli informed me there might be an issue with the CMake shipped by VS 2019:

Comparing the Windows-MSVC.cmake of vanilla 3.14.2 and the 3.14 in VS2019, I can see that they removed this at one place:

# default value for Just My Code flag
set(_JMC "")
# default value for Debug Information Format flag
set(_DEBUGINFOFORMAT_DEBUG "/Zi")

And added this at another

 if("x${CMAKE_C_COMPILER_ID}" STREQUAL "xMSVC" OR "x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xMSVC" )
# JMC only supported in MSVC
if(MSVC_VERSION GREATER_EQUAL 1915)
set(_JMC "/JMC")
endif()
# /ZI is supported by MSVC only, not by clang-cl for example.
set(_DEBUGINFOFORMAT_DEBUG "/ZI")
endif()

It seems as if they just made a mistake in the "i" case

@jkotas - do you happen to know anyone on the Visual Studio team who works on the CMake they ship? I'd like to find out if this is a bug in VS 2019.

@janvorli

Copy link
Copy Markdown
Member

Btw, it seems that a cleaner way to fix the problem would be to use string(REPLACE ....) cmake command to just replace /ZI by /Zi in CMAKE_C_FLAGS_DEBUG instead of overwriting all the options with what we assume should be there. Like this:

string(REPLACE"/ZI""/Zi"CMAKE_C_FLAGS_DEBUG${CMAKE_C_FLAGS_DEBUG})

@harishsk

Copy link
Copy Markdown
ContributorAuthor

Yes, I have CMake installed in Program Files on my laptop and I don't see this bug. On my desktop, I don't have CMake installed and the one shipped in Visual Studio gets used, resulting in this bug.

This is a bug in VS2019. And as my comment in the fix states, we can remove those lines after the defaults are fixed.

I agree what you propose is a cleaner fix. I have tested it and submitted a new pull request.

@janvorli and @eerhardt Can you please review and approve?

@jkotas

Copy link
Copy Markdown
Member

do you happen to know anyone on the Visual Studio team who works on the CMake they ship?

Take a look at https://github.com/microsoft/CMake . I believe it has the sources for the version that VS ships; and you can also find the people who work on it there.

Dmitry-A pushed a commit to Dmitry-A/machinelearning that referenced this pull request Jul 24, 2019
…et#3894)
* Fixed build errors resulting from upgrade to VS2019 compilers
* Added additional message describing the previous fix
@ghostghost locked as resolved and limited conversation to collaborators Mar 21, 2022
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Visual Studio 2019 Building Problem

6 participants

@harishsk@janvorli@eerhardt@jkotas@codemzs@wschin
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Fixed build errors resulting from upgrading to VS2019 compilers - #3894

Merged
harishsk merged 3 commits into
dotnet:masterfrom
harishsk:master
Jun 21, 2019
Merged

Fixed build errors resulting from upgrading to VS2019 compilers#3894
harishsk merged 3 commits into
dotnet:masterfrom
harishsk:master

Conversation

@harishsk

Copy link
Copy Markdown
Contributor

Fixes#3893

The default CMAKE_C_FLAG for debug configuration sets /ZI to generate a PDB capable of edit and continue. In the new compilers, this is incompatible with /guard:cf which we set for security reasons. So to fix, we need to go back to a regular pdb generated by the /Zi flag.

Since this part of the default CMake rules, we need to override the full default set and update only that particular flag.

# which is incompatible with the /guard:cf flag we set below
# for security. So we use the default flags set by CMake
# and reset /ZI with /Zi
set(CMAKE_C_FLAGS_DEBUG "/MDd /Zi /Ob0 /Od /RTC1 /JMC")

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Where do those flags /MDd /Zi /Ob0 /Od /RTC1 /JMC come from? Are they default flags in CMake? Could you please add more details for maintaining them in the future?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, those are the default flags in CMake. I will add a bit more detail and submit another PR soon.

@codemzs
codemzs self-requested a review June 21, 2019 17:24

@codemzscodemzs left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

thanks, @harishsk

@harishsk
harishsk merged commit e66e19e into dotnet:masterJun 21, 2019
@harishsk

Copy link
Copy Markdown
ContributorAuthor

Purely for educational purposes...these are the recent changes in Windows-MSVC.cmake that caused this issue:

# default value for Just My Code flag
set(_JMC "")
# default value for Debug Information Format flag
set(_DEBUGINFOFORMAT_DEBUG "/Zi")
if("x${CMAKE_C_COMPILER_ID}" STREQUAL "xMSVC" OR "x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xMSVC" )
# JMC only supported in MSVC
if(MSVC_VERSION GREATER_EQUAL 1915)
set(_JMC "/JMC")
endif()
# /ZI is supported by MSVC only, not by clang-cl for example.
set(_DEBUGINFOFORMAT_DEBUG "/ZI")
endif()
string(APPEND CMAKE_${lang}_FLAGS_DEBUG_INIT " /MDd ${_DEBUGINFOFORMAT_DEBUG} /Ob0 /Od ${_RTC1} ${_JMC}")

@janvorli

Copy link
Copy Markdown
Member

@harishsk where have you found the stuff above? I've looked at the Windows-MSVC.cmake in all versions from 3.14 till 3.15 and none of this was there (looking via https://github.com/Kitware/CMake). And cmake 3.14.2 with VS2019 builds fine without your change (And the vcxproj files contain /Zi, not /ZI).

@eerhardt

Copy link
Copy Markdown
Member

I am experiencing the same as @janvorli. I can build successfully on VS 2019 with CMake 3.14.5 without this change.

I sort of think this change should be reverted until we know more. I don't like the fact that we are clobbering the defaults.

@harishsk

Copy link
Copy Markdown
ContributorAuthor

Where is your CMake located? And what is the version reported for CMake.exe --version

Mine is here: "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake.exe"

And it reports: cmake version 3.14.19050301-MSVC_2

The changes I reported above are in this file:
c:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\share\cmake-3.14\Modules\Platform\Windows-MSVC.cmake

@eerhardt

Copy link
Copy Markdown
Member

My CMake is located at C:\Program Files\CMake and I installed 3.14.5 from https://cmake.org/download/ and added it to my $PATH. This is all documented on https://github.com/dotnet/machinelearning/blob/master/docs/building/windows-instructions.md#required-software.

@janvorli informed me there might be an issue with the CMake shipped by VS 2019:

Comparing the Windows-MSVC.cmake of vanilla 3.14.2 and the 3.14 in VS2019, I can see that they removed this at one place:

# default value for Just My Code flag
set(_JMC "")
# default value for Debug Information Format flag
set(_DEBUGINFOFORMAT_DEBUG "/Zi")

And added this at another

 if("x${CMAKE_C_COMPILER_ID}" STREQUAL "xMSVC" OR "x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xMSVC" )
# JMC only supported in MSVC
if(MSVC_VERSION GREATER_EQUAL 1915)
set(_JMC "/JMC")
endif()
# /ZI is supported by MSVC only, not by clang-cl for example.
set(_DEBUGINFOFORMAT_DEBUG "/ZI")
endif()

It seems as if they just made a mistake in the "i" case

@jkotas - do you happen to know anyone on the Visual Studio team who works on the CMake they ship? I'd like to find out if this is a bug in VS 2019.

@janvorli

Copy link
Copy Markdown
Member

Btw, it seems that a cleaner way to fix the problem would be to use string(REPLACE ....) cmake command to just replace /ZI by /Zi in CMAKE_C_FLAGS_DEBUG instead of overwriting all the options with what we assume should be there. Like this:

string(REPLACE"/ZI""/Zi"CMAKE_C_FLAGS_DEBUG${CMAKE_C_FLAGS_DEBUG})

@harishsk

Copy link
Copy Markdown
ContributorAuthor

Yes, I have CMake installed in Program Files on my laptop and I don't see this bug. On my desktop, I don't have CMake installed and the one shipped in Visual Studio gets used, resulting in this bug.

This is a bug in VS2019. And as my comment in the fix states, we can remove those lines after the defaults are fixed.

I agree what you propose is a cleaner fix. I have tested it and submitted a new pull request.

@janvorli and @eerhardt Can you please review and approve?

@jkotas

Copy link
Copy Markdown
Member

do you happen to know anyone on the Visual Studio team who works on the CMake they ship?

Take a look at https://github.com/microsoft/CMake . I believe it has the sources for the version that VS ships; and you can also find the people who work on it there.

Dmitry-A pushed a commit to Dmitry-A/machinelearning that referenced this pull request Jul 24, 2019
…et#3894)
* Fixed build errors resulting from upgrade to VS2019 compilers
* Added additional message describing the previous fix
@ghostghost locked as resolved and limited conversation to collaborators Mar 21, 2022
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Visual Studio 2019 Building Problem

6 participants

@harishsk@janvorli@eerhardt@jkotas@codemzs@wschin
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Fixed build errors resulting from upgrading to VS2019 compilers - #3894

Merged
harishsk merged 3 commits into
dotnet:masterfrom
harishsk:master
Jun 21, 2019
Merged

Fixed build errors resulting from upgrading to VS2019 compilers#3894
harishsk merged 3 commits into
dotnet:masterfrom
harishsk:master

Conversation

@harishsk

Copy link
Copy Markdown
Contributor

Fixes#3893

The default CMAKE_C_FLAG for debug configuration sets /ZI to generate a PDB capable of edit and continue. In the new compilers, this is incompatible with /guard:cf which we set for security reasons. So to fix, we need to go back to a regular pdb generated by the /Zi flag.

Since this part of the default CMake rules, we need to override the full default set and update only that particular flag.

# which is incompatible with the /guard:cf flag we set below
# for security. So we use the default flags set by CMake
# and reset /ZI with /Zi
set(CMAKE_C_FLAGS_DEBUG "/MDd /Zi /Ob0 /Od /RTC1 /JMC")

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Where do those flags /MDd /Zi /Ob0 /Od /RTC1 /JMC come from? Are they default flags in CMake? Could you please add more details for maintaining them in the future?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, those are the default flags in CMake. I will add a bit more detail and submit another PR soon.

@codemzs
codemzs self-requested a review June 21, 2019 17:24

@codemzscodemzs left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

thanks, @harishsk

@harishsk
harishsk merged commit e66e19e into dotnet:masterJun 21, 2019
@harishsk

Copy link
Copy Markdown
ContributorAuthor

Purely for educational purposes...these are the recent changes in Windows-MSVC.cmake that caused this issue:

# default value for Just My Code flag
set(_JMC "")
# default value for Debug Information Format flag
set(_DEBUGINFOFORMAT_DEBUG "/Zi")
if("x${CMAKE_C_COMPILER_ID}" STREQUAL "xMSVC" OR "x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xMSVC" )
# JMC only supported in MSVC
if(MSVC_VERSION GREATER_EQUAL 1915)
set(_JMC "/JMC")
endif()
# /ZI is supported by MSVC only, not by clang-cl for example.
set(_DEBUGINFOFORMAT_DEBUG "/ZI")
endif()
string(APPEND CMAKE_${lang}_FLAGS_DEBUG_INIT " /MDd ${_DEBUGINFOFORMAT_DEBUG} /Ob0 /Od ${_RTC1} ${_JMC}")

@janvorli

Copy link
Copy Markdown
Member

@harishsk where have you found the stuff above? I've looked at the Windows-MSVC.cmake in all versions from 3.14 till 3.15 and none of this was there (looking via https://github.com/Kitware/CMake). And cmake 3.14.2 with VS2019 builds fine without your change (And the vcxproj files contain /Zi, not /ZI).

@eerhardt

Copy link
Copy Markdown
Member

I am experiencing the same as @janvorli. I can build successfully on VS 2019 with CMake 3.14.5 without this change.

I sort of think this change should be reverted until we know more. I don't like the fact that we are clobbering the defaults.

@harishsk

Copy link
Copy Markdown
ContributorAuthor

Where is your CMake located? And what is the version reported for CMake.exe --version

Mine is here: "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake.exe"

And it reports: cmake version 3.14.19050301-MSVC_2

The changes I reported above are in this file:
c:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\share\cmake-3.14\Modules\Platform\Windows-MSVC.cmake

@eerhardt

Copy link
Copy Markdown
Member

My CMake is located at C:\Program Files\CMake and I installed 3.14.5 from https://cmake.org/download/ and added it to my $PATH. This is all documented on https://github.com/dotnet/machinelearning/blob/master/docs/building/windows-instructions.md#required-software.

@janvorli informed me there might be an issue with the CMake shipped by VS 2019:

Comparing the Windows-MSVC.cmake of vanilla 3.14.2 and the 3.14 in VS2019, I can see that they removed this at one place:

# default value for Just My Code flag
set(_JMC "")
# default value for Debug Information Format flag
set(_DEBUGINFOFORMAT_DEBUG "/Zi")

And added this at another

 if("x${CMAKE_C_COMPILER_ID}" STREQUAL "xMSVC" OR "x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xMSVC" )
# JMC only supported in MSVC
if(MSVC_VERSION GREATER_EQUAL 1915)
set(_JMC "/JMC")
endif()
# /ZI is supported by MSVC only, not by clang-cl for example.
set(_DEBUGINFOFORMAT_DEBUG "/ZI")
endif()

It seems as if they just made a mistake in the "i" case

@jkotas - do you happen to know anyone on the Visual Studio team who works on the CMake they ship? I'd like to find out if this is a bug in VS 2019.

@janvorli

Copy link
Copy Markdown
Member

Btw, it seems that a cleaner way to fix the problem would be to use string(REPLACE ....) cmake command to just replace /ZI by /Zi in CMAKE_C_FLAGS_DEBUG instead of overwriting all the options with what we assume should be there. Like this:

string(REPLACE"/ZI""/Zi"CMAKE_C_FLAGS_DEBUG${CMAKE_C_FLAGS_DEBUG})

@harishsk

Copy link
Copy Markdown
ContributorAuthor

Yes, I have CMake installed in Program Files on my laptop and I don't see this bug. On my desktop, I don't have CMake installed and the one shipped in Visual Studio gets used, resulting in this bug.

This is a bug in VS2019. And as my comment in the fix states, we can remove those lines after the defaults are fixed.

I agree what you propose is a cleaner fix. I have tested it and submitted a new pull request.

@janvorli and @eerhardt Can you please review and approve?

@jkotas

Copy link
Copy Markdown
Member

do you happen to know anyone on the Visual Studio team who works on the CMake they ship?

Take a look at https://github.com/microsoft/CMake . I believe it has the sources for the version that VS ships; and you can also find the people who work on it there.

Dmitry-A pushed a commit to Dmitry-A/machinelearning that referenced this pull request Jul 24, 2019
…et#3894)
* Fixed build errors resulting from upgrade to VS2019 compilers
* Added additional message describing the previous fix
@ghostghost locked as resolved and limited conversation to collaborators Mar 21, 2022
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Visual Studio 2019 Building Problem

6 participants

@harishsk@janvorli@eerhardt@jkotas@codemzs@wschin
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Fixed build errors resulting from upgrading to VS2019 compilers - #3894

Merged
harishsk merged 3 commits into
dotnet:masterfrom
harishsk:master
Jun 21, 2019
Merged

Fixed build errors resulting from upgrading to VS2019 compilers#3894
harishsk merged 3 commits into
dotnet:masterfrom
harishsk:master

Conversation

@harishsk

Copy link
Copy Markdown
Contributor

Fixes#3893

The default CMAKE_C_FLAG for debug configuration sets /ZI to generate a PDB capable of edit and continue. In the new compilers, this is incompatible with /guard:cf which we set for security reasons. So to fix, we need to go back to a regular pdb generated by the /Zi flag.

Since this part of the default CMake rules, we need to override the full default set and update only that particular flag.

# which is incompatible with the /guard:cf flag we set below
# for security. So we use the default flags set by CMake
# and reset /ZI with /Zi
set(CMAKE_C_FLAGS_DEBUG "/MDd /Zi /Ob0 /Od /RTC1 /JMC")

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Where do those flags /MDd /Zi /Ob0 /Od /RTC1 /JMC come from? Are they default flags in CMake? Could you please add more details for maintaining them in the future?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, those are the default flags in CMake. I will add a bit more detail and submit another PR soon.

@codemzs
codemzs self-requested a review June 21, 2019 17:24

@codemzscodemzs left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

thanks, @harishsk

@harishsk
harishsk merged commit e66e19e into dotnet:masterJun 21, 2019
@harishsk

Copy link
Copy Markdown
ContributorAuthor

Purely for educational purposes...these are the recent changes in Windows-MSVC.cmake that caused this issue:

# default value for Just My Code flag
set(_JMC "")
# default value for Debug Information Format flag
set(_DEBUGINFOFORMAT_DEBUG "/Zi")
if("x${CMAKE_C_COMPILER_ID}" STREQUAL "xMSVC" OR "x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xMSVC" )
# JMC only supported in MSVC
if(MSVC_VERSION GREATER_EQUAL 1915)
set(_JMC "/JMC")
endif()
# /ZI is supported by MSVC only, not by clang-cl for example.
set(_DEBUGINFOFORMAT_DEBUG "/ZI")
endif()
string(APPEND CMAKE_${lang}_FLAGS_DEBUG_INIT " /MDd ${_DEBUGINFOFORMAT_DEBUG} /Ob0 /Od ${_RTC1} ${_JMC}")

@janvorli

Copy link
Copy Markdown
Member

@harishsk where have you found the stuff above? I've looked at the Windows-MSVC.cmake in all versions from 3.14 till 3.15 and none of this was there (looking via https://github.com/Kitware/CMake). And cmake 3.14.2 with VS2019 builds fine without your change (And the vcxproj files contain /Zi, not /ZI).

@eerhardt

Copy link
Copy Markdown
Member

I am experiencing the same as @janvorli. I can build successfully on VS 2019 with CMake 3.14.5 without this change.

I sort of think this change should be reverted until we know more. I don't like the fact that we are clobbering the defaults.

@harishsk

Copy link
Copy Markdown
ContributorAuthor

Where is your CMake located? And what is the version reported for CMake.exe --version

Mine is here: "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake.exe"

And it reports: cmake version 3.14.19050301-MSVC_2

The changes I reported above are in this file:
c:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\share\cmake-3.14\Modules\Platform\Windows-MSVC.cmake

@eerhardt

Copy link
Copy Markdown
Member

My CMake is located at C:\Program Files\CMake and I installed 3.14.5 from https://cmake.org/download/ and added it to my $PATH. This is all documented on https://github.com/dotnet/machinelearning/blob/master/docs/building/windows-instructions.md#required-software.

@janvorli informed me there might be an issue with the CMake shipped by VS 2019:

Comparing the Windows-MSVC.cmake of vanilla 3.14.2 and the 3.14 in VS2019, I can see that they removed this at one place:

# default value for Just My Code flag
set(_JMC "")
# default value for Debug Information Format flag
set(_DEBUGINFOFORMAT_DEBUG "/Zi")

And added this at another

 if("x${CMAKE_C_COMPILER_ID}" STREQUAL "xMSVC" OR "x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xMSVC" )
# JMC only supported in MSVC
if(MSVC_VERSION GREATER_EQUAL 1915)
set(_JMC "/JMC")
endif()
# /ZI is supported by MSVC only, not by clang-cl for example.
set(_DEBUGINFOFORMAT_DEBUG "/ZI")
endif()

It seems as if they just made a mistake in the "i" case

@jkotas - do you happen to know anyone on the Visual Studio team who works on the CMake they ship? I'd like to find out if this is a bug in VS 2019.

@janvorli

Copy link
Copy Markdown
Member

Btw, it seems that a cleaner way to fix the problem would be to use string(REPLACE ....) cmake command to just replace /ZI by /Zi in CMAKE_C_FLAGS_DEBUG instead of overwriting all the options with what we assume should be there. Like this:

string(REPLACE"/ZI""/Zi"CMAKE_C_FLAGS_DEBUG${CMAKE_C_FLAGS_DEBUG})

@harishsk

Copy link
Copy Markdown
ContributorAuthor

Yes, I have CMake installed in Program Files on my laptop and I don't see this bug. On my desktop, I don't have CMake installed and the one shipped in Visual Studio gets used, resulting in this bug.

This is a bug in VS2019. And as my comment in the fix states, we can remove those lines after the defaults are fixed.

I agree what you propose is a cleaner fix. I have tested it and submitted a new pull request.

@janvorli and @eerhardt Can you please review and approve?

@jkotas

Copy link
Copy Markdown
Member

do you happen to know anyone on the Visual Studio team who works on the CMake they ship?

Take a look at https://github.com/microsoft/CMake . I believe it has the sources for the version that VS ships; and you can also find the people who work on it there.

Dmitry-A pushed a commit to Dmitry-A/machinelearning that referenced this pull request Jul 24, 2019
…et#3894)
* Fixed build errors resulting from upgrade to VS2019 compilers
* Added additional message describing the previous fix
@ghostghost locked as resolved and limited conversation to collaborators Mar 21, 2022
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Visual Studio 2019 Building Problem

6 participants

@harishsk@janvorli@eerhardt@jkotas@codemzs@wschin
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Fixed build errors resulting from upgrading to VS2019 compilers - #3894

Merged
harishsk merged 3 commits into
dotnet:masterfrom
harishsk:master
Jun 21, 2019
Merged

Fixed build errors resulting from upgrading to VS2019 compilers#3894
harishsk merged 3 commits into
dotnet:masterfrom
harishsk:master

Conversation

@harishsk

Copy link
Copy Markdown
Contributor

Fixes#3893

The default CMAKE_C_FLAG for debug configuration sets /ZI to generate a PDB capable of edit and continue. In the new compilers, this is incompatible with /guard:cf which we set for security reasons. So to fix, we need to go back to a regular pdb generated by the /Zi flag.

Since this part of the default CMake rules, we need to override the full default set and update only that particular flag.

# which is incompatible with the /guard:cf flag we set below
# for security. So we use the default flags set by CMake
# and reset /ZI with /Zi
set(CMAKE_C_FLAGS_DEBUG "/MDd /Zi /Ob0 /Od /RTC1 /JMC")

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Where do those flags /MDd /Zi /Ob0 /Od /RTC1 /JMC come from? Are they default flags in CMake? Could you please add more details for maintaining them in the future?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, those are the default flags in CMake. I will add a bit more detail and submit another PR soon.

@codemzs
codemzs self-requested a review June 21, 2019 17:24

@codemzscodemzs left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

thanks, @harishsk

@harishsk
harishsk merged commit e66e19e into dotnet:masterJun 21, 2019
@harishsk

Copy link
Copy Markdown
ContributorAuthor

Purely for educational purposes...these are the recent changes in Windows-MSVC.cmake that caused this issue:

# default value for Just My Code flag
set(_JMC "")
# default value for Debug Information Format flag
set(_DEBUGINFOFORMAT_DEBUG "/Zi")
if("x${CMAKE_C_COMPILER_ID}" STREQUAL "xMSVC" OR "x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xMSVC" )
# JMC only supported in MSVC
if(MSVC_VERSION GREATER_EQUAL 1915)
set(_JMC "/JMC")
endif()
# /ZI is supported by MSVC only, not by clang-cl for example.
set(_DEBUGINFOFORMAT_DEBUG "/ZI")
endif()
string(APPEND CMAKE_${lang}_FLAGS_DEBUG_INIT " /MDd ${_DEBUGINFOFORMAT_DEBUG} /Ob0 /Od ${_RTC1} ${_JMC}")

@janvorli

Copy link
Copy Markdown
Member

@harishsk where have you found the stuff above? I've looked at the Windows-MSVC.cmake in all versions from 3.14 till 3.15 and none of this was there (looking via https://github.com/Kitware/CMake). And cmake 3.14.2 with VS2019 builds fine without your change (And the vcxproj files contain /Zi, not /ZI).

@eerhardt

Copy link
Copy Markdown
Member

I am experiencing the same as @janvorli. I can build successfully on VS 2019 with CMake 3.14.5 without this change.

I sort of think this change should be reverted until we know more. I don't like the fact that we are clobbering the defaults.

@harishsk

Copy link
Copy Markdown
ContributorAuthor

Where is your CMake located? And what is the version reported for CMake.exe --version

Mine is here: "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake.exe"

And it reports: cmake version 3.14.19050301-MSVC_2

The changes I reported above are in this file:
c:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\share\cmake-3.14\Modules\Platform\Windows-MSVC.cmake

@eerhardt

Copy link
Copy Markdown
Member

My CMake is located at C:\Program Files\CMake and I installed 3.14.5 from https://cmake.org/download/ and added it to my $PATH. This is all documented on https://github.com/dotnet/machinelearning/blob/master/docs/building/windows-instructions.md#required-software.

@janvorli informed me there might be an issue with the CMake shipped by VS 2019:

Comparing the Windows-MSVC.cmake of vanilla 3.14.2 and the 3.14 in VS2019, I can see that they removed this at one place:

# default value for Just My Code flag
set(_JMC "")
# default value for Debug Information Format flag
set(_DEBUGINFOFORMAT_DEBUG "/Zi")

And added this at another

 if("x${CMAKE_C_COMPILER_ID}" STREQUAL "xMSVC" OR "x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xMSVC" )
# JMC only supported in MSVC
if(MSVC_VERSION GREATER_EQUAL 1915)
set(_JMC "/JMC")
endif()
# /ZI is supported by MSVC only, not by clang-cl for example.
set(_DEBUGINFOFORMAT_DEBUG "/ZI")
endif()

It seems as if they just made a mistake in the "i" case

@jkotas - do you happen to know anyone on the Visual Studio team who works on the CMake they ship? I'd like to find out if this is a bug in VS 2019.

@janvorli

Copy link
Copy Markdown
Member

Btw, it seems that a cleaner way to fix the problem would be to use string(REPLACE ....) cmake command to just replace /ZI by /Zi in CMAKE_C_FLAGS_DEBUG instead of overwriting all the options with what we assume should be there. Like this:

string(REPLACE"/ZI""/Zi"CMAKE_C_FLAGS_DEBUG${CMAKE_C_FLAGS_DEBUG})

@harishsk

Copy link
Copy Markdown
ContributorAuthor

Yes, I have CMake installed in Program Files on my laptop and I don't see this bug. On my desktop, I don't have CMake installed and the one shipped in Visual Studio gets used, resulting in this bug.

This is a bug in VS2019. And as my comment in the fix states, we can remove those lines after the defaults are fixed.

I agree what you propose is a cleaner fix. I have tested it and submitted a new pull request.

@janvorli and @eerhardt Can you please review and approve?

@jkotas

Copy link
Copy Markdown
Member

do you happen to know anyone on the Visual Studio team who works on the CMake they ship?

Take a look at https://github.com/microsoft/CMake . I believe it has the sources for the version that VS ships; and you can also find the people who work on it there.

Dmitry-A pushed a commit to Dmitry-A/machinelearning that referenced this pull request Jul 24, 2019
…et#3894)
* Fixed build errors resulting from upgrade to VS2019 compilers
* Added additional message describing the previous fix
@ghostghost locked as resolved and limited conversation to collaborators Mar 21, 2022
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Visual Studio 2019 Building Problem

6 participants

@harishsk@janvorli@eerhardt@jkotas@codemzs@wschin
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Fixed build errors resulting from upgrading to VS2019 compilers - #3894

Merged
harishsk merged 3 commits into
dotnet:masterfrom
harishsk:master
Jun 21, 2019
Merged

Fixed build errors resulting from upgrading to VS2019 compilers#3894
harishsk merged 3 commits into
dotnet:masterfrom
harishsk:master

Conversation

@harishsk

Copy link
Copy Markdown
Contributor

Fixes#3893

The default CMAKE_C_FLAG for debug configuration sets /ZI to generate a PDB capable of edit and continue. In the new compilers, this is incompatible with /guard:cf which we set for security reasons. So to fix, we need to go back to a regular pdb generated by the /Zi flag.

Since this part of the default CMake rules, we need to override the full default set and update only that particular flag.

# which is incompatible with the /guard:cf flag we set below
# for security. So we use the default flags set by CMake
# and reset /ZI with /Zi
set(CMAKE_C_FLAGS_DEBUG "/MDd /Zi /Ob0 /Od /RTC1 /JMC")

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Where do those flags /MDd /Zi /Ob0 /Od /RTC1 /JMC come from? Are they default flags in CMake? Could you please add more details for maintaining them in the future?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, those are the default flags in CMake. I will add a bit more detail and submit another PR soon.

@codemzs
codemzs self-requested a review June 21, 2019 17:24

@codemzscodemzs left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

thanks, @harishsk

@harishsk
harishsk merged commit e66e19e into dotnet:masterJun 21, 2019
@harishsk

Copy link
Copy Markdown
ContributorAuthor

Purely for educational purposes...these are the recent changes in Windows-MSVC.cmake that caused this issue:

# default value for Just My Code flag
set(_JMC "")
# default value for Debug Information Format flag
set(_DEBUGINFOFORMAT_DEBUG "/Zi")
if("x${CMAKE_C_COMPILER_ID}" STREQUAL "xMSVC" OR "x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xMSVC" )
# JMC only supported in MSVC
if(MSVC_VERSION GREATER_EQUAL 1915)
set(_JMC "/JMC")
endif()
# /ZI is supported by MSVC only, not by clang-cl for example.
set(_DEBUGINFOFORMAT_DEBUG "/ZI")
endif()
string(APPEND CMAKE_${lang}_FLAGS_DEBUG_INIT " /MDd ${_DEBUGINFOFORMAT_DEBUG} /Ob0 /Od ${_RTC1} ${_JMC}")

@janvorli

Copy link
Copy Markdown
Member

@harishsk where have you found the stuff above? I've looked at the Windows-MSVC.cmake in all versions from 3.14 till 3.15 and none of this was there (looking via https://github.com/Kitware/CMake). And cmake 3.14.2 with VS2019 builds fine without your change (And the vcxproj files contain /Zi, not /ZI).

@eerhardt

Copy link
Copy Markdown
Member

I am experiencing the same as @janvorli. I can build successfully on VS 2019 with CMake 3.14.5 without this change.

I sort of think this change should be reverted until we know more. I don't like the fact that we are clobbering the defaults.

@harishsk

Copy link
Copy Markdown
ContributorAuthor

Where is your CMake located? And what is the version reported for CMake.exe --version

Mine is here: "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake.exe"

And it reports: cmake version 3.14.19050301-MSVC_2

The changes I reported above are in this file:
c:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\share\cmake-3.14\Modules\Platform\Windows-MSVC.cmake

@eerhardt

Copy link
Copy Markdown
Member

My CMake is located at C:\Program Files\CMake and I installed 3.14.5 from https://cmake.org/download/ and added it to my $PATH. This is all documented on https://github.com/dotnet/machinelearning/blob/master/docs/building/windows-instructions.md#required-software.

@janvorli informed me there might be an issue with the CMake shipped by VS 2019:

Comparing the Windows-MSVC.cmake of vanilla 3.14.2 and the 3.14 in VS2019, I can see that they removed this at one place:

# default value for Just My Code flag
set(_JMC "")
# default value for Debug Information Format flag
set(_DEBUGINFOFORMAT_DEBUG "/Zi")

And added this at another

 if("x${CMAKE_C_COMPILER_ID}" STREQUAL "xMSVC" OR "x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xMSVC" )
# JMC only supported in MSVC
if(MSVC_VERSION GREATER_EQUAL 1915)
set(_JMC "/JMC")
endif()
# /ZI is supported by MSVC only, not by clang-cl for example.
set(_DEBUGINFOFORMAT_DEBUG "/ZI")
endif()

It seems as if they just made a mistake in the "i" case

@jkotas - do you happen to know anyone on the Visual Studio team who works on the CMake they ship? I'd like to find out if this is a bug in VS 2019.

@janvorli

Copy link
Copy Markdown
Member

Btw, it seems that a cleaner way to fix the problem would be to use string(REPLACE ....) cmake command to just replace /ZI by /Zi in CMAKE_C_FLAGS_DEBUG instead of overwriting all the options with what we assume should be there. Like this:

string(REPLACE"/ZI""/Zi"CMAKE_C_FLAGS_DEBUG${CMAKE_C_FLAGS_DEBUG})

@harishsk

Copy link
Copy Markdown
ContributorAuthor

Yes, I have CMake installed in Program Files on my laptop and I don't see this bug. On my desktop, I don't have CMake installed and the one shipped in Visual Studio gets used, resulting in this bug.

This is a bug in VS2019. And as my comment in the fix states, we can remove those lines after the defaults are fixed.

I agree what you propose is a cleaner fix. I have tested it and submitted a new pull request.

@janvorli and @eerhardt Can you please review and approve?

@jkotas

Copy link
Copy Markdown
Member

do you happen to know anyone on the Visual Studio team who works on the CMake they ship?

Take a look at https://github.com/microsoft/CMake . I believe it has the sources for the version that VS ships; and you can also find the people who work on it there.

Dmitry-A pushed a commit to Dmitry-A/machinelearning that referenced this pull request Jul 24, 2019
…et#3894)
* Fixed build errors resulting from upgrade to VS2019 compilers
* Added additional message describing the previous fix
@ghostghost locked as resolved and limited conversation to collaborators Mar 21, 2022
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Visual Studio 2019 Building Problem

6 participants

@harishsk@janvorli@eerhardt@jkotas@codemzs@wschin
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Fixed build errors resulting from upgrading to VS2019 compilers - #3894

Merged
harishsk merged 3 commits into
dotnet:masterfrom
harishsk:master
Jun 21, 2019
Merged

Fixed build errors resulting from upgrading to VS2019 compilers#3894
harishsk merged 3 commits into
dotnet:masterfrom
harishsk:master

Conversation

@harishsk

Copy link
Copy Markdown
Contributor

Fixes#3893

The default CMAKE_C_FLAG for debug configuration sets /ZI to generate a PDB capable of edit and continue. In the new compilers, this is incompatible with /guard:cf which we set for security reasons. So to fix, we need to go back to a regular pdb generated by the /Zi flag.

Since this part of the default CMake rules, we need to override the full default set and update only that particular flag.

# which is incompatible with the /guard:cf flag we set below
# for security. So we use the default flags set by CMake
# and reset /ZI with /Zi
set(CMAKE_C_FLAGS_DEBUG "/MDd /Zi /Ob0 /Od /RTC1 /JMC")

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Where do those flags /MDd /Zi /Ob0 /Od /RTC1 /JMC come from? Are they default flags in CMake? Could you please add more details for maintaining them in the future?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, those are the default flags in CMake. I will add a bit more detail and submit another PR soon.

@codemzs
codemzs self-requested a review June 21, 2019 17:24

@codemzscodemzs left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

thanks, @harishsk

@harishsk
harishsk merged commit e66e19e into dotnet:masterJun 21, 2019
@harishsk

Copy link
Copy Markdown
ContributorAuthor

Purely for educational purposes...these are the recent changes in Windows-MSVC.cmake that caused this issue:

# default value for Just My Code flag
set(_JMC "")
# default value for Debug Information Format flag
set(_DEBUGINFOFORMAT_DEBUG "/Zi")
if("x${CMAKE_C_COMPILER_ID}" STREQUAL "xMSVC" OR "x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xMSVC" )
# JMC only supported in MSVC
if(MSVC_VERSION GREATER_EQUAL 1915)
set(_JMC "/JMC")
endif()
# /ZI is supported by MSVC only, not by clang-cl for example.
set(_DEBUGINFOFORMAT_DEBUG "/ZI")
endif()
string(APPEND CMAKE_${lang}_FLAGS_DEBUG_INIT " /MDd ${_DEBUGINFOFORMAT_DEBUG} /Ob0 /Od ${_RTC1} ${_JMC}")

@janvorli

Copy link
Copy Markdown
Member

@harishsk where have you found the stuff above? I've looked at the Windows-MSVC.cmake in all versions from 3.14 till 3.15 and none of this was there (looking via https://github.com/Kitware/CMake). And cmake 3.14.2 with VS2019 builds fine without your change (And the vcxproj files contain /Zi, not /ZI).

@eerhardt

Copy link
Copy Markdown
Member

I am experiencing the same as @janvorli. I can build successfully on VS 2019 with CMake 3.14.5 without this change.

I sort of think this change should be reverted until we know more. I don't like the fact that we are clobbering the defaults.

@harishsk

Copy link
Copy Markdown
ContributorAuthor

Where is your CMake located? And what is the version reported for CMake.exe --version

Mine is here: "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake.exe"

And it reports: cmake version 3.14.19050301-MSVC_2

The changes I reported above are in this file:
c:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\share\cmake-3.14\Modules\Platform\Windows-MSVC.cmake

@eerhardt

Copy link
Copy Markdown
Member

My CMake is located at C:\Program Files\CMake and I installed 3.14.5 from https://cmake.org/download/ and added it to my $PATH. This is all documented on https://github.com/dotnet/machinelearning/blob/master/docs/building/windows-instructions.md#required-software.

@janvorli informed me there might be an issue with the CMake shipped by VS 2019:

Comparing the Windows-MSVC.cmake of vanilla 3.14.2 and the 3.14 in VS2019, I can see that they removed this at one place:

# default value for Just My Code flag
set(_JMC "")
# default value for Debug Information Format flag
set(_DEBUGINFOFORMAT_DEBUG "/Zi")

And added this at another

 if("x${CMAKE_C_COMPILER_ID}" STREQUAL "xMSVC" OR "x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xMSVC" )
# JMC only supported in MSVC
if(MSVC_VERSION GREATER_EQUAL 1915)
set(_JMC "/JMC")
endif()
# /ZI is supported by MSVC only, not by clang-cl for example.
set(_DEBUGINFOFORMAT_DEBUG "/ZI")
endif()

It seems as if they just made a mistake in the "i" case

@jkotas - do you happen to know anyone on the Visual Studio team who works on the CMake they ship? I'd like to find out if this is a bug in VS 2019.

@janvorli

Copy link
Copy Markdown
Member

Btw, it seems that a cleaner way to fix the problem would be to use string(REPLACE ....) cmake command to just replace /ZI by /Zi in CMAKE_C_FLAGS_DEBUG instead of overwriting all the options with what we assume should be there. Like this:

string(REPLACE"/ZI""/Zi"CMAKE_C_FLAGS_DEBUG${CMAKE_C_FLAGS_DEBUG})

@harishsk

Copy link
Copy Markdown
ContributorAuthor

Yes, I have CMake installed in Program Files on my laptop and I don't see this bug. On my desktop, I don't have CMake installed and the one shipped in Visual Studio gets used, resulting in this bug.

This is a bug in VS2019. And as my comment in the fix states, we can remove those lines after the defaults are fixed.

I agree what you propose is a cleaner fix. I have tested it and submitted a new pull request.

@janvorli and @eerhardt Can you please review and approve?

@jkotas

Copy link
Copy Markdown
Member

do you happen to know anyone on the Visual Studio team who works on the CMake they ship?

Take a look at https://github.com/microsoft/CMake . I believe it has the sources for the version that VS ships; and you can also find the people who work on it there.

Dmitry-A pushed a commit to Dmitry-A/machinelearning that referenced this pull request Jul 24, 2019
…et#3894)
* Fixed build errors resulting from upgrade to VS2019 compilers
* Added additional message describing the previous fix
@ghostghost locked as resolved and limited conversation to collaborators Mar 21, 2022
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Visual Studio 2019 Building Problem

6 participants

@harishsk@janvorli@eerhardt@jkotas@codemzs@wschin
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Fixed build errors resulting from upgrading to VS2019 compilers - #3894

Merged
harishsk merged 3 commits into
dotnet:masterfrom
harishsk:master
Jun 21, 2019
Merged

Fixed build errors resulting from upgrading to VS2019 compilers#3894
harishsk merged 3 commits into
dotnet:masterfrom
harishsk:master

Conversation

@harishsk

Copy link
Copy Markdown
Contributor

Fixes#3893

The default CMAKE_C_FLAG for debug configuration sets /ZI to generate a PDB capable of edit and continue. In the new compilers, this is incompatible with /guard:cf which we set for security reasons. So to fix, we need to go back to a regular pdb generated by the /Zi flag.

Since this part of the default CMake rules, we need to override the full default set and update only that particular flag.

# which is incompatible with the /guard:cf flag we set below
# for security. So we use the default flags set by CMake
# and reset /ZI with /Zi
set(CMAKE_C_FLAGS_DEBUG "/MDd /Zi /Ob0 /Od /RTC1 /JMC")

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Where do those flags /MDd /Zi /Ob0 /Od /RTC1 /JMC come from? Are they default flags in CMake? Could you please add more details for maintaining them in the future?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, those are the default flags in CMake. I will add a bit more detail and submit another PR soon.

@codemzs
codemzs self-requested a review June 21, 2019 17:24

@codemzscodemzs left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

thanks, @harishsk

@harishsk
harishsk merged commit e66e19e into dotnet:masterJun 21, 2019
@harishsk

Copy link
Copy Markdown
ContributorAuthor

Purely for educational purposes...these are the recent changes in Windows-MSVC.cmake that caused this issue:

# default value for Just My Code flag
set(_JMC "")
# default value for Debug Information Format flag
set(_DEBUGINFOFORMAT_DEBUG "/Zi")
if("x${CMAKE_C_COMPILER_ID}" STREQUAL "xMSVC" OR "x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xMSVC" )
# JMC only supported in MSVC
if(MSVC_VERSION GREATER_EQUAL 1915)
set(_JMC "/JMC")
endif()
# /ZI is supported by MSVC only, not by clang-cl for example.
set(_DEBUGINFOFORMAT_DEBUG "/ZI")
endif()
string(APPEND CMAKE_${lang}_FLAGS_DEBUG_INIT " /MDd ${_DEBUGINFOFORMAT_DEBUG} /Ob0 /Od ${_RTC1} ${_JMC}")

@janvorli

Copy link
Copy Markdown
Member

@harishsk where have you found the stuff above? I've looked at the Windows-MSVC.cmake in all versions from 3.14 till 3.15 and none of this was there (looking via https://github.com/Kitware/CMake). And cmake 3.14.2 with VS2019 builds fine without your change (And the vcxproj files contain /Zi, not /ZI).

@eerhardt

Copy link
Copy Markdown
Member

I am experiencing the same as @janvorli. I can build successfully on VS 2019 with CMake 3.14.5 without this change.

I sort of think this change should be reverted until we know more. I don't like the fact that we are clobbering the defaults.

@harishsk

Copy link
Copy Markdown
ContributorAuthor

Where is your CMake located? And what is the version reported for CMake.exe --version

Mine is here: "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake.exe"

And it reports: cmake version 3.14.19050301-MSVC_2

The changes I reported above are in this file:
c:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\share\cmake-3.14\Modules\Platform\Windows-MSVC.cmake

@eerhardt

Copy link
Copy Markdown
Member

My CMake is located at C:\Program Files\CMake and I installed 3.14.5 from https://cmake.org/download/ and added it to my $PATH. This is all documented on https://github.com/dotnet/machinelearning/blob/master/docs/building/windows-instructions.md#required-software.

@janvorli informed me there might be an issue with the CMake shipped by VS 2019:

Comparing the Windows-MSVC.cmake of vanilla 3.14.2 and the 3.14 in VS2019, I can see that they removed this at one place:

# default value for Just My Code flag
set(_JMC "")
# default value for Debug Information Format flag
set(_DEBUGINFOFORMAT_DEBUG "/Zi")

And added this at another

 if("x${CMAKE_C_COMPILER_ID}" STREQUAL "xMSVC" OR "x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xMSVC" )
# JMC only supported in MSVC
if(MSVC_VERSION GREATER_EQUAL 1915)
set(_JMC "/JMC")
endif()
# /ZI is supported by MSVC only, not by clang-cl for example.
set(_DEBUGINFOFORMAT_DEBUG "/ZI")
endif()

It seems as if they just made a mistake in the "i" case

@jkotas - do you happen to know anyone on the Visual Studio team who works on the CMake they ship? I'd like to find out if this is a bug in VS 2019.

@janvorli

Copy link
Copy Markdown
Member

Btw, it seems that a cleaner way to fix the problem would be to use string(REPLACE ....) cmake command to just replace /ZI by /Zi in CMAKE_C_FLAGS_DEBUG instead of overwriting all the options with what we assume should be there. Like this:

string(REPLACE"/ZI""/Zi"CMAKE_C_FLAGS_DEBUG${CMAKE_C_FLAGS_DEBUG})

@harishsk

Copy link
Copy Markdown
ContributorAuthor

Yes, I have CMake installed in Program Files on my laptop and I don't see this bug. On my desktop, I don't have CMake installed and the one shipped in Visual Studio gets used, resulting in this bug.

This is a bug in VS2019. And as my comment in the fix states, we can remove those lines after the defaults are fixed.

I agree what you propose is a cleaner fix. I have tested it and submitted a new pull request.

@janvorli and @eerhardt Can you please review and approve?

@jkotas

Copy link
Copy Markdown
Member

do you happen to know anyone on the Visual Studio team who works on the CMake they ship?

Take a look at https://github.com/microsoft/CMake . I believe it has the sources for the version that VS ships; and you can also find the people who work on it there.

Dmitry-A pushed a commit to Dmitry-A/machinelearning that referenced this pull request Jul 24, 2019
…et#3894)
* Fixed build errors resulting from upgrade to VS2019 compilers
* Added additional message describing the previous fix
@ghostghost locked as resolved and limited conversation to collaborators Mar 21, 2022
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Visual Studio 2019 Building Problem

6 participants

@harishsk@janvorli@eerhardt@jkotas@codemzs@wschin