diff --git a/CMake/resolve_dependency_modules/gflags.cmake b/CMake/resolve_dependency_modules/gflags.cmake
index 41d302c92313..2e86996b9869 100644
--- a/CMake/resolve_dependency_modules/gflags.cmake
+++ b/CMake/resolve_dependency_modules/gflags.cmake
@@ -29,22 +29,23 @@ FetchContent_Declare(
   URL_HASH ${VELOX_GFLAGS_BUILD_SHA256_CHECKSUM}
   PATCH_COMMAND git apply ${CMAKE_CURRENT_LIST_DIR}/gflags/gflags-config.patch)
 
-set(GFLAGS_BUILD_STATIC_LIBS ON)
+set(GFLAGS_BUILD_SHARED_LIBS ON)
 set(GFLAGS_BUILD_gflags_LIB ON)
 set(GFLAGS_BUILD_gflags_nothreads_LIB ON)
 set(GFLAGS_IS_SUBPROJECT ON)
 # glog relies on the old `google` namespace
 set(GFLAGS_NAMESPACE "google;gflags")
-
+unset(BUILD_SHARED_LIBS)
 FetchContent_MakeAvailable(gflags)
+set(BUILD_SHARED_LIBS ON)
 
 # the flag has to be added to each target we build so adjust to settings choosen
 # above
-target_compile_options(gflags_static PRIVATE -Wno-cast-function-type)
-target_compile_options(gflags_nothreads_static PRIVATE -Wno-cast-function-type)
+target_compile_options(gflags_shared PRIVATE -Wno-cast-function-type)
+target_compile_options(gflags_nothreads_shared PRIVATE -Wno-cast-function-type)
 
 # this causes find_package(gflags) to search in the build directory and prevents
 # the system gflags from being found
 set(gflags_DIR ${gflags_BINARY_DIR})
-set(gflags_LIBRARY gflags_static)
+set(gflags_LIBRARY gflags::gflags)
 set(gflags_INCLUDE_DIR ${gflags_BINARY_DIR}/include)
diff --git a/CMake/resolve_dependency_modules/gflags/gflags-fix-options.patch b/CMake/resolve_dependency_modules/gflags/gflags-fix-options.patch
new file mode 100644
index 000000000000..9b86c3fba1bb
--- /dev/null
+++ b/CMake/resolve_dependency_modules/gflags/gflags-fix-options.patch
@@ -0,0 +1,28 @@
+--- a/cmake/utils.cmake
++++ b/cmake/utils.cmake
+@@ -65,16 +65,18 @@ macro (gflags_define type varname docstring default)
+     message (FATAL_ERROR "gflags_variable: Too many macro arguments")
+   endif ()
+   if (NOT DEFINED GFLAGS_${varname})
+-    if (GFLAGS_IS_SUBPROJECT AND "${ARGC}" EQUAL 5)
+-      set (GFLAGS_${varname} "${ARGV4}")
++    if (DEFINED ${varname})
++      set(GFLAGS_${varname} "${${varname}}")
+     else ()
+-      set (GFLAGS_${varname} "${default}")
++      if (GFLAGS_IS_SUBPROJECT AND "${ARGC}" EQUAL 5)
++        set (GFLAGS_${varname} "${ARGV4}")
++      else ()
++        set (GFLAGS_${varname} "${default}")
++      endif ()
+     endif ()
+   endif ()
+   if (GFLAGS_IS_SUBPROJECT)
+-    if (NOT DEFINED ${varname})
+-      set (${varname} "${GFLAGS_${varname}}")
+-    endif ()
++    set (${varname} "${GFLAGS_${varname}}")
+   else ()
+     set (${varname} "${GFLAGS_${varname}}" CACHE ${type} "${docstring}")
+   endif ()
+
diff --git a/CMake/resolve_dependency_modules/glog.cmake b/CMake/resolve_dependency_modules/glog.cmake
index 54836009ed7c..ce9e42364bd3 100644
--- a/CMake/resolve_dependency_modules/glog.cmake
+++ b/CMake/resolve_dependency_modules/glog.cmake
@@ -37,7 +37,7 @@ set(BUILD_TESTING OFF)
 FetchContent_MakeAvailable(glog)
 unset(BUILD_TESTING)
 unset(BUILD_SHARED_LIBS)
-add_dependencies(glog gflags_static)
+add_dependencies(glog gflags::gflags)
 
 list(PREPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/glog)
 set(glog_INCLUDE_DIR ${glog_BINARY_DIR})
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 45eb5ec955ed..f43c97c2e5ad 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -159,6 +159,7 @@ endif()
 if(VELOX_ENABLE_BENCHMARKS_BASIC)
   set(VELOX_BUILD_TEST_UTILS ON)
 endif()
+set(CMAKE_POSITION_INDEPENDENT_CODE ON)
 
 if(VELOX_BUILD_TESTING OR VELOX_BUILD_TEST_UTILS)
   set(cpr_SOURCE BUNDLED)
@@ -167,6 +168,7 @@ if(VELOX_BUILD_TESTING OR VELOX_BUILD_TEST_UTILS)
   set(VELOX_ENABLE_PARSE ON)
 endif()
 
+set(CMAKE_POSITION_INDEPENDENT_CODE OFF)
 if(${VELOX_ENABLE_EXAMPLES})
   set(VELOX_ENABLE_EXPRESSION ON)
 endif()
@@ -566,4 +568,7 @@ if("${TREAT_WARNINGS_AS_ERRORS}")
 endif()
 
 add_subdirectory(third_party)
+set(CMAKE_POSITION_INDEPENDENT_CODE ON)
+set(CMAKE_VERBOSE_MAKEFILE ON)
+set(BUILD_SHARED_LIBS ON)
 add_subdirectory(velox)
diff --git a/velox/common/process/CMakeLists.txt b/velox/common/process/CMakeLists.txt
index c36468582fb4..912ce1da2785 100644
--- a/velox/common/process/CMakeLists.txt
+++ b/velox/common/process/CMakeLists.txt
@@ -12,14 +12,21 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-add_library(velox_process ProcessBase.cpp Profiler.cpp StackTrace.cpp
+add_library(velox_process ProcessBase.cpp StackTrace.cpp
                           ThreadDebugInfo.cpp TraceContext.cpp TraceHistory.cpp)
 
 target_link_libraries(
   velox_process
-  PUBLIC velox_file velox_flag_definitions Folly::folly
+  PUBLIC velox_flag_definitions Folly::folly
   PRIVATE fmt::fmt gflags::gflags glog::glog)
 
+add_library(velox_profiler Profiler.cpp)
+
+target_link_libraries(
+  velox_profiler
+  PUBLIC velox_file velox_flag_definitions Folly::folly
+  PRIVATE gflags::gflags glog::glog)
+
 if(${VELOX_BUILD_TESTING})
   add_subdirectory(tests)
 endif()
diff --git a/velox/common/process/tests/CMakeLists.txt b/velox/common/process/tests/CMakeLists.txt
index 6797697a1905..aeeb10847bdb 100644
--- a/velox/common/process/tests/CMakeLists.txt
+++ b/velox/common/process/tests/CMakeLists.txt
@@ -17,5 +17,5 @@ add_executable(velox_process_test ProfilerTest.cpp ThreadLocalRegistryTest.cpp
 
 add_test(velox_process_test velox_process_test)
 
-target_link_libraries(velox_process_test PRIVATE velox_process fmt::fmt gtest
+target_link_libraries(velox_process_test PRIVATE velox_process velox_profiler fmt::fmt gtest
                                                  velox_time gtest_main)
diff --git a/velox/dwio/common/CMakeLists.txt b/velox/dwio/common/CMakeLists.txt
index 9b6574d6ec10..61ee981a45a7 100644
--- a/velox/dwio/common/CMakeLists.txt
+++ b/velox/dwio/common/CMakeLists.txt
@@ -66,6 +66,7 @@ target_include_directories(velox_dwio_common PRIVATE ${Protobuf_INCLUDE_DIRS})
 
 target_link_libraries(
   velox_dwio_common
+  velox_exec
   velox_buffer
   velox_caching
   velox_common_io
@@ -75,6 +76,7 @@ target_link_libraries(
   velox_exception
   velox_expression
   velox_memory
+  ${Protobuf_LIBRARIES}
   Boost::regex
   Folly::folly
   glog::glog)
diff --git a/velox/exec/tests/utils/CMakeLists.txt b/velox/exec/tests/utils/CMakeLists.txt
index c4f539f522e7..76dd2d578ef6 100644
--- a/velox/exec/tests/utils/CMakeLists.txt
+++ b/velox/exec/tests/utils/CMakeLists.txt
@@ -34,6 +34,7 @@ add_library(
 target_link_libraries(
   velox_exec_test_lib
   velox_vector_test_lib
+  velox_vector_fuzzer
   velox_temp_path
   velox_core
   velox_exception