diff --git a/setup.py b/setup.py index f1de675..4c23028 100644 --- a/setup.py +++ b/setup.py @@ -27,53 +27,59 @@ if system == 'Darwin': os.environ.setdefault('MACOSX_DEPLOYMENT_TARGET', '10.14') extra_compile_args.append('-std=c++11') -if os.getenv('BUILD_WITH_CYTHON') and not CYTHON_AVAILABLE: +build_with_cython = os.getenv('BUILD_WITH_CYTHON') +if build_with_cython and not CYTHON_AVAILABLE: print( 'BUILD_WITH_CYTHON environment variable is set, but cython' ' is not available. Falling back to pre-cythonized version if' ' available.' ) + build_with_cython = False -if os.getenv('BUILD_WITH_CYTHON') and CYTHON_AVAILABLE: - macros = [] - compiler_directives = { - 'embedsignature': True - } +build_with_system_lib = os.getenv('BUILD_WITH_SYSTEM_LIB') + +macros = [] +compiler_directives = {} +libraries = [] +sources = [ + 'simdjson/errors.cpp', +] + +if build_with_system_lib: + libraries.append('simdjson') +else: + sources.append('simdjson/simdjson.cpp') + +if build_with_cython: + compiler_directives['embedsignature'] = True if os.getenv('BUILD_FOR_DEBUG'): # Enable line tracing, which also enables support for coverage # reporting. - macros = [ + macros += [ ('CYTHON_TRACE', 1), ('CYTHON_TRACE_NOGIL', 1) ] compiler_directives['linetrace'] = True - extensions = cythonize([ - Extension( - 'csimdjson', - [ - 'simdjson/simdjson.cpp', - 'simdjson/errors.cpp', - 'simdjson/csimdjson.pyx' - ], - define_macros=macros, - extra_compile_args=extra_compile_args - ) - ], compiler_directives=compiler_directives) + sources.append('simdjson/csimdjson.pyx') else: - extensions = [ - Extension( - 'csimdjson', - [ - 'simdjson/simdjson.cpp', - 'simdjson/errors.cpp', - 'simdjson/csimdjson.cpp' - ], - extra_compile_args=extra_compile_args, - language='c++' - ) - ] + sources.append('simdjson/csimdjson.cpp') + + +extensions = [ + Extension( + 'csimdjson', + sources, + define_macros=macros, + extra_compile_args=extra_compile_args, + libraries=libraries, + language='c++', + ) +] + +if build_with_cython: + extensions = cythonize(extensions, compiler_directives=compiler_directives) setup( name='pysimdjson',