diff --git a/.codeclimate.yml b/.codeclimate.yml
new file mode 100644
index 0000000000000000000000000000000000000000..7a04ba0803a98ef0fce789a31075d4da6537f0a0
--- /dev/null
+++ b/.codeclimate.yml
@@ -0,0 +1,18 @@
+engines:
+  duplication:
+    enabled: true
+    config:
+      languages:
+        python:
+
+  fixme:
+    enabled: true
+  markdownlint:
+    enabled: true
+  pep8:
+    enabled: true
+exclude_paths:
+  - tests/**
+ratings:
+  paths:
+    - minijson/**
diff --git a/setup.py b/setup.py
index f764d7bfb84bbf93ef09459ac80080aeef6e452c..2207bc10a6c66e99883f99b6cca512f9d17ffa0c 100644
--- a/setup.py
+++ b/setup.py
@@ -8,22 +8,25 @@ monkey_patch_parallel_compilation()
 build_kwargs = {}
 directives = {'language_level': '3'}
 dont_snakehouse = False
+multi_kwargs = {}
 if 'DEBUG' in os.environ:
     dont_snakehouse = True
     build_kwargs.update(gdb_debug=True)
     directives['embedsignature'] = True
     directives['linetrace'] = True
+    multi_kwargs['define_macros'] = [('CYTHON_TRACE', '1')]
 
 
 setup(version='1.7',
       packages=find_packages(include=['minijson', 'minijson.*']),
       ext_modules=build([Multibuild('minijson', find_pyx('minijson'),
-                                    dont_snakehouse=dont_snakehouse), ],
+                                    dont_snakehouse=dont_snakehouse,
+                                    **multi_kwargs), ],
                         compiler_directives=directives, **build_kwargs),
       python_requires='!=2.7.*,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,!=3.7.*',
       tests_require=[
           "nose2", "mock", "coverage", "nose2[coverage_plugin]"
       ],
       test_suite='nose2.collector.collector',
-      zip_safe=True
+      zip_safe=False
       )