diff --git a/include/slibtool/slibtool.h b/include/slibtool/slibtool.h
index 7f48fdd..edc24e5 100644
--- a/include/slibtool/slibtool.h
+++ b/include/slibtool/slibtool.h
@@ -57,6 +57,13 @@ enum slbt_tag {
 	SLBT_TAG_CXX,
 };
 
+enum slbt_warning_level {
+	SLBT_WARNING_LEVEL_UNKNOWN,
+	SLBT_WARNING_LEVEL_ALL,
+	SLBT_WARNING_LEVEL_ERROR,
+	SLBT_WARNING_LEVEL_NONE,
+};
+
 /* unit action flags */
 
 struct slbt_input {
@@ -70,6 +77,7 @@ struct slbt_common_ctx {
 	uint64_t			fmtflags;
 	enum slbt_mode			mode;
 	enum slbt_tag			tag;
+	enum slbt_warning_level		warnings;
 };
 
 struct slbt_driver_ctx {
diff --git a/src/driver/slbt_driver_ctx.c b/src/driver/slbt_driver_ctx.c
index 53cbcf8..319678b 100644
--- a/src/driver/slbt_driver_ctx.c
+++ b/src/driver/slbt_driver_ctx.c
@@ -174,6 +174,17 @@ int slbt_get_driver_ctx(
 				case TAG_FEATURES:
 					cctx.drvflags |= SLBT_DRIVER_FEATURES;
 					break;
+
+				case TAG_WARNINGS:
+					if (!strcmp("all",entry->arg))
+						cctx.tag = SLBT_WARNING_LEVEL_ALL;
+
+					else if (!strcmp("error",entry->arg))
+						cctx.tag = SLBT_WARNING_LEVEL_ERROR;
+
+					else if (!strcmp("none",entry->arg))
+						cctx.tag = SLBT_WARNING_LEVEL_NONE;
+					break;
 			}
 		} else
 			nunits++;