Move to a saner approach
diff --git a/cryptography/bindings/openssl/api.py b/cryptography/bindings/openssl/api.py
index 58885ab..f9c75e6 100644
--- a/cryptography/bindings/openssl/api.py
+++ b/cryptography/bindings/openssl/api.py
@@ -32,26 +32,20 @@
     def __init__(self):
         self.ffi = cffi.FFI()
         includes = []
+        functions = []
         for name in self._modules:
             __import__("cryptography.bindings.openssl." + name)
             module = sys.modules["cryptography.bindings.openssl." + name]
             self.ffi.cdef(module.TYPES)
             self.ffi.cdef(module.FUNCTIONS)
+            self.ffi.cdef(module.MACROS)
+
+            functions.append(module.FUNCTIONS)
             includes.append(module.INCLUDES)
 
-        # Turn any warnings into an error
-        extra_compile_args = ["-Werror"]
-        if sys.platform == "darwin":
-            # All of OpenSSL is deprecated on OS X, so we ignore this.
-            extra_compile_args.append("-Wno-deprecated")
-            # Disabled because on stock OS X there is an "-mno-fused-madd"
-            # which is ignored.
-            extra_compile_args.append("-Qunused-arguments")
-
         self.lib = self.ffi.verify(
-            source="\n".join(includes),
+            source="\n".join(includes + functions),
             libraries=["crypto"],
-            extra_compile_args=extra_compile_args,
         )
 
         self.lib.OpenSSL_add_all_algorithms()
diff --git a/cryptography/bindings/openssl/evp.py b/cryptography/bindings/openssl/evp.py
index 8d2230f..740f125 100644
--- a/cryptography/bindings/openssl/evp.py
+++ b/cryptography/bindings/openssl/evp.py
@@ -27,12 +27,15 @@
 void OpenSSL_add_all_algorithms();
 const EVP_CIPHER *EVP_get_cipherbyname(const char *);
 int EVP_EncryptInit_ex(EVP_CIPHER_CTX *, const EVP_CIPHER *, ENGINE *,
-                       unsigned char *, unsigned char *);
+                       const unsigned char *, const unsigned char *);
 int EVP_CIPHER_CTX_set_padding(EVP_CIPHER_CTX *, int);
 int EVP_EncryptUpdate(EVP_CIPHER_CTX *, unsigned char *, int *,
-                      unsigned char *, int);
+                      const unsigned char *, int);
 int EVP_EncryptFinal_ex(EVP_CIPHER_CTX *, unsigned char *, int *);
 int EVP_CIPHER_CTX_cleanup(EVP_CIPHER_CTX *);
 const EVP_CIPHER *EVP_CIPHER_CTX_cipher(const EVP_CIPHER_CTX *);
 int EVP_CIPHER_block_size(const EVP_CIPHER *);
 """
+
+MACROS = """
+"""
diff --git a/cryptography/bindings/openssl/opensslv.py b/cryptography/bindings/openssl/opensslv.py
index 9b2db27..d1a1b3e 100644
--- a/cryptography/bindings/openssl/opensslv.py
+++ b/cryptography/bindings/openssl/opensslv.py
@@ -21,3 +21,6 @@
 
 FUNCTIONS = """
 """
+
+MACROS = """
+"""