diff --git a/.gitignore b/.gitignore
index abaf1d37a9ad528752d4b3fedc645ba809dc7946..487f5ff28fcb0e8c1c485f0ef11e02bb0d107465 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,7 +6,6 @@ _CPack_Packages
 *.gcno
 *.gcda
 *.gcov
-/patches/
 .git-ignore/
 .pc/
 coverity/
diff --git a/CMakeLists.txt b/CMakeLists.txt
index debf2973a978db2a63aa723df33bbaf15e3df9e2..49c19153113018f1ef77f3c744741d799122491d 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -56,6 +56,10 @@ endif()
 # Define GNU standard installation directories
 include(GNUInstallDirs)
 
+if(BUILD_STATIC_WITH_BUNDLED_LIBS)
+    set(BUILD_STATIC ON)
+endif()
+
 include(cmake/utils.cmake)
 include(cmake/pod2man.cmake)
 # the order is significant: we need to know os and compiler to configure libs
@@ -378,6 +382,9 @@ find_package_message(MODULE_LIBPATH "Lua package.cpath: ${MODULE_LIBPATH}"
 ## Third-Party libraries
 ##
 
+# URL of the backup storage to download bundled dependencies from.
+set(BACKUP_STORAGE https://distrib.hb.vkcs.cloud)
+
 set(EMBED_LUAZLIB ${BUILD_STATIC})
 set(EMBED_LUAROCKS ${BUILD_STATIC})
 
@@ -413,14 +420,12 @@ endif()
 # ZLIB
 #
 
-#
-# If tarantool is built as a part of enterpirse version,
-# zlib package will be found there and the second attempt
-# to find it will cause an error. Search for it only if it
-# has not been found before.
-#
-
-if (NOT ZLIB_FOUND)
+option(ENABLE_BUNDLED_ZLIB "Enable building of the bundled zlib"
+    ${BUILD_STATIC_WITH_BUNDLED_LIBS})
+if(ENABLE_BUNDLED_ZLIB)
+    include(BuildZLIB)
+    add_dependencies(build_bundled_libs bundled-zlib)
+else()
     set(ZLIB_FIND_REQUIRED ON)
     find_package(ZLIB)
 endif()
@@ -436,7 +441,20 @@ endif()
 #
 # OpenSSL
 #
-find_package(OpenSSL)
+
+set(ENABLE_BUNDLED_OPENSSL_DEFAULT OFF)
+if(BUILD_STATIC_WITH_BUNDLED_LIBS AND OPENSSL_USE_STATIC_LIBS)
+    set(ENABLE_BUNDLED_OPENSSL_DEFAULT ON)
+endif()
+option(ENABLE_BUNDLED_OPENSSL "Enable building of the bundled openssl"
+    ${ENABLE_BUNDLED_OPENSSL_DEFAULT})
+if(ENABLE_BUNDLED_OPENSSL)
+    set(OPENSSL_USE_STATIC_LIBS ON)
+    include(BuildOpenSSL)
+    add_dependencies(build_bundled_libs bundled-openssl)
+else()
+    find_package(OpenSSL)
+endif()
 if (OPENSSL_FOUND)
     message(STATUS "OpenSSL ${OPENSSL_VERSION} found")
     include_directories(${OPENSSL_INCLUDE_DIR})
@@ -450,6 +468,9 @@ endif()
 #
 if(OPENSSL_USE_STATIC_LIBS)
     set(OPENSSL_LIBRARIES ${OPENSSL_LIBRARIES} ${ZLIB_LIBRARIES})
+    if(ENABLED_BUNDLED_OPENSSL AND ENABLE_BUNDLED_ZLIB)
+        add_dependencies(bundled-openssl bundled-zlib)
+    endif()
 endif()
 
 #
@@ -505,21 +526,48 @@ message(STATUS "EXPORT_LIBCURL_SYMBOLS: ${EXPORT_LIBCURL_SYMBOLS}")
 # ReadLine
 #
 
-set(Readline_FIND_REQUIRED ON)
-find_package(Readline)
+option(ENABLE_BUNDLED_READLINE "Enable building of the bundled readline"
+    ${BUILD_STATIC_WITH_BUNDLED_LIBS})
+if(ENABLE_BUNDLED_READLINE)
+    include(BuildReadline)
+    add_dependencies(build_bundled_libs bundled-readline)
+else()
+    set(Readline_FIND_REQUIRED ON)
+    find_package(Readline)
+endif()
 
 #
 # ICONV
 #
-set(ICONV_FIND_REQUIRED ON)
-find_package(ICONV)
+
+# In Linux iconv is embedded into glibc.
+set(ENABLE_BUNDLED_ICONV_DEFAULT OFF)
+if(APPLE AND BUILD_STATIC_WITH_BUNDLED_LIBS)
+    set(ENABLE_BUNDLED_ICONV_DEFAULT ON)
+endif()
+option(ENABLE_BUNDLED_ICONV "Enable building of the bundled iconv"
+    ${ENABLE_BUNDLED_ICONV_DEFAULT})
+if(ENABLE_BUNDLED_ICONV)
+    include(BuildICONV)
+    add_dependencies(build_bundled_libs bundled-iconv)
+else()
+    set(ICONV_FIND_REQUIRED ON)
+    find_package(ICONV)
+endif()
 
 #
 # ICU
 #
 
-set(ICU_FIND_REQUIRED ON)
-find_package(ICU)
+option(ENABLE_BUNDLED_ICU "Enable building of the bundled icu"
+    ${BUILD_STATIC_WITH_BUNDLED_LIBS})
+if(ENABLE_BUNDLED_ICU)
+    include(BuildICU)
+    add_dependencies(build_bundled_libs bundled-icu)
+else()
+    set(ICU_FIND_REQUIRED ON)
+    find_package(ICU)
+endif()
 
 #
 # libunwind
@@ -789,8 +837,13 @@ set(options PACKAGE VERSION BUILD C_COMPILER CXX_COMPILER C_FLAGS CXX_FLAGS
     ENABLE_HARDENING
     ENABLE_DOC
     ENABLE_DIST
+    ENABLE_BUNDLED_ZLIB
+    ENABLE_BUNDLED_OPENSSL
     ENABLE_BUNDLED_LIBCURL
     BUNDLED_LIBCURL_USE_ARES
+    ENABLE_BUNDLED_READLINE
+    ENABLE_BUNDLED_ICONV
+    ENABLE_BUNDLED_ICU
     ENABLE_BUNDLED_LIBYAML
     ENABLE_BUNDLED_MSGPUCK
     ENABLE_BUNDLED_LIBUNWIND
diff --git a/cmake/BuildICONV.cmake b/cmake/BuildICONV.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..ebd71bc1b159e8cb02f6e9577ed5ab6dc6838145
--- /dev/null
+++ b/cmake/BuildICONV.cmake
@@ -0,0 +1,42 @@
+set(ICONV_VERSION 1.17)
+set(ICONV_HASH d718cd5a59438be666d1575855be72c3)
+set(ICONV_INSTALL_DIR ${PROJECT_BINARY_DIR}/build/iconv)
+set(ICONV_INCLUDE_DIR ${ICONV_INSTALL_DIR}/include)
+set(ICONV_LIBRARY ${ICONV_INSTALL_DIR}/lib/libiconv.a)
+set(ICONV_CFLAGS "${DEPENDENCY_CFLAGS} -O2")
+set(ICONV_CPPFLAGS "")
+set(ICONV_LDFLAGS "")
+
+if(APPLE)
+    set(ICONV_CFLAGS "${ICONV_CFLAGS} ${CMAKE_C_SYSROOT_FLAG} ${CMAKE_OSX_SYSROOT}")
+    set(ICONV_CPPFLAGS "${ICONV_CPPFLAGS} ${CMAKE_C_SYSROOT_FLAG} ${CMAKE_OSX_SYSROOT}")
+endif()
+
+ExternalProject_Add(bundled-iconv-project
+    PREFIX ${ICONV_INSTALL_DIR}
+    URL URL ${BACKUP_STORAGE}/libiconv/libiconv-${ICONV_VERSION}.tar.gz
+    URL_MD5 ${ICONV_HASH}
+    CONFIGURE_COMMAND <SOURCE_DIR>/configure
+        CC=${CMAKE_C_COMPILER}
+        CFLAGS=${ICONV_CFLAGS}
+        CPPFLAGS=${ICONV_CPPFLAGS}
+        LDFLAGS=${ICONV_LDFLAGS}
+
+        --prefix=<INSTALL_DIR>
+        --disable-shared
+        --enable-static
+        --with-gnu-ld
+    STEP_TARGETS download
+    BUILD_BYPRODUCTS ${ICONV_LIBRARY}
+)
+
+add_library(bundled-iconv STATIC IMPORTED GLOBAL)
+set_target_properties(bundled-iconv PROPERTIES IMPORTED_LOCATION
+    ${ICONV_LIBRARY})
+add_dependencies(bundled-iconv bundled-iconv-project)
+
+set(ICONV_FOUND TRUE)
+set(ICONV_LIBRARIES ${ICONV_LIBRARY})
+set(ICONV_INCLUDE_DIRS ${ICONV_INCLUDE_DIR})
+
+message(STATUS "Using bundled iconv")
diff --git a/cmake/BuildICU.cmake b/cmake/BuildICU.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..4810a414537526609f2a540dc75bb38ae8d84d1c
--- /dev/null
+++ b/cmake/BuildICU.cmake
@@ -0,0 +1,77 @@
+set(ICU_VERSION release-71-1/icu4c-71_1)
+set(ICU_HASH e06ffc96f59762bd3c929b217445aaec)
+set(ICU_PATCHES_DIR ${PROJECT_SOURCE_DIR}/patches)
+set(ICU_INSTALL_DIR ${PROJECT_BINARY_DIR}/build/icu)
+set(ICU_INCLUDE_DIR ${ICU_INSTALL_DIR}/include)
+set(ICU_I18N_LIBRARY ${ICU_INSTALL_DIR}/lib/libicui18n.a)
+set(ICU_UC_LIBRARY ${ICU_INSTALL_DIR}/lib/libicuuc.a)
+set(ICU_DATA_LIBRARY ${ICU_INSTALL_DIR}/lib/libicudata.a)
+set(ICU_CFLAGS "${DEPENDENCY_CFLAGS} -O2")
+set(ICU_CXXFLAGS "${DEPENDENCY_CXXFLAGS} -O2")
+set(ICU_CPPFLAGS "")
+set(ICU_LDFLAGS "")
+
+if(APPLE)
+    set(ICU_CFLAGS "${ICU_CFLAGS} ${CMAKE_C_SYSROOT_FLAG} ${CMAKE_OSX_SYSROOT}")
+    set(ICU_CXXFLAGS "${ICU_CXXFLAGS} ${CMAKE_C_SYSROOT_FLAG} ${CMAKE_OSX_SYSROOT}")
+    set(ICU_CPPFLAGS "${ICU_CPPFLAGS} ${CMAKE_C_SYSROOT_FLAG} ${CMAKE_OSX_SYSROOT}")
+endif()
+
+ExternalProject_Add(bundled-icu-project
+    PREFIX ${ICU_INSTALL_DIR}
+    URL https://github.com/unicode-org/icu/releases/download/${ICU_VERSION}-src.tgz
+    URL_MD5 ${ICU_HASH}
+    CONFIGURE_COMMAND <SOURCE_DIR>/source/configure
+        CC=${CMAKE_C_COMPILER}
+        CXX=${CMAKE_CXX_COMPILER}
+        CFLAGS=${ICU_CFLAGS}
+        CXXFLAGS=${ICU_CXXFLAGS}
+        CPPFLAGS=${ICU_CPPFLAGS}
+        LDFLAGS=${ICU_LDFLAGS}
+
+        --with-data-packaging=static
+        --prefix=<INSTALL_DIR>
+        --disable-shared
+        --enable-static
+        --disable-renaming
+        --disable-tests
+        --disable-samples
+    INSTALL_COMMAND
+        $(MAKE) install &&
+        ${CMAKE_COMMAND} -E touch <BINARY_DIR>/uconfig.h &&
+        cat <BINARY_DIR>/uconfig.h.prepend <INSTALL_DIR>/include/unicode/uconfig.h >> <BINARY_DIR>/uconfig.h &&
+        ${CMAKE_COMMAND} -E copy_if_different <BINARY_DIR>/uconfig.h <INSTALL_DIR>/include/unicode/uconfig.h
+    PATCH_COMMAND patch -d <SOURCE_DIR> -p1 -i "${ICU_PATCHES_DIR}/icu-tarantool-security-45.patch"
+    COMMAND       patch -d <SOURCE_DIR> -p1 -i "${ICU_PATCHES_DIR}/icu-tarantool-security-59.patch"
+    COMMAND       patch -d <SOURCE_DIR> -p1 -i "${ICU_PATCHES_DIR}/icu-tarantool-security-61.patch"
+    COMMAND       patch -d <SOURCE_DIR> -p1 -i "${ICU_PATCHES_DIR}/icu-tarantool-security-96.patch"
+    BUILD_BYPRODUCTS ${ICU_I18N_LIBRARY} ${ICU_UC_LIBRARY} ${ICU_DATA_LIBRARY}
+)
+
+add_library(bundled-icu-i18n STATIC IMPORTED GLOBAL)
+set_target_properties(bundled-icu-i18n PROPERTIES IMPORTED_LOCATION
+    ${ICU_I18N_LIBRARY})
+add_dependencies(bundled-icu-i18n bundled-icu-project)
+
+add_library(bundled-icu-uc STATIC IMPORTED GLOBAL)
+set_target_properties(bundled-icu-uc PROPERTIES IMPORTED_LOCATION
+    ${ICU_UC_LIBRARY})
+add_dependencies(bundled-icu-uc bundled-icu-project)
+
+add_library(bundled-icu-data STATIC IMPORTED GLOBAL)
+set_target_properties(bundled-icu-data PROPERTIES IMPORTED_LOCATION
+    ${ICU_DATA_LIBRARY})
+add_dependencies(bundled-icu-data bundled-icu-project)
+
+add_custom_target(bundled-icu
+    DEPENDS bundled-icu-i18n bundled-icu-uc bundled-icu-data)
+
+set(ICU_FOUND TRUE)
+set(ICU_ROOT ${ICU_INSTALL_DIR})
+set(ICU_LIBRARIES ${ICU_I18N_LIBRARY} ${ICU_UC_LIBRARY} ${ICU_DATA_LIBRARY}
+    ${CMAKE_DL_LIBS})
+set(ICU_INCLUDE_DIRS ${ICU_INCLUDE_DIR})
+
+set(HAVE_ICU_STRCOLLUTF TRUE)
+
+message(STATUS "Using bundled icu")
diff --git a/cmake/BuildLibCURL.cmake b/cmake/BuildLibCURL.cmake
index 4760d052719167504c85fb7208fe6c5ba9bcb519..410488403110fa18a91b3476d5569f4474c97f47 100644
--- a/cmake/BuildLibCURL.cmake
+++ b/cmake/BuildLibCURL.cmake
@@ -220,6 +220,14 @@ macro(curl_build)
     add_library(bundled-libcurl STATIC IMPORTED GLOBAL)
     set_target_properties(bundled-libcurl PROPERTIES IMPORTED_LOCATION
         ${LIBCURL_INSTALL_DIR}/lib/libcurl.a)
+    if (ENABLE_BUNDLED_ZLIB)
+        # Need to build zlib first
+        add_dependencies(bundled-libcurl-project bundled-zlib)
+    endif()
+    if (ENABLE_BUNDLED_OPENSSL)
+        # Need to build openssl first
+        add_dependencies(bundled-libcurl-project bundled-openssl)
+    endif()
     if (BUNDLED_LIBCURL_USE_ARES)
         # Need to build ares first
         add_dependencies(bundled-libcurl-project bundled-ares)
diff --git a/cmake/BuildLibYAML.cmake b/cmake/BuildLibYAML.cmake
index 2144b03f8512ae954edf912e4600a324fe151452..4a3fc4e5173b796f888a50e1152d0cae33df5fa5 100644
--- a/cmake/BuildLibYAML.cmake
+++ b/cmake/BuildLibYAML.cmake
@@ -24,6 +24,10 @@ macro(libyaml_build)
         BUILD_BYPRODUCTS ${LIBYAML_LIBRARY}
     )
 
+    if(ENABLE_BUNDLED_ICU)
+        add_dependencies(bundled-libyaml-project bundled-icu)
+    endif()
+
     add_library(bundled-libyaml STATIC IMPORTED GLOBAL)
     set_target_properties(bundled-libyaml PROPERTIES IMPORTED_LOCATION
         ${LIBYAML_LIBRARY})
diff --git a/cmake/BuildOpenSSL.cmake b/cmake/BuildOpenSSL.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..4c440e5692c2376bf22290da855dc79d0e367e25
--- /dev/null
+++ b/cmake/BuildOpenSSL.cmake
@@ -0,0 +1,57 @@
+set(OPENSSL_VERSION 1.1.1q)
+set(OPENSSL_HASH c685d239b6a6e1bd78be45624c092f51)
+set(OPENSSL_PATCHES_DIR ${PROJECT_SOURCE_DIR}/patches)
+set(OPENSSL_INSTALL_DIR ${PROJECT_BINARY_DIR}/build/openssl)
+set(OPENSSL_INCLUDE_DIR ${OPENSSL_INSTALL_DIR}/include)
+set(OPENSSL_CRYPTO_LIBRARY ${OPENSSL_INSTALL_DIR}/lib/libcrypto.a)
+set(OPENSSL_SSL_LIBRARY ${OPENSSL_INSTALL_DIR}/lib/libssl.a)
+set(OPENSSL_CFLAGS "${DEPENDENCY_CFLAGS} -O2")
+set(OPENSSL_CPPFLAGS "")
+set(OPENSSL_LDFLAGS "")
+
+if(APPLE)
+    set(OPENSSL_CFLAGS "${OPENSSL_CFLAGS} ${CMAKE_C_SYSROOT_FLAG} ${CMAKE_OSX_SYSROOT}")
+    set(OPENSSL_CPPFLAGS "${OPENSSL_CPPFLAGS} ${CMAKE_C_SYSROOT_FLAG} ${CMAKE_OSX_SYSROOT}")
+endif()
+
+ExternalProject_Add(bundled-openssl-project
+    PREFIX ${OPENSSL_INSTALL_DIR}
+    URL ${BACKUP_STORAGE}/openssl/openssl-${OPENSSL_VERSION}.tar.gz
+    URL_MD5 ${OPENSSL_HASH}
+    CONFIGURE_COMMAND <SOURCE_DIR>/config
+        CC=${CMAKE_C_COMPILER}
+        CXX=${CMAKE_CXX_COMPILER}
+        CFLAGS=${OPENSSL_CFLAGS}
+        CPPFLAGS=${OPENSSL_CPPFLAGS}
+        LDFLAGS=${OPENSSL_LDFLAGS}
+
+        --prefix=<INSTALL_DIR>
+        --libdir=lib
+        no-shared
+    INSTALL_COMMAND ${CMAKE_MAKE_PROGRAM} install_sw
+    PATCH_COMMAND patch -d <SOURCE_DIR> -p1 -i "${OPENSSL_PATCHES_DIR}/openssl-111q-gh-18720.patch"
+    COMMAND       patch -d <SOURCE_DIR> -p1 -i "${OPENSSL_PATCHES_DIR}/openssl-tarantool-security-27.patch"
+    COMMAND       patch -d <SOURCE_DIR> -p1 -i "${OPENSSL_PATCHES_DIR}/openssl-tarantool-security-54.patch"
+    COMMAND       patch -d <SOURCE_DIR> -p1 -i "${OPENSSL_PATCHES_DIR}/openssl-tarantool-security-90.patch"
+    BUILD_BYPRODUCTS ${OPENSSL_CRYPTO_LIBRARY} ${OPENSSL_SSL_LIBRARY}
+)
+
+add_library(bundled-openssl-ssl STATIC IMPORTED GLOBAL)
+set_target_properties(bundled-openssl-ssl PROPERTIES IMPORTED_LOCATION
+    ${OPENSSL_SSL_LIBRARY})
+add_dependencies(bundled-openssl-ssl bundled-openssl-project)
+
+add_library(bundled-openssl-crypto STATIC IMPORTED GLOBAL)
+set_target_properties(bundled-openssl-crypto PROPERTIES IMPORTED_LOCATION
+    ${OPENSSL_CRYPTO_LIBRARY})
+add_dependencies(bundled-openssl-crypto bundled-openssl-project)
+
+add_custom_target(bundled-openssl
+    DEPENDS bundled-openssl-ssl bundled-openssl-crypto)
+
+set(OPENSSL_FOUND TRUE)
+set(OPENSSL_LIBRARIES ${OPENSSL_SSL_LIBRARY} ${OPENSSL_CRYPTO_LIBRARY}
+    ${CMAKE_DL_LIBS})
+set(OPENSSL_INCLUDE_DIRS ${OPENSSL_INCLUDE_DIR})
+
+message(STATUS "Using bundled openssl")
diff --git a/cmake/BuildReadline.cmake b/cmake/BuildReadline.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..1516efc491e66fdd03051e6149d27d086612f078
--- /dev/null
+++ b/cmake/BuildReadline.cmake
@@ -0,0 +1,104 @@
+set(NCURSES_VERSION 6.3-20220716)
+set(NCURSES_HASH 2b7a0e31ebbd8144680f985d61f5bbd5)
+set(NCURSES_INSTALL_DIR ${PROJECT_BINARY_DIR}/build/ncurses)
+set(NCURSES_LIBRARY ${NCURSES_INSTALL_DIR}/lib/libncurses.a)
+set(NCURSES_TINFO_LIBRARY ${NCURSES_INSTALL_DIR}/lib/libtinfo.a)
+set(NCURSES_CFLAGS "${DEPENDENCY_CFLAGS} -O2")
+set(NCURSES_CXXFLAGS "${DEPENDENCY_CXXFLAGS} -O2")
+set(NCURSES_CPPFLAGS "")
+set(NCURSES_LDFLAGS "")
+
+set(READLINE_VERSION 8.0)
+set(READLINE_HASH 7e6c1f16aee3244a69aba6e438295ca3)
+set(READLINE_PATCHES_DIR ${PROJECT_SOURCE_DIR}/patches)
+set(READLINE_INSTALL_DIR ${PROJECT_BINARY_DIR}/build/readline)
+set(READLINE_INCLUDE_DIR ${READLINE_INSTALL_DIR}/include)
+set(READLINE_LIBRARY ${READLINE_INSTALL_DIR}/lib/libreadline.a)
+set(READLINE_CFLAGS "${DEPENDENCY_CFLAGS} -O2")
+set(READLINE_CPPFLAGS "")
+set(READLINE_LDFLAGS "")
+
+if(APPLE)
+    set(NCURSES_CFLAGS "${NCURSES_CFLAGS} ${CMAKE_C_SYSROOT_FLAG} ${CMAKE_OSX_SYSROOT}")
+    set(NCURSES_CXXFLAGS "${NCURSES_CXXFLAGS} ${CMAKE_C_SYSROOT_FLAG} ${CMAKE_OSX_SYSROOT}")
+    set(NCURSES_CPPFLAGS "${NCURSES_CPPFLAGS} ${CMAKE_C_SYSROOT_FLAG} ${CMAKE_OSX_SYSROOT}")
+
+    set(READLINE_CFLAGS "${READLINE_CFLAGS} ${CMAKE_C_SYSROOT_FLAG} ${CMAKE_OSX_SYSROOT}")
+    set(READLINE_CPPFLAGS "${READLINE_CPPFLAGS} ${CMAKE_C_SYSROOT_FLAG} ${CMAKE_OSX_SYSROOT}")
+endif()
+
+ExternalProject_Add(bundled-ncurses-project
+    PREFIX ${NCURSES_INSTALL_DIR}
+    URL ${BACKUP_STORAGE}/ncurses/ncurses-${NCURSES_VERSION}.tgz
+    URL_MD5 ${NCURSES_HASH}
+    CONFIGURE_COMMAND <SOURCE_DIR>/configure
+        CC=${CMAKE_C_COMPILER}
+        CXX=${CMAKE_CXX_COMPILER}
+        CFLAGS=${NCURSES_CFLAGS}
+        CXXFLAGS=${NCURSES_CXXFLAGS}
+        CPPFLAGS=${NCURSES_CPPFLAGS}
+        LDFLAGS=${NCURSES_LDFLAGS}
+
+        --prefix=<INSTALL_DIR>
+
+        # This flag enables creation of libcurses.a as a symlink to libncurses.a
+        # and disables subdir creation `ncurses` at <install_dir>/include. It is
+        # necessary for correct work of FindCurses.cmake module (this module is
+        # builtin at cmake package) which used in cmake/FindReadline.cmake
+        --enable-overwrite
+
+        # enable building libtinfo to prevent linking with libtinfo from system
+        # directories
+        --with-termlib
+
+        # set search paths for terminfo db
+        --with-terminfo-dirs=/lib/terminfo:/usr/share/terminfo:/etc/terminfo
+
+        # disable install created terminfo db, use db from system
+        --disable-db-install
+        --without-progs
+        --without-manpages
+    BUILD_BYPRODUCTS ${NCURSES_LIBRARY} ${NCURSES_TINFO_LIBRARY}
+)
+
+add_library(bundled-ncurses STATIC IMPORTED GLOBAL)
+set_target_properties(bundled-ncurses PROPERTIES IMPORTED_LOCATION
+    ${NCURSES_LIBRARY})
+add_dependencies(bundled-ncurses bundled-ncurses-project)
+
+add_library(bundled-ncurses-tinfo STATIC IMPORTED GLOBAL)
+set_target_properties(bundled-ncurses-tinfo PROPERTIES IMPORTED_LOCATION
+    ${NCURSES_TINFO_LIBRARY})
+add_dependencies(bundled-ncurses-tinfo bundled-ncurses-project)
+
+ExternalProject_Add(bundled-readline-project
+    PREFIX ${READLINE_INSTALL_DIR}
+    URL ${BACKUP_STORAGE}/readline/readline-${READLINE_VERSION}.tar.gz
+    URL_MD5 ${READLINE_HASH}
+    CONFIGURE_COMMAND <SOURCE_DIR>/configure
+        CC=${CMAKE_C_COMPILER}
+        CFLAGS=${READLINE_CFLAGS}
+        CPPFLAGS=${READLINE_CPPFLAGS}
+        LDFLAGS=${READLINE_LDFLAGS}
+
+        --prefix=<INSTALL_DIR>
+        --disable-shared
+    PATCH_COMMAND patch -d <SOURCE_DIR> -p0 -i "${READLINE_PATCHES_DIR}/readline80-001.patch"
+    COMMAND       patch -d <SOURCE_DIR> -p1 -i "${READLINE_PATCHES_DIR}/readline-tarantool-security-95.patch"
+    BUILD_BYPRODUCTS ${READLINE_LIBRARY}
+)
+
+add_library(bundled-readline STATIC IMPORTED GLOBAL)
+set_target_properties(bundled-readline PROPERTIES IMPORTED_LOCATION
+    ${READLINE_LIBRARY})
+add_dependencies(bundled-readline bundled-readline-project
+    bundled-ncurses bundled-ncurses-tinfo)
+
+set(READLINE_FOUND TRUE)
+set(READLINE_LIBRARIES ${READLINE_LIBRARY} ${NCURSES_LIBRARY}
+    ${NCURSES_TINFO_LIBRARY})
+set(READLINE_INCLUDE_DIRS ${READLINE_INCLUDE_DIR})
+
+set(HAVE_GNU_READLINE TRUE)
+
+message(STATUS "Using bundled readline")
diff --git a/cmake/BuildZLIB.cmake b/cmake/BuildZLIB.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..f813102ac0239bf283373a322cb36072433c5eee
--- /dev/null
+++ b/cmake/BuildZLIB.cmake
@@ -0,0 +1,39 @@
+set(ZLIB_VERSION 1.2.12)
+set(ZLIB_HASH 5fc414a9726be31427b440b434d05f78)
+set(ZLIB_INSTALL_DIR ${PROJECT_BINARY_DIR}/build/zlib)
+set(ZLIB_INCLUDE_DIR ${ZLIB_INSTALL_DIR}/include)
+set(ZLIB_LIBRARY ${ZLIB_INSTALL_DIR}/lib/libz.a)
+set(ZLIB_CFLAGS "${DEPENDENCY_CFLAGS} -O2")
+set(ZLIB_CPPFLAGS "")
+set(ZLIB_LDFLAGS "")
+
+if(APPLE)
+    set(ZLIB_CFLAGS "${ZLIB_CFLAGS} ${CMAKE_C_SYSROOT_FLAG} ${CMAKE_OSX_SYSROOT}")
+    set(ZLIB_CPPFLAGS "${ZLIB_CPPFLAGS} ${CMAKE_C_SYSROOT_FLAG} ${CMAKE_OSX_SYSROOT}")
+endif()
+
+ExternalProject_Add(bundled-zlib-project
+    PREFIX ${ZLIB_INSTALL_DIR}
+    URL ${BACKUP_STORAGE}/zlib/zlib-${ZLIB_VERSION}.tar.gz
+    URL_MD5 ${ZLIB_HASH}
+    CONFIGURE_COMMAND env
+        CC=${CMAKE_C_COMPILER}
+        CFLAGS=${ZLIB_CFLAGS}
+        CPPFLAGS=${ZLIB_CPPFLAGS}
+        LDFLAGS=${ZLIB_LDFLAGS}
+        <SOURCE_DIR>/configure
+        --prefix=<INSTALL_DIR>
+        --static
+    BUILD_BYPRODUCTS ${ZLIB_LIBRARY}
+)
+
+add_library(bundled-zlib STATIC IMPORTED GLOBAL)
+set_target_properties(bundled-zlib PROPERTIES IMPORTED_LOCATION
+    ${ZLIB_LIBRARY})
+add_dependencies(bundled-zlib bundled-zlib-project)
+
+set(ZLIB_FOUND TRUE)
+set(ZLIB_LIBRARIES ${ZLIB_LIBRARY})
+set(ZLIB_INCLUDE_DIRS ${ZLIB_INCLUDE_DIR})
+
+message(STATUS "Using bundled zlib")
diff --git a/cmake/FindLibUnwind.cmake b/cmake/FindLibUnwind.cmake
index 5fb4f4a53e51357e25a68b7e3ff7a3b047f713c2..74b703910bd51b3ec5fcd522e25caf70b76dec37 100644
--- a/cmake/FindLibUnwind.cmake
+++ b/cmake/FindLibUnwind.cmake
@@ -70,7 +70,7 @@ if(BUILD_STATIC)
     endif()
     # Ditto,
     # https://github.com/libunwind/libunwind/blob/4feb1152d1c4aaafbb2d504dbe34c6db5b6fe9f2/configure.ac#L319-L334
-    set(LIBUNWIND_LIBRARIES ${LIBUNWIND_LIBRARIES} ZLIB::ZLIB)
+    set(LIBUNWIND_LIBRARIES ${LIBUNWIND_LIBRARIES} ${ZLIB_LIBRARIES})
 endif()
 
 if(PC_LIBUNWIND_VERSION)
diff --git a/static-build/patches/icu-tarantool-security-45.patch b/patches/icu-tarantool-security-45.patch
similarity index 100%
rename from static-build/patches/icu-tarantool-security-45.patch
rename to patches/icu-tarantool-security-45.patch
diff --git a/static-build/patches/icu-tarantool-security-59.patch b/patches/icu-tarantool-security-59.patch
similarity index 100%
rename from static-build/patches/icu-tarantool-security-59.patch
rename to patches/icu-tarantool-security-59.patch
diff --git a/static-build/patches/icu-tarantool-security-61.patch b/patches/icu-tarantool-security-61.patch
similarity index 100%
rename from static-build/patches/icu-tarantool-security-61.patch
rename to patches/icu-tarantool-security-61.patch
diff --git a/static-build/patches/icu-tarantool-security-96.patch b/patches/icu-tarantool-security-96.patch
similarity index 100%
rename from static-build/patches/icu-tarantool-security-96.patch
rename to patches/icu-tarantool-security-96.patch
diff --git a/static-build/patches/openssl-111q-gh-18720.patch b/patches/openssl-111q-gh-18720.patch
similarity index 100%
rename from static-build/patches/openssl-111q-gh-18720.patch
rename to patches/openssl-111q-gh-18720.patch
diff --git a/static-build/patches/openssl-tarantool-security-27.patch b/patches/openssl-tarantool-security-27.patch
similarity index 100%
rename from static-build/patches/openssl-tarantool-security-27.patch
rename to patches/openssl-tarantool-security-27.patch
diff --git a/static-build/patches/openssl-tarantool-security-54.patch b/patches/openssl-tarantool-security-54.patch
similarity index 100%
rename from static-build/patches/openssl-tarantool-security-54.patch
rename to patches/openssl-tarantool-security-54.patch
diff --git a/static-build/patches/openssl-tarantool-security-90.patch b/patches/openssl-tarantool-security-90.patch
similarity index 100%
rename from static-build/patches/openssl-tarantool-security-90.patch
rename to patches/openssl-tarantool-security-90.patch
diff --git a/static-build/patches/readline-tarantool-security-95.patch b/patches/readline-tarantool-security-95.patch
similarity index 100%
rename from static-build/patches/readline-tarantool-security-95.patch
rename to patches/readline-tarantool-security-95.patch
diff --git a/static-build/patches/readline80-001.patch b/patches/readline80-001.patch
similarity index 100%
rename from static-build/patches/readline80-001.patch
rename to patches/readline80-001.patch
diff --git a/src/lib/coll/CMakeLists.txt b/src/lib/coll/CMakeLists.txt
index c01e608bb108d0b036f780a47edb912e370b73ee..de007e9755948eaf1e8e5a9e6228587e97d1f0b3 100644
--- a/src/lib/coll/CMakeLists.txt
+++ b/src/lib/coll/CMakeLists.txt
@@ -1,2 +1,6 @@
 add_library(coll STATIC coll.c coll_def.c)
 target_link_libraries(coll core ${ICU_LIBRARIES})
+
+if (ENABLE_BUNDLED_ICU)
+    add_dependencies(coll bundled-icu)
+endif()
diff --git a/src/lib/core/CMakeLists.txt b/src/lib/core/CMakeLists.txt
index 233e4f071454ec0a3e4d634320f1ff093b6c51dd..8d3630cb037cff64c42cdb9c27000c6e0ab6b21d 100644
--- a/src/lib/core/CMakeLists.txt
+++ b/src/lib/core/CMakeLists.txt
@@ -89,6 +89,14 @@ if (ENABLE_BACKTRACE)
     endif()
 endif()
 
+if (ENABLE_BUNDLED_OPENSSL)
+    add_dependencies(core bundled-openssl)
+endif()
+
+if (ENABLE_BUNDLED_ICU)
+    add_dependencies(core bundled-icu)
+endif()
+
 if (ENABLE_TUPLE_COMPRESSION)
     target_link_libraries(core ${ZSTD_LIBRARIES})
 endif()
diff --git a/src/lib/crypto/CMakeLists.txt b/src/lib/crypto/CMakeLists.txt
index 4e2e5e403605f1903c50c7ca0bb943aea5fbc08a..afdac0891e863a18b23c94f2d8e5b967b122b1a3 100644
--- a/src/lib/crypto/CMakeLists.txt
+++ b/src/lib/crypto/CMakeLists.txt
@@ -3,3 +3,7 @@ set(lib_sources crypto.c)
 set_source_files_compile_flags(${lib_sources})
 add_library(crypto STATIC ${lib_sources})
 target_link_libraries(crypto ${OPENSSL_LIBRARIES} core)
+
+if (ENABLE_BUNDLED_OPENSSL)
+    add_dependencies(crypto bundled-openssl)
+endif()
diff --git a/src/lib/json/CMakeLists.txt b/src/lib/json/CMakeLists.txt
index 4462ee2d7043ecfaa41b053929b96214484acce8..8af6b357b425faa2c4cb1ef255c9cdc2e38a2183 100644
--- a/src/lib/json/CMakeLists.txt
+++ b/src/lib/json/CMakeLists.txt
@@ -5,3 +5,7 @@ set(lib_sources
 set_source_files_compile_flags(${lib_sources})
 add_library(json STATIC ${lib_sources})
 target_link_libraries(json misc)
+
+if (ENABLE_BUNDLED_ICU)
+    add_dependencies(json bundled-icu)
+endif()
diff --git a/static-build/CMakeLists.txt b/static-build/CMakeLists.txt
index b53239326cb864710839c678dcb2bb3dbf875a7a..c7600e9e3dc2fbf16d578b5b5ec93228d692b372 100644
--- a/static-build/CMakeLists.txt
+++ b/static-build/CMakeLists.txt
@@ -7,6 +7,5 @@ cmake_minimum_required(VERSION 3.1)
 # linux machine).
 project(tarantool-static C CXX)
 
-include(cmake/AddDependencyProjects.cmake)
 include(cmake/AddTarantoolProject.cmake)
 include(cmake/AddTests.cmake)
diff --git a/static-build/cmake/AddDependencyProjects.cmake b/static-build/cmake/AddDependencyProjects.cmake
deleted file mode 100644
index 80bc2d97a4148598bec56164791c4fa2648b179f..0000000000000000000000000000000000000000
--- a/static-build/cmake/AddDependencyProjects.cmake
+++ /dev/null
@@ -1,252 +0,0 @@
-include(CheckLibraryExists)
-include(CheckCSourceCompiles)
-include(FindPackageMessage)
-include(ExternalProject)
-
-include(${CMAKE_CURRENT_LIST_DIR}/../../cmake/os.cmake)
-include(${CMAKE_CURRENT_LIST_DIR}/../../cmake/profile.cmake)
-include(${CMAKE_CURRENT_LIST_DIR}/../../cmake/hardening.cmake)
-include(${CMAKE_CURRENT_LIST_DIR}/../../cmake/prefix.cmake)
-
-set(LIBICU_VERSION release-71-1/icu4c-71_1)
-set(LIBICU_HASH e06ffc96f59762bd3c929b217445aaec)
-set(LIBICONV_VERSION 1.17)
-set(LIBICONV_HASH d718cd5a59438be666d1575855be72c3)
-set(OPENSSL_VERSION 1.1.1q)
-set(OPENSSL_HASH c685d239b6a6e1bd78be45624c092f51)
-set(ZLIB_VERSION 1.2.12)
-set(ZLIB_HASH 5fc414a9726be31427b440b434d05f78)
-set(NCURSES_VERSION 6.3-20220716)
-set(NCURSES_HASH 2b7a0e31ebbd8144680f985d61f5bbd5)
-set(READLINE_VERSION 8.0)
-set(READLINE_HASH 7e6c1f16aee3244a69aba6e438295ca3)
-set(BACKUP_STORAGE https://distrib.hb.vkcs.cloud)
-
-# Pass -isysroot=<SDK_PATH> option on Mac OS to a preprocessor and a C
-# compiler to find header files installed with an SDK.
-#
-# The idea is to set these (DEPENDENCY_*) variables to corresponding
-# environment variables at each dependency configure script.
-#
-# Note: Passing of CPPFLAGS / CFLAGS explicitly discards using of
-# corresponding environment variables. So pass empty LDFLAGS to discard
-# using of corresponding environment variable. It is possible that a
-# linker flag assumes that some compilation flag is set. We don't pass
-# CFLAGS from environment, so we should not do it for LDFLAGS too.
-#
-# Note: A configure script generated by autoconf doesn't enable compiler
-# optimizations if CFLAGS / CXXFLAGS is set so we have to enable them
-# explicitly, see https://github.com/tarantool/tarantool/issues/8606
-#
-set(DEPENDENCY_CFLAGS "-O2")
-set(DEPENDENCY_CXXFLAGS "-O2")
-set(DEPENDENCY_CPPFLAGS "")
-set(DEPENDENCY_LDFLAGS "")
-
-if (APPLE)
-    set(DEPENDENCY_CFLAGS "${DEPENDENCY_CFLAGS} ${CMAKE_C_SYSROOT_FLAG} ${CMAKE_OSX_SYSROOT}")
-    set(DEPENDENCY_CXXFLAGS "${DEPENDENCY_CXXFLAGS} ${CMAKE_C_SYSROOT_FLAG} ${CMAKE_OSX_SYSROOT}")
-    set(DEPENDENCY_CPPFLAGS "${DEPENDENCY_CPPFLAGS} ${CMAKE_C_SYSROOT_FLAG} ${CMAKE_OSX_SYSROOT}")
-endif()
-
-set(DEPENDENCY_CFLAGS "${DEPENDENCY_CFLAGS} ${HARDENING_FLAGS}")
-set(DEPENDENCY_CXXFLAGS "${DEPENDENCY_CXXFLAGS} ${HARDENING_FLAGS}")
-set(DEPENDENCY_LDFLAGS "${DEPENDENCY_LDFLAGS} ${HARDENING_LDFLAGS}")
-
-set(DEPENDENCY_CFLAGS "${DEPENDENCY_CFLAGS} ${PREFIX_MAP_FLAGS}")
-set(DEPENDENCY_CXXFLAGS "${DEPENDENCY_CXXFLAGS} ${PREFIX_MAP_FLAGS}")
-
-set(PATCHES_DIR "${CMAKE_CURRENT_LIST_DIR}/../patches")
-
-# Install all libraries required by tarantool at current build dir
-
-#
-# OpenSSL
-#
-# Patched to build on Mac OS. See
-# https://github.com/openssl/openssl/issues/18720
-#
-ExternalProject_Add(openssl
-    URL ${BACKUP_STORAGE}/openssl/openssl-${OPENSSL_VERSION}.tar.gz
-    URL_MD5 ${OPENSSL_HASH}
-    CONFIGURE_COMMAND <SOURCE_DIR>/config
-        CC=${CMAKE_C_COMPILER}
-        CXX=${CMAKE_CXX_COMPILER}
-        CFLAGS=${DEPENDENCY_CFLAGS}
-        CPPFLAGS=${DEPENDENCY_CPPFLAGS}
-        LDFLAGS=${DEPENDENCY_LDFLAGS}
-
-        --prefix=<INSTALL_DIR>
-        --libdir=lib
-        no-shared
-    INSTALL_COMMAND ${CMAKE_MAKE_PROGRAM} install_sw
-    PATCH_COMMAND patch -d <SOURCE_DIR> -p1 -i "${PATCHES_DIR}/openssl-111q-gh-18720.patch"
-    COMMAND       patch -d <SOURCE_DIR> -p1 -i "${PATCHES_DIR}/openssl-tarantool-security-27.patch"
-    COMMAND       patch -d <SOURCE_DIR> -p1 -i "${PATCHES_DIR}/openssl-tarantool-security-54.patch"
-    COMMAND       patch -d <SOURCE_DIR> -p1 -i "${PATCHES_DIR}/openssl-tarantool-security-90.patch"
-)
-set(TARANTOOL_DEPENDS openssl ${TARANTOOL_DEPENDS})
-
-#
-# ICU
-#
-ExternalProject_Add(icu
-    URL https://github.com/unicode-org/icu/releases/download/${LIBICU_VERSION}-src.tgz
-    URL_MD5 ${LIBICU_HASH}
-    # By default libicu is built by using clang/clang++ compiler (if it
-    # exists). Here is a link for detecting compilers at libicu configure
-    # script: https://github.com/unicode-org/icu/blob/7c7b8bd5702310b972f888299169bc3cc88bf0a6/icu4c/source/configure.ac#L135
-    # This will cause the problem on linux machine: tarantool is built
-    # with gcc/g++ and libicu is built with clang/clang++ (if it exists)
-    # so at linking stage `rellocation` errors will occur. To solve this,
-    # we can set CC/CXX to CMAKE_C_COMPILER/CMAKE_CXX_COMPILER variables
-    # manually which are detected above (by cmake `project()` command)
-    CONFIGURE_COMMAND <SOURCE_DIR>/source/configure
-        CC=${CMAKE_C_COMPILER}
-        CXX=${CMAKE_CXX_COMPILER}
-        CFLAGS=${DEPENDENCY_CFLAGS}
-        CXXFLAGS=${DEPENDENCY_CXXFLAGS}
-        CPPFLAGS=${DEPENDENCY_CPPFLAGS}
-        LDFLAGS=${DEPENDENCY_LDFLAGS}
-
-        --with-data-packaging=static
-        --prefix=<INSTALL_DIR>
-        --disable-shared
-        --enable-static
-        --disable-renaming
-        --disable-tests
-        --disable-samples
-    INSTALL_COMMAND
-        $(MAKE) install &&
-        ${CMAKE_COMMAND} -E touch <BINARY_DIR>/uconfig.h &&
-        cat <BINARY_DIR>/uconfig.h.prepend <INSTALL_DIR>/include/unicode/uconfig.h >> <BINARY_DIR>/uconfig.h &&
-        ${CMAKE_COMMAND} -E copy_if_different <BINARY_DIR>/uconfig.h <INSTALL_DIR>/include/unicode/uconfig.h
-    PATCH_COMMAND patch -d <SOURCE_DIR> -p1 -i "${PATCHES_DIR}/icu-tarantool-security-45.patch"
-    COMMAND       patch -d <SOURCE_DIR> -p1 -i "${PATCHES_DIR}/icu-tarantool-security-59.patch"
-    COMMAND       patch -d <SOURCE_DIR> -p1 -i "${PATCHES_DIR}/icu-tarantool-security-61.patch"
-    COMMAND       patch -d <SOURCE_DIR> -p1 -i "${PATCHES_DIR}/icu-tarantool-security-96.patch"
-)
-set(TARANTOOL_DEPENDS icu ${TARANTOOL_DEPENDS})
-
-#
-# ZLIB
-#
-ExternalProject_Add(zlib
-    URL ${BACKUP_STORAGE}/zlib/zlib-${ZLIB_VERSION}.tar.gz
-    URL_MD5 ${ZLIB_HASH}
-    CONFIGURE_COMMAND env
-        CC=${CMAKE_C_COMPILER}
-        CFLAGS=${DEPENDENCY_CFLAGS}
-        CPPFLAGS=${DEPENDENCY_CPPFLAGS}
-        LDFLAGS=${DEPENDENCY_LDFLAGS}
-        <SOURCE_DIR>/configure
-        --prefix=<INSTALL_DIR>
-        --static
-)
-set(TARANTOOL_DEPENDS zlib ${TARANTOOL_DEPENDS})
-
-#
-# Ncurses
-#
-ExternalProject_Add(ncurses
-    URL ${BACKUP_STORAGE}/ncurses/ncurses-${NCURSES_VERSION}.tgz
-    URL_MD5 ${NCURSES_HASH}
-    CONFIGURE_COMMAND <SOURCE_DIR>/configure
-        CC=${CMAKE_C_COMPILER}
-        CXX=${CMAKE_CXX_COMPILER}
-        CFLAGS=${DEPENDENCY_CFLAGS}
-        CPPFLAGS=${DEPENDENCY_CPPFLAGS}
-        CXXFLAGS=${DEPENDENCY_CXXFLAGS}
-        LDFLAGS=${DEPENDENCY_LDFLAGS}
-
-        --prefix=<INSTALL_DIR>
-
-        # This flag enables creation of libcurses.a as a symlink to libncurses.a
-        # and disables subdir creation `ncurses` at <install_dir>/include. It is
-        # necessary for correct work of FindCurses.cmake module (this module is
-        # builtin at cmake package) which used in cmake/FindReadline.cmake
-        --enable-overwrite
-
-        # enable building libtinfo to prevent linking with libtinfo from system
-        # directories
-        --with-termlib
-
-        # set search paths for terminfo db
-        --with-terminfo-dirs=/lib/terminfo:/usr/share/terminfo:/etc/terminfo
-
-        # disable install created terminfo db, use db from system
-        --disable-db-install
-        --without-progs
-        --without-manpages
-)
-set(TARANTOOL_DEPENDS ncurses ${TARANTOOL_DEPENDS})
-
-#
-# ReadLine
-#
-# Patched to fix file descriptor leak with zero-length history file.
-#
-ExternalProject_Add(readline
-    URL ${BACKUP_STORAGE}/readline/readline-${READLINE_VERSION}.tar.gz
-    URL_MD5 ${READLINE_HASH}
-    CONFIGURE_COMMAND <SOURCE_DIR>/configure
-        CC=${CMAKE_C_COMPILER}
-        CFLAGS=${DEPENDENCY_CFLAGS}
-        CPPFLAGS=${DEPENDENCY_CPPFLAGS}
-        LDFLAGS=${DEPENDENCY_LDFLAGS}
-
-        --prefix=<INSTALL_DIR>
-        --disable-shared
-    PATCH_COMMAND patch -d <SOURCE_DIR> -p0 -i "${PATCHES_DIR}/readline80-001.patch"
-    COMMAND       patch -d <SOURCE_DIR> -p1 -i "${PATCHES_DIR}/readline-tarantool-security-95.patch"
-)
-set(TARANTOOL_DEPENDS readline ${TARANTOOL_DEPENDS})
-
-#
-# ICONV
-#
-if (APPLE)
-    ExternalProject_Add(iconv
-        URL URL ${BACKUP_STORAGE}/libiconv/libiconv-${LIBICONV_VERSION}.tar.gz
-        URL_MD5 ${LIBICONV_HASH}
-        CONFIGURE_COMMAND <SOURCE_DIR>/configure
-            CC=${CMAKE_C_COMPILER}
-            CFLAGS=${DEPENDENCY_CFLAGS}
-            CPPFLAGS=${DEPENDENCY_CPPFLAGS}
-            LDFLAGS=${DEPENDENCY_LDFLAGS}
-
-            --prefix=<INSTALL_DIR>
-            --disable-shared
-            --enable-static
-            --with-gnu-ld
-        STEP_TARGETS download
-    )
-else()
-    # In linux iconv is embedded into glibc
-    # So we find system header and copy it locally
-    find_path(ICONV_INCLUDE_DIR iconv.h)
-    if(NOT ICONV_INCLUDE_DIR)
-        message(FATAL_ERROR "iconv include header not found")
-    endif()
-
-    set(ICONV_INSTALL_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/iconv-prefix")
-
-    add_custom_command(
-        OUTPUT "${ICONV_INSTALL_PREFIX}/include/iconv.h"
-        COMMAND ${CMAKE_COMMAND} -E make_directory
-            "${ICONV_INSTALL_PREFIX}/include"
-        COMMAND ${CMAKE_COMMAND} -E copy
-            "${ICONV_INCLUDE_DIR}/iconv.h"
-            "${ICONV_INSTALL_PREFIX}/include/iconv.h"
-    )
-    add_custom_target(iconv
-        DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/iconv-prefix/include/iconv.h"
-    )
-    # This is a hack for further getting install directory of library
-    # by ExternalProject_Get_Property
-    set_target_properties(iconv
-        PROPERTIES _EP_INSTALL_DIR ${ICONV_INSTALL_PREFIX}
-    )
-endif()
-
-set(TARANTOOL_DEPENDS iconv ${TARANTOOL_DEPENDS})
diff --git a/static-build/cmake/AddTarantoolProject.cmake b/static-build/cmake/AddTarantoolProject.cmake
index 23a33d8d5a94d0cd6b224c41a0ebe18dfd85b0ba..cd52881930e37f8ced616d083876aef0b92a39c8 100644
--- a/static-build/cmake/AddTarantoolProject.cmake
+++ b/static-build/cmake/AddTarantoolProject.cmake
@@ -1,10 +1,4 @@
-# Get install directories of built libraries for building
-# tarantool with custom CMAKE_PREFIX_PATH
-foreach(proj IN LISTS TARANTOOL_DEPENDS)
-    ExternalProject_Get_Property(${proj} install_dir)
-    set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH}:${install_dir})
-    message(STATUS "Add external project ${proj} in ${install_dir}")
-endforeach()
+include(ExternalProject)
 
 ExternalProject_Add(tarantool
     DEPENDS ${TARANTOOL_DEPENDS}
@@ -15,9 +9,8 @@ ExternalProject_Add(tarantool
         # https://cmake.org/cmake/help/v3.4/module/GNUInstallDirs.html#special-cases
         -DCMAKE_INSTALL_LOCALSTATEDIR=<INSTALL_DIR>/var
         -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
-        -DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}
         -DOPENSSL_USE_STATIC_LIBS=TRUE
-        -DBUILD_STATIC=TRUE
+        -DBUILD_STATIC_WITH_BUNDLED_LIBS=TRUE
         -DENABLE_DIST=TRUE
         -DENABLE_HARDENING=${ENABLE_HARDENING}
         -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}