Add a build flag to build in debug mode

This commit is contained in:
Kovid Goyal 2021-03-20 16:53:15 +05:30
parent d8d5e8edcb
commit 9765f4a81f
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C

View File

@ -165,17 +165,16 @@ def read_extensions():
return ans return ans
def init_env(): def init_env(debug=False):
from setup.build_environment import win_ld, is64bit, win_inc, win_lib, NMAKE, win_cc from setup.build_environment import win_ld, is64bit, win_inc, win_lib, NMAKE, win_cc
from distutils import sysconfig from distutils import sysconfig
linker = None linker = None
if isunix: if isunix:
cc = os.environ.get('CC', 'gcc') cc = os.environ.get('CC', 'gcc')
cxx = os.environ.get('CXX', 'g++') cxx = os.environ.get('CXX', 'g++')
debug = '' debug = '-ggdb' if debug else ''
# debug = '-ggdb'
cflags = os.environ.get('OVERRIDE_CFLAGS', cflags = os.environ.get('OVERRIDE_CFLAGS',
'-Wall -DNDEBUG %s -fno-strict-aliasing -pipe' % debug) f'-Wall -DNDEBUG {debug} -fno-strict-aliasing -pipe')
cflags = shlex.split(cflags) + ['-fPIC'] cflags = shlex.split(cflags) + ['-fPIC']
ldflags = os.environ.get('OVERRIDE_LDFLAGS', '-Wall') ldflags = os.environ.get('OVERRIDE_LDFLAGS', '-Wall')
ldflags = shlex.split(ldflags) ldflags = shlex.split(ldflags)
@ -212,8 +211,13 @@ def init_env():
if iswindows: if iswindows:
cc = cxx = win_cc cc = cxx = win_cc
cflags = '/c /nologo /MD /W3 /EHsc /utf-8 /DNDEBUG'.split() cflags = '/c /nologo /W3 /EHsc /utf-8'.split()
ldflags = '/DLL /nologo /INCREMENTAL:NO /NODEFAULTLIB:libcmt.lib'.split() cflags.append('/Zi' if debug else '/DNDEBUG')
suffix = ('d' if debug else '')
cflags.append('/MD' + suffix)
ldflags = f'/DLL /nologo /INCREMENTAL:NO /NODEFAULTLIB:libcmt{suffix}.lib'.split()
if debug:
ldflags.append('/DEBUG')
# cflags = '/c /nologo /Ox /MD /W3 /EHsc /Zi'.split() # cflags = '/c /nologo /Ox /MD /W3 /EHsc /Zi'.split()
# ldflags = '/DLL /nologo /INCREMENTAL:NO /DEBUG'.split() # ldflags = '/DLL /nologo /INCREMENTAL:NO /DEBUG'.split()
if is64bit: if is64bit:
@ -266,13 +270,15 @@ class Build(Command):
help='Path to directory in which to place object files during the build process, defaults to "build"') help='Path to directory in which to place object files during the build process, defaults to "build"')
parser.add_option('--output-dir', default=None, parser.add_option('--output-dir', default=None,
help='Path to directory in which to place the built extensions. Defaults to src/calibre/plugins') help='Path to directory in which to place the built extensions. Defaults to src/calibre/plugins')
parser.add_option('--debug', default=False, action='store_true',
help='Build in debug mode')
def run(self, opts): def run(self, opts):
from setup.parallel_build import parallel_build, create_job from setup.parallel_build import parallel_build, create_job
if opts.no_compile: if opts.no_compile:
self.info('--no-compile specified, skipping compilation') self.info('--no-compile specified, skipping compilation')
return return
self.env = init_env() self.env = init_env(debug=opts.debug)
all_extensions = map(parse_extension, filter(is_ext_allowed, read_extensions())) all_extensions = map(parse_extension, filter(is_ext_allowed, read_extensions()))
self.build_dir = os.path.abspath(opts.build_dir or self.DEFAULT_BUILDDIR) self.build_dir = os.path.abspath(opts.build_dir or self.DEFAULT_BUILDDIR)
self.output_dir = os.path.abspath(opts.output_dir or self.DEFAULT_OUTPUTDIR) self.output_dir = os.path.abspath(opts.output_dir or self.DEFAULT_OUTPUTDIR)