Skip to content

bpo-35059 : Add /Ob1 flag when building pythoncore in debug mode #10094

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Oct 26, 2018
Merged

bpo-35059 : Add /Ob1 flag when building pythoncore in debug mode #10094

merged 1 commit into from
Oct 26, 2018

Conversation

vstinner
Copy link
Member

@vstinner vstinner commented Oct 25, 2018

Visual Studio solution: the "pythoncore" project is now compiled with
the /Ob1 flag in Debug mode to expand functions marked as inline.

https://bugs.python.org/issue35059

@vstinner
Copy link
Member Author

This change matters when you consider the PR #10079 which converts Py_INCREF() macro to a static inline function.

I'm not sure if it's ok to only modify pythoncore, or if the 38 other projects should be modified the same way?

On Unix, Python is now compiled with -Og:

       -Og Optimize debugging experience.  -Og enables optimizations that do
           not interfere with debugging. It should be the optimization level
           of choice for the standard edit-compile-debug cycle, offering a
           reasonable level of optimization while maintaining fast compilation
           and a good debugging experience.

@zware
Copy link
Member

zware commented Oct 25, 2018

You can instead add this to PCbuild/pyproject.props in the existing <ClCompile Condition="$(Configuration) == 'Debug'"> section that disables optimization globally in Debug configuration.

@vstinner
Copy link
Member Author

You can instead add this to PCbuild/pyproject.props in the existing section that disables optimization globally in Debug configuration.

Oh thanks, I will try that! I was looking for something similar, but I failed to find it in the Visual Studio UI.

@vstinner
Copy link
Member Author

You can instead add this to PCbuild/pyproject.props in the existing section that disables optimization globally in Debug configuration.

Oh, fantastic! I tried and it works as expected! It's exactly what I was looking for ;-) I didn't know pyproject.props.

Visual Studio solution: Set InlineFunctionExpansion to
OnlyExplicitInline ("/Ob1" option) on all projects (in
pyproject.props) in Debug mode on Win32 and x64 platforms to expand
functions marked as inline.

This change should make Python compiled in Debug mode a little bit
faster on Windows. On Unix, GCC uses -Og optimization level for
./configure --with-pydebug.
@vstinner vstinner merged commit a05bef4 into python:master Oct 26, 2018
@vstinner vstinner deleted the msvc_Ob1 branch October 26, 2018 13:10
@bedevere-bot
Copy link

Hi! The buildbot AMD64 Windows7 SP1 3.x has failed when building commit a05bef4.

You can take a look here:

https://buildbot.python.org/all/#builders/40/builds/1057

@vstinner
Copy link
Member Author

Hi! The buildbot AMD64 Windows7 SP1 3.x has failed when building commit a05bef4.

Oh. I broke this buildbot for real :-( The compilation of the _decimal module fails:

            Creating library C:\buildbot.python.org\3.x.kloth-win64\build\PCbuild\amd64\_decimal_d.lib and object C:\buildbot.python.org\3.x.kloth-win64\build\PCbuild\amd64\_decimal_d.exp
    19>ClCompile:
         xmltok.c
    16>ClCompile:
         prep_cif.c
    21>ClCompile:
         multiprocessing.c
    19>ClCompile:
         Generating Code...
    17>_decimal.obj : error LNK2019: unresolved external symbol mpd_del referenced in function PyDec_AsTuple [C:\buildbot.python.org\3.x.kloth-win64\build\PCbuild\_decimal.vcxproj]
    17>io.obj : error LNK2001: unresolved external symbol mpd_del [C:\buildbot.python.org\3.x.kloth-win64\build\PCbuild\_decimal.vcxproj]
    17>basearith.obj : error LNK2019: unresolved external symbol mpd_uint_zero referenced in function _mpd_baseshiftl [C:\buildbot.python.org\3.x.kloth-win64\build\PCbuild\_decimal.vcxproj]
    17>io.obj : error LNK2019: unresolved external symbol mpd_qresize referenced in function mpd_qset_string [C:\buildbot.python.org\3.x.kloth-win64\build\PCbuild\_decimal.vcxproj]
    17>C:\buildbot.python.org\3.x.kloth-win64\build\PCbuild\amd64\_decimal_d.pyd : fatal error LNK1120: 3 unresolved externals [C:\buildbot.python.org\3.x.kloth-win64\build\PCbuild\_decimal.vcxproj]
(...)
       "C:\buildbot.python.org\3.x.kloth-win64\build\PCbuild\_decimal.vcxproj" (Build target) (17) ->
       (Link target) -> 
         _decimal.obj : error LNK2019: unresolved external symbol mpd_del referenced in function PyDec_AsTuple [C:\buildbot.python.org\3.x.kloth-win64\build\PCbuild\_decimal.vcxproj]
         io.obj : error LNK2001: unresolved external symbol mpd_del [C:\buildbot.python.org\3.x.kloth-win64\build\PCbuild\_decimal.vcxproj]
         basearith.obj : error LNK2019: unresolved external symbol mpd_uint_zero referenced in function _mpd_baseshiftl [C:\buildbot.python.org\3.x.kloth-win64\build\PCbuild\_decimal.vcxproj]
         io.obj : error LNK2019: unresolved external symbol mpd_qresize referenced in function mpd_qset_string [C:\buildbot.python.org\3.x.kloth-win64\build\PCbuild\_decimal.vcxproj]
         C:\buildbot.python.org\3.x.kloth-win64\build\PCbuild\amd64\_decimal_d.pyd : fatal error LNK1120: 3 unresolved externals [C:\buildbot.python.org\3.x.kloth-win64\build\PCbuild\_decimal.vcxproj]

@bedevere-bot
Copy link

Hi! The buildbot AMD64 Windows8 3.x has failed when building commit a05bef4.

You can take a look here:

https://buildbot.python.org/all/#builders/32/builds/1639

@bedevere-bot
Copy link

Hi! The buildbot AMD64 Windows10 3.x has failed when building commit a05bef4.

You can take a look here:

https://buildbot.python.org/all/#builders/3/builds/1566

@vstinner
Copy link
Member Author

It seems like my PR #10128 fixed the linker error.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants