diff --git a/generator/platformio_generator.py b/generator/platformio_generator.py
index 8c4699c..4519bd3 100644
--- a/generator/platformio_generator.py
+++ b/generator/platformio_generator.py
@@ -19,109 +19,108 @@
 
 if not nanopb_protos:
     print("[nanopb] No generation needed.")
-    exit(0)
+else:
+    if isinstance(nanopb_plugin_options, (list, tuple)):
+        nanopb_plugin_options = " ".join(nanopb_plugin_options)
 
-if isinstance(nanopb_plugin_options, (list, tuple)):
-    nanopb_plugin_options = " ".join(nanopb_plugin_options)
+    nanopb_plugin_options = nanopb_plugin_options.split()
 
-nanopb_plugin_options = nanopb_plugin_options.split()
+    protos_files = fs.match_src_files(project_dir, nanopb_protos)
+    if not len(protos_files):
+        print("[nanopb] ERROR: No files matched pattern:")
+        print(f"nanopb_protos: {nanopb_protos}")
+        exit(1)
 
-protos_files = fs.match_src_files(project_dir, nanopb_protos)
-if not len(protos_files):
-    print("[nanopb] ERROR: No files matched pattern:")
-    print(f"nanopb_protos: {nanopb_protos}")
-    exit(1)
+    protoc_generator = os.path.join(nanopb_root, 'generator', 'protoc')
 
-protoc_generator = os.path.join(nanopb_root, 'generator', 'protoc')
+    nanopb_options = ""
+    nanopb_options += f" --nanopb_out={generated_src_dir}"
+    for opt in nanopb_plugin_options:
+        nanopb_options += (" --nanopb_opt=" + opt)
 
-nanopb_options = ""
-nanopb_options += f" --nanopb_out={generated_src_dir}"
-for opt in nanopb_plugin_options:
-    nanopb_options += (" --nanopb_opt=" + opt)
-
-try:
-    os.makedirs(generated_src_dir)
-except FileExistsError:
-    pass
-
-try:
-    os.makedirs(md5_dir)
-except FileExistsError:
-    pass
-
-# Collect include dirs based on
-proto_include_dirs = set()
-for proto_file in protos_files:
-    proto_file_abs = os.path.join(project_dir, proto_file)
-    proto_dir = os.path.dirname(proto_file_abs)
-    proto_include_dirs.add(proto_dir)
-
-for proto_include_dir in proto_include_dirs:
-    nanopb_options += (" --proto_path=" + proto_include_dir)
-    nanopb_options += (" --nanopb_opt=-I" + proto_include_dir)
-
-for proto_file in protos_files:
-    proto_file_abs = os.path.join(project_dir, proto_file)
-
-    proto_file_path_abs = os.path.dirname(proto_file_abs)
-    proto_file_basename = os.path.basename(proto_file_abs)
-    proto_file_without_ext = os.path.splitext(proto_file_basename)[0]
-
-    proto_file_md5_abs = os.path.join(md5_dir, proto_file_basename + '.md5')
-    proto_file_current_md5 = hashlib.md5(pathlib.Path(proto_file_abs).read_bytes()).hexdigest()
-
-    options_file = proto_file_without_ext + ".options"
-    options_file_abs = os.path.join(proto_file_path_abs, options_file)
-    options_file_md5_abs = None
-    options_file_current_md5 = None
-    if pathlib.Path(options_file_abs).exists():
-        options_file_md5_abs = os.path.join(md5_dir, options_file + '.md5')
-        options_file_current_md5 = hashlib.md5(pathlib.Path(options_file_abs).read_bytes()).hexdigest()
-    else:
-        options_file = None
-
-    header_file = proto_file_without_ext + ".pb.h"
-    source_file = proto_file_without_ext + ".pb.c"
-
-    header_file_abs = os.path.join(generated_src_dir, source_file)
-    source_file_abs = os.path.join(generated_src_dir, header_file)
-
-    need_generate = False
-
-    # Check proto file md5
     try:
-        last_md5 = pathlib.Path(proto_file_md5_abs).read_text()
-        if last_md5 != proto_file_current_md5:
-            need_generate = True
-    except FileNotFoundError:
-        need_generate = True
+        os.makedirs(generated_src_dir)
+    except FileExistsError:
+        pass
 
-    if options_file:
-        # Check options file md5
+    try:
+        os.makedirs(md5_dir)
+    except FileExistsError:
+        pass
+
+    # Collect include dirs based on
+    proto_include_dirs = set()
+    for proto_file in protos_files:
+        proto_file_abs = os.path.join(project_dir, proto_file)
+        proto_dir = os.path.dirname(proto_file_abs)
+        proto_include_dirs.add(proto_dir)
+
+    for proto_include_dir in proto_include_dirs:
+        nanopb_options += (" --proto_path=" + proto_include_dir)
+        nanopb_options += (" --nanopb_opt=-I" + proto_include_dir)
+
+    for proto_file in protos_files:
+        proto_file_abs = os.path.join(project_dir, proto_file)
+
+        proto_file_path_abs = os.path.dirname(proto_file_abs)
+        proto_file_basename = os.path.basename(proto_file_abs)
+        proto_file_without_ext = os.path.splitext(proto_file_basename)[0]
+
+        proto_file_md5_abs = os.path.join(md5_dir, proto_file_basename + '.md5')
+        proto_file_current_md5 = hashlib.md5(pathlib.Path(proto_file_abs).read_bytes()).hexdigest()
+
+        options_file = proto_file_without_ext + ".options"
+        options_file_abs = os.path.join(proto_file_path_abs, options_file)
+        options_file_md5_abs = None
+        options_file_current_md5 = None
+        if pathlib.Path(options_file_abs).exists():
+            options_file_md5_abs = os.path.join(md5_dir, options_file + '.md5')
+            options_file_current_md5 = hashlib.md5(pathlib.Path(options_file_abs).read_bytes()).hexdigest()
+        else:
+            options_file = None
+
+        header_file = proto_file_without_ext + ".pb.h"
+        source_file = proto_file_without_ext + ".pb.c"
+
+        header_file_abs = os.path.join(generated_src_dir, source_file)
+        source_file_abs = os.path.join(generated_src_dir, header_file)
+
+        need_generate = False
+
+        # Check proto file md5
         try:
-            last_md5 = pathlib.Path(options_file_md5_abs).read_text()
-            if last_md5 != options_file_current_md5:
+            last_md5 = pathlib.Path(proto_file_md5_abs).read_text()
+            if last_md5 != proto_file_current_md5:
                 need_generate = True
         except FileNotFoundError:
             need_generate = True
 
-    options_info = f"{options_file}" if options_file else "no options"
-
-    if not need_generate:
-        print(f"[nanopb] Skipping '{proto_file}' ({options_info})")
-    else:
-        print(f"[nanopb] Processing '{proto_file}' ({options_info})")
-        cmd = protoc_generator + " " + nanopb_options + " " + proto_file_basename
-        result = env.Execute(cmd)
-        if result != 0:
-            print(f"[nanopb] ERROR: ({result}) processing cmd: '{cmd}'")
-            exit(1)
-        pathlib.Path(proto_file_md5_abs).write_text(proto_file_current_md5)
         if options_file:
-            pathlib.Path(options_file_md5_abs).write_text(options_file_current_md5)
+            # Check options file md5
+            try:
+                last_md5 = pathlib.Path(options_file_md5_abs).read_text()
+                if last_md5 != options_file_current_md5:
+                    need_generate = True
+            except FileNotFoundError:
+                need_generate = True
 
-#
-# Add generated includes and sources to build environment
-#
-env.Append(CPPPATH=[generated_src_dir])
-env.BuildSources(generated_build_dir, generated_src_dir)
+        options_info = f"{options_file}" if options_file else "no options"
+
+        if not need_generate:
+            print(f"[nanopb] Skipping '{proto_file}' ({options_info})")
+        else:
+            print(f"[nanopb] Processing '{proto_file}' ({options_info})")
+            cmd = protoc_generator + " " + nanopb_options + " " + proto_file_basename
+            result = env.Execute(cmd)
+            if result != 0:
+                print(f"[nanopb] ERROR: ({result}) processing cmd: '{cmd}'")
+                exit(1)
+            pathlib.Path(proto_file_md5_abs).write_text(proto_file_current_md5)
+            if options_file:
+                pathlib.Path(options_file_md5_abs).write_text(options_file_current_md5)
+
+    #
+    # Add generated includes and sources to build environment
+    #
+    env.Append(CPPPATH=[generated_src_dir])
+    env.BuildSources(generated_build_dir, generated_src_dir)
