Add checking and verification support for includes using IWYU (#23092)

* Add new script with feature for checking includes in project

* Add build and install IWYU 0.16 on chip-build Docker image and repair lost Tizen env

* Fix includes for ConnectivityManagerImpl.cpp in Tizen

* Fix includes in Tizen platform - First IWYU scan

* Fix includes in ThreadStackManager and BLEManager

* Fix include after commit:
Remove using-directives namespaces in Tizen platform

* Add some rules to IWYU mapping files and fix logging in iwyu_check.py script

* Fix version and restyled

* Compile ChipDeviceScanner only when BLE support is enabled

* Small improvements for Tizen SDK installation script

* Cleanup IWYU mapping files

* Purge clang-12 after compiling IWYU from source

* Show stderr output of include-what-you-use tool

Co-authored-by: Arkadiusz Bokowy <a.bokowy@samsung.com>
diff --git a/integrations/docker/images/chip-build-tizen/tizen-sdk-installer/install.sh b/integrations/docker/images/chip-build-tizen/tizen-sdk-installer/install.sh
index f4c3222..99fd9c3 100755
--- a/integrations/docker/images/chip-build-tizen/tizen-sdk-installer/install.sh
+++ b/integrations/docker/images/chip-build-tizen/tizen-sdk-installer/install.sh
@@ -44,17 +44,17 @@
     echo "Example: $SCRIPT_NAME --tizen-sdk-path ~/tizen-sdk --tizen-version 6.0 --install-dependencies"
     echo
     echo "Options:"
-    echo "  --help                     Display this information"
+    echo "  -h, --help                 Display this information"
     echo "  --tizen-sdk-path           Set directory where Tizen will be installed. Default is $TIZEN_SDK_ROOT"
     echo "  --tizen-sdk-data-path      Set directory where Tizen have data. Default is $TIZEN_SDK_DATA_PATH"
     echo "  --install-dependencies     This options install all dependencies."
     echo "  --tizen-version            Select Tizen version. Default is $TIZEN_VERSION"
-    echo "  --override-secret-tool     Without password manager circumvents the requirement of having functional D-Bus Secrets service"
+    echo "  --override-secret-tool     Circumvent the requirement of having functional D-Bus Secrets service."
     echo
     echo "Note:"
     echo "The script should run fully with ubuntu. For other distributions you may have to manually"
     echo "install all needed dependencies. Use the script specifying --tizen-sdk-path with or"
-    echo "without --tizen-version. The script will only install the tizen platform for Matter."
+    echo "without --tizen-version. The script will only install Tizen platform for Matter."
 }
 
 # ------------------------------------------------------------------------------
@@ -66,7 +66,7 @@
 # ------------------------------------------------------------------------------
 # Info print function
 function info() {
-    echo "$COLOR_GREEN$1$COLOR_NONE"
+    echo "$COLOR_GREEN[INFO]: $1$COLOR_NONE"
 }
 
 # ------------------------------------------------------------------------------
@@ -78,7 +78,7 @@
 # ------------------------------------------------------------------------------
 # Show dependencies
 function show_dependencies() {
-    warning "Need dependencies for use this script installation SDK: cpio  wget unzip unrpm"
+    warning "Need dependencies for use this script installation SDK: cpio unrpm unzip wget"
     warning "Need dependencies for Tizen SDK: JAVA JRE >=8.0"
 }
 
@@ -135,10 +135,11 @@
 
     TIZEN_SDK_SYSROOT="$TIZEN_SDK_ROOT/platforms/tizen-$TIZEN_VERSION/mobile/rootstraps/mobile-$TIZEN_VERSION-device.core"
 
-    # Get tizen studio CLI
-    info "Get tizen studio CLI [...]"
     cd "$TMP_DIR" || return
 
+    # Get Tizen Studio CLI
+    info "Downloading Tizen Studio CLI..."
+
     # Download
     URL="http://download.tizen.org/sdk/tizenstudio/official/binary/"
     PKG_ARR=(
@@ -150,7 +151,7 @@
     download "$URL" "${PKG_ARR[@]}"
 
     # Get toolchain
-    info "Get toolchain"
+    info "Downloading Tizen toolchain..."
 
     # Download
     URL="http://download.tizen.org/sdk/tizenstudio/official/binary/"
@@ -159,11 +160,11 @@
         "sbi-toolchain-gcc-9.2.cpp.app_2.2.16_ubuntu-64.zip")
     download "$URL" "${PKG_ARR[@]}"
 
-    # Get tizen sysroot
-    info "Get tizen sysroot"
+    # Get Tizen sysroot
+    info "Downloading Tizen sysroot..."
 
     # Base sysroot
-    # Different versions of tizen have different rootstrap versions
+    # Different versions of Tizen have different rootstrap versions
     URL="http://download.tizen.org/sdk/tizenstudio/official/binary/"
     PKG_ARR=(
         "mobile-$TIZEN_VERSION-core-add-ons_*_ubuntu-64.zip"
@@ -224,7 +225,7 @@
     download "$URL" "${PKG_ARR[@]}"
 
     # Install all
-    info "Installation Tizen SDK [...]"
+    info "Installing Tizen SDK..."
 
     unzip -o '*.zip'
     cp -rf data/* "$TIZEN_SDK_ROOT"
@@ -234,12 +235,12 @@
 
     # Install secret tool or not
     if ("$SECRET_TOOL"); then
-        info "Override secret tool"
+        info "Overriding secret tool..."
         cp "$SCRIPT_DIR/secret-tool.py" "$TIZEN_SDK_ROOT/tools/certificate-encryptor/secret-tool"
         chmod 0755 "$TIZEN_SDK_ROOT/tools/certificate-encryptor/secret-tool"
     fi
 
-    # Configure tizen cli
+    # Configure Tizen CLI
     echo "TIZEN_SDK_INSTALLED_PATH=$TIZEN_SDK_ROOT" >"$TIZEN_SDK_ROOT/sdk.info"
     echo "TIZEN_SDK_DATA_PATH=$TIZEN_SDK_DATA_PATH" >>"$TIZEN_SDK_ROOT/sdk.info"
     ln -sf "$TIZEN_SDK_DATA_PATH/.tizen-cli-config" "$TIZEN_SDK_ROOT/tools/.tizen-cli-config"
@@ -251,9 +252,12 @@
     ln -sf ../../lib/libcap.so.2 "$TIZEN_SDK_SYSROOT/usr/lib/libcap.so"
     ln -sf openssl1.1.pc "$TIZEN_SDK_SYSROOT/usr/lib/pkgconfig/openssl.pc"
 
+    info "Done."
+    echo
+
     # Information on necessary environment variables
-    warning "You must add the appropriate environment variables before proceeding with matter."
-    echo "$COLOR_YELLOW"
+    warning "Before proceeding with Matter export environment variables as follows:"
+    echo -n "$COLOR_YELLOW"
     echo "export TIZEN_VESRSION=\"$TIZEN_VERSION\""
     echo "export TIZEN_SDK_ROOT=\"$(realpath "$TIZEN_SDK_ROOT")\""
     echo "export TIZEN_SDK_TOOLCHAIN=\"\$TIZEN_SDK_ROOT/tools/arm-linux-gnueabi-gcc-9.2\""
@@ -264,7 +268,7 @@
 
 while (($#)); do
     case $1 in
-        --help)
+        -h | --help)
             show_help
             exit 0
             ;;
@@ -308,20 +312,19 @@
         show_dependencies
         exit 1
     fi
-else
-    show_dependencies
 fi
 
 # ------------------------------------------------------------------------------
-# Checking dependencies needed to install the tizen platform
-for PKG in 'cpio' 'unzip' 'wget' 'unrpm'; do
+# Checking dependencies needed to install Tizen platform
+info "Checking required tools: cpio, java, unrpm, unzip, wget"
+for PKG in 'cpio' 'java' 'unrpm' 'unzip' 'wget'; do
     if ! command -v "$PKG" &>/dev/null; then
-        warning "Not found $PKG"
+        error "Required tool not found: $PKG"
         dep_lost=1
     fi
 done
 if [[ $dep_lost ]]; then
-    error "You need install dependencies before [HINT]: On Ubuntu-like distro run: sudo apt install ${DEPENDENCIES[@]}"
+    echo "[HINT]: sudo apt-get install ${DEPENDENCIES[*]}"
     exit 1
 fi
 
diff --git a/integrations/docker/images/chip-build-vscode/Dockerfile b/integrations/docker/images/chip-build-vscode/Dockerfile
index eb49bab..755bc4f 100644
--- a/integrations/docker/images/chip-build-vscode/Dockerfile
+++ b/integrations/docker/images/chip-build-vscode/Dockerfile
@@ -109,6 +109,7 @@
 
 ENV TIZEN_VERSION 6.0
 ENV TIZEN_SDK_ROOT /opt/tizen-sdk
+ENV TIZEN_SDK_TOOLCHAIN $TIZEN_SDK_ROOT/tools/arm-linux-gnueabi-gcc-9.2
 ENV TIZEN_SDK_SYSROOT $TIZEN_SDK_ROOT/platforms/tizen-$TIZEN_VERSION/mobile/rootstraps/mobile-$TIZEN_VERSION-device.core
 
 ENV FVP_CORSTONE_300_PATH=/opt/FVP_Corstone_SSE-300
diff --git a/integrations/docker/images/chip-build/Dockerfile b/integrations/docker/images/chip-build/Dockerfile
index 41e3687..00d2d47 100644
--- a/integrations/docker/images/chip-build/Dockerfile
+++ b/integrations/docker/images/chip-build/Dockerfile
@@ -57,6 +57,7 @@
     ninja-build \
     openjdk-8-jdk \
     pkg-config \
+    python-is-python3 \
     python3.9 \
     python3.9-dev \
     python3.9-venv \
@@ -120,6 +121,30 @@
     && rm -rf bloaty \
     && : # last line
 
+# Need newer version of include-what-you-use
+RUN set -x \
+    && apt-get update \
+    # Install build and runtime requirements for IWYU
+    && DEBIAN_FRONTEND=noninteractive apt-get install -fy --fix-missing clang-12 libclang-12-dev \
+    # Build and install IWYU
+    && git clone --depth=1 --branch=clang_12 https://github.com/include-what-you-use/include-what-you-use.git \
+    && mkdir -p include-what-you-use/build \
+    && cd include-what-you-use/build \
+    && cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_PREFIX_PATH=/usr/lib/llvm-12 -DIWYU_LINK_CLANG_DYLIB=OFF .. \
+    && make -j8 \
+    && make install \
+    # Save clang-12 files, so we can restore them after build dependencies cleanup
+    && tar -cf clang-12-files.tar $(dpkg -L libclang-common-12-dev |grep /include) /usr/lib/llvm-12/lib/libLLVM-12.so.1 \
+    # Cleanup build dependencies
+    && apt autoremove -fy clang-12 libclang-12-dev \
+    && rm -rf /var/lib/apt/lists/ \
+    # Restore clang-12 files
+    && tar -xf clang-12-files.tar -C / \
+    # Cleanup
+    && cd ../.. \
+    && rm -rf include-what-you-use \
+    && : # last line
+
 # Build glib-2.0 from source with enabled thread sanitizer. This is needed for
 # running CHIP tests with TSAN enabled. When running applications with TSAN
 # all shared libraries should be built with TSAN enabled, otherwise TSAN might
diff --git a/integrations/docker/images/chip-build/version b/integrations/docker/images/chip-build/version
index c20ee11..e0ef955 100644
--- a/integrations/docker/images/chip-build/version
+++ b/integrations/docker/images/chip-build/version
@@ -1 +1 @@
-0.6.13 Version bump reason: Update zap to latest release
+0.6.14 Version bump reason: Add checking and verification support for includes using IWYU
diff --git a/scripts/helpers/iwyu-check.py b/scripts/helpers/iwyu-check.py
new file mode 100755
index 0000000..261544a
--- /dev/null
+++ b/scripts/helpers/iwyu-check.py
@@ -0,0 +1,200 @@
+#!/usr/bin/env -S python3 -B
+
+# Copyright (c) 2021 Project CHIP Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import contextlib
+import glob
+import json
+import logging
+import os
+import re
+import shutil
+import subprocess
+import sys
+from pathlib import Path
+
+import click
+import coloredlogs
+
+# Supported log levels, mapping string values required for argument
+# parsing into logging constants
+__LOG_LEVELS__ = {
+    'debug': logging.DEBUG,
+    'info': logging.INFO,
+    'warn': logging.WARN,
+    'fatal': logging.FATAL,
+}
+
+root_dir = os.path.dirname(os.path.realpath(__file__))
+proj_root_dir = os.path.join(Path(root_dir).parent.parent)
+
+
+def find_program(names):
+    for name in names:
+        found = shutil.which(name)
+        if found is not None:
+            return found
+
+
+@click.command()
+@click.option(
+    '--log-level',
+    default='INFO',
+    type=click.Choice(__LOG_LEVELS__.keys(), case_sensitive=False),
+    help='Determines the verbosity of script output.')
+@click.option(
+    '--no-log-timestamps',
+    default=False,
+    is_flag=True,
+    help='Skip timestamps in log output')
+@click.option(
+    '--compile-commands-glob',
+    show_default=True,
+    default=os.path.join(proj_root_dir, "out", "debug", "compile_commands*.json"),
+    help='Set global pattern for compile_commands.json files'
+)
+@click.option(
+    '--scanning-destination',
+    show_default=True,
+    default=os.path.join(proj_root_dir, "src", "platform"),
+    help='Set scanning destination file(s) or directory /ies in project'
+)
+@click.option(
+    '--mapping-file-dir',
+    help='Set mapping file directory /ies manually. File should have name iwyu.imp'
+)
+@click.option(
+    '--iwyu-args',
+    show_default=True,
+    default="-Xiwyu --no_fwd_decls",
+    help='Set custom arg(s) for include what you use'
+)
+@click.option(
+    '--clang-args',
+    default="",
+    help='Set custom arg(s) for clang'
+)
+def main(compile_commands_glob, scanning_destination, mapping_file_dir,
+         iwyu_args, clang_args, log_level, no_log_timestamps):
+    # Ensures somewhat pretty logging of what is going on
+    log_fmt = '%(asctime)s %(levelname)-7s %(message)s'
+    if no_log_timestamps:
+        log_fmt = '%(levelname)-7s %(message)s'
+    coloredlogs.install(level=__LOG_LEVELS__[log_level], fmt=log_fmt)
+
+    # checking if a program IWYU exists
+    iwyu = find_program(('iwyu_tool', 'iwyu_tool.py'))
+
+    if iwyu is None:
+        logging.error("Can't find IWYU")
+        sys.exit(1)
+
+    # For iterating how many files had problems with includes
+    warning_in_files = 0
+
+    platform = ""
+    compile_commands_glob = glob.glob(compile_commands_glob)
+
+    if not compile_commands_glob:
+        logging.error("Can't find compile_commands.json file(s)")
+        sys.exit(1)
+
+    for compile_commands in compile_commands_glob:
+
+        compile_commands_path = os.path.dirname(compile_commands)
+        compile_commands_file = os.path.join(compile_commands_path, "compile_commands.json")
+        logging.debug("Copy compile command file %s to %s", compile_commands, compile_commands_file)
+
+        with contextlib.suppress(shutil.SameFileError):
+            shutil.copyfile(compile_commands, compile_commands_file)
+
+        # Prase json file for find target name
+        with open(compile_commands, 'r') as json_data:
+            json_data = json.load(json_data)
+
+        for key in json_data:
+            find_re = re.search(r'^.*/src/platform*?\/(.*)/.*$', key['file'])
+            if find_re is not None:
+                platform = find_re.group(1)
+                break
+        if not platform:
+            logging.error("Can't find platform")
+            sys.exit(1)
+
+        if not mapping_file_dir:
+            mapping_file_dir = os.path.join(root_dir, "platforms", platform)
+
+        # Platform specific clang arguments, as some platform
+        # may needed some hacks for clang compiler for work properly.
+        platform_clang_args = []
+
+        if platform == "Tizen":
+            platform_clang_args = [
+                "--target=arm-linux-gnueabi",
+                "-I$TIZEN_SDK_TOOLCHAIN/arm-tizen-linux-gnueabi/include/c++/9.2.0",
+                "-I$TIZEN_SDK_TOOLCHAIN/arm-tizen-linux-gnueabi/include/c++/9.2.0/arm-tizen-linux-gnueabi",
+                "-I$TIZEN_SDK_TOOLCHAIN/lib/gcc/arm-tizen-linux-gnueabi/9.2.0/include",
+            ]
+
+        # TODO: Add another platform for easy scanning
+        # Actually works scanning for platform: tizen, darwin, linux other not tested yet.
+
+        command_arr = [
+            iwyu,
+            "-p", compile_commands_path, scanning_destination,
+            "--", iwyu_args,
+            "-Xiwyu", "--mapping_file=" + mapping_file_dir + "/iwyu.imp",
+        ] + platform_clang_args + [clang_args]
+
+        logging.info("Used compile commands: %s", compile_commands)
+        logging.info("Scanning includes for platform: %s", platform)
+        logging.info("Scanning destination: %s", scanning_destination)
+
+        logging.debug("Command: %s", " ".join(command_arr))
+        status = subprocess.Popen(" ".join(command_arr),
+                                  shell=True,
+                                  text=True,
+                                  stdout=subprocess.PIPE,
+                                  stderr=subprocess.STDOUT)
+
+        logging.info("============== IWYU output start  ================")
+
+        logger = logging.info
+        while status.poll() is None:
+            line = status.stdout.readline().rstrip()
+
+            if re.match(r"^warning:.*$", line):
+                logger = logging.warning
+            elif re.match(r"^.*([A-Za-z0-9]+(/[A-Za-z0-9]+)+)\.cpp should [a-zA-Z]+ these lines:$", line):
+                logger = logging.warning
+            elif re.match(r"^.*([A-Za-z0-9]+(/[A-Za-z0-9]+)+)\.[a-zA-Z]+ has correct #includes/fwd-decls\)$", line):
+                logger = logging.info
+            elif re.match(r"^The full include-list for .*$", line):
+                logger = logging.warning
+                warning_in_files += 1
+
+            logger("%s", line)
+
+        logging.info("============== IWYU output end  ================")
+
+    if warning_in_files:
+        logging.error("Number of files with include issues: %d", warning_in_files)
+        sys.exit(2)
+    else:
+        logging.info("Every include looks good!")
+
+
+if __name__ == '__main__':
+    main()
diff --git a/scripts/helpers/platforms/Darwin/iwyu.imp b/scripts/helpers/platforms/Darwin/iwyu.imp
new file mode 100644
index 0000000..0364fe5
--- /dev/null
+++ b/scripts/helpers/platforms/Darwin/iwyu.imp
@@ -0,0 +1,3 @@
+[
+    { ref: "../iwyu.imp" },
+]
diff --git a/scripts/helpers/platforms/EFR32/iwyu.imp b/scripts/helpers/platforms/EFR32/iwyu.imp
new file mode 100644
index 0000000..0364fe5
--- /dev/null
+++ b/scripts/helpers/platforms/EFR32/iwyu.imp
@@ -0,0 +1,3 @@
+[
+    { ref: "../iwyu.imp" },
+]
diff --git a/scripts/helpers/platforms/Linux/iwyu.imp b/scripts/helpers/platforms/Linux/iwyu.imp
new file mode 100644
index 0000000..0364fe5
--- /dev/null
+++ b/scripts/helpers/platforms/Linux/iwyu.imp
@@ -0,0 +1,3 @@
+[
+    { ref: "../iwyu.imp" },
+]
diff --git a/scripts/helpers/platforms/Tizen/iwyu.imp b/scripts/helpers/platforms/Tizen/iwyu.imp
new file mode 100644
index 0000000..f314087
--- /dev/null
+++ b/scripts/helpers/platforms/Tizen/iwyu.imp
@@ -0,0 +1,10 @@
+[
+    { ref: "../iwyu.imp" },
+
+    { include: [ '"bluetooth_type.h"', private, '<bluetooth.h>', public ] },
+    { include: [ '"dns-sd.h"', private, '<dns-sd.h>', public ] },
+    { include: [ '"thread-type.h"', private, '<thread.h>', public ] },
+    { include: [ '"thread.h"', private, '<thread.h>', public ] },
+    { include: [ '<thread-type.h>', private, '<thread.h>', public ] },
+    { include: [ '<tizen_error.h>', private, '<tizen.h>', public ] },
+]
diff --git a/scripts/helpers/platforms/android/iwyu.imp b/scripts/helpers/platforms/android/iwyu.imp
new file mode 100644
index 0000000..0364fe5
--- /dev/null
+++ b/scripts/helpers/platforms/android/iwyu.imp
@@ -0,0 +1,3 @@
+[
+    { ref: "../iwyu.imp" },
+]
diff --git a/scripts/helpers/platforms/iwyu.imp b/scripts/helpers/platforms/iwyu.imp
new file mode 100644
index 0000000..5a863b3
--- /dev/null
+++ b/scripts/helpers/platforms/iwyu.imp
@@ -0,0 +1,42 @@
+[
+    ## C/C++/*
+    { include: [ '"bits/shared_ptr.h"', private, '<memory>', public ] },
+    { include: [ '"cstdlib"', private, '<cstdlib>', public ] },
+    { include: [ '"iosfwd"', private, '<iosfwd>', public ] },
+    { include: [ '"ostream"', private, '<ostream>', public ] },
+    { include: [ '"stdlib.h"', private, '<cstdlib>', public ] },
+    { include: [ '"thread"', private, '<thread>', public ] },
+    { include: [ '"type_traits"', private, '<type_traits>', public ] },
+    { include: [ '<bits/shared_ptr.h>', private, '<memory>', public ] },
+    { symbol: [ 'declval', private, '<utility>', public ] },
+    { symbol: [ 'tm', private, '<sys/time.h>', public ] },
+
+    ## ble/*
+    { include: [ '"ble/CHIPBleServiceData.h"', private, '<ble/CHIPBleServiceData.h>', public ] },
+    { include: [ '@"ble/Ble.*.h"', private, '<ble/Ble.h>', public ] },
+
+    ## inet/*
+    { include: [ '"inet/InetInterface.h"', private, '<inet/InetInterface.h>', public ] },
+    { include: [ '"inet/IPAddress.h"', private, '<inet/IPAddress.h>', public ] },
+
+    ## lib/*
+    { include: [ '"lib/core/CHIPError.h"', private, '<lib/core/CHIPError.h>', public ] },
+    { include: [ '"lib/dnssd/ServiceNaming.h"', private, '<lib/dnssd/platform/Dnssd.h>', public ] },
+    { include: [ '"lib/support/logging/CHIPLogging.h"', private, '<lib/support/logging/CHIPLogging.h>', public ] },
+
+    ## platform/*
+    { include: [ '"platform/NetworkCommissioning.h"', private, '<platform/NetworkCommissioning.h>', public ] },
+    { include: [ '"platform/PersistedStorage.h"', private, '<platform/PersistedStorage.h>', public ] },
+
+    ## Do not include some Impl headers directly
+    { include: [ '@"platform/.*/BLEManagerImpl.h"', private, '"platform/internal/BLEManager.h"', private ] },
+    { include: [ '@"platform/.*/ConnectivityManagerImpl.h"', private, '<platform/ConnectivityManager.h>', public ] },
+    { include: [ '@"platform/.*/KeyValueStoreManagerImpl.h"', private, '<platform/KeyValueStoreManager.h>', public ] },
+    { include: [ '@"platform/.*/PlatformManagerImpl.h"', private, '<platform/PlatformManager.h>', public ] },
+    { include: [ '@<platform/.*/ThreadStackManagerImpl.h>', private, '<platform/ThreadStackManager.h>', public ] },
+
+    ## Config
+    { include: [ '@"platform/.*/CHIPDevicePlatformConfig.h"', private, '<platform/CHIPDeviceConfig.h>', public ] },
+    { include: [ '@"platform/.*/SystemPlatformConfig.h"', private, '<system/SystemConfig.h>', public ] },
+
+]
diff --git a/scripts/helpers/platforms/mbed/iwyu.imp b/scripts/helpers/platforms/mbed/iwyu.imp
new file mode 100644
index 0000000..0364fe5
--- /dev/null
+++ b/scripts/helpers/platforms/mbed/iwyu.imp
@@ -0,0 +1,3 @@
+[
+    { ref: "../iwyu.imp" },
+]
diff --git a/src/include/platform/ThreadStackManager.h b/src/include/platform/ThreadStackManager.h
index fb2f18b..df6adfd 100644
--- a/src/include/platform/ThreadStackManager.h
+++ b/src/include/platform/ThreadStackManager.h
@@ -26,6 +26,7 @@
 #include <app-common/zap-generated/cluster-objects.h>
 #include <app/AttributeAccessInterface.h>
 #include <app/util/basic-types.h>
+#include <inet/IPAddress.h>
 #include <lib/support/Span.h>
 #include <platform/NetworkCommissioning.h>
 
diff --git a/src/platform/Tizen/AppPreference.cpp b/src/platform/Tizen/AppPreference.cpp
index 722a0fd..bc6e8f1 100644
--- a/src/platform/Tizen/AppPreference.cpp
+++ b/src/platform/Tizen/AppPreference.cpp
@@ -16,10 +16,21 @@
  */
 
 #include "AppPreference.h"
-#include <app_preference.h>
-#include <lib/support/Base64.h>
-#include <lib/support/CHIPMem.h>
+
+#include <algorithm>
+#include <cstdint>
+#include <cstdlib>
+#include <cstring>
 #include <memory>
+#include <utility>
+
+#include <app_preference.h>
+#include <tizen.h>
+
+#include <lib/support/Base64.h>
+#include <lib/support/CodeUtils.h>
+#include <lib/support/ScopedBuffer.h>
+#include <lib/support/logging/CHIPLogging.h>
 
 namespace chip {
 namespace DeviceLayer {
diff --git a/src/platform/Tizen/AppPreference.h b/src/platform/Tizen/AppPreference.h
index 2fee34c..26acf9d 100644
--- a/src/platform/Tizen/AppPreference.h
+++ b/src/platform/Tizen/AppPreference.h
@@ -17,8 +17,9 @@
 
 #pragma once
 
-#include <app_preference.h>
-#include <platform/CHIPDeviceLayer.h>
+#include <cstddef>
+
+#include <lib/core/CHIPError.h>
 
 namespace chip {
 namespace DeviceLayer {
diff --git a/src/platform/Tizen/BLEManagerImpl.cpp b/src/platform/Tizen/BLEManagerImpl.cpp
index c60fb56..9b2d5e2 100644
--- a/src/platform/Tizen/BLEManagerImpl.cpp
+++ b/src/platform/Tizen/BLEManagerImpl.cpp
@@ -21,15 +21,47 @@
  *          Provides an implementation of the BLEManager singleton object
  *          for Tizen platforms.
  */
-#include <platform/internal/CHIPDeviceLayerInternal.h>
 
-#include <ble/CHIPBleServiceData.h>
-#include <platform/internal/BLEManager.h>
+/**
+ * Note: BLEManager requires ConnectivityManager to be defined beforehand,
+ *       otherwise we will face circular dependency between them. */
+#include <platform/ConnectivityManager.h>
 
-#if CHIP_DEVICE_CONFIG_ENABLE_CHIPOBLE
+/**
+ * Note: Use public include for BLEManager which includes our local
+ *       platform/<PLATFORM>/BLEManagerImpl.h after defining interface class. */
+#include "platform/internal/BLEManager.h"
 
-#include "MainLoop.h"
+#include <strings.h>
+
+#include <cstdint>
+#include <cstring>
+#include <memory>
+#include <string>
+#include <type_traits>
+#include <utility>
+
 #include <bluetooth.h>
+#include <glib.h>
+
+#include <ble/Ble.h>
+#include <ble/CHIPBleServiceData.h>
+#include <lib/core/CHIPError.h>
+#include <lib/support/BitFlags.h>
+#include <lib/support/CodeUtils.h>
+#include <lib/support/ErrorStr.h>
+#include <lib/support/SetupDiscriminator.h>
+#include <platform/CHIPDeviceEvent.h>
+#include <platform/CHIPDeviceLayer.h>
+#include <platform/ConfigurationManager.h>
+#include <platform/PlatformManager.h>
+#include <system/SystemClock.h>
+#include <system/SystemLayer.h>
+#include <system/SystemPacketBuffer.h>
+
+#include "CHIPDevicePlatformEvent.h"
+#include "ChipDeviceScanner.h"
+#include "MainLoop.h"
 
 namespace chip {
 namespace DeviceLayer {
@@ -1383,5 +1415,3 @@
 } // namespace Internal
 } // namespace DeviceLayer
 } // namespace chip
-
-#endif // CHIP_DEVICE_CONFIG_ENABLE_CHIPOBLE
diff --git a/src/platform/Tizen/BLEManagerImpl.h b/src/platform/Tizen/BLEManagerImpl.h
index f4c8e90..7723d2d 100644
--- a/src/platform/Tizen/BLEManagerImpl.h
+++ b/src/platform/Tizen/BLEManagerImpl.h
@@ -23,11 +23,23 @@
 
 #pragma once
 
-#if CHIP_DEVICE_CONFIG_ENABLE_CHIPOBLE
+#include <cstddef>
+#include <cstdint>
+#include <memory>
+#include <string>
+#include <utility>
 
 #include <bluetooth.h>
 #include <glib.h>
-#include <sys/param.h>
+
+#include <ble/Ble.h>
+#include <ble/CHIPBleServiceData.h>
+#include <lib/core/CHIPError.h>
+#include <lib/support/BitFlags.h>
+#include <lib/support/SetupDiscriminator.h>
+#include <platform/CHIPDeviceEvent.h>
+#include <system/SystemLayer.h>
+#include <system/SystemPacketBuffer.h>
 
 #include "ChipDeviceScanner.h"
 
@@ -263,5 +275,3 @@
 } // namespace Internal
 } // namespace DeviceLayer
 } // namespace chip
-
-#endif // CHIP_DEVICE_CONFIG_ENABLE_CHIPOBLE
diff --git a/src/platform/Tizen/BUILD.gn b/src/platform/Tizen/BUILD.gn
index e25ab00..03a858f 100644
--- a/src/platform/Tizen/BUILD.gn
+++ b/src/platform/Tizen/BUILD.gn
@@ -37,8 +37,6 @@
     "CHIPDevicePlatformConfig.h",
     "CHIPDevicePlatformEvent.h",
     "CHIPPlatformConfig.h",
-    "ChipDeviceScanner.cpp",
-    "ChipDeviceScanner.h",
     "ConfigurationManagerImpl.cpp",
     "ConfigurationManagerImpl.h",
     "ConnectivityManagerImpl.cpp",
@@ -88,6 +86,8 @@
       "BLEManagerImpl.cpp",
       "BLEManagerImpl.h",
       "BlePlatformConfig.h",
+      "ChipDeviceScanner.cpp",
+      "ChipDeviceScanner.h",
     ]
   }
 
diff --git a/src/platform/Tizen/ChipDeviceScanner.cpp b/src/platform/Tizen/ChipDeviceScanner.cpp
index 4a55360..2048953 100644
--- a/src/platform/Tizen/ChipDeviceScanner.cpp
+++ b/src/platform/Tizen/ChipDeviceScanner.cpp
@@ -22,14 +22,18 @@
  */
 
 #include "ChipDeviceScanner.h"
-#include <platform/CHIPDeviceLayer.h>
-#include <sys/param.h>
 
-#if CHIP_DEVICE_CONFIG_ENABLE_CHIPOBLE
+#include <cstdint>
+#include <cstring>
+#include <utility>
+
+#include <bluetooth.h>
+
+#include <lib/support/CodeUtils.h>
+#include <lib/support/Span.h>
+#include <lib/support/logging/CHIPLogging.h>
 
 #include "MainLoop.h"
-#include <lib/support/logging/CHIPLogging.h>
-#include <system/SystemTimer.h>
 
 namespace chip {
 namespace DeviceLayer {
@@ -308,5 +312,3 @@
 } // namespace Internal
 } // namespace DeviceLayer
 } // namespace chip
-
-#endif // CHIP_DEVICE_CONFIG_ENABLE_CHIPOBLE
diff --git a/src/platform/Tizen/ChipDeviceScanner.h b/src/platform/Tizen/ChipDeviceScanner.h
index 7eb2a9d..f95f478 100644
--- a/src/platform/Tizen/ChipDeviceScanner.h
+++ b/src/platform/Tizen/ChipDeviceScanner.h
@@ -23,18 +23,13 @@
 
 #pragma once
 
-#include <platform/CHIPDeviceConfig.h>
-
-#if CHIP_DEVICE_CONFIG_ENABLE_CHIPOBLE
-
-#include <glib.h>
 #include <memory>
 
+#include <bluetooth.h>
+#include <glib.h>
+
 #include <ble/CHIPBleServiceData.h>
 #include <lib/core/CHIPError.h>
-#include <system/SystemLayer.h>
-
-#include <bluetooth.h>
 
 namespace chip {
 namespace DeviceLayer {
@@ -115,5 +110,3 @@
 } // namespace Internal
 } // namespace DeviceLayer
 } // namespace chip
-
-#endif // CHIP_DEVICE_CONFIG_ENABLE_CHIPOBLE
diff --git a/src/platform/Tizen/ConfigurationManagerImpl.cpp b/src/platform/Tizen/ConfigurationManagerImpl.cpp
index 5d5dc5c..961df41 100644
--- a/src/platform/Tizen/ConfigurationManagerImpl.cpp
+++ b/src/platform/Tizen/ConfigurationManagerImpl.cpp
@@ -23,16 +23,16 @@
  *          for Tizen platforms.
  */
 
-#include <platform/internal/CHIPDeviceLayerInternal.h>
+#include "ConfigurationManagerImpl.h"
 
-#include <lib/core/CHIPVendorIdentifiers.hpp>
 #include <lib/support/CodeUtils.h>
-#include <lib/support/logging/CHIPLogging.h>
+#include <platform/CHIPDeviceBuildConfig.h>
 #include <platform/CHIPDeviceConfig.h>
 #include <platform/ConfigurationManager.h>
-#include <platform/Tizen/PosixConfig.h>
-#include <platform/Tizen/WiFiManager.h>
-#include <platform/internal/GenericConfigurationManagerImpl.ipp>
+
+#include "PosixConfig.h"
+#include "WiFiManager.h"
+#include "platform/internal/GenericConfigurationManagerImpl.ipp"
 
 namespace chip {
 namespace DeviceLayer {
diff --git a/src/platform/Tizen/ConfigurationManagerImpl.h b/src/platform/Tizen/ConfigurationManagerImpl.h
index 2dd07d7..ee9ddc5 100644
--- a/src/platform/Tizen/ConfigurationManagerImpl.h
+++ b/src/platform/Tizen/ConfigurationManagerImpl.h
@@ -24,9 +24,15 @@
 
 #pragma once
 
-#include <platform/internal/GenericConfigurationManagerImpl.h>
+#include <cstdint>
+#include <cstdlib>
 
-#include <platform/Tizen/PosixConfig.h>
+#include <lib/core/CHIPError.h>
+#include <platform/DeviceInstanceInfoProvider.h>
+#include <platform/PersistedStorage.h>
+
+#include "PosixConfig.h"
+#include "platform/internal/GenericConfigurationManagerImpl.h"
 
 namespace chip {
 namespace DeviceLayer {
diff --git a/src/platform/Tizen/ConnectivityManagerImpl.cpp b/src/platform/Tizen/ConnectivityManagerImpl.cpp
index 41671fa..75a5fb5 100644
--- a/src/platform/Tizen/ConnectivityManagerImpl.cpp
+++ b/src/platform/Tizen/ConnectivityManagerImpl.cpp
@@ -17,32 +17,42 @@
  *    limitations under the License.
  */
 
-#include <platform/internal/CHIPDeviceLayerInternal.h>
-
+/**
+ * Note: Use public include for ConnectivityManager which includes our local
+ *       platform/<PLATFORM>/ConnectivityManagerImpl.h after defining interface
+ *       class. */
 #include <platform/ConnectivityManager.h>
-#include <platform/internal/BLEManager.h>
 
-#include <cstdlib>
+#if CHIP_DEVICE_CONFIG_ENABLE_WIFI
+#include <wifi-manager.h>
+#endif
 
+#include <inet/InetBuildConfig.h>
+#include <lib/core/CHIPError.h>
 #include <lib/support/CodeUtils.h>
-#include <lib/support/logging/CHIPLogging.h>
+#include <platform/CHIPDeviceBuildConfig.h>
+#include <platform/CHIPDeviceConfig.h>
+#include <platform/CHIPDeviceEvent.h>
+#include <platform/CHIPDeviceLayer.h>
+#include <system/SystemClock.h>
+#include <system/SystemLayer.h>
 
-#include <platform/internal/GenericConnectivityManagerImpl_UDP.ipp>
-
+#include "platform/internal/GenericConnectivityManagerImpl_UDP.ipp"
 #if INET_CONFIG_ENABLE_TCP_ENDPOINT
-#include <platform/internal/GenericConnectivityManagerImpl_TCP.ipp>
+#include "platform/internal/GenericConnectivityManagerImpl_TCP.ipp"
 #endif
-
 #if CHIP_DEVICE_CONFIG_ENABLE_CHIPOBLE
-#include <platform/internal/GenericConnectivityManagerImpl_BLE.ipp>
+#include "platform/internal/GenericConnectivityManagerImpl_BLE.ipp"
 #endif
-
 #if CHIP_DEVICE_CONFIG_ENABLE_THREAD
-#include <platform/internal/GenericConnectivityManagerImpl_Thread.ipp>
+#include "platform/internal/GenericConnectivityManagerImpl_Thread.ipp"
+#endif
+#if CHIP_DEVICE_CONFIG_ENABLE_WIFI
+#include "platform/internal/GenericConnectivityManagerImpl_WiFi.ipp"
 #endif
 
 #if CHIP_DEVICE_CONFIG_ENABLE_WIFI
-#include <platform/internal/GenericConnectivityManagerImpl_WiFi.ipp>
+#include "WiFiManager.h"
 #endif
 
 namespace chip {
diff --git a/src/platform/Tizen/ConnectivityManagerImpl.h b/src/platform/Tizen/ConnectivityManagerImpl.h
index 69c4e05..b469b63 100644
--- a/src/platform/Tizen/ConnectivityManagerImpl.h
+++ b/src/platform/Tizen/ConnectivityManagerImpl.h
@@ -19,38 +19,37 @@
 
 #pragma once
 
-#include <platform/ConnectivityManager.h>
-#include <platform/internal/GenericConnectivityManagerImpl.h>
-#include <platform/internal/GenericConnectivityManagerImpl_UDP.h>
+#include <cstdint>
+
+#include <inet/InetBuildConfig.h>
+#include <lib/core/CHIPError.h>
+#include <platform/CHIPDeviceBuildConfig.h>
+#include <platform/CHIPDeviceConfig.h>
+#include <platform/CHIPDeviceEvent.h>
+#include <system/SystemClock.h>
+#include <system/SystemLayer.h>
+
+#include "platform/internal/GenericConnectivityManagerImpl.h"
+#include "platform/internal/GenericConnectivityManagerImpl_UDP.h"
 #if INET_CONFIG_ENABLE_TCP_ENDPOINT
-#include <platform/internal/GenericConnectivityManagerImpl_TCP.h>
+#include "platform/internal/GenericConnectivityManagerImpl_TCP.h"
 #endif
 #if CHIP_DEVICE_CONFIG_ENABLE_CHIPOBLE
-#include <platform/internal/GenericConnectivityManagerImpl_BLE.h>
+#include "platform/internal/GenericConnectivityManagerImpl_BLE.h"
 #else
-#include <platform/internal/GenericConnectivityManagerImpl_NoBLE.h>
+#include "platform/internal/GenericConnectivityManagerImpl_NoBLE.h"
 #endif
 #if CHIP_DEVICE_CONFIG_ENABLE_THREAD
-#include <platform/internal/GenericConnectivityManagerImpl_Thread.h>
+#include "platform/internal/GenericConnectivityManagerImpl_Thread.h"
 #else
-#include <platform/internal/GenericConnectivityManagerImpl_NoThread.h>
+#include "platform/internal/GenericConnectivityManagerImpl_NoThread.h"
 #endif
 #if CHIP_DEVICE_CONFIG_ENABLE_WIFI
-#include <platform/internal/GenericConnectivityManagerImpl_WiFi.h>
+#include "platform/internal/GenericConnectivityManagerImpl_WiFi.h"
 #else
-#include <platform/internal/GenericConnectivityManagerImpl_NoWiFi.h>
+#include "platform/internal/GenericConnectivityManagerImpl_NoWiFi.h"
 #endif
 
-#if CHIP_DEVICE_CONFIG_ENABLE_WIFI
-#include "WiFiManager.h"
-#endif
-
-namespace chip {
-namespace Inet {
-class IPAddress;
-} // namespace Inet
-} // namespace chip
-
 namespace chip {
 namespace DeviceLayer {
 
diff --git a/src/platform/Tizen/ConnectivityUtils.cpp b/src/platform/Tizen/ConnectivityUtils.cpp
index 6ad5103..5c5d56b 100644
--- a/src/platform/Tizen/ConnectivityUtils.cpp
+++ b/src/platform/Tizen/ConnectivityUtils.cpp
@@ -15,8 +15,7 @@
  *    limitations under the License.
  */
 
-#include <platform/Tizen/ConnectivityUtils.h>
-#include <platform/internal/CHIPDeviceLayerInternal.h>
+#include "ConnectivityUtils.h"
 
 // XXX: This is a workaround for a bug in the Tizen SDK header files. It is not
 //      possible to include both <net/if.h> and <linux/if.h> at the same time.
@@ -29,12 +28,16 @@
 #include <linux/ethtool.h>
 #include <linux/sockios.h>
 #include <linux/wireless.h>
-#include <string.h>
+#include <net/if.h>
 #include <sys/ioctl.h>
 #include <sys/socket.h>
-#include <sys/types.h>
+#include <unistd.h>
 
+#include <cstring>
+
+#include <app-common/zap-generated/cluster-enums.h>
 #include <lib/support/CHIPMemString.h>
+#include <lib/support/logging/CHIPLogging.h>
 
 namespace chip {
 namespace DeviceLayer {
diff --git a/src/platform/Tizen/ConnectivityUtils.h b/src/platform/Tizen/ConnectivityUtils.h
index 439e427..6c8f5c8 100644
--- a/src/platform/Tizen/ConnectivityUtils.h
+++ b/src/platform/Tizen/ConnectivityUtils.h
@@ -17,8 +17,9 @@
 
 #pragma once
 
-#include <platform/DiagnosticDataProvider.h>
-#include <platform/internal/CHIPDeviceLayerInternal.h>
+#include <app-common/zap-generated/cluster-enums.h>
+
+#include "platform/internal/CHIPDeviceLayerInternal.h"
 
 namespace chip {
 namespace DeviceLayer {
diff --git a/src/platform/Tizen/DeviceInstanceInfoProviderImpl.cpp b/src/platform/Tizen/DeviceInstanceInfoProviderImpl.cpp
index 67133ea..93ad7a1 100644
--- a/src/platform/Tizen/DeviceInstanceInfoProviderImpl.cpp
+++ b/src/platform/Tizen/DeviceInstanceInfoProviderImpl.cpp
@@ -18,7 +18,7 @@
 
 #include "DeviceInstanceInfoProviderImpl.h"
 
-#include <platform/Tizen/PosixConfig.h>
+#include "PosixConfig.h"
 
 namespace chip {
 namespace DeviceLayer {
diff --git a/src/platform/Tizen/DeviceInstanceInfoProviderImpl.h b/src/platform/Tizen/DeviceInstanceInfoProviderImpl.h
index b3b7992..32e6a2c 100644
--- a/src/platform/Tizen/DeviceInstanceInfoProviderImpl.h
+++ b/src/platform/Tizen/DeviceInstanceInfoProviderImpl.h
@@ -18,8 +18,13 @@
 
 #pragma once
 
-#include <platform/Tizen/ConfigurationManagerImpl.h>
-#include <platform/internal/GenericDeviceInstanceInfoProvider.h>
+#include <cstdint>
+
+#include <lib/core/CHIPError.h>
+
+#include "ConfigurationManagerImpl.h"
+#include "PosixConfig.h"
+#include "platform/internal/GenericDeviceInstanceInfoProvider.h"
 
 namespace chip {
 namespace DeviceLayer {
diff --git a/src/platform/Tizen/DiagnosticDataProviderImpl.cpp b/src/platform/Tizen/DiagnosticDataProviderImpl.cpp
index 17e11e5..ad143a4 100644
--- a/src/platform/Tizen/DiagnosticDataProviderImpl.cpp
+++ b/src/platform/Tizen/DiagnosticDataProviderImpl.cpp
@@ -21,11 +21,9 @@
  *          for Tizen platform.
  */
 
-#include <platform/internal/CHIPDeviceLayerInternal.h>
+#include "DiagnosticDataProviderImpl.h"
 
-#include <lib/support/logging/CHIPLogging.h>
 #include <platform/DiagnosticDataProvider.h>
-#include <platform/Tizen/DiagnosticDataProviderImpl.h>
 
 namespace chip {
 namespace DeviceLayer {
diff --git a/src/platform/Tizen/DnssdImpl.cpp b/src/platform/Tizen/DnssdImpl.cpp
index 698b70b..e2ab151 100644
--- a/src/platform/Tizen/DnssdImpl.cpp
+++ b/src/platform/Tizen/DnssdImpl.cpp
@@ -16,23 +16,32 @@
  */
 
 #include "DnssdImpl.h"
-#include "MainLoop.h"
 
 #include <algorithm>
+#include <cerrno>
+#include <cstdlib>
 #include <cstring>
-#include <net/if.h>
 #include <sstream>
+#include <string>
 #include <utility>
 
+// Note: Include dns-sd-internal.h is needed, this source file uses some undocumented functions.
+#include <dns-sd-internal.h>
+#include <dns-sd.h>
+#include <glib.h>
 #include <lib/dnssd/platform/Dnssd.h>
-#include <lib/support/CHIPMem.h>
+#include <net/if.h>
+
+#include <inet/InetBuildConfig.h>
 #include <lib/support/CHIPMemString.h>
 #include <lib/support/CodeUtils.h>
 #include <lib/support/SafeInt.h>
-#include <lib/support/logging/CHIPLogging.h>
+#include <lib/support/Span.h>
+#include <platform/CHIPDeviceConfig.h>
+#include <platform/PlatformManager.h>
 
-#include <dns-sd-internal.h>
-#include <glib.h>
+#include "MainLoop.h"
+
 #if CHIP_DEVICE_CONFIG_ENABLE_THREAD
 #include <platform/ThreadStackManager.h>
 #endif
diff --git a/src/platform/Tizen/DnssdImpl.h b/src/platform/Tizen/DnssdImpl.h
index 360f264..5872fa0 100644
--- a/src/platform/Tizen/DnssdImpl.h
+++ b/src/platform/Tizen/DnssdImpl.h
@@ -17,18 +17,22 @@
 
 #pragma once
 
+#include <cstdint>
+#include <functional>
 #include <memory>
 #include <mutex>
 #include <set>
-#include <string>
-#include <sys/param.h>
 #include <vector>
 
-#include <lib/dnssd/platform/Dnssd.h>
-
 #include <dns-sd.h>
 #include <glib.h>
 
+#include <inet/IPAddress.h>
+#include <inet/InetInterface.h>
+#include <lib/core/CHIPError.h>
+#include <lib/dnssd/Constants.h>
+#include <lib/dnssd/platform/Dnssd.h>
+
 namespace chip {
 namespace Dnssd {
 
diff --git a/src/platform/Tizen/KeyValueStoreManagerImpl.cpp b/src/platform/Tizen/KeyValueStoreManagerImpl.cpp
index f1e1753..18e4c15 100644
--- a/src/platform/Tizen/KeyValueStoreManagerImpl.cpp
+++ b/src/platform/Tizen/KeyValueStoreManagerImpl.cpp
@@ -21,9 +21,18 @@
  *          Platform-specific key value storage implementation for Tizen.
  */
 
-#include "AppPreference.h"
+/**
+ * Note: Use public include for KeyValueStoreManager which includes our local
+ *       platform/<PLATFORM>/KeyValueStoreManagerImpl.h after defining interface
+ *       class. */
 #include <platform/KeyValueStoreManager.h>
 
+#include <cstddef>
+
+#include <lib/core/CHIPError.h>
+
+#include "AppPreference.h"
+
 namespace chip {
 namespace DeviceLayer {
 namespace PersistedStorage {
diff --git a/src/platform/Tizen/KeyValueStoreManagerImpl.h b/src/platform/Tizen/KeyValueStoreManagerImpl.h
index 42f5633..bf3395a 100644
--- a/src/platform/Tizen/KeyValueStoreManagerImpl.h
+++ b/src/platform/Tizen/KeyValueStoreManagerImpl.h
@@ -23,6 +23,10 @@
 
 #pragma once
 
+#include <cstddef>
+
+#include <lib/core/CHIPError.h>
+
 namespace chip {
 namespace DeviceLayer {
 namespace PersistedStorage {
diff --git a/src/platform/Tizen/Logging.cpp b/src/platform/Tizen/Logging.cpp
index 4c5c8b8..da29fc8 100644
--- a/src/platform/Tizen/Logging.cpp
+++ b/src/platform/Tizen/Logging.cpp
@@ -15,14 +15,15 @@
  *    limitations under the License.
  */
 
-#include <platform/logging/LogV.h>
-
-#include <lib/core/CHIPConfig.h>
-#include <lib/support/EnforceFormat.h>
-#include <lib/support/logging/Constants.h>
+#include <cstdint>
+#include <cstdio>
 
 #include <dlog.h>
-#include <stdio.h>
+
+#include <core/CHIPBuildConfig.h>
+#include <lib/support/EnforceFormat.h>
+#include <lib/support/logging/Constants.h>
+#include <platform/logging/LogV.h>
 
 namespace chip {
 namespace Logging {
diff --git a/src/platform/Tizen/MainLoop.cpp b/src/platform/Tizen/MainLoop.cpp
index e3f2cf2..56b5f28 100644
--- a/src/platform/Tizen/MainLoop.cpp
+++ b/src/platform/Tizen/MainLoop.cpp
@@ -16,6 +16,10 @@
 
 #include "MainLoop.h"
 
+#include <iterator>
+#include <memory>
+#include <utility>
+
 #include <lib/support/CodeUtils.h>
 #include <lib/support/logging/CHIPLogging.h>
 
diff --git a/src/platform/Tizen/MainLoop.h b/src/platform/Tizen/MainLoop.h
index a4a6701..618d45a 100644
--- a/src/platform/Tizen/MainLoop.h
+++ b/src/platform/Tizen/MainLoop.h
@@ -18,9 +18,7 @@
 
 #include <memory>
 #include <thread>
-
-#include <lib/core/CHIPError.h>
-#include <platform/CHIPDeviceLayer.h>
+#include <vector>
 
 #include <glib.h>
 
diff --git a/src/platform/Tizen/NetworkCommissioningDriver.h b/src/platform/Tizen/NetworkCommissioningDriver.h
index 5013703..b9605c3 100644
--- a/src/platform/Tizen/NetworkCommissioningDriver.h
+++ b/src/platform/Tizen/NetworkCommissioningDriver.h
@@ -17,10 +17,11 @@
 
 #pragma once
 
-#include <platform/NetworkCommissioning.h>
 #include <string>
 #include <vector>
 
+#include <platform/NetworkCommissioning.h>
+
 namespace chip {
 namespace DeviceLayer {
 namespace NetworkCommissioning {
diff --git a/src/platform/Tizen/NetworkCommissioningEthernetDriver.cpp b/src/platform/Tizen/NetworkCommissioningEthernetDriver.cpp
index d9e721f..6a95f95 100644
--- a/src/platform/Tizen/NetworkCommissioningEthernetDriver.cpp
+++ b/src/platform/Tizen/NetworkCommissioningEthernetDriver.cpp
@@ -15,17 +15,22 @@
  *    limitations under the License.
  */
 
-#include <lib/support/SafePointerCast.h>
-#include <platform/CHIPDeviceLayer.h>
+#include <ifaddrs.h>
+
+#include <algorithm>
+#include <cerrno>
+#include <cstring>
+#include <iterator>
+#include <string>
+#include <utility>
+#include <vector>
+
+#include <app-common/zap-generated/cluster-enums.h>
+#include <lib/support/CodeUtils.h>
+#include <platform/NetworkCommissioning.h>
 #include <platform/Tizen/ConnectivityUtils.h>
 #include <platform/Tizen/NetworkCommissioningDriver.h>
 
-#include <cerrno>
-#include <ifaddrs.h>
-#include <limits>
-#include <string>
-#include <vector>
-
 namespace chip {
 namespace DeviceLayer {
 namespace NetworkCommissioning {
diff --git a/src/platform/Tizen/NetworkCommissioningThreadDriver.cpp b/src/platform/Tizen/NetworkCommissioningThreadDriver.cpp
index 6a393b6..8d61c5c 100644
--- a/src/platform/Tizen/NetworkCommissioningThreadDriver.cpp
+++ b/src/platform/Tizen/NetworkCommissioningThreadDriver.cpp
@@ -15,16 +15,20 @@
  *    limitations under the License.
  */
 
-#include <lib/support/CodeUtils.h>
-#include <lib/support/SafeInt.h>
-#include <platform/CHIPDeviceLayer.h>
-#include <platform/ThreadStackManager.h>
-#include <platform/Tizen/NetworkCommissioningDriver.h>
-#include <platform/Tizen/ThreadStackManagerImpl.h>
+#include <cstdint>
+#include <cstring>
 
-#include <limits>
-#include <string>
-#include <vector>
+#include <lib/core/CHIPError.h>
+#include <lib/support/CodeUtils.h>
+#include <lib/support/Span.h>
+#include <lib/support/ThreadOperationalDataset.h>
+#include <platform/CHIPDeviceConfig.h>
+#include <platform/ConnectivityManager.h>
+#include <platform/NetworkCommissioning.h>
+#include <platform/ThreadStackManager.h>
+
+#include "NetworkCommissioningDriver.h"
+#include "ThreadStackManagerImpl.h"
 
 namespace chip {
 namespace DeviceLayer {
diff --git a/src/platform/Tizen/NetworkCommissioningWiFiDriver.cpp b/src/platform/Tizen/NetworkCommissioningWiFiDriver.cpp
index c45f1b2..a71c914 100644
--- a/src/platform/Tizen/NetworkCommissioningWiFiDriver.cpp
+++ b/src/platform/Tizen/NetworkCommissioningWiFiDriver.cpp
@@ -15,14 +15,21 @@
  *    limitations under the License.
  */
 
-#include <lib/support/CodeUtils.h>
-#include <lib/support/SafeInt.h>
-#include <platform/CHIPDeviceLayer.h>
-#include <platform/Tizen/NetworkCommissioningDriver.h>
-
+#include <cstdint>
+#include <cstring>
 #include <limits>
-#include <string>
-#include <vector>
+
+#include <lib/core/CHIPError.h>
+#include <lib/support/CodeUtils.h>
+#include <lib/support/ErrorStr.h>
+#include <lib/support/Span.h>
+#include <lib/support/logging/CHIPLogging.h>
+#include <platform/CHIPDeviceBuildConfig.h>
+#include <platform/KeyValueStoreManager.h>
+#include <platform/NetworkCommissioning.h>
+
+#include "NetworkCommissioningDriver.h"
+#include "WiFiManager.h"
 
 namespace chip {
 namespace DeviceLayer {
diff --git a/src/platform/Tizen/PlatformManagerImpl.cpp b/src/platform/Tizen/PlatformManagerImpl.cpp
index 6842d00..f893eb9 100644
--- a/src/platform/Tizen/PlatformManagerImpl.cpp
+++ b/src/platform/Tizen/PlatformManagerImpl.cpp
@@ -23,13 +23,22 @@
  *          for Tizen platforms.
  */
 
-#include <platform/internal/CHIPDeviceLayerInternal.h>
-
-#include <platform/DeviceInstanceInfoProvider.h>
+/**
+ * Note: Use public include for PlatformManager which includes our local
+ *       platform/<PLATFORM>/PlatformManager.h after defining interface
+ *       class. */
 #include <platform/PlatformManager.h>
+
+#include <lib/core/CHIPError.h>
+#include <lib/support/CodeUtils.h>
+#include <platform/DeviceInstanceInfoProvider.h>
 #include <platform/Tizen/DeviceInstanceInfoProviderImpl.h>
-#include <platform/Tizen/DiagnosticDataProviderImpl.h>
-#include <platform/internal/GenericPlatformManagerImpl_POSIX.ipp>
+
+#include "PosixConfig.h"
+#include "platform/internal/GenericPlatformManagerImpl.h"
+#include "platform/internal/GenericPlatformManagerImpl.ipp"
+#include "platform/internal/GenericPlatformManagerImpl_POSIX.h"
+#include "platform/internal/GenericPlatformManagerImpl_POSIX.ipp"
 
 namespace chip {
 namespace DeviceLayer {
diff --git a/src/platform/Tizen/PlatformManagerImpl.h b/src/platform/Tizen/PlatformManagerImpl.h
index f21cfea..1c8cfd5 100644
--- a/src/platform/Tizen/PlatformManagerImpl.h
+++ b/src/platform/Tizen/PlatformManagerImpl.h
@@ -23,7 +23,10 @@
 
 #pragma once
 
-#include <platform/internal/GenericPlatformManagerImpl_POSIX.h>
+#include <lib/core/CHIPError.h>
+#include <platform/ConnectivityManager.h>
+
+#include "platform/internal/GenericPlatformManagerImpl_POSIX.h"
 
 namespace chip {
 namespace DeviceLayer {
diff --git a/src/platform/Tizen/PosixConfig.cpp b/src/platform/Tizen/PosixConfig.cpp
index 9b9e57a..f5c641a 100644
--- a/src/platform/Tizen/PosixConfig.cpp
+++ b/src/platform/Tizen/PosixConfig.cpp
@@ -24,13 +24,10 @@
  *          key-value config calls to the correct partition.
  */
 
-#include <platform/internal/CHIPDeviceLayerInternal.h>
-#include <platform/internal/testing/ConfigUnitTest.h>
+#include "PosixConfig.h"
 
-#include <lib/core/CHIPEncoding.h>
 #include <lib/support/CodeUtils.h>
 #include <platform/KeyValueStoreManager.h>
-#include <platform/Tizen/PosixConfig.h>
 
 namespace chip {
 namespace DeviceLayer {
diff --git a/src/platform/Tizen/PosixConfig.h b/src/platform/Tizen/PosixConfig.h
index 459dd98..197adad 100644
--- a/src/platform/Tizen/PosixConfig.h
+++ b/src/platform/Tizen/PosixConfig.h
@@ -23,8 +23,8 @@
 
 #pragma once
 
-#include <functional>
-#include <inttypes.h>
+#include <cstdint>
+#include <cstring>
 
 #include <lib/core/CHIPError.h>
 
diff --git a/src/platform/Tizen/SystemPlatformConfig.h b/src/platform/Tizen/SystemPlatformConfig.h
index 761a1c3..d501e42 100644
--- a/src/platform/Tizen/SystemPlatformConfig.h
+++ b/src/platform/Tizen/SystemPlatformConfig.h
@@ -24,7 +24,7 @@
 
 #pragma once
 
-#include <stdint.h>
+#include <cstdint>
 
 namespace chip {
 namespace DeviceLayer {
diff --git a/src/platform/Tizen/SystemTimeSupport.cpp b/src/platform/Tizen/SystemTimeSupport.cpp
index b885eda..bfc33b7 100644
--- a/src/platform/Tizen/SystemTimeSupport.cpp
+++ b/src/platform/Tizen/SystemTimeSupport.cpp
@@ -23,16 +23,20 @@
  *          time/clock functions that are suitable for use on the Tizen platform.
  */
 
-#include <platform/internal/CHIPDeviceLayerInternal.h>
-
-#include <lib/support/TimeUtils.h>
-#include <lib/support/logging/CHIPLogging.h>
-
-#include <chrono>
-#include <errno.h>
-#include <inttypes.h>
 #include <sys/time.h>
 
+#include <cerrno>
+#include <chrono>
+#include <cstdint>
+#include <ctime>
+
+#include <core/CHIPBuildConfig.h>
+#include <lib/core/CHIPError.h>
+#include <lib/support/logging/CHIPLogging.h>
+#include <system/SystemClock.h>
+#include <system/SystemConfig.h>
+#include <system/SystemError.h>
+
 namespace chip {
 namespace System {
 namespace Clock {
diff --git a/src/platform/Tizen/ThreadStackManagerImpl.cpp b/src/platform/Tizen/ThreadStackManagerImpl.cpp
index 1a70879..c7cca44 100644
--- a/src/platform/Tizen/ThreadStackManagerImpl.cpp
+++ b/src/platform/Tizen/ThreadStackManagerImpl.cpp
@@ -21,17 +21,38 @@
  *          for Tizen platform.
  */
 
-#include <platform/internal/CHIPDeviceLayerInternal.h>
-#include <platform/internal/DeviceNetworkInfo.h>
+/**
+ * Note: ThreadStackManager requires ConnectivityManager to be defined
+ *       beforehand, otherwise we will face circular dependency between them. */
+#include <platform/ConnectivityManager.h>
 
-#include <lib/support/CodeUtils.h>
-#include <lib/support/logging/CHIPLogging.h>
-#include <platform/PlatformManager.h>
+/**
+ * Note: Use public include for ThreadStackManager which includes our local
+ *       platform/<PLATFORM>/ThreadStackManagerImpl.h after defining interface
+ *       class. */
 #include <platform/ThreadStackManager.h>
-#include <platform/Tizen/NetworkCommissioningDriver.h>
 
-#include "ThreadStackManagerImpl.h"
+#include <endian.h>
+
+#include <cstring>
+
+#include <thread.h>
+
+#include <app/AttributeAccessInterface.h>
+#include <inet/IPAddress.h>
+#include <lib/core/CHIPError.h>
+#include <lib/core/DataModelTypes.h>
+#include <lib/dnssd/Constants.h>
 #include <lib/dnssd/platform/Dnssd.h>
+#include <lib/support/CodeUtils.h>
+#include <lib/support/Span.h>
+#include <lib/support/ThreadOperationalDataset.h>
+#include <platform/CHIPDeviceConfig.h>
+#include <platform/CHIPDeviceEvent.h>
+#include <platform/NetworkCommissioning.h>
+#include <platform/PlatformManager.h>
+
+#include <platform/Tizen/ThreadStackManagerImpl.h>
 
 namespace chip {
 namespace DeviceLayer {
diff --git a/src/platform/Tizen/ThreadStackManagerImpl.h b/src/platform/Tizen/ThreadStackManagerImpl.h
index 40a4cdc..5671853 100644
--- a/src/platform/Tizen/ThreadStackManagerImpl.h
+++ b/src/platform/Tizen/ThreadStackManagerImpl.h
@@ -23,15 +23,22 @@
 
 #pragma once
 
-#include <memory>
+#include <cstdint>
 
-#include <lib/support/ThreadOperationalDataset.h>
-#include <platform/internal/CHIPDeviceLayerInternal.h>
-#include <platform/internal/DeviceNetworkInfo.h>
-
-#include <gio/gio.h>
 #include <thread.h>
 
+#include <app/AttributeAccessInterface.h>
+#include <inet/IPAddress.h>
+#include <lib/core/CHIPError.h>
+#include <lib/core/DataModelTypes.h>
+#include <lib/support/Span.h>
+#include <lib/support/ThreadOperationalDataset.h>
+#include <platform/CHIPDeviceConfig.h>
+#include <platform/CHIPDeviceEvent.h>
+#include <platform/NetworkCommissioning.h>
+
+#include "platform/internal/DeviceNetworkInfo.h"
+
 namespace chip {
 namespace DeviceLayer {
 
diff --git a/src/platform/Tizen/WiFiManager.cpp b/src/platform/Tizen/WiFiManager.cpp
index e0a6df9..7731ffc 100644
--- a/src/platform/Tizen/WiFiManager.cpp
+++ b/src/platform/Tizen/WiFiManager.cpp
@@ -15,14 +15,22 @@
  *    limitations under the License.
  */
 
-#include <platform/CHIPDeviceLayer.h>
+#include "WiFiManager.h"
 
-#if CHIP_DEVICE_CONFIG_ENABLE_WIFI
+#include <cstdio>
+#include <cstdlib>
+#include <cstring>
 #include <memory>
+#include <utility>
+
+#include <tizen.h>
 #include <wifi-manager.h>
 
+#include <lib/support/CodeUtils.h>
+#include <lib/support/Span.h>
+#include <lib/support/logging/CHIPLogging.h>
+
 #include "MainLoop.h"
-#include "WiFiManager.h"
 
 namespace {
 static constexpr const char * __WiFiDeviceStateToStr(wifi_manager_device_state_e state)
@@ -867,4 +875,3 @@
 } // namespace Internal
 } // namespace DeviceLayer
 } // namespace chip
-#endif // CHIP_DEVICE_CONFIG_ENABLE_WIFI
diff --git a/src/platform/Tizen/WiFiManager.h b/src/platform/Tizen/WiFiManager.h
index acbe231..f37e2f1 100644
--- a/src/platform/Tizen/WiFiManager.h
+++ b/src/platform/Tizen/WiFiManager.h
@@ -17,13 +17,17 @@
 
 #pragma once
 
-#if CHIP_DEVICE_CONFIG_ENABLE_WIFI
-#include <platform/NetworkCommissioning.h>
-#include <platform/internal/DeviceNetworkInfo.h>
+#include <cstddef>
+#include <cstdint>
 
 #include <glib.h>
 #include <wifi-manager.h>
 
+#include <lib/core/CHIPError.h>
+#include <platform/NetworkCommissioning.h>
+
+#include "platform/internal/DeviceNetworkInfo.h"
+
 namespace chip {
 namespace DeviceLayer {
 namespace Internal {
@@ -103,5 +107,3 @@
 } // namespace Internal
 } // namespace DeviceLayer
 } // namespace chip
-
-#endif // CHIP_DEVICE_CONFIG_ENABLE_WIFI