diff --git a/CMakeLists.txt b/CMakeLists.txt
index 134cc788952331b151279a4b4224b7eded0e4cbd..622b5d30b0367c2c1f22a2e342ff760a9f75ccc3 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -185,7 +185,9 @@ if (ENABLE_STATIC)
 endif()
 
 # Compile with builtin libgcc by default.
-add_compile_flags("C;CXX;OBJC;OBJCXX" "-static-libgcc")
+if (NOT TARGET_OS_DARWIN)
+    add_compile_flags("C;CXX;OBJC;OBJCXX" "-static-libgcc")
+endif()
 
 ##
 ## Third-Party libraries
@@ -209,7 +211,11 @@ include(luajit)
 #
 # LibOBJC
 #
-option(ENABLE_BUNDLED_LIBOBJC "Enable building of the bundled libobjc" ON)
+set (ENABLE_BUNDLED_LIBOBJC_DEFAULT ON)
+if (TARGET_OS_DARWIN)
+set (ENABLE_BUNDLED_LIBOBJC_DEFAULT OFF)
+endif()
+option(ENABLE_BUNDLED_LIBOBJC "Enable building of the bundled libobjc" ${ENABLE_BUNDLED_LIBOBJC_DEFAULT})
 
 if (ENABLE_BUNDLED_LIBOBJC)
     include(BuildLibOBJC)
@@ -309,7 +315,7 @@ add_subdirectory(doc)
 install (FILES README.md LICENSE doc/box-protocol.txt
          DESTINATION share/doc/tarantool)
 
-include (cmake/cpack.cmake)
+include (cmake/package.cmake)
 
 # tarantool info summary (used in server version output)
 #
diff --git a/README.MacOSX b/README.MacOSX
index b0c378b5b5270f5ca8ecc31ea86a09f47824e455..7a21424214c8f8cf9956c55a96f7fca6c6be8c6c 100644
--- a/README.MacOSX
+++ b/README.MacOSX
@@ -7,13 +7,7 @@ First of all, make sure mac ports are available (to install packages from).
 
 port install autoconf binutils cmake ncurses zlib readline
 
-2. Install gcc 4.6.x and gcc infrastructure pre-requisites
--------------
-(x) Install gcc/g++ 4.6.x from mac ports (port install gcc46); the respective compiler(s) will be named gcc-mp-4.6, g++-mp-4.6;
-(x) Set up the environment to include the new GCC's libs: export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/local/lib
-
-
-3. Install necessary python modules: pexpect, pyYAML, daemon
+2. Install necessary python modules: pexpect, pyYAML, daemon
 -------------
 NB: it is recommended to install python modules through setup.py,
 using the default python (which should be >= 2.6.x and < 3.x);
@@ -25,16 +19,15 @@ sudo python setup.py install
 where module is the name of the installed module and module-dir is the name of the directory
 the module's archive deflates into.
 
-4. Download & build tarantool source code:
+3. Download & build tarantool source code:
 -------------
 
 git clone git://github.com/mailru/tarantool.git
 
 cd tarantool
-CC=gcc-mp-4.6 CXX=g++-mp-4.6 cmake . -DCMAKE_BUILD_TYPE=RelWithDebugInfo -DENABLE_CLIENT=true
-CC=gcc-mp-4.6 make
+CC=clang CXX=clang++ cmake . -DCMAKE_BUILD_TYPE=RelWithDebugInfo -DENABLE_CLIENT=true
 
-5. Run tarantool test suite
+4. Run tarantool test suite
 -------------
 NB: the following tests are not runnable on MacOS X at this point:
 
diff --git a/client/tarantool/tc_store.c b/client/tarantool/tc_store.c
index 93fb58abef1ebf09d625efa16a9fa4edea8cf5ae..dd5a40563f01bc35dc8488cf50c8c39bc1088097 100644
--- a/client/tarantool/tc_store.c
+++ b/client/tarantool/tc_store.c
@@ -202,6 +202,8 @@ int tc_store_cat(void)
 	case TNT_LOG_NONE:
 		rc = 1;
 		break;
+	default:
+		return -1;
 	}
 	if (rc == 0 && print_headers) {
 		fwrite(&tnt_log_marker_eof_v11,
diff --git a/cmake/cpack.cmake b/cmake/package.cmake
similarity index 100%
rename from cmake/cpack.cmake
rename to cmake/package.cmake
diff --git a/connector/c/include/tp.h b/connector/c/include/tp.h
index ae573a1f013da24be0d979867cb960aca263c2ba..3e43e34d9b8de0b403c601bcf463e4ef5a4ee915 100644
--- a/connector/c/include/tp.h
+++ b/connector/c/include/tp.h
@@ -51,7 +51,14 @@ extern "C" {
 #define tp_packed __attribute__((packed))
 #define tp_inline __attribute__((forceinline))
 #define tp_noinline __attribute__((noinline))
+#if defined(__GNUC__)
+#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)
 #define tp_hot __attribute__((hot))
+#endif
+#endif
+#if !defined(tp_hot)
+#define tp_hot
+#endif
 
 #define tp_likely(expr)   __builtin_expect(!! (expr), 1)
 #define tp_unlikely(expr) __builtin_expect(!! (expr), 0)
diff --git a/connector/c/tnt/CMakeLists.txt b/connector/c/tnt/CMakeLists.txt
index faa8d65cdd29393e677734fec19c022deb5fef1f..a343915f1dcda06010583e690cf339ce1c3d861c 100644
--- a/connector/c/tnt/CMakeLists.txt
+++ b/connector/c/tnt/CMakeLists.txt
@@ -47,7 +47,9 @@ set (tnt_sources
 string(REPLACE "-static-libgcc" "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
 string(REPLACE "-static" "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
 
-set (tnt_cflags "${tnt_cflags} -static-libgcc")
+if (NOT TARGET_OS_DARWIN)
+    set (tnt_cflags "${tnt_cflags} -static-libgcc")
+endif()
 
 #
 # Static library
diff --git a/src/box/bitset_index.m b/src/box/bitset_index.m
index 915fddf19731fa3221f01f438547f061ecf5824e..b4ee44723469599d3600a4cc5ca14d81d3b920ae 100644
--- a/src/box/bitset_index.m
+++ b/src/box/bitset_index.m
@@ -199,7 +199,7 @@ bitset_index_iterator_next(struct iterator *iterator)
 
 - (struct tuple *) replace: (struct tuple *) old_tuple
 	: (struct tuple *) new_tuple
-	: (u32) flags
+	: (enum dup_replace_mode) flags
 {
 	assert(!key_def->is_unique);
 	assert(old_tuple != NULL || new_tuple != NULL);
diff --git a/src/box/box_lua.m b/src/box/box_lua.m
index 2d7ec70466c62a46fa3cced25996d64deeb69be9..212b6ccc5709eb2a043c61925010efe4106f692b 100644
--- a/src/box/box_lua.m
+++ b/src/box/box_lua.m
@@ -1457,7 +1457,7 @@ luaL_packvalue(struct lua_State *L, luaL_Buffer *b, int index)
 	}
 	default:
 		luaL_error(L, "box.pack: unsupported type");
-		break;
+		return;
 	}
 	luaL_addvarint32(b, size);
 	luaL_addlstring(b, str, size);
diff --git a/src/box/index.m b/src/box/index.m
index 1714daec4ae423649ebb51ba9969dc073a8cf86b..3e066376f2f1babe59f47eb006cc3c355bba2a2d 100644
--- a/src/box/index.m
+++ b/src/box/index.m
@@ -221,7 +221,7 @@ replace_check_dup(struct tuple *old_tuple,
 
 - (void) initIterator: (struct iterator *) iterator
 	:(enum iterator_type) type
-	:(void *) key :(u32) part_count
+	:(const void *) key :(u32) part_count
 {
 	(void) iterator;
 	(void) type;
diff --git a/src/box/space.m b/src/box/space.m
index 4716333b1bcc7be3bfa7819a429fb096bff7c325..ba19094523e87d2637f19fc0672c9fc840095a4b 100644
--- a/src/box/space.m
+++ b/src/box/space.m
@@ -154,6 +154,9 @@ space_replace(struct space *sp, struct tuple *old_tuple,
 		}
 		@throw;
 	}
+
+	assert(false);
+	return NULL;
 }
 
 void