diff --git a/CMakeLists.txt b/CMakeLists.txt
index 1f647e0a988d70c317ac45d1e8321cdf945d4e72..8ecac868db431ffae915d2318eb2b2623b9f9d13 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -72,6 +72,13 @@ add_subdirectory(${ZLIB_ROOT_DIR} third_party/zlib)
 set(CMAKE_C_FLAGS   "${CMAKE_C_FLAGS}   -std=c11")
 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
 
+if (GRPC_USE_PROTO_LITE)
+  set(PROTOBUF_LIBRARY_NAME "libprotobuf-lite")
+  add_definitions("-DGRPC_USE_PROTO_LITE")
+else()
+  set(PROTOBUF_LIBRARY_NAME "libprotobuf")
+endif()
+
   
 add_library(gpr
   src/core/lib/profiling/basic_timers.c
@@ -742,7 +749,7 @@ target_include_directories(grpc++
 
 target_link_libraries(grpc++
   ssl
-  libprotobuf
+  ${PROTOBUF_LIBRARY_NAME}
   grpc
 )
 
@@ -809,7 +816,7 @@ target_include_directories(grpc++_unsecure
 )
 
 target_link_libraries(grpc++_unsecure
-  libprotobuf
+  ${PROTOBUF_LIBRARY_NAME}
   gpr
   grpc_unsecure
   grpc
diff --git a/templates/CMakeLists.txt.template b/templates/CMakeLists.txt.template
index 52e8b866be1b6a645349101fbd0b03a3a712cf34..8624dc4b25b669c7dd91c1c1f21ac8db5cfcee09 100644
--- a/templates/CMakeLists.txt.template
+++ b/templates/CMakeLists.txt.template
@@ -47,7 +47,7 @@
     if target_dict.get('secure', False):
       deps = ["ssl"]
     if target_dict['name'] in ['grpc++', 'grpc++_unsecure', 'grpc++_codegen_lib']:
-      deps.append("libprotobuf")
+      deps.append("${PROTOBUF_LIBRARY_NAME}")
     elif target_dict['name'] in ['grpc']:
       deps.append("zlibstatic")
     for d in target_dict.get('deps', []):
@@ -88,6 +88,13 @@
   set(CMAKE_C_FLAGS   "<%text>${CMAKE_C_FLAGS}</%text>   -std=c11")
   set(CMAKE_CXX_FLAGS "<%text>${CMAKE_CXX_FLAGS}</%text> -std=c++11")
 
+  if (GRPC_USE_PROTO_LITE)
+    set(PROTOBUF_LIBRARY_NAME "libprotobuf-lite")
+    add_definitions("-DGRPC_USE_PROTO_LITE")
+  else()
+    set(PROTOBUF_LIBRARY_NAME "libprotobuf")
+  endif()
+
   % for lib in libs:
   % if lib.build in ["all", "protoc", "tool"]:
     ${cc_library(lib)}