From 786b291d9c6b784c7ce6ceef0e38a4ec76ea14db Mon Sep 17 00:00:00 2001
From: Nicky <nicky.dasmijn@gmail.com>
Date: Wed, 6 Apr 2022 16:32:52 +0200
Subject: [PATCH] Move CMake files to modernized cmake syntax, step 1. Change
 projects to cmake targetsto get rid of havig to hardcore include directories
 and link libraries in consumer projects.

---
 indra/cmake/00-Common.cmake                   |  25 +-
 indra/cmake/APR.cmake                         |  51 ++--
 indra/cmake/Atmosphere.cmake                  |   5 -
 indra/cmake/Audio.cmake                       |  33 +--
 indra/cmake/Boost.cmake                       | 103 +++-----
 indra/cmake/CEFPlugin.cmake                   |  13 +-
 indra/cmake/CMakeLists.txt                    |  17 +-
 indra/cmake/CURL.cmake                        |  14 +-
 indra/cmake/EXPAT.cmake                       |  12 +-
 indra/cmake/FMODSTUDIO.cmake                  |  26 +-
 indra/cmake/FreeType.cmake                    |  10 +-
 indra/cmake/GLOD.cmake                        |  11 +-
 indra/cmake/Hunspell.cmake                    |  14 +-
 indra/cmake/JPEG.cmake                        |  15 +-
 indra/cmake/JsonCpp.cmake                     |  17 +-
 indra/cmake/LLAddBuildTest.cmake              |  38 +--
 indra/cmake/LLAppearance.cmake                |  12 -
 indra/cmake/LLAudio.cmake                     |   7 -
 indra/cmake/LLCharacter.cmake                 |   7 -
 indra/cmake/LLCommon.cmake                    |  35 +--
 indra/cmake/LLCoreHttp.cmake                  |  14 +-
 indra/cmake/LLCrashLogger.cmake               |   7 -
 indra/cmake/LLFileSystem.cmake                |   7 -
 indra/cmake/LLImage.cmake                     |   9 +-
 indra/cmake/LLImageJ2COJ.cmake                |   5 -
 indra/cmake/LLInventory.cmake                 |   7 -
 indra/cmake/LLKDU.cmake                       |  18 +-
 indra/cmake/LLLogin.cmake                     |   7 -
 indra/cmake/LLMessage.cmake                   |  13 -
 indra/cmake/LLPhysicsExtensions.cmake         |  16 +-
 indra/cmake/LLPlugin.cmake                    |  14 --
 indra/cmake/LLPrimitive.cmake                 |  66 +++--
 indra/cmake/LLRender.cmake                    |  20 --
 indra/cmake/LLUI.cmake                        |   7 -
 indra/cmake/LLWindow.cmake                    |  12 -
 indra/cmake/LLXML.cmake                       |  14 --
 indra/cmake/LibVLCPlugin.cmake                |  17 +-
 indra/cmake/MediaPluginBase.cmake             |   8 -
 indra/cmake/NDOF.cmake                        |  14 +-
 indra/cmake/NGHTTP2.cmake                     |  16 +-
 indra/cmake/NVAPI.cmake                       |   3 +-
 indra/cmake/OPENAL.cmake                      |  12 +-
 indra/cmake/OpenJPEG.cmake                    |  18 +-
 indra/cmake/OpenSSL.cmake                     |  21 +-
 indra/cmake/PNG.cmake                         |  26 +-
 indra/cmake/Prebuilt.cmake                    |  11 +
 indra/cmake/URIPARSER.cmake                   |  29 +--
 indra/cmake/XmlRpcEpi.cmake                   |  17 +-
 indra/cmake/ZLIBNG.cmake                      |  33 +--
 indra/cmake/bugsplat.cmake                    |  10 +-
 indra/llappearance/CMakeLists.txt             |  64 ++---
 indra/llaudio/CMakeLists.txt                  |  48 ++--
 indra/llcharacter/CMakeLists.txt              |  29 +--
 indra/llcommon/CMakeLists.txt                 |  37 +--
 indra/llcommon/stringize.h                    |   2 +-
 indra/llcorehttp/CMakeLists.txt               |  53 ++--
 indra/llcrashlogger/CMakeLists.txt            |  19 +-
 indra/llfilesystem/CMakeLists.txt             |  11 +-
 indra/llimage/CMakeLists.txt                  |  30 +--
 indra/llimagej2coj/CMakeLists.txt             |  13 +-
 indra/llinventory/CMakeLists.txt              |  16 +-
 indra/llkdu/CMakeLists.txt                    |  18 +-
 indra/llmath/CMakeLists.txt                   |  13 +-
 indra/llmessage/CMakeLists.txt                |  92 ++-----
 indra/llplugin/CMakeLists.txt                 |  22 +-
 indra/llplugin/slplugin/CMakeLists.txt        |  19 +-
 indra/llprimitive/CMakeLists.txt              |  42 +---
 indra/llrender/CMakeLists.txt                 |  56 ++---
 indra/llui/CMakeLists.txt                     |  59 ++---
 indra/llwindow/CMakeLists.txt                 |  38 +--
 indra/llxml/CMakeLists.txt                    |  32 +--
 indra/media_plugins/base/CMakeLists.txt       |  20 +-
 indra/media_plugins/cef/CMakeLists.txt        |  30 +--
 indra/media_plugins/example/CMakeLists.txt    |  35 +--
 .../media_plugins/gstreamer010/CMakeLists.txt |  30 +--
 indra/media_plugins/libvlc/CMakeLists.txt     |  43 +---
 indra/newview/CMakeLists.txt                  | 238 ++++++------------
 indra/test/CMakeLists.txt                     |  38 +--
 indra/viewer_components/login/CMakeLists.txt  |  31 +--
 79 files changed, 626 insertions(+), 1488 deletions(-)
 delete mode 100644 indra/cmake/Atmosphere.cmake
 delete mode 100644 indra/cmake/LLCharacter.cmake
 delete mode 100644 indra/cmake/LLCrashLogger.cmake
 delete mode 100644 indra/cmake/LLFileSystem.cmake
 delete mode 100644 indra/cmake/LLImageJ2COJ.cmake
 delete mode 100644 indra/cmake/LLInventory.cmake
 delete mode 100644 indra/cmake/LLLogin.cmake
 delete mode 100644 indra/cmake/LLMessage.cmake
 delete mode 100644 indra/cmake/LLPlugin.cmake
 delete mode 100644 indra/cmake/LLRender.cmake
 delete mode 100644 indra/cmake/LLUI.cmake
 delete mode 100644 indra/cmake/LLXML.cmake
 delete mode 100644 indra/cmake/MediaPluginBase.cmake

diff --git a/indra/cmake/00-Common.cmake b/indra/cmake/00-Common.cmake
index 0ab7fa24561..45c81b1b30a 100644
--- a/indra/cmake/00-Common.cmake
+++ b/indra/cmake/00-Common.cmake
@@ -70,12 +70,6 @@ if (WINDOWS)
   if( ADDRESS_SIZE EQUAL 32 )
     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /p:PreferredToolArchitecture=x64")  
   endif()
-  set(CMAKE_CXX_FLAGS_RELWITHDEBINFO 
-      "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /Zo"
-      CACHE STRING "C++ compiler release-with-debug options" FORCE)
-  set(CMAKE_CXX_FLAGS_RELEASE
-      "${CMAKE_CXX_FLAGS_RELEASE} ${LL_CXX_FLAGS} /Zo"
-      CACHE STRING "C++ compiler release options" FORCE)
   # zlib has assembly-language object files incompatible with SAFESEH
   set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /LARGEADDRESSAWARE /SAFESEH:NO /NODEFAULTLIB:LIBCMT /IGNORE:4099")
 
@@ -87,15 +81,16 @@ if (WINDOWS)
 #      /DDOM_DYNAMIC            # For shared library colladadom
       )
   add_compile_options(
-      /GS
-      /TP
-      /W3
-      /c
-      /Zc:forScope
-      /nologo
-      /Oy-
-#      /arch:SSE2
-      /fp:fast
+
+          /Zo
+          /GS
+          /TP
+          /W3
+          /c
+          /Zc:forScope
+          /nologo
+          /Oy-
+          /fp:fast
       )
 
   # Nicky: x64 implies SSE2
diff --git a/indra/cmake/APR.cmake b/indra/cmake/APR.cmake
index 9b64bc6160c..5a7c504af8f 100644
--- a/indra/cmake/APR.cmake
+++ b/indra/cmake/APR.cmake
@@ -1,11 +1,11 @@
 include(Linking)
 include(Prebuilt)
 
-set(APR_FIND_QUIETLY ON)
-set(APR_FIND_REQUIRED ON)
+if( TARGET apr::apr )
+  return()
+endif()
 
-set(APRUTIL_FIND_QUIETLY ON)
-set(APRUTIL_FIND_REQUIRED ON)
+create_target( apr::apr)
 
 if (USESYSTEMLIBS)
   include(FindAPR)
@@ -17,18 +17,11 @@ else (USESYSTEMLIBS)
     else (LLCOMMON_LINK_SHARED)
       set(APR_selector "")
     endif (LLCOMMON_LINK_SHARED)
-    set(APR_LIBRARIES 
-      debug ${ARCH_PREBUILT_DIRS_DEBUG}/${APR_selector}apr-1.lib
-      optimized ${ARCH_PREBUILT_DIRS_RELEASE}/${APR_selector}apr-1.lib
-      )
-    set(APRICONV_LIBRARIES 
-      debug ${ARCH_PREBUILT_DIRS_DEBUG}/${APR_selector}apriconv-1.lib
-      optimized ${ARCH_PREBUILT_DIRS_RELEASE}/${APR_selector}apriconv-1.lib
-      )
-    set(APRUTIL_LIBRARIES 
-      debug ${ARCH_PREBUILT_DIRS_DEBUG}/${APR_selector}aprutil-1.lib ${APRICONV_LIBRARIES}
-      optimized ${ARCH_PREBUILT_DIRS_RELEASE}/${APR_selector}aprutil-1.lib ${APRICONV_LIBRARIES}
-      )
+    set_target_libraries( apr::apr
+            ${ARCH_PREBUILT_DIRS_RELEASE}/${APR_selector}apr-1.lib
+            ${ARCH_PREBUILT_DIRS_RELEASE}/${APR_selector}apriconv-1.lib
+            ${ARCH_PREBUILT_DIRS_RELEASE}/${APR_selector}aprutil-1.lib
+            )
   elseif (DARWIN)
     if (LLCOMMON_LINK_SHARED)
       set(APR_selector     "0.dylib")
@@ -37,18 +30,20 @@ else (USESYSTEMLIBS)
       set(APR_selector     "a")
       set(APRUTIL_selector "a")
     endif (LLCOMMON_LINK_SHARED)
-    set(APR_LIBRARIES libapr-1.${APR_selector})
-    set(APRUTIL_LIBRARIES libaprutil-1.${APRUTIL_selector})
-    set(APRICONV_LIBRARIES iconv)
+
+    set_target_libraries( apr::apr
+            libapr-1.${APR_selector}
+            libaprutil-1.${APRUTIL_selector}
+            iconv
+            )
   else (WINDOWS)
-    set(APR_LIBRARIES apr-1)
-    set(APRUTIL_LIBRARIES aprutil-1)
-    set(APRICONV_LIBRARIES iconv)
+    set_target_libraries( apr::apr
+            apr-1
+            aprutil-1
+            iconv
+            uuid
+            rt
+            )
   endif (WINDOWS)
-  set(APR_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include/apr-1)
-
-  if (LINUX)
-      list(APPEND APRUTIL_LIBRARIES uuid)
-      list(APPEND APRUTIL_LIBRARIES rt)
-  endif (LINUX)
+  set_target_include_dirs(  apr::apr  ${LIBS_PREBUILT_DIR}/include/apr-1 )
 endif (USESYSTEMLIBS)
diff --git a/indra/cmake/Atmosphere.cmake b/indra/cmake/Atmosphere.cmake
deleted file mode 100644
index 9c14df2a11c..00000000000
--- a/indra/cmake/Atmosphere.cmake
+++ /dev/null
@@ -1,5 +0,0 @@
-# -*- cmake -*-
-include(Prebuilt)
-use_prebuilt_binary(libatmosphere)
-set(LIBATMOSPHERE_LIBRARIES atmosphere)
-set(LIBATMOSPHERE_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include/atmosphere)
diff --git a/indra/cmake/Audio.cmake b/indra/cmake/Audio.cmake
index f95439245aa..bc11e62de5d 100644
--- a/indra/cmake/Audio.cmake
+++ b/indra/cmake/Audio.cmake
@@ -1,6 +1,11 @@
 # -*- cmake -*-
 include(Prebuilt)
 
+if(TARGET vorbis::vorbis)
+  return()
+endif()
+create_target(vorbis::vorbis)
+
 if (USESYSTEMLIBS)
   include(FindPkgConfig)
   pkg_check_modules(OGG REQUIRED ogg)
@@ -9,34 +14,12 @@ if (USESYSTEMLIBS)
   pkg_check_modules(VORBISFILE REQUIRED vorbisfile)
 else (USESYSTEMLIBS)
   use_prebuilt_binary(ogg_vorbis)
-  set(VORBIS_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include)
-  set(VORBISENC_INCLUDE_DIRS ${VORBIS_INCLUDE_DIRS})
-  set(VORBISFILE_INCLUDE_DIRS ${VORBIS_INCLUDE_DIRS})
+  set_target_include_dirs( vorbis::vorbis ${LIBS_PREBUILT_DIR}/include )
 
   if (WINDOWS)
-    set(OGG_LIBRARIES
-        optimized ogg_static
-        debug ogg_static_d)
-    set(VORBIS_LIBRARIES
-        optimized vorbis_static
-        debug vorbis_static_d)
-    set(VORBISENC_LIBRARIES
-        optimized vorbisenc_static
-        debug vorbisenc_static_d)
-    set(VORBISFILE_LIBRARIES
-        optimized vorbisfile_static
-        debug vorbisfile_static_d)
+    set_target_libraries(vorbis::vorbis ogg_static vorbis_static vorbisenc_static vorbisfile_static )
   else (WINDOWS)
-    set(OGG_LIBRARIES ogg)
-    set(VORBIS_LIBRARIES vorbis)
-    set(VORBISENC_LIBRARIES vorbisenc)
-    set(VORBISFILE_LIBRARIES vorbisfile)
+    set_target_libraries(vorbis::vorbis ogg vorbis vorbisenc vorbisfile )
   endif (WINDOWS)
 endif (USESYSTEMLIBS)
 
-link_directories(
-    ${VORBIS_LIBRARY_DIRS}
-    ${VORBISENC_LIBRARY_DIRS}
-    ${VORBISFILE_LIBRARY_DIRS}
-    ${OGG_LIBRARY_DIRS}
-    )
diff --git a/indra/cmake/Boost.cmake b/indra/cmake/Boost.cmake
index 0a61e33532d..00bfedfb71b 100644
--- a/indra/cmake/Boost.cmake
+++ b/indra/cmake/Boost.cmake
@@ -1,6 +1,11 @@
 # -*- cmake -*-
 include(Prebuilt)
 
+if( TARGET boost::boost )
+  return()
+endif()
+create_target( boost::boost )
+
 set(Boost_FIND_QUIETLY ON)
 set(Boost_FIND_REQUIRED ON)
 
@@ -24,80 +29,34 @@ else (USESYSTEMLIBS)
   set(addrsfx "-x${ADDRESS_SIZE}")
 
   if (WINDOWS)
-    set(BOOST_CONTEXT_LIBRARY
-        optimized libboost_context-mt${addrsfx}
-        debug libboost_context-mt${addrsfx}-gd)
-    set(BOOST_FIBER_LIBRARY
-        optimized libboost_fiber-mt${addrsfx}
-        debug libboost_fiber-mt${addrsfx}-gd)
-    set(BOOST_FILESYSTEM_LIBRARY
-        optimized libboost_filesystem-mt${addrsfx}
-        debug libboost_filesystem-mt${addrsfx}-gd)
-    set(BOOST_PROGRAM_OPTIONS_LIBRARY
-        optimized libboost_program_options-mt${addrsfx}
-        debug libboost_program_options-mt${addrsfx}-gd)
-    set(BOOST_REGEX_LIBRARY
-        optimized libboost_regex-mt${addrsfx}
-        debug libboost_regex-mt${addrsfx}-gd)
-    set(BOOST_SIGNALS_LIBRARY
-        optimized libboost_signals-mt${addrsfx}
-        debug libboost_signals-mt${addrsfx}-gd)
-    set(BOOST_SYSTEM_LIBRARY
-        optimized libboost_system-mt${addrsfx}
-        debug libboost_system-mt${addrsfx}-gd)
-    set(BOOST_THREAD_LIBRARY
-        optimized libboost_thread-mt${addrsfx}
-        debug libboost_thread-mt${addrsfx}-gd)
+      set_target_libraries( boost::boost
+              libboost_context-mt${addrsfx}
+              libboost_fiber-mt${addrsfx}
+              libboost_filesystem-mt${addrsfx}
+              libboost_program_options-mt${addrsfx}
+              libboost_regex-mt${addrsfx}
+              libboost_system-mt${addrsfx}
+              libboost_thread-mt${addrsfx})
   elseif (LINUX)
-    set(BOOST_CONTEXT_LIBRARY
-        optimized boost_context-mt${addrsfx}
-        debug boost_context-mt${addrsfx}-d)
-    set(BOOST_FIBER_LIBRARY
-        optimized boost_fiber-mt${addrsfx}
-        debug boost_fiber-mt${addrsfx}-d)
-    set(BOOST_FILESYSTEM_LIBRARY
-        optimized boost_filesystem-mt${addrsfx}
-        debug boost_filesystem-mt${addrsfx}-d)
-    set(BOOST_PROGRAM_OPTIONS_LIBRARY
-        optimized boost_program_options-mt${addrsfx}
-        debug boost_program_options-mt${addrsfx}-d)
-    set(BOOST_REGEX_LIBRARY
-        optimized boost_regex-mt${addrsfx}
-        debug boost_regex-mt${addrsfx}-d)
-    set(BOOST_SIGNALS_LIBRARY
-        optimized boost_signals-mt${addrsfx}
-        debug boost_signals-mt${addrsfx}-d)
-    set(BOOST_SYSTEM_LIBRARY
-        optimized boost_system-mt${addrsfx}
-        debug boost_system-mt${addrsfx}-d)
-    set(BOOST_THREAD_LIBRARY
-        optimized boost_thread-mt${addrsfx}
-        debug boost_thread-mt${addrsfx}-d)
+    set_target_libraries( boost::boost
+            boost_context-mt${addrsfx}
+            boost_fiber-mt${addrsfx}
+            boost_filesystem-mt${addrsfx}
+            boost_program_options-mt${addrsfx}
+            boost_regex-mt${addrsfx}
+            boost_signals-mt${addrsfx}
+            boost_system-mt${addrsfx}
+            boost_thread-mt${addrsfx})
   elseif (DARWIN)
-    set(BOOST_CONTEXT_LIBRARY
-        optimized boost_context-mt${addrsfx}
-        debug boost_context-mt${addrsfx}-d)
-    set(BOOST_FIBER_LIBRARY
-        optimized boost_fiber-mt${addrsfx}
-        debug boost_fiber-mt${addrsfx}-d)
-    set(BOOST_FILESYSTEM_LIBRARY
-        optimized boost_filesystem-mt${addrsfx}
-        debug boost_filesystem-mt${addrsfx}-d)
-    set(BOOST_PROGRAM_OPTIONS_LIBRARY
-        optimized boost_program_options-mt${addrsfx}
-        debug boost_program_options-mt${addrsfx}-d)
-    set(BOOST_REGEX_LIBRARY
-        optimized boost_regex-mt${addrsfx}
-        debug boost_regex-mt${addrsfx}-d)
-    set(BOOST_SIGNALS_LIBRARY
-        optimized boost_signals-mt${addrsfx}
-        debug boost_signals-mt${addrsfx}-d)
-    set(BOOST_SYSTEM_LIBRARY
-        optimized boost_system-mt${addrsfx}
-        debug boost_system-mt${addrsfx}-d)
-    set(BOOST_THREAD_LIBRARY
-        optimized boost_thread-mt${addrsfx}
-        debug boost_thread-mt${addrsfx}-d)
+    set_target_libraries( boost::boost
+            boost_context-mt${addrsfx}
+            boost_fiber-mt${addrsfx}
+            boost_filesystem-mt${addrsfx}
+            boost_program_options-mt${addrsfx}
+            boost_regex-mt${addrsfx}
+            boost_signals-mt${addrsfx}
+            boost_system-mt${addrsfx}
+            boost_thread-mt${addrsfx})
   endif (WINDOWS)
 endif (USESYSTEMLIBS)
 
diff --git a/indra/cmake/CEFPlugin.cmake b/indra/cmake/CEFPlugin.cmake
index 7d8bfb1b0f9..706730b226c 100644
--- a/indra/cmake/CEFPlugin.cmake
+++ b/indra/cmake/CEFPlugin.cmake
@@ -2,18 +2,21 @@
 include(Linking)
 include(Prebuilt)
 
+if(TARGET cef::cef)
+    return()
+endif()
+create_target( cef::cef )
+
 if (USESYSTEMLIBS)
     set(CEFPLUGIN OFF CACHE BOOL
         "CEFPLUGIN support for the llplugin/llmedia test apps.")
 else (USESYSTEMLIBS)
     use_prebuilt_binary(dullahan)
-    set(CEFPLUGIN ON CACHE BOOL
-        "CEFPLUGIN support for the llplugin/llmedia test apps.")
-        set(CEF_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include/cef)
+    set_target_include_dirs( cef::cef ${LIBS_PREBUILT_DIR}/include/cef)
 endif (USESYSTEMLIBS)
 
 if (WINDOWS)
-    set(CEF_PLUGIN_LIBRARIES
+    set_target_libraries( cef::cef
         libcef.lib
         libcef_dll_wrapper.lib
         dullahan.lib
@@ -29,7 +32,7 @@ elseif (DARWIN)
         message(FATAL_ERROR "CEF not found")
     endif()
 
-    set(CEF_PLUGIN_LIBRARIES
+    set_target_libraries( cef::cef
         ${ARCH_PREBUILT_DIRS_RELEASE}/libcef_dll_wrapper.a
         ${ARCH_PREBUILT_DIRS_RELEASE}/libdullahan.a
         ${APPKIT_LIBRARY}
diff --git a/indra/cmake/CMakeLists.txt b/indra/cmake/CMakeLists.txt
index 6778e90ca8e..812e35390fb 100644
--- a/indra/cmake/CMakeLists.txt
+++ b/indra/cmake/CMakeLists.txt
@@ -39,37 +39,22 @@ set(cmake_SOURCE_FILES
     GLEXT.cmake
     GLH.cmake
     GLOD.cmake
-##  GStreamer010Plugin.cmake
     GoogleMock.cmake
     Havok.cmake
     Hunspell.cmake
-    JPEG.cmake
-    JsonCpp.cmake
+        JsonCpp.cmake
     LLAddBuildTest.cmake
     LLAppearance.cmake
     LLAudio.cmake
-    LLCharacter.cmake
     LLCommon.cmake
-    LLCrashLogger.cmake
     LLImage.cmake
-    LLImageJ2COJ.cmake
-    LLInventory.cmake
     LLKDU.cmake
-    LLLogin.cmake
-    LLMath.cmake
-    LLMessage.cmake
     LLPhysicsExtensions.cmake
-    LLPlugin.cmake
     LLPrimitive.cmake
-    LLRender.cmake
     LLSharedLibs.cmake
     LLTestCommand.cmake
-    LLUI.cmake
-    LLFileSystem.cmake
     LLWindow.cmake
-    LLXML.cmake
     Linking.cmake
-    MediaPluginBase.cmake
     NDOF.cmake
     OPENAL.cmake
     OpenGL.cmake
diff --git a/indra/cmake/CURL.cmake b/indra/cmake/CURL.cmake
index 04afae594dd..d91eb2e2fd7 100644
--- a/indra/cmake/CURL.cmake
+++ b/indra/cmake/CURL.cmake
@@ -1,19 +1,19 @@
 # -*- cmake -*-
 include(Prebuilt)
 
-set(CURL_FIND_QUIETLY ON)
-set(CURL_FIND_REQUIRED ON)
+if( TARGET libcurl::libcurl )
+  return()
+endif()
+create_target(libcurl::libcurl)
 
 if (USESYSTEMLIBS)
   include(FindCURL)
 else (USESYSTEMLIBS)
   use_prebuilt_binary(curl)
   if (WINDOWS)
-    set(CURL_LIBRARIES 
-    debug libcurld.lib
-    optimized libcurl.lib)
+    set_target_libraries(libcurl::libcurl libcurl.lib)
   else (WINDOWS)
-    set(CURL_LIBRARIES libcurl.a)
+    set_target_libraries(libcurl::libcurl libcurl.a)
   endif (WINDOWS)
-  set(CURL_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include)
+  set_target_include_dirs( libcurl::libcurl ${LIBS_PREBUILT_DIR}/include)
 endif (USESYSTEMLIBS)
diff --git a/indra/cmake/EXPAT.cmake b/indra/cmake/EXPAT.cmake
index cddc71b2275..6f6503ca4d7 100644
--- a/indra/cmake/EXPAT.cmake
+++ b/indra/cmake/EXPAT.cmake
@@ -1,23 +1,25 @@
 # -*- cmake -*-
 include(Prebuilt)
 
-set(EXPAT_FIND_QUIETLY ON)
-set(EXPAT_FIND_REQUIRED ON)
+if( TARGET expat::expat )
+    return()
+endif()
+create_target( expat::expat INTERFACE IMPORTED )
 
 if (USESYSTEMLIBS)
   include(FindEXPAT)
 else (USESYSTEMLIBS)
     use_prebuilt_binary(expat)
     if (WINDOWS)
-        set(EXPAT_LIBRARIES libexpatMT)
+        set_target_libraries( expat::expat libexpatMT )
         set(EXPAT_COPY libexpatMT.dll)
     else (WINDOWS)
-        set(EXPAT_LIBRARIES expat)
+        set_target_libraries( expat::expat expat )
         if (DARWIN)
             set(EXPAT_COPY libexpat.1.dylib libexpat.dylib)
         else ()
             set(EXPAT_COPY libexpat.so.1 libexpat.so)
         endif ()
     endif (WINDOWS)
-    set(EXPAT_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include)
+    set_target_include_dirs( expat::expat ${LIBS_PREBUILT_DIR}/include )
 endif (USESYSTEMLIBS)
diff --git a/indra/cmake/FMODSTUDIO.cmake b/indra/cmake/FMODSTUDIO.cmake
index 8840354ac6c..e8699cdecdb 100644
--- a/indra/cmake/FMODSTUDIO.cmake
+++ b/indra/cmake/FMODSTUDIO.cmake
@@ -8,9 +8,17 @@ if (INSTALL_PROPRIETARY)
 endif (INSTALL_PROPRIETARY)
 
 if (FMODSTUDIO)
+  if( TARGET fmodstudio::fmodstudio )
+    return()
+  endif()
+  create_target( fmodstudio::fmodstudio )
+  set_target_include_dirs( openal::openal "${LIBS_PREBUILT_DIR}/include/AL")
+
   if (FMODSTUDIO_LIBRARY AND FMODSTUDIO_INCLUDE_DIR)
     # If the path have been specified in the arguments, use that
-    set(FMODSTUDIO_LIBRARIES ${FMODSTUDIO_LIBRARY})
+
+    set_target_libraries(fmodstudio::fmodstudio ${FMODSTUDIO_LIBRARY})
+    set_target_include_dirs(fmodstudio::fmodstudio ${FMODSTUDIO_INCLUDE_DIR})
   else (FMODSTUDIO_LIBRARY AND FMODSTUDIO_INCLUDE_DIR)
     # If not, we're going to try to get the package listed in autobuild.xml
     # Note: if you're not using INSTALL_PROPRIETARY, the package URL should be local (file:/// URL)
@@ -18,21 +26,15 @@ if (FMODSTUDIO)
     include(Prebuilt)
     use_prebuilt_binary(fmodstudio)
     if (WINDOWS)
-      set(FMODSTUDIO_LIBRARY
-          debug fmodL_vc
-          optimized fmod_vc)
+      set_target_libraries( fmodstudio::fmodstudio  fmod_vc)
     elseif (DARWIN)
       #despite files being called libfmod.dylib, we are searching for fmod
-      set(FMODSTUDIO_LIBRARY
-          debug fmodL
-          optimized fmod)
+      set_target_libraries( fmodstudio::fmodstudio  fmod)
     elseif (LINUX)
-      set(FMODSTUDIO_LIBRARY
-          debug fmodL
-          optimized fmod)
+      set_target_libraries( fmodstudio::fmodstudio  fmod)
     endif (WINDOWS)
-    set(FMODSTUDIO_LIBRARIES ${FMODSTUDIO_LIBRARY})
-    set(FMODSTUDIO_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include/fmodstudio)
+
+    set_target_include_dirs(fmodstudio::fmodstudio ${LIBS_PREBUILT_DIR}/include/fmodstudio)
   endif (FMODSTUDIO_LIBRARY AND FMODSTUDIO_INCLUDE_DIR)
 endif (FMODSTUDIO)
 
diff --git a/indra/cmake/FreeType.cmake b/indra/cmake/FreeType.cmake
index a36485f6d0f..66f4ae01407 100644
--- a/indra/cmake/FreeType.cmake
+++ b/indra/cmake/FreeType.cmake
@@ -1,14 +1,18 @@
 # -*- cmake -*-
 include(Prebuilt)
 
+if( TARGET freetype::freetype )
+  return()
+endif()
+create_target( freetype::freetype)
+
 if (USESYSTEMLIBS)
   include(FindPkgConfig)
 
   pkg_check_modules(FREETYPE REQUIRED freetype2)
 else (USESYSTEMLIBS)
   use_prebuilt_binary(freetype)
-  set(FREETYPE_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/freetype2/)
-  set(FREETYPE_LIBRARIES freetype)
+  set_target_include_dirs( freetype::freetype  ${LIBS_PREBUILT_DIR}/include/freetype2/)
+  set_target_libraries( freetype::freetype freetype )
 endif (USESYSTEMLIBS)
 
-link_directories(${FREETYPE_LIBRARY_DIRS})
diff --git a/indra/cmake/GLOD.cmake b/indra/cmake/GLOD.cmake
index 6f42b44ab8f..8d41db4ea3c 100644
--- a/indra/cmake/GLOD.cmake
+++ b/indra/cmake/GLOD.cmake
@@ -1,11 +1,18 @@
 # -*- cmake -*-
 include(Prebuilt)
 
+if( TARGET glod::glod )
+  return()
+endif()
+create_target( glod::glod )
+
 if (NOT USESYSTEMLIBS)
   use_prebuilt_binary(glod)
 endif (NOT USESYSTEMLIBS)
 
+
+
 set(GLODLIB ON CACHE BOOL "Using GLOD library")
 
-set(GLOD_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include)
-set(GLOD_LIBRARIES GLOD)
+set_target_include_dirs( glod::glod ${LIBS_PREBUILT_DIR}/include)
+set_target_libraries( glod::glod GLOD )
diff --git a/indra/cmake/Hunspell.cmake b/indra/cmake/Hunspell.cmake
index 06227b3fe23..970b06b81f8 100644
--- a/indra/cmake/Hunspell.cmake
+++ b/indra/cmake/Hunspell.cmake
@@ -1,22 +1,24 @@
 # -*- cmake -*-
 include(Prebuilt)
 
-set(HUNSPELL_FIND_QUIETLY ON)
-set(HUNSPELL_FIND_REQUIRED ON)
+if( TARGET hunspell::hunspell )
+  return()
+endif()
+create_target( hunspell::hunspell )
 
 if (USESYSTEMLIBS)
   include(FindHUNSPELL)
 else (USESYSTEMLIBS)
   use_prebuilt_binary(libhunspell)
   if (WINDOWS)
-    set(HUNSPELL_LIBRARY libhunspell)
+    set_target_libraries( hunspell::hunspell libhunspell)
   elseif(DARWIN)
-    set(HUNSPELL_LIBRARY hunspell-1.3)
+    set_target_libraries( hunspell::hunspell hunspell-1.3)
   elseif(LINUX)
-    set(HUNSPELL_LIBRARY hunspell-1.3)
+    set_target_libraries( hunspell::hunspell hunspell-1.3)
   else()
     message(FATAL_ERROR "Invalid platform")
   endif()
-  set(HUNSPELL_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/hunspell)
+  set_target_include_dirs( hunspell::hunspell ${LIBS_PREBUILT_DIR}/include/hunspell)
   use_prebuilt_binary(dictionaries)
 endif (USESYSTEMLIBS)
diff --git a/indra/cmake/JPEG.cmake b/indra/cmake/JPEG.cmake
index d6da22aecc1..7245ca7b36e 100644
--- a/indra/cmake/JPEG.cmake
+++ b/indra/cmake/JPEG.cmake
@@ -2,19 +2,22 @@
 include(Prebuilt)
 
 include(Linking)
-set(JPEG_FIND_QUIETLY ON)
-set(JPEG_FIND_REQUIRED ON)
+
+if( TARGET jpeglib::jpeglib )
+  return()
+endif()
+create_target(jpeglib::jpeglib)
 
 if (USESYSTEMLIBS)
   include(FindJPEG)
 else (USESYSTEMLIBS)
   use_prebuilt_binary(jpeglib)
   if (LINUX)
-    set(JPEG_LIBRARIES jpeg)
+    set_target_libraries( jpeglib::jpeglib jpeg)
   elseif (DARWIN)
-    set(JPEG_LIBRARIES jpeg)
+    set_target_libraries( jpeglib::jpeglib jpeg)
   elseif (WINDOWS)
-    set(JPEG_LIBRARIES jpeglib)
+    set_target_libraries( jpeglib::jpeglib jpeglib)
   endif (LINUX)
-  set(JPEG_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include)
+  set_target_include_dirs( jpeglib::jpeglib ${LIBS_PREBUILT_DIR}/include)
 endif (USESYSTEMLIBS)
diff --git a/indra/cmake/JsonCpp.cmake b/indra/cmake/JsonCpp.cmake
index 079619adf86..14bfd32b6b9 100644
--- a/indra/cmake/JsonCpp.cmake
+++ b/indra/cmake/JsonCpp.cmake
@@ -1,22 +1,21 @@
 # -*- cmake -*-
 
 include(Prebuilt)
-
-set(JSONCPP_FIND_QUIETLY ON)
-set(JSONCPP_FIND_REQUIRED ON)
+if( TARGET jsoncpp::jsoncpp )
+  return()
+endif()
+create_target( jsoncpp::jsoncpp)
 
 if (USESYSTEMLIBS)
   include(FindJsonCpp)
 else (USESYSTEMLIBS)
   use_prebuilt_binary(jsoncpp)
   if (WINDOWS)
-    set(JSONCPP_LIBRARIES 
-      debug json_libmdd.lib
-      optimized json_libmd.lib)
+    set_target_libraries( jsoncpp::jsoncpp json_libmd.lib )
   elseif (DARWIN)
-    set(JSONCPP_LIBRARIES libjson_darwin_libmt.a)
+    set_target_libraries( jsoncpp::jsoncpp libjson_darwin_libmt.a )
   elseif (LINUX)
-    set(JSONCPP_LIBRARIES libjson_linux-gcc-4.1.3_libmt.a)
+    set_target_libraries( jsoncpp::jsoncpp libjson_linux-gcc-4.1.3_libmt.a )
   endif (WINDOWS)
-  set(JSONCPP_INCLUDE_DIR "${LIBS_PREBUILT_DIR}/include/jsoncpp" "${LIBS_PREBUILT_DIR}/include/json")
+  set_target_include_dirs( jsoncpp::jsoncpp ${LIBS_PREBUILT_DIR}/include/json)
 endif (USESYSTEMLIBS)
diff --git a/indra/cmake/LLAddBuildTest.cmake b/indra/cmake/LLAddBuildTest.cmake
index 4937c2a9d77..6860b1f316e 100644
--- a/indra/cmake/LLAddBuildTest.cmake
+++ b/indra/cmake/LLAddBuildTest.cmake
@@ -36,30 +36,29 @@ INCLUDE(GoogleMock)
     )
   SET(alltest_DEP_TARGETS
     # needed by the test harness itself
-    ${APRUTIL_LIBRARIES}
-    ${APR_LIBRARIES}
     llcommon
     )
+
+  SET(alltest_INCLUDE_DIRS
+          ${LIBS_OPEN_DIR}/test
+          ${GOOGLEMOCK_INCLUDE_DIRS}
+          )
+  SET(alltest_LIBRARIES
+          llcommon
+          ${GOOGLEMOCK_LIBRARIES}
+          ${PTHREAD_LIBRARY}
+          ${WINDOWS_LIBRARIES}
+          )
   IF(NOT "${project}" STREQUAL "llmath")
     # add llmath as a dep unless the tested module *is* llmath!
     LIST(APPEND alltest_DEP_TARGETS
-      llmath
-      )
+            llmath
+            )
+    LIST(APPEND alltest_LIBRARIES
+            llmath
+            )
   ENDIF(NOT "${project}" STREQUAL "llmath")
-  SET(alltest_INCLUDE_DIRS
-    ${LLMATH_INCLUDE_DIRS}
-    ${LLCOMMON_INCLUDE_DIRS}
-    ${LIBS_OPEN_DIR}/test
-    ${GOOGLEMOCK_INCLUDE_DIRS}
-    )
-  SET(alltest_LIBRARIES
-    ${BOOST_FIBER_LIBRARY}
-    ${BOOST_CONTEXT_LIBRARY}
-    ${BOOST_SYSTEM_LIBRARY}
-    ${GOOGLEMOCK_LIBRARIES}
-    ${PTHREAD_LIBRARY}
-    ${WINDOWS_LIBRARIES}
-    )
+
   # Headers, for convenience in targets.
   SET(alltest_HEADER_FILES
     ${CMAKE_SOURCE_DIR}/test/test.h
@@ -126,7 +125,8 @@ INCLUDE(GoogleMock)
       MESSAGE("LL_ADD_PROJECT_UNIT_TESTS ${name}_test_additional_LIBRARIES ${${name}_test_additional_LIBRARIES}")
     ENDIF(LL_TEST_VERBOSE)
     # Add to project
-    TARGET_LINK_LIBRARIES(PROJECT_${project}_TEST_${name} ${alltest_LIBRARIES} ${alltest_DEP_TARGETS} ${${name}_test_additional_PROJECTS} ${${name}_test_additional_LIBRARIES} )
+    TARGET_LINK_LIBRARIES(PROJECT_${project}_TEST_${name} ${alltest_LIBRARIES} ${${name}_test_additional_PROJECTS} ${${name}_test_additional_LIBRARIES} )
+    add_dependencies( PROJECT_${project}_TEST_${name} ${alltest_DEP_TARGETS})
     # Compile-time Definitions
     GET_OPT_SOURCE_FILE_PROPERTY(${name}_test_additional_CFLAGS ${source} LL_TEST_ADDITIONAL_CFLAGS)
     SET_TARGET_PROPERTIES(PROJECT_${project}_TEST_${name}
diff --git a/indra/cmake/LLAppearance.cmake b/indra/cmake/LLAppearance.cmake
index 675330ec72b..99399d349ab 100644
--- a/indra/cmake/LLAppearance.cmake
+++ b/indra/cmake/LLAppearance.cmake
@@ -2,26 +2,14 @@
 
 include(Variables)
 include(Boost)
-include(LLMessage)
 include(LLCoreHttp)
 
-set(LLAPPEARANCE_INCLUDE_DIRS
-    ${LIBS_OPEN_DIR}/llappearance
-    )
-
 if (BUILD_HEADLESS)
   set(LLAPPEARANCE_HEADLESS_LIBRARIES
     llappearanceheadless
     )
 endif (BUILD_HEADLESS)
 
-set(LLAPPEARANCE_LIBRARIES llappearance
-    llmessage
-    llcorehttp
-    ${BOOST_FIBER_LIBRARY}
-    ${BOOST_CONTEXT_LIBRARY}
-    ${BOOST_SYSTEM_LIBRARY}
-    )
 
 
 
diff --git a/indra/cmake/LLAudio.cmake b/indra/cmake/LLAudio.cmake
index 7c248dfc720..c842c69bfec 100644
--- a/indra/cmake/LLAudio.cmake
+++ b/indra/cmake/LLAudio.cmake
@@ -1,10 +1,3 @@
 # -*- cmake -*-
 
 include(Audio)
-
-set(LLAUDIO_INCLUDE_DIRS
-    ${LIBS_OPEN_DIR}/llaudio
-    )
-
-# be exhaustive here
-set(LLAUDIO_LIBRARIES llaudio ${VORBISFILE_LIBRARIES} ${VORBIS_LIBRARIES} ${VORBISENC_LIBRARIES} ${OGG_LIBRARIES} ${OPENAL_LIBRARIES})
diff --git a/indra/cmake/LLCharacter.cmake b/indra/cmake/LLCharacter.cmake
deleted file mode 100644
index 9b2f5c4956a..00000000000
--- a/indra/cmake/LLCharacter.cmake
+++ /dev/null
@@ -1,7 +0,0 @@
-# -*- cmake -*-
-
-set(LLCHARACTER_INCLUDE_DIRS
-    ${LIBS_OPEN_DIR}/llcharacter
-    )
-
-set(LLCHARACTER_LIBRARIES llcharacter)
diff --git a/indra/cmake/LLCommon.cmake b/indra/cmake/LLCommon.cmake
index 9c8740793ad..6d2468695f8 100644
--- a/indra/cmake/LLCommon.cmake
+++ b/indra/cmake/LLCommon.cmake
@@ -4,36 +4,5 @@ include(APR)
 include(Boost)
 include(EXPAT)
 include(ZLIBNG)
-
-set(LLCOMMON_INCLUDE_DIRS
-    ${LIBS_OPEN_DIR}/llcommon
-    ${APRUTIL_INCLUDE_DIR}
-    ${APR_INCLUDE_DIR}
-    )
-set(LLCOMMON_SYSTEM_INCLUDE_DIRS
-    ${Boost_INCLUDE_DIRS}
-    )
-
-if (LINUX)
-    # In order to support using ld.gold on linux, we need to explicitely
-    # specify all libraries that llcommon uses.
-    # llcommon uses `clock_gettime' which is provided by librt on linux.
-    set(LLCOMMON_LIBRARIES llcommon 
-        ${BOOST_FIBER_LIBRARY} 
-        ${BOOST_CONTEXT_LIBRARY} 
-        ${BOOST_THREAD_LIBRARY} 
-        ${BOOST_SYSTEM_LIBRARY} 
-        rt
-        )
-else (LINUX)
-    set(LLCOMMON_LIBRARIES llcommon
-        ${BOOST_FIBER_LIBRARY} 
-        ${BOOST_CONTEXT_LIBRARY} 
-        ${BOOST_THREAD_LIBRARY} 
-        ${BOOST_SYSTEM_LIBRARY} )
-endif (LINUX)
-
-set(LLCOMMON_LINK_SHARED OFF CACHE BOOL "Build the llcommon target as a static library.")
-if(LLCOMMON_LINK_SHARED)
-  add_definitions(-DLL_COMMON_LINK_SHARED=1)
-endif(LLCOMMON_LINK_SHARED)
+include(JsonCpp)
+include(XmlRpcEpi)
\ No newline at end of file
diff --git a/indra/cmake/LLCoreHttp.cmake b/indra/cmake/LLCoreHttp.cmake
index 613453ab5d5..a166c960437 100644
--- a/indra/cmake/LLCoreHttp.cmake
+++ b/indra/cmake/LLCoreHttp.cmake
@@ -2,16 +2,4 @@
 
 include(CURL)
 include(OpenSSL)
-include(Boost)
-
-set(LLCOREHTTP_INCLUDE_DIRS
-    ${LIBS_OPEN_DIR}/llcorehttp
-    ${CURL_INCLUDE_DIRS}
-    ${OPENSSL_INCLUDE_DIRS}
-    ${BOOST_INCLUDE_DIRS}
-    )
-
-set(LLCOREHTTP_LIBRARIES llcorehttp
-    ${BOOST_FIBER_LIBRARY}
-    ${BOOST_CONTEXT_LIBRARY}
-    ${BOOST_SYSTEM_LIBRARY})
+include(NGHTTP2)
\ No newline at end of file
diff --git a/indra/cmake/LLCrashLogger.cmake b/indra/cmake/LLCrashLogger.cmake
deleted file mode 100644
index f2cb83eb8bb..00000000000
--- a/indra/cmake/LLCrashLogger.cmake
+++ /dev/null
@@ -1,7 +0,0 @@
-# -*- cmake -*-
-
-set(LLCRASHLOGGER_INCLUDE_DIRS
-    ${LIBS_OPEN_DIR}/llcrashlogger
-    )
-
-set(LLCRASHLOGGER_LIBRARIES llcrashlogger)
diff --git a/indra/cmake/LLFileSystem.cmake b/indra/cmake/LLFileSystem.cmake
deleted file mode 100644
index 2e6c42c30c2..00000000000
--- a/indra/cmake/LLFileSystem.cmake
+++ /dev/null
@@ -1,7 +0,0 @@
-# -*- cmake -*-
-
-set(LLFILESYSTEM_INCLUDE_DIRS
-    ${LIBS_OPEN_DIR}/llfilesystem
-    )
-
-set(LLFILESYSTEM_LIBRARIES llfilesystem)
diff --git a/indra/cmake/LLImage.cmake b/indra/cmake/LLImage.cmake
index ec3da890811..8e0b44dfe49 100644
--- a/indra/cmake/LLImage.cmake
+++ b/indra/cmake/LLImage.cmake
@@ -1,11 +1,4 @@
 # -*- cmake -*-
 
-include(JPEG)
+#include(JPEG)
 include(PNG)
-
-set(LLIMAGE_INCLUDE_DIRS
-    ${LIBS_OPEN_DIR}/llimage
-    ${JPEG_INCLUDE_DIRS}
-    )
-
-set(LLIMAGE_LIBRARIES llimage)
diff --git a/indra/cmake/LLImageJ2COJ.cmake b/indra/cmake/LLImageJ2COJ.cmake
deleted file mode 100644
index 1bcf205f2db..00000000000
--- a/indra/cmake/LLImageJ2COJ.cmake
+++ /dev/null
@@ -1,5 +0,0 @@
-# -*- cmake -*-
-
-include(OpenJPEG)
-
-set(LLIMAGEJ2COJ_LIBRARIES llimagej2coj)
diff --git a/indra/cmake/LLInventory.cmake b/indra/cmake/LLInventory.cmake
deleted file mode 100644
index c3dc077a2ba..00000000000
--- a/indra/cmake/LLInventory.cmake
+++ /dev/null
@@ -1,7 +0,0 @@
-# -*- cmake -*-
-
-set(LLINVENTORY_INCLUDE_DIRS
-    ${LIBS_OPEN_DIR}/llinventory
-    )
-
-set(LLINVENTORY_LIBRARIES llinventory)
diff --git a/indra/cmake/LLKDU.cmake b/indra/cmake/LLKDU.cmake
index e478b01f84a..25762ab0660 100644
--- a/indra/cmake/LLKDU.cmake
+++ b/indra/cmake/LLKDU.cmake
@@ -7,15 +7,23 @@ if (INSTALL_PROPRIETARY)
   set(USE_KDU ON CACHE BOOL "Use Kakadu library.")
 endif (INSTALL_PROPRIETARY)
 
+if( TARGET kdu::kdu )
+  return()
+endif()
+create_target( kdu::kdu )
+
 if (USE_KDU)
   include(Prebuilt)
   use_prebuilt_binary(kdu)
   if (WINDOWS)
-    set(KDU_LIBRARY kdu.lib)
+    set_target_libraries( kdu::kdu kdu.lib)
   else (WINDOWS)
-    set(KDU_LIBRARY libkdu.a)
+    set_target_libraries( kdu::kdu libkdu.a)
   endif (WINDOWS)
-  set(KDU_INCLUDE_DIR ${AUTOBUILD_INSTALL_DIR}/include/kdu)
-  set(LLKDU_INCLUDE_DIRS ${LIBS_OPEN_DIR}/llkdu)
-  set(LLKDU_LIBRARIES llkdu)
+      set_target_libraries( kdu::kdu kdu.lib)
+
+  set_target_include_dirs( kdu::kdu
+          ${AUTOBUILD_INSTALL_DIR}/include/kdu
+          ${LIBS_OPEN_DIR}/llkdu
+          )
 endif (USE_KDU)
diff --git a/indra/cmake/LLLogin.cmake b/indra/cmake/LLLogin.cmake
deleted file mode 100644
index 47d171876a0..00000000000
--- a/indra/cmake/LLLogin.cmake
+++ /dev/null
@@ -1,7 +0,0 @@
-# -*- cmake -*-
-
-set(LLLOGIN_INCLUDE_DIRS
-    ${LIBS_OPEN_DIR}/viewer_components/login
-    )
-
-set(LLLOGIN_LIBRARIES lllogin)
diff --git a/indra/cmake/LLMessage.cmake b/indra/cmake/LLMessage.cmake
deleted file mode 100644
index 7be53ec0ec3..00000000000
--- a/indra/cmake/LLMessage.cmake
+++ /dev/null
@@ -1,13 +0,0 @@
-# -*- cmake -*-
-
-include(CURL)
-include(OpenSSL)
-include(XmlRpcEpi)
-
-set(LLMESSAGE_INCLUDE_DIRS
-    ${LIBS_OPEN_DIR}/llmessage
-    ${CURL_INCLUDE_DIRS}
-    ${OPENSSL_INCLUDE_DIRS}
-    )
-
-set(LLMESSAGE_LIBRARIES llmessage)
diff --git a/indra/cmake/LLPhysicsExtensions.cmake b/indra/cmake/LLPhysicsExtensions.cmake
index e6afee762ec..c46a04129ac 100644
--- a/indra/cmake/LLPhysicsExtensions.cmake
+++ b/indra/cmake/LLPhysicsExtensions.cmake
@@ -10,6 +10,11 @@ if (INSTALL_PROPRIETARY)
    set(HAVOK ON CACHE BOOL "Use Havok physics library")
 endif (INSTALL_PROPRIETARY)
 
+if(TARGET llphysicsextensions )
+   return()
+endif()
+create_target(llphysicsextensions)
+
 
 # Note that the use_prebuilt_binary macros below do not in fact include binaries;
 # the llphysicsextensions_* packages are source only and are built here.
@@ -19,17 +24,14 @@ if (HAVOK)
    include(Havok)
    use_prebuilt_binary(llphysicsextensions_source)
    set(LLPHYSICSEXTENSIONS_SRC_DIR ${LIBS_PREBUILT_DIR}/llphysicsextensions/src)
-   set(LLPHYSICSEXTENSIONS_LIBRARIES    llphysicsextensions)
-
+   set_target_libraries( llphysicsextensions llphysicsextensions)
 elseif (HAVOK_TPV)
    use_prebuilt_binary(llphysicsextensions_tpv)
-   set(LLPHYSICSEXTENSIONS_LIBRARIES    llphysicsextensions_tpv)
-
+   set_target_libraries( llphysicsextensions llphysicsextensions_tpv)
 else (HAVOK)
    use_prebuilt_binary(llphysicsextensions_stub)
    set(LLPHYSICSEXTENSIONS_SRC_DIR ${LIBS_PREBUILT_DIR}/llphysicsextensions/stub)
-   set(LLPHYSICSEXTENSIONS_LIBRARIES    llphysicsextensionsstub)
-
+   set_target_libraries( llphysicsextensions llphysicsextensionsstub)
 endif (HAVOK)
 
-set(LLPHYSICSEXTENSIONS_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/llphysicsextensions)
+set_target_include_dirs(llphysicsextensions ${LIBS_PREBUILT_DIR}/include/llphysicsextensions)
diff --git a/indra/cmake/LLPlugin.cmake b/indra/cmake/LLPlugin.cmake
deleted file mode 100644
index 399cb332dd4..00000000000
--- a/indra/cmake/LLPlugin.cmake
+++ /dev/null
@@ -1,14 +0,0 @@
-# -*- cmake -*-
-
-
-set(LLPLUGIN_INCLUDE_DIRS
-    ${LIBS_OPEN_DIR}/llplugin
-    )
-
-if (LINUX)
-    # In order to support using ld.gold on linux, we need to explicitely
-    # specify all libraries that llplugin uses.
-    set(LLPLUGIN_LIBRARIES llplugin pthread)
-else (LINUX)
-    set(LLPLUGIN_LIBRARIES llplugin)
-endif (LINUX)
diff --git a/indra/cmake/LLPrimitive.cmake b/indra/cmake/LLPrimitive.cmake
index 4e349512156..799afc77d1d 100644
--- a/indra/cmake/LLPrimitive.cmake
+++ b/indra/cmake/LLPrimitive.cmake
@@ -4,49 +4,41 @@
 include(Prebuilt)
 include(Boost)
 
+if( TARGET colladadom::colladadom )
+    return()
+endif()
+
 use_prebuilt_binary(colladadom)
 use_prebuilt_binary(minizip-ng) # needed for colladadom
 use_prebuilt_binary(pcre)
 use_prebuilt_binary(libxml2)
 
-set(LLPRIMITIVE_INCLUDE_DIRS
-    ${LIBS_OPEN_DIR}/llprimitive
-    )
+create_target( pcre::pcre )
+set_target_libraries( pcre::pcre pcrecpp pcre )
+
+create_target( minizip-ng::minizip-ng )
 if (WINDOWS)
-    set(LLPRIMITIVE_LIBRARIES 
-        debug llprimitive
-        optimized llprimitive
-        debug libcollada14dom23-sd
-        optimized libcollada14dom23-s
-        libxml2_a
-        debug pcrecppd
-        optimized pcrecpp
-        debug pcred
-        optimized pcre
-        debug libminizip
-        optimized libminizip
-        ${BOOST_SYSTEM_LIBRARIES}
+    set_target_libraries( minizip-ng::minizip-ng libminizip )
+else()
+    set_target_libraries( minizip-ng::minizip-ng minizip )
+endif()
+
+create_target( libxml::libxml )
+if (WINDOWS)
+    set_target_libraries( libxml::libxml libxml2_a)
+else()
+    set_target_libraries( libxml::libxml xml2)
+endif()
+
+create_target( colladadom::colladadom )
+set_target_include_dirs( colladadom::colladadom
+        ${LIBS_PREBUILT_DIR}/include/collada
+        ${LIBS_PREBUILT_DIR}/include/collada/1.4
         )
+if (WINDOWS)
+    set_target_libraries(colladadom::colladadom libcollada14dom23-s libxml::libxml minizip-ng::minizip-ng )
 elseif (DARWIN)
-    set(LLPRIMITIVE_LIBRARIES 
-        llprimitive
-        debug collada14dom-d
-        optimized collada14dom
-        minizip           # for collada libminizip.a
-        xml2
-        pcrecpp
-        pcre
-        iconv           # Required by libxml2
-        )
+    set_target_libraries(colladadom::colladadom collada14dom libxml::libxml minizip-ng::minizip-ng)
 elseif (LINUX)
-    set(LLPRIMITIVE_LIBRARIES 
-        llprimitive
-        debug collada14dom-d
-        optimized collada14dom
-        minizip
-        xml2
-        pcrecpp
-        pcre
-        )
-endif (WINDOWS)
-
+    set_target_libraries(colladadom::colladadom collada14dom libxml::libxml minizip-ng::minizip-ng)
+endif()
\ No newline at end of file
diff --git a/indra/cmake/LLRender.cmake b/indra/cmake/LLRender.cmake
deleted file mode 100644
index 868922451f0..00000000000
--- a/indra/cmake/LLRender.cmake
+++ /dev/null
@@ -1,20 +0,0 @@
-# -*- cmake -*-
-
-include(Variables)
-include(FreeType)
-include(GLH)
-
-set(LLRENDER_INCLUDE_DIRS
-    ${LIBS_OPEN_DIR}/llrender
-    ${GLH_INCLUDE_DIR}
-    )
-
-if (BUILD_HEADLESS)
-  set(LLRENDER_HEADLESS_LIBRARIES
-      llrenderheadless
-      )
-endif (BUILD_HEADLESS)
-set(LLRENDER_LIBRARIES
-    llrender
-    )
-
diff --git a/indra/cmake/LLUI.cmake b/indra/cmake/LLUI.cmake
deleted file mode 100644
index 34de57108b7..00000000000
--- a/indra/cmake/LLUI.cmake
+++ /dev/null
@@ -1,7 +0,0 @@
-# -*- cmake -*-
-
-set(LLUI_INCLUDE_DIRS
-    ${LIBS_OPEN_DIR}/llui
-    )
-
-set(LLUI_LIBRARIES llui)
diff --git a/indra/cmake/LLWindow.cmake b/indra/cmake/LLWindow.cmake
index 80af7ff2ab2..ac14ead0dea 100644
--- a/indra/cmake/LLWindow.cmake
+++ b/indra/cmake/LLWindow.cmake
@@ -26,17 +26,5 @@ if (SDL_FOUND)
   include_directories(${SDL_INCLUDE_DIR})
 endif (SDL_FOUND)
 
-set(LLWINDOW_INCLUDE_DIRS
-    ${GLEXT_INCLUDE_DIR}
-    ${LIBS_OPEN_DIR}/llwindow
-    )
 
-if (BUILD_HEADLESS)
-  set(LLWINDOW_HEADLESS_LIBRARIES
-      llwindowheadless
-      )
-endif (BUILD_HEADLESS)
 
-  set(LLWINDOW_LIBRARIES
-      llwindow
-      )
diff --git a/indra/cmake/LLXML.cmake b/indra/cmake/LLXML.cmake
deleted file mode 100644
index b093c762975..00000000000
--- a/indra/cmake/LLXML.cmake
+++ /dev/null
@@ -1,14 +0,0 @@
-# -*- cmake -*-
-
-include(Boost)
-include(EXPAT)
-
-set(LLXML_INCLUDE_DIRS
-    ${LIBS_OPEN_DIR}/llxml
-    ${EXPAT_INCLUDE_DIRS}
-    )
-set(LLXML_SYSTEM_INCLUDE_DIRS
-    ${Boost_INCLUDE_DIRS}
-    )
-
-set(LLXML_LIBRARIES llxml)
diff --git a/indra/cmake/LibVLCPlugin.cmake b/indra/cmake/LibVLCPlugin.cmake
index df829b615aa..a7acd64d62a 100644
--- a/indra/cmake/LibVLCPlugin.cmake
+++ b/indra/cmake/LibVLCPlugin.cmake
@@ -2,6 +2,11 @@
 include(Linking)
 include(Prebuilt)
 
+if( TARGET libvlc::libvlc )
+    return()
+endif()
+create_target( libvlc::libvlc )
+
 if (USESYSTEMLIBS)
     set(LIBVLCPLUGIN OFF CACHE BOOL
         "LIBVLCPLUGIN support for the llplugin/llmedia test apps.")
@@ -13,18 +18,18 @@ else (USESYSTEMLIBS)
 endif (USESYSTEMLIBS)
 
 if (WINDOWS)
-    set(VLC_PLUGIN_LIBRARIES
-        libvlc.lib
-        libvlccore.lib
+    set_target_libraries( libvlc::libvlc
+            libvlc.lib
+            libvlccore.lib
     )
 elseif (DARWIN)
-    set(VLC_PLUGIN_LIBRARIES
-        libvlc.dylib
+    set_target_libraries( libvlc::libvlc
+``      libvlc.dylib
         libvlccore.dylib
     )
 elseif (LINUX)
     # Specify a full path to make sure we get a static link
-    set(VLC_PLUGIN_LIBRARIES
+    set_target_libraries( liblvc::libvlc
         ${LIBS_PREBUILT_DIR}/lib/libvlc.a
         ${LIBS_PREBUILT_DIR}/lib/libvlccore.a
     )
diff --git a/indra/cmake/MediaPluginBase.cmake b/indra/cmake/MediaPluginBase.cmake
deleted file mode 100644
index 2be035b6414..00000000000
--- a/indra/cmake/MediaPluginBase.cmake
+++ /dev/null
@@ -1,8 +0,0 @@
-# -*- cmake -*-
-
-
-set(MEDIA_PLUGIN_BASE_INCLUDE_DIRS
-    ${LIBS_OPEN_DIR}/media_plugins/base/
-    )
-
-set(MEDIA_PLUGIN_BASE_LIBRARIES media_plugin_base)
diff --git a/indra/cmake/NDOF.cmake b/indra/cmake/NDOF.cmake
index 388df16a526..f22e2246aa9 100644
--- a/indra/cmake/NDOF.cmake
+++ b/indra/cmake/NDOF.cmake
@@ -3,6 +3,11 @@ include(Prebuilt)
 
 set(NDOF ON CACHE BOOL "Use NDOF space navigator joystick library.")
 
+if ( TARGET ndof::ndof )
+  return()
+endif()
+create_target( ndof::ndof )
+
 if (NDOF)
   if (USESYSTEMLIBS)
     set(NDOF_FIND_REQUIRED ON)
@@ -15,22 +20,17 @@ if (NDOF)
     endif (WINDOWS OR DARWIN)
 
     if (WINDOWS)
-      set(NDOF_LIBRARY libndofdev)
+      set_target_libraries( ndof::ndof libndofdev)
     elseif (DARWIN OR LINUX)
-      set(NDOF_LIBRARY ndofdev)
+      set_target_libraries( ndof::ndof ndofdev)
     endif (WINDOWS)
-
-    set(NDOF_INCLUDE_DIR ${ARCH_PREBUILT_DIRS}/include/ndofdev)
     set(NDOF_FOUND 1)
   endif (USESYSTEMLIBS)
 endif (NDOF)
 
 if (NDOF_FOUND)
   add_definitions(-DLIB_NDOF=1)
-  include_directories(${NDOF_INCLUDE_DIR})
 else (NDOF_FOUND)
   message(STATUS "Building without N-DoF joystick support")
-  set(NDOF_INCLUDE_DIR "")
-  set(NDOF_LIBRARY "")
 endif (NDOF_FOUND)
 
diff --git a/indra/cmake/NGHTTP2.cmake b/indra/cmake/NGHTTP2.cmake
index df191ff3c13..5215af5dd9a 100644
--- a/indra/cmake/NGHTTP2.cmake
+++ b/indra/cmake/NGHTTP2.cmake
@@ -1,20 +1,20 @@
 include(Prebuilt)
 
-set(NGHTTP2_FIND_QUIETLY ON)
-set(NGHTTP2_FIND_REQUIRED ON)
+if( TARGET nghttp2::nghttp2 )
+  return()
+endif()
+create_target( nghttp2::nghttp2 )
 
 if (USESYSTEMLIBS)
   include(FindNGHTTP2)
 else (USESYSTEMLIBS)
   use_prebuilt_binary(nghttp2)
   if (WINDOWS)
-    set(NGHTTP2_LIBRARIES 
-      ${ARCH_PREBUILT_DIRS_RELEASE}/nghttp2.lib
-      )
+    set_target_libraries( nghttp2::nghttp2 ${ARCH_PREBUILT_DIRS_RELEASE}/nghttp2.lib)
   elseif (DARWIN)
-    set(NGHTTP2_LIBRARIES libnghttp2.dylib)
+    set_target_libraries( nghttp2::nghttp2 libnghttp2.dylib)
   else (WINDOWS)
-    set(NGHTTP2_LIBRARIES libnghttp2.a)
+    set_target_libraries( nghttp2::nghttp2 libnghttp2.a )
   endif (WINDOWS)
-  set(NGHTTP2_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include/nghttp2)
+  set_target_include_dirs( nghttp2::nghttp2 ${LIBS_PREBUILT_DIR}/include/nghttp2)
 endif (USESYSTEMLIBS)
diff --git a/indra/cmake/NVAPI.cmake b/indra/cmake/NVAPI.cmake
index 105f442a30f..1eea96784f7 100644
--- a/indra/cmake/NVAPI.cmake
+++ b/indra/cmake/NVAPI.cmake
@@ -5,8 +5,9 @@ set(NVAPI ON CACHE BOOL "Use NVAPI.")
 
 if (NVAPI)
   if (WINDOWS)
+    create_target( nvapi::nvapi )
+    set_target_libraries( nvapi::nvapi nvapi)
     use_prebuilt_binary(nvapi)
-    set(NVAPI_LIBRARY nvapi)
   else (WINDOWS)
     set(NVAPI_LIBRARY "")
   endif (WINDOWS)
diff --git a/indra/cmake/OPENAL.cmake b/indra/cmake/OPENAL.cmake
index 1bbfff6f985..ab2d258a12f 100644
--- a/indra/cmake/OPENAL.cmake
+++ b/indra/cmake/OPENAL.cmake
@@ -9,7 +9,12 @@ else (LINUX)
 endif (LINUX)
 
 if (OPENAL)
-  set(OPENAL_LIB_INCLUDE_DIRS "${LIBS_PREBUILT_DIR}/include/AL")
+  if( TARGET openal::openal )
+    return()
+  endif()
+  create_target( openal::openal )
+  set_target_include_dirs( openal::openal "${LIBS_PREBUILT_DIR}/include/AL")
+
   if (USESYSTEMLIBS)
     include(FindPkgConfig)
     include(FindOpenAL)
@@ -18,13 +23,14 @@ if (OPENAL)
   else (USESYSTEMLIBS)
     use_prebuilt_binary(openal)
   endif (USESYSTEMLIBS)
+
   if(WINDOWS)
-    set(OPENAL_LIBRARIES 
+    set_target_libraries( openal::openal
       OpenAL32
       alut
     )
   else()
-    set(OPENAL_LIBRARIES 
+    set_target_libraries( openal::openal
       openal
       alut
     )
diff --git a/indra/cmake/OpenJPEG.cmake b/indra/cmake/OpenJPEG.cmake
index bf0bde2ba7b..67292250bbf 100644
--- a/indra/cmake/OpenJPEG.cmake
+++ b/indra/cmake/OpenJPEG.cmake
@@ -1,22 +1,16 @@
 # -*- cmake -*-
 include(Prebuilt)
 
-set(OPENJPEG_FIND_QUIETLY ON)
-set(OPENJPEG_FIND_REQUIRED ON)
+if( TARGET openjpeg::openjpeg )
+  return()
+endif()
+create_target( openjpeg::openjpeg )
 
 if (USESYSTEMLIBS)
   include(FindOpenJPEG)
 else (USESYSTEMLIBS)
   use_prebuilt_binary(openjpeg)
   
-  if(WINDOWS)
-    # Windows has differently named release and debug openjpeg(d) libs.
-    set(OPENJPEG_LIBRARIES 
-        debug openjpegd
-        optimized openjpeg)
-  else(WINDOWS)
-    set(OPENJPEG_LIBRARIES openjpeg)
-  endif(WINDOWS)
-  
-    set(OPENJPEG_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include/openjpeg)
+  set_target_libraries(openjpeg::openjpeg openjpeg )
+  set_target_include_dirs( openjpeg::openjpeg ${LIBS_PREBUILT_DIR}/include/openjpeg)
 endif (USESYSTEMLIBS)
diff --git a/indra/cmake/OpenSSL.cmake b/indra/cmake/OpenSSL.cmake
index 32400f5e4e5..80b419c36e3 100644
--- a/indra/cmake/OpenSSL.cmake
+++ b/indra/cmake/OpenSSL.cmake
@@ -1,23 +1,22 @@
 # -*- cmake -*-
 include(Prebuilt)
 
-set(OpenSSL_FIND_QUIETLY ON)
-set(OpenSSL_FIND_REQUIRED ON)
+if( TARGET openssl::openssl )
+  return()
+endif()
+create_target(openssl::openssl)
 
 if (USESYSTEMLIBS)
   include(FindOpenSSL)
 else (USESYSTEMLIBS)
   use_prebuilt_binary(openssl)
   if (WINDOWS)
-    set(OPENSSL_LIBRARIES libssl libcrypto)
-  else (WINDOWS)
-    set(OPENSSL_LIBRARIES ssl crypto)
+    set_target_libraries(openssl::openssl libssl libcrypto)
+  elseif (LINUX)
+    set_target_libraries(openssl::openssl ssl crypto dl)
+  else()
+    set_target_libraries(openssl::openssl ssl crypto)
   endif (WINDOWS)
-  set(OPENSSL_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include)
+  set_target_include_dirs(openssl::openssl ${LIBS_PREBUILT_DIR}/include)
 endif (USESYSTEMLIBS)
 
-if (LINUX)
-  set(CRYPTO_LIBRARIES crypto dl)
-elseif (DARWIN)
-  set(CRYPTO_LIBRARIES crypto)
-endif (LINUX)
diff --git a/indra/cmake/PNG.cmake b/indra/cmake/PNG.cmake
index 248a875a19b..54b2438425b 100644
--- a/indra/cmake/PNG.cmake
+++ b/indra/cmake/PNG.cmake
@@ -1,6 +1,11 @@
 # -*- cmake -*-
 include(Prebuilt)
 
+if( TARGET libpng::libpng )
+  return()
+endif()
+create_target(libpng::libpng)
+
 set(PNG_FIND_QUIETLY ON)
 set(PNG_FIND_REQUIRED ON)
 
@@ -9,26 +14,9 @@ if (USESYSTEMLIBS)
 else (USESYSTEMLIBS)
   use_prebuilt_binary(libpng)
   if (WINDOWS)
-    set(PNG_LIBRARIES libpng16)
-    set(PNG_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/libpng16)
-  elseif(DARWIN)
-    set(PNG_LIBRARIES png16)
-    set(PNG_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/libpng16)
+    set_target_libraries(libpng::libpng libpng16)
   else()
-    #
-    # When we have updated static libraries in competition with older
-    # shared libraries and we want the former to win, we need to do some
-    # extra work.  The *_PRELOAD_ARCHIVES settings are invoked early
-    # and will pull in the entire archive to the binary giving it 
-    # priority in symbol resolution.  Beware of cmake moving the
-    # achive load itself to another place on the link command line.  If
-    # that happens, you can try something like -Wl,-lpng16 here to hide
-    # the archive.  Also be aware that the linker will not tolerate a
-    # second whole-archive load of the archive.  See viewer's
-    # CMakeLists.txt for more information.
-    #
-    set(PNG_PRELOAD_ARCHIVES -Wl,--whole-archive png16 -Wl,--no-whole-archive)
     set(PNG_LIBRARIES png16)
-    set(PNG_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/libpng16)
   endif()
+  set_target_include_dirs( libpng::libpng ${LIBS_PREBUILT_DIR}/include/libpng16)
 endif (USESYSTEMLIBS)
diff --git a/indra/cmake/Prebuilt.cmake b/indra/cmake/Prebuilt.cmake
index 33a6d769167..9125f2f80ff 100644
--- a/indra/cmake/Prebuilt.cmake
+++ b/indra/cmake/Prebuilt.cmake
@@ -61,4 +61,15 @@ macro (use_prebuilt_binary _binary)
   endif (NOT USESYSTEMLIBS_${_binary})
 endmacro (use_prebuilt_binary _binary)
 
+function( create_target name )
+  add_library( ${name} INTERFACE IMPORTED )
+endfunction()
+function( set_target_libraries target )
+  set_property( TARGET ${target} PROPERTY INTERFACE_LINK_LIBRARIES ${ARGN} )
+endfunction()
+function( set_target_include_dirs target)
+  set_property( TARGET ${target} PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${ARGN} )
+endfunction()
+
+
 endif(NOT DEFINED ${CMAKE_CURRENT_LIST_FILE}_INCLUDED)
diff --git a/indra/cmake/URIPARSER.cmake b/indra/cmake/URIPARSER.cmake
index ecc5b74ef10..55b38fca28e 100644
--- a/indra/cmake/URIPARSER.cmake
+++ b/indra/cmake/URIPARSER.cmake
@@ -1,7 +1,9 @@
 # -*- cmake -*-
 
-set(URIPARSER_FIND_QUIETLY ON)
-set(URIPARSER_FIND_REQUIRED ON)
+if( TARGET uriparser::uriparser )
+  return()
+endif()
+create_target( uriparser::uriparser )
 
 include(Prebuilt)
 
@@ -10,26 +12,11 @@ if (USESYSTEMLIBS)
 else (USESYSTEMLIBS)
   use_prebuilt_binary(uriparser)
   if (WINDOWS)
-    set(URIPARSER_LIBRARIES
-      debug uriparserd
-      optimized uriparser)
+    set_target_libraries( uriparser::uriparser uriparser)
   elseif (LINUX)
-    #
-    # When we have updated static libraries in competition with older
-    # shared libraries and we want the former to win, we need to do some
-    # extra work.  The *_PRELOAD_ARCHIVES settings are invoked early
-    # and will pull in the entire archive to the binary giving it.
-    # priority in symbol resolution.  Beware of cmake moving the
-    # achive load itself to another place on the link command line.  If
-    # that happens, you can try something like -Wl,-luriparser here to hide
-    # the archive.  Also be aware that the linker will not tolerate a
-    # second whole-archive load of the archive.  See viewer's
-    # CMakeLists.txt for more information.
-    #
-    set(URIPARSER_PRELOAD_ARCHIVES -Wl,--whole-archive uriparser -Wl,--no-whole-archive)
-    set(URIPARSER_LIBRARIES uriparser)
+    set_target_libraries( uriparser::uriparser uriparser)
   elseif (DARWIN)
-    set(URIPARSER_LIBRARIES liburiparser.dylib)
+    set_target_libraries( uriparser::uriparser liburiparser.dylib)
   endif (WINDOWS)
-  set(URIPARSER_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/uriparser)
+  set_target_include_dirs( uriparser::uriparser ${LIBS_PREBUILT_DIR}/include/uriparser)
 endif (USESYSTEMLIBS)
diff --git a/indra/cmake/XmlRpcEpi.cmake b/indra/cmake/XmlRpcEpi.cmake
index 8c3790ea89f..75b94acc50f 100644
--- a/indra/cmake/XmlRpcEpi.cmake
+++ b/indra/cmake/XmlRpcEpi.cmake
@@ -1,20 +1,15 @@
 # -*- cmake -*-
 include(Prebuilt)
 
-set(XMLRPCEPI_FIND_QUIETLY ON)
-set(XMLRPCEPI_FIND_REQUIRED ON)
+if( TARGET xmlrpc-epi::xmlrpc-epi )
+    return()
+endif()
+create_target( xmlrpc-epi::xmlrpc-epi )
 
 if (USESYSTEMLIBS)
   include(FindXmlRpcEpi)
 else (USESYSTEMLIBS)
     use_prebuilt_binary(xmlrpc-epi)
-    if (WINDOWS)
-        set(XMLRPCEPI_LIBRARIES
-            debug xmlrpc-epid
-            optimized xmlrpc-epi
-        )
-    else (WINDOWS)
-        set(XMLRPCEPI_LIBRARIES xmlrpc-epi)
-    endif (WINDOWS)
-    set(XMLRPCEPI_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include)
+    set_target_libraries(xmlrpc-epi::xmlrpc-epi xmlrpc-epi )
+    set_target_include_dirs( xmlrpc-epi::xmlrpc-epi ${LIBS_PREBUILT_DIR}/include)
 endif (USESYSTEMLIBS)
diff --git a/indra/cmake/ZLIBNG.cmake b/indra/cmake/ZLIBNG.cmake
index 1f46a23d92c..5aaca606643 100644
--- a/indra/cmake/ZLIBNG.cmake
+++ b/indra/cmake/ZLIBNG.cmake
@@ -1,35 +1,20 @@
 # -*- cmake -*-
 
-set(ZLIBNG_FIND_QUIETLY ON)
-set(ZLIBNG_FIND_REQUIRED ON)
-
 include(Prebuilt)
 
+if( TARGET zlib-ng::zlib-ng )
+  return()
+endif()
+create_target(zlib-ng::zlib-ng)
+
 if (USESYSTEMLIBS)
   include(FindZLIBNG)
 else (USESYSTEMLIBS)
   use_prebuilt_binary(zlib-ng)
   if (WINDOWS)
-    set(ZLIBNG_LIBRARIES 
-      debug zlib
-      optimized zlib)
-  elseif (LINUX)
-    #
-    # When we have updated static libraries in competition with older
-    # shared libraries and we want the former to win, we need to do some
-    # extra work.  The *_PRELOAD_ARCHIVES settings are invoked early
-    # and will pull in the entire archive to the binary giving it 
-    # priority in symbol resolution.  Beware of cmake moving the
-    # achive load itself to another place on the link command line.  If
-    # that happens, you can try something like -Wl,-lz here to hide
-    # the archive.  Also be aware that the linker will not tolerate a
-    # second whole-archive load of the archive.  See viewer's
-    # CMakeLists.txt for more information.
-    #
-    set(ZLIBNG_PRELOAD_ARCHIVES -Wl,--whole-archive z -Wl,--no-whole-archive)
-    set(ZLIBNG_LIBRARIES z)
-  elseif (DARWIN)
-    set(ZLIBNG_LIBRARIES z)
+    set_target_libraries( zlib-ng::zlib-ng zlib )
+  else()
+    set_target_libraries( zlib-ng::zlib-ng z )
   endif (WINDOWS)
-  set(ZLIBNG_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/zlib-ng)
+  set_target_include_dirs( zlib-ng::zlib-ng ${LIBS_PREBUILT_DIR}/include/zlib-ng)
 endif (USESYSTEMLIBS)
diff --git a/indra/cmake/bugsplat.cmake b/indra/cmake/bugsplat.cmake
index 4edc4c59cdb..ded109f9f13 100644
--- a/indra/cmake/bugsplat.cmake
+++ b/indra/cmake/bugsplat.cmake
@@ -10,28 +10,30 @@ else (INSTALL_PROPRIETARY)
 endif (INSTALL_PROPRIETARY)
 
 if (USE_BUGSPLAT)
+    create_target(bugsplat::bugsplat)
     if (NOT USESYSTEMLIBS)
         include(Prebuilt)
         use_prebuilt_binary(bugsplat)
         if (WINDOWS)
-            set(BUGSPLAT_LIBRARIES 
+            set_target_libraries( bugsplat::bugsplat
                 ${ARCH_PREBUILT_DIRS_RELEASE}/bugsplat.lib
                 )
         elseif (DARWIN)
             find_library(BUGSPLAT_LIBRARIES BugsplatMac REQUIRED
                 NO_DEFAULT_PATH PATHS "${ARCH_PREBUILT_DIRS_RELEASE}")
+            set_target_libraries( bugsplat::bugsplat
+                    ${BUGSPLAT_LIBRARIES}
+                    )
         else (WINDOWS)
             message(FATAL_ERROR "BugSplat is not supported; add -DUSE_BUGSPLAT=OFF")
         endif (WINDOWS)
     else (NOT USESYSTEMLIBS)
-        set(BUGSPLAT_FIND_QUIETLY ON)
-        set(BUGSPLAT_FIND_REQUIRED ON)
         include(FindBUGSPLAT)
     endif (NOT USESYSTEMLIBS)
 
     set(BUGSPLAT_DB "" CACHE STRING "BugSplat crash database name")
 
-    set(BUGSPLAT_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include/bugsplat)
+    set_target_include_dirs( bugsplat::bugsplat ${LIBS_PREBUILT_DIR}/include/bugsplat)
     set(BUGSPLAT_DEFINE "LL_BUGSPLAT")
 endif (USE_BUGSPLAT)
 
diff --git a/indra/llappearance/CMakeLists.txt b/indra/llappearance/CMakeLists.txt
index 268849ad74b..321c1e17984 100644
--- a/indra/llappearance/CMakeLists.txt
+++ b/indra/llappearance/CMakeLists.txt
@@ -4,30 +4,11 @@ project(llappearance)
 
 include(00-Common)
 include(LLCommon)
-include(LLCharacter)
 include(LLImage)
-include(LLInventory)
-include(LLMath)
-include(LLMessage)
 include(LLCoreHttp)
-include(LLRender)
-include(LLFileSystem)
 include(LLWindow)
-include(LLXML)
 include(Linking)
 
-include_directories(
-    ${LLCOMMON_INCLUDE_DIRS}
-    ${LLCHARACTER_INCLUDE_DIRS}
-    ${LLIMAGE_INCLUDE_DIRS}
-    ${LLINVENTORY_INCLUDE_DIRS}
-    ${LLMATH_INCLUDE_DIRS}
-    ${LLRENDER_INCLUDE_DIRS}
-    ${LLFILESYSTEM_INCLUDE_DIRS}
-    ${LLWINDOW_INCLUDE_DIRS}
-    ${LLXML_INCLUDE_DIRS}
-    )
-
 set(llappearance_SOURCE_FILES
     llavatarappearance.cpp
     llavatarjoint.cpp
@@ -79,33 +60,32 @@ list(APPEND llappearance_SOURCE_FILES ${llappearance_HEADER_FILES})
 add_library (llappearance ${llappearance_SOURCE_FILES})
 
 target_link_libraries(llappearance
-    ${LLCHARACTER_LIBRARIES}
-    ${LLINVENTORY_LIBRARIES}
-    ${LLIMAGE_LIBRARIES}
-    ${LLRENDER_LIBRARIES}
-    ${LLFILESYSTEM_LIBRARIES}
-    ${LLMATH_LIBRARIES}
-    ${LLXML_LIBRARIES}
-    ${LLMATH_LIBRARIES}
-    ${LLMESSAGE_LIBRARIES}
-    ${LLCOREHTTP_LIBRARIES}
-    ${LLCOMMON_LIBRARIES}
+        llcharacter
+        llinventory
+        llimage
+        llrender
+        llfilesystem
+        llmath
+        llxml
+        llmessage
+        llcorehttp
+        llcommon
     )
+set_target_include_dirs( llappearance ${CMAKE_CURRENT_SOURCE_DIR})
 
 if (BUILD_HEADLESS)
   add_library (llappearanceheadless ${llappearance_SOURCE_FILES})
-  
+  set_target_include_dirs( llappearanceheadless ${CMAKE_CURRENT_SOURCE_DIR})
+
   target_link_libraries(llappearanceheadless
-      ${LLCHARACTER_LIBRARIES}
-      ${LLINVENTORY_LIBRARIES}
-      ${LLIMAGE_LIBRARIES}
-      ${LLRENDERHEADLESS_LIBRARIES}
-      ${LLFILESYSTEM_LIBRARIES}
-      ${LLMATH_LIBRARIES}
-      ${LLXML_LIBRARIES}
-      ${LLMATH_LIBRARIES}
-      ${LLMESSAGE_LIBRARIES}
-      ${LLCOREHTTP_LIBRARIES}
-      ${LLCOMMON_LIBRARIES}
+          llcharacter
+          llinventory
+          llimage
+          llfilesystem
+          llmath
+          llxml
+          llmessage
+          llcorehttp
+          llcommon
       )
 endif (BUILD_HEADLESS)
diff --git a/indra/llaudio/CMakeLists.txt b/indra/llaudio/CMakeLists.txt
index 92a5cfe22fc..16576ddbadd 100644
--- a/indra/llaudio/CMakeLists.txt
+++ b/indra/llaudio/CMakeLists.txt
@@ -7,23 +7,6 @@ include(LLAudio)
 include(FMODSTUDIO)
 include(OPENAL)
 include(LLCommon)
-include(LLMath)
-include(LLMessage)
-include(LLFileSystem)
-
-include_directories(
-    ${LLAUDIO_INCLUDE_DIRS}
-    ${LLCOMMON_INCLUDE_DIRS}
-    ${LLMATH_INCLUDE_DIRS}
-    ${LLMESSAGE_INCLUDE_DIRS}
-    ${LLFILESYSTEM_INCLUDE_DIRS}
-    ${OGG_INCLUDE_DIRS}
-    ${VORBISENC_INCLUDE_DIRS}
-    ${VORBISFILE_INCLUDE_DIRS}
-    ${VORBIS_INCLUDE_DIRS}
-    ${OPENAL_LIB_INCLUDE_DIRS}
-    ${FREEAULT_LIB_INCLUDE_DIRS}
-    )
 
 set(llaudio_SOURCE_FILES
     llaudioengine.cpp
@@ -43,9 +26,6 @@ set(llaudio_HEADER_FILES
     )
 
 if (FMODSTUDIO)
-    include_directories(
-        ${FMODSTUDIO_INCLUDE_DIR}
-        )
     list(APPEND llaudio_SOURCE_FILES
          llaudioengine_fmodstudio.cpp
          lllistener_fmodstudio.cpp
@@ -60,10 +40,6 @@ if (FMODSTUDIO)
 endif (FMODSTUDIO)
 
 if (OPENAL)
-  include_directories(
-    ${OPENAL_LIBRARIES}
-    )
-
   list(APPEND llaudio_SOURCE_FILES
     llaudioengine_openal.cpp
     lllistener_openal.cpp
@@ -81,14 +57,18 @@ set_source_files_properties(${llaudio_HEADER_FILES}
 list(APPEND llaudio_SOURCE_FILES ${llaudio_HEADER_FILES})
 
 add_library (llaudio ${llaudio_SOURCE_FILES})
-target_link_libraries(
-    llaudio
-    ${LLCOMMON_LIBRARIES}
-    ${LLMATH_LIBRARIES}
-    ${LLMESSAGE_LIBRARIES}
-    ${LLFILESYSTEM_LIBRARIES}
-    ${VORBISENC_LIBRARIES}
-    ${VORBISFILE_LIBRARIES}
-    ${VORBIS_LIBRARIES}
-    ${OGG_LIBRARIES}
+set_target_include_dirs( llaudio ${CMAKE_CURRENT_SOURCE_DIR})
+target_link_libraries( llaudio
+        llcommon
+        llmath
+        llmessage
+        llfilesystem
+        vorbis::vorbis
     )
+
+if( TARGET openal::openal )
+    target_link_libraries( llaudio openal::openal )
+endif()
+if( TARGET fmodstudio::fmodstudio )
+    target_link_libraries( llaudio fmodstudio::fmodstudio )
+endif()
\ No newline at end of file
diff --git a/indra/llcharacter/CMakeLists.txt b/indra/llcharacter/CMakeLists.txt
index d90ffb55434..59e491748d8 100644
--- a/indra/llcharacter/CMakeLists.txt
+++ b/indra/llcharacter/CMakeLists.txt
@@ -4,22 +4,6 @@ project(llcharacter)
 
 include(00-Common)
 include(LLCommon)
-include(LLMath)
-include(LLMessage)
-include(LLFileSystem)
-include(LLXML)
-
-include_directories(
-    ${LLCOMMON_INCLUDE_DIRS}
-    ${LLMATH_INCLUDE_DIRS}
-    ${LLMESSAGE_INCLUDE_DIRS}
-    ${LLFILESYSTEM_INCLUDE_DIRS}
-    ${LLXML_INCLUDE_DIRS}
-    )
-include_directories(SYSTEM
-    ${LLCOMMON_SYSTEM_INCLUDE_DIRS}
-    ${LLXML_SYSTEM_INCLUDE_DIRS}
-    )
 
 set(llcharacter_SOURCE_FILES
     llanimationstates.cpp
@@ -79,12 +63,13 @@ set_source_files_properties(${llcharacter_HEADER_FILES}
 list(APPEND llcharacter_SOURCE_FILES ${llcharacter_HEADER_FILES})
 
 add_library (llcharacter ${llcharacter_SOURCE_FILES})
+set_target_include_dirs( llcharacter ${CMAKE_CURRENT_SOURCE_DIR})
 
 target_link_libraries(
-    llcharacter
-    ${LLCOMMON_LIBRARIES}
-    ${LLMATH_LIBRARIES}
-    ${LLMESSAGE_LIBRARIES}
-    ${LLFILESYSTEM_LIBRARIES}
-    ${LLXML_LIBRARIES}
+        llcharacter
+        llcommon
+        llmath
+        llmessage
+        llfilesystem
+        llxml
     )
diff --git a/indra/llcommon/CMakeLists.txt b/indra/llcommon/CMakeLists.txt
index 68378222d94..901686c815c 100644
--- a/indra/llcommon/CMakeLists.txt
+++ b/indra/llcommon/CMakeLists.txt
@@ -13,14 +13,6 @@ include(Copy3rdPartyLibs)
 include(ZLIBNG)
 include(URIPARSER)
 
-include_directories(
-    ${EXPAT_INCLUDE_DIRS}
-    ${LLCOMMON_INCLUDE_DIRS}
-    ${JSONCPP_INCLUDE_DIR}
-    ${ZLIBNG_INCLUDE_DIRS}
-    ${URIPARSER_INCLUDE_DIRS}
-    )
-
 # add_executable(lltreeiterators lltreeiterators.cpp)
 # 
 # target_link_libraries(lltreeiterators
@@ -286,22 +278,19 @@ else(LLCOMMON_LINK_SHARED)
 endif(LLCOMMON_LINK_SHARED)
 
 target_link_libraries(
-    llcommon
-    ${APRUTIL_LIBRARIES}
-    ${APR_LIBRARIES}
-    ${EXPAT_LIBRARIES}
-    ${JSONCPP_LIBRARIES}
-    ${ZLIBNG_LIBRARIES}
+        llcommon
+        apr::apr
+        expat::expat
+        jsoncpp::jsoncpp
+        zlib-ng::zlib-ng
     ${WINDOWS_LIBRARIES}
-    ${BOOST_FIBER_LIBRARY}
-    ${BOOST_CONTEXT_LIBRARY}
-    ${BOOST_PROGRAM_OPTIONS_LIBRARY}
-    ${BOOST_REGEX_LIBRARY}
-    ${BOOST_SYSTEM_LIBRARY}
+        boost::boost
     ${GOOGLE_PERFTOOLS_LIBRARIES}
-    ${URIPARSER_LIBRARIES}
+        uriparser::uriparser
     )
 
+set_target_include_dirs( llcommon ${CMAKE_CURRENT_SOURCE_DIR})
+
 if (DARWIN)
   include(CMakeFindFrameworks)
   find_library(CARBON_LIBRARY Carbon)
@@ -319,13 +308,9 @@ if (LL_TESTS)
 
   #set(TEST_DEBUG on)
   set(test_libs llcommon 
-      ${LLCOMMON_LIBRARIES} 
-      ${WINDOWS_LIBRARIES} 
+      ${WINDOWS_LIBRARIES}
       ${GOOGLEMOCK_LIBRARIES} 
-      ${BOOST_FIBER_LIBRARY} 
-      ${BOOST_CONTEXT_LIBRARY} 
-      ${BOOST_THREAD_LIBRARY} 
-      ${BOOST_SYSTEM_LIBRARY})
+  )
   LL_ADD_INTEGRATION_TEST(bitpack "" "${test_libs}")
   LL_ADD_INTEGRATION_TEST(classic_callback "" "${test_libs}")
   LL_ADD_INTEGRATION_TEST(commonmisc "" "${test_libs}")
diff --git a/indra/llcommon/stringize.h b/indra/llcommon/stringize.h
index 38dd198ad31..174c9051a83 100644
--- a/indra/llcommon/stringize.h
+++ b/indra/llcommon/stringize.h
@@ -30,7 +30,7 @@
 #define LL_STRINGIZE_H
 
 #include <sstream>
-#include <llstring.h>
+#include "llstring.h"
 
 /**
  * gstringize(item) encapsulates an idiom we use constantly, using
diff --git a/indra/llcorehttp/CMakeLists.txt b/indra/llcorehttp/CMakeLists.txt
index c591680250b..271ddbcd2d7 100644
--- a/indra/llcorehttp/CMakeLists.txt
+++ b/indra/llcorehttp/CMakeLists.txt
@@ -10,18 +10,11 @@ include(NGHTTP2)
 include(ZLIBNG)
 include(LLCoreHttp)
 include(LLAddBuildTest)
-include(LLMessage)
 include(LLCommon)
 include(Tut)
 include(bugsplat)
 
-include_directories (${CMAKE_CURRENT_SOURCE_DIR})
-
-include_directories(
-    ${LLMESSAGE_INCLUDE_DIRS}
-    ${LLCOMMON_INCLUDE_DIRS}
-    ${LLCOREHTTP_INCLUDE_DIRS}
-    )
+include_directories (${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/../llmessage )
 
 set(llcorehttp_SOURCE_FILES
     bufferarray.cpp
@@ -92,14 +85,14 @@ list(APPEND llcorehttp_SOURCE_FILES ${llcorehttp_HEADER_FILES})
 
 add_library (llcorehttp ${llcorehttp_SOURCE_FILES})
 target_link_libraries(
-  llcorehttp
-  ${CURL_LIBRARIES}
-  ${OPENSSL_LIBRARIES}
-  ${CRYPTO_LIBRARIES}
-  ${NGHTTP2_LIBRARIES}
-  ${BOOST_THREAD_LIBRARY}
-  ${BOOST_SYSTEM_LIBRARY}
+        llcorehttp
+        llcommon
+        libcurl::libcurl
+        openssl::openssl
+        nghttp2::nghttp2
   )
+set_target_include_dirs( llcorehttp ${CMAKE_CURRENT_SOURCE_DIR})
+
 
 # tests
 set(LLCOREHTTP_TESTS ON CACHE BOOL
@@ -128,17 +121,10 @@ if (LL_TESTS AND LLCOREHTTP_TESTS)
 
   #    set(TEST_DEBUG on)
   set(test_libs
-      ${LLCOREHTTP_LIBRARIES}
-      ${WINDOWS_LIBRARIES}
-      ${LLMESSAGE_LIBRARIES}
-      ${LLCOMMON_LIBRARIES}
-      ${GOOGLEMOCK_LIBRARIES}
-      ${CURL_LIBRARIES}
-      ${OPENSSL_LIBRARIES}
-      ${CRYPTO_LIBRARIES}
-      ${NGHTTP2_LIBRARIES}
-      ${BOOST_THREAD_LIBRARY}
-      ${BOOST_SYSTEM_LIBRARY}
+          llcorehttp
+          ${WINDOWS_LIBRARIES}
+          llmessage
+          llcommon
       )
 
   # If http_proxy is in the current environment (e.g. to fetch s3-proxy
@@ -201,17 +187,10 @@ endif (DARWIN)
 
   set(example_libs
       ${LEGACY_STDIO_LIBS}
-      ${LLCOREHTTP_LIBRARIES}
-      ${WINDOWS_LIBRARIES}
-      ${LLMESSAGE_LIBRARIES}
-      ${LLCOMMON_LIBRARIES}
-      ${GOOGLEMOCK_LIBRARIES}
-      ${CURL_LIBRARIES}
-      ${OPENSSL_LIBRARIES}
-      ${CRYPTO_LIBRARIES}
-      ${NGHTTP2_LIBRARIES}
-      ${BOOST_THREAD_LIBRARY}
-      ${BOOST_SYSTEM_LIBRARY}
+          llcorehttp
+          ${WINDOWS_LIBRARIES}
+          llmessage
+          llcommon
       )
 
   add_executable(http_texture_load
diff --git a/indra/llcrashlogger/CMakeLists.txt b/indra/llcrashlogger/CMakeLists.txt
index d70a1e0fb00..0e357b249f7 100644
--- a/indra/llcrashlogger/CMakeLists.txt
+++ b/indra/llcrashlogger/CMakeLists.txt
@@ -5,23 +5,6 @@ project(llcrashlogger)
 include(00-Common)
 include(LLCoreHttp)
 include(LLCommon)
-include(LLMath)
-include(LLMessage)
-include(LLFileSystem)
-include(LLXML)
-
-include_directories(
-    ${LLCOREHTTP_INCLUDE_DIRS}
-    ${LLCOMMON_INCLUDE_DIRS}
-    ${LLMATH_INCLUDE_DIRS}
-    ${LLMESSAGE_INCLUDE_DIRS}
-    ${LLFILESYSTEM_INCLUDE_DIRS}
-    ${LLXML_INCLUDE_DIRS}
-    )
-include_directories(SYSTEM
-    ${LLCOMMON_SYSTEM_INCLUDE_DIRS}
-    ${LLXML_SYSTEM_INCLUDE_DIRS}
-    )
 
 set(llcrashlogger_SOURCE_FILES
     llcrashlogger.cpp
@@ -30,7 +13,6 @@ set(llcrashlogger_SOURCE_FILES
 
 set(llcrashlogger_HEADER_FILES
     CMakeLists.txt
-
     llcrashlogger.h
     llcrashlock.h
     )
@@ -41,3 +23,4 @@ set_source_files_properties(${llcrashlogger_HEADER_FILES}
 list(APPEND llcrashlogger_SOURCE_FILES ${llcrashlogger_HEADER_FILES})
 
 add_library(llcrashlogger ${llcrashlogger_SOURCE_FILES})
+target_link_libraries( llcrashlogger llcommon llmessage llcorehttp llxml llfilesystem )
diff --git a/indra/llfilesystem/CMakeLists.txt b/indra/llfilesystem/CMakeLists.txt
index 09c4c33ebf3..dfc290a48b6 100644
--- a/indra/llfilesystem/CMakeLists.txt
+++ b/indra/llfilesystem/CMakeLists.txt
@@ -60,15 +60,10 @@ list(APPEND llfilesystem_SOURCE_FILES ${llfilesystem_HEADER_FILES})
 
 add_library (llfilesystem ${llfilesystem_SOURCE_FILES})
 
-set(cache_BOOST_LIBRARIES
-    ${BOOST_FILESYSTEM_LIBRARY}
-    ${BOOST_SYSTEM_LIBRARY}
-    )
-
 target_link_libraries(llfilesystem
-    ${LLCOMMON_LIBRARIES}
-    ${cache_BOOST_LIBRARIES}
+        llcommon
     )
+set_target_include_dirs( llfilesystem ${CMAKE_CURRENT_SOURCE_DIR})
 
 if (DARWIN)
   include(CMakeFindFrameworks)
@@ -92,7 +87,7 @@ if (LL_TESTS)
     LL_ADD_PROJECT_UNIT_TESTS(llfilesystem "${llfilesystem_TEST_SOURCE_FILES}")
 
     # INTEGRATION TESTS
-    set(test_libs llmath llcommon llfilesystem ${LLCOMMON_LIBRARIES} ${WINDOWS_LIBRARIES})
+    set(test_libs llmath llcommon llfilesystem  ${WINDOWS_LIBRARIES})
 
     # TODO: Some of these need refactoring to be proper Unit tests rather than Integration tests.
     LL_ADD_INTEGRATION_TEST(lldir "" "${test_libs}")
diff --git a/indra/llimage/CMakeLists.txt b/indra/llimage/CMakeLists.txt
index 436b8dd1a25..5387a226018 100644
--- a/indra/llimage/CMakeLists.txt
+++ b/indra/llimage/CMakeLists.txt
@@ -5,24 +5,13 @@ project(llimage)
 include(00-Common)
 include(LLCommon)
 include(LLImage)
-include(LLMath)
-include(LLFileSystem)
+include(JPEG)
 include(LLKDU)
-include(LLImageJ2COJ)
 include(ZLIBNG)
 include(LLAddBuildTest)
 include(bugsplat)
 include(Tut)
 
-include_directories(
-    ${LLCOMMON_INCLUDE_DIRS}
-    ${LLCOMMON_SYSTEM_INCLUDE_DIRS}
-    ${LLMATH_INCLUDE_DIRS}
-    ${LLFILESYSTEM_INCLUDE_DIRS}
-    ${PNG_INCLUDE_DIRS}
-    ${ZLIBNG_INCLUDE_DIRS}
-    )
-
 set(llimage_SOURCE_FILES
     llimagebmp.cpp
     llimage.cpp
@@ -60,21 +49,22 @@ set_source_files_properties(${llimage_HEADER_FILES}
 list(APPEND llimage_SOURCE_FILES ${llimage_HEADER_FILES})
 
 add_library (llimage ${llimage_SOURCE_FILES})
+set_target_include_dirs( llimage ${CMAKE_CURRENT_SOURCE_DIR})
 # Libraries on which this library depends, needed for Linux builds
 # Sort by high-level to low-level
 if (USE_KDU)
-    target_link_libraries(llimage ${LLKDU_LIBRARIES})
+    target_link_libraries(llimage llkdu)
 else (USE_KDU)
-    target_link_libraries(llimage ${LLIMAGEJ2COJ_LIBRARIES})
+    target_link_libraries(llimage llimagej2coj)
 endif (USE_KDU)
 
 target_link_libraries(llimage
-    ${LLFILESYSTEM_LIBRARIES}
-    ${LLMATH_LIBRARIES}
-    ${LLCOMMON_LIBRARIES}
-    ${JPEG_LIBRARIES}
-    ${PNG_LIBRARIES}
-    ${ZLIBNG_LIBRARIES}
+        llfilesystem
+        llmath
+        llcommon
+        zlib-ng::zlib-ng
+        libpng::libpng
+        jpeglib::jpeglib
     )
 
 # Add tests
diff --git a/indra/llimagej2coj/CMakeLists.txt b/indra/llimagej2coj/CMakeLists.txt
index c9423d50dd6..6880b090255 100644
--- a/indra/llimagej2coj/CMakeLists.txt
+++ b/indra/llimagej2coj/CMakeLists.txt
@@ -7,12 +7,6 @@ include(LLCommon)
 include(LLImage)
 include(OpenJPEG)
 
-include_directories(
-    ${LLCOMMON_INCLUDE_DIRS}
-    ${LLIMAGE_INCLUDE_DIRS}
-    ${OPENJPEG_INCLUDE_DIR}
-    )
-
 set(llimagej2coj_SOURCE_FILES
     llimagej2coj.cpp
     )
@@ -30,8 +24,9 @@ list(APPEND llimagej2coj_SOURCE_FILES ${llimagej2coj_HEADER_FILES})
 
 add_library (llimagej2coj ${llimagej2coj_SOURCE_FILES})
 
-target_link_libraries(
-    llimagej2coj
-    ${OPENJPEG_LIBRARIES}
+target_link_libraries( llimagej2coj
+        llcommon
+        llimage
+        openjpeg::openjpeg
     )
 
diff --git a/indra/llinventory/CMakeLists.txt b/indra/llinventory/CMakeLists.txt
index 04975940aa4..ee14f0a46ef 100644
--- a/indra/llinventory/CMakeLists.txt
+++ b/indra/llinventory/CMakeLists.txt
@@ -5,17 +5,6 @@ project(llinventory)
 include(00-Common)
 include(LLCommon)
 include(LLCoreHttp)
-include(LLMath)
-include(LLMessage)
-include(LLFileSystem)
-include(LLXML)
-
-include_directories(
-    ${LLCOMMON_INCLUDE_DIRS}
-    ${LLMATH_INCLUDE_DIRS}
-    ${LLMESSAGE_INCLUDE_DIRS}
-    ${LLXML_INCLUDE_DIRS}
-    )
 
 set(llinventory_SOURCE_FILES
     llcategory.cpp
@@ -70,7 +59,8 @@ list(APPEND llinventory_SOURCE_FILES ${llinventory_HEADER_FILES})
 
 add_library (llinventory ${llinventory_SOURCE_FILES})
 
-
+target_link_libraries( llinventory llcommon llmath llmessage llxml )
+set_target_include_dirs( llinventory ${CMAKE_CURRENT_SOURCE_DIR})
 
 #add unit tests
 if (LL_TESTS)
@@ -81,7 +71,7 @@ if (LL_TESTS)
     LL_ADD_PROJECT_UNIT_TESTS(llinventory "${llinventory_TEST_SOURCE_FILES}")
 
     #set(TEST_DEBUG on)
-    set(test_libs llinventory ${LLMESSAGE_LIBRARIES} ${LLFILESYSTEM_LIBRARIES} ${LLCOREHTTP_LIBRARIES} ${LLMATH_LIBRARIES} ${LLCOMMON_LIBRARIES} ${WINDOWS_LIBRARIES})
+    set(test_libs llinventory llmath llcorehttp llfilesystem ${WINDOWS_LIBRARIES})
     LL_ADD_INTEGRATION_TEST(inventorymisc "" "${test_libs}")
     LL_ADD_INTEGRATION_TEST(llparcel "" "${test_libs}")
 endif (LL_TESTS)
diff --git a/indra/llkdu/CMakeLists.txt b/indra/llkdu/CMakeLists.txt
index cb0e204e91a..035fc746cf8 100644
--- a/indra/llkdu/CMakeLists.txt
+++ b/indra/llkdu/CMakeLists.txt
@@ -13,15 +13,7 @@ include(00-Common)
 include(LLCommon)
 include(LLImage)
 include(LLKDU)
-include(LLMath)
 
-include_directories(
-    ${LLCOMMON_INCLUDE_DIRS}
-    ${LLIMAGE_INCLUDE_DIRS}
-    ${KDU_INCLUDE_DIR}
-    ${LLKDU_INCLUDE_DIRS}
-    ${LLMATH_INCLUDE_DIRS}
-    )
 
 set(llkdu_SOURCE_FILES
     llimagej2ckdu.cpp
@@ -51,9 +43,8 @@ set_source_files_properties(${llkdu_SOURCE_FILES}
 if (USE_KDU)
   add_library (llkdu ${llkdu_SOURCE_FILES})
 
-  target_link_libraries(llkdu
-    ${KDU_LIBRARY})
-  
+  target_link_libraries(llkdu kdu::kdu )
+
   # Add tests
   if (LL_TESTS)
     include(LLAddBuildTest)
@@ -66,10 +57,7 @@ if (USE_KDU)
       llkdumem.h
       lltut.h
       )
-    SET(llkdu_test_additional_INCLUDE_DIRS
-      ${KDU_INCLUDE_DIR}
-      ${LLKDU_INCLUDE_DIRS}
-    )
+
     LL_ADD_PROJECT_UNIT_TESTS(llkdu "${llkdu_TEST_SOURCE_FILES}")
   endif (LL_TESTS)
 
diff --git a/indra/llmath/CMakeLists.txt b/indra/llmath/CMakeLists.txt
index 552e8201279..c385a4cff61 100644
--- a/indra/llmath/CMakeLists.txt
+++ b/indra/llmath/CMakeLists.txt
@@ -107,9 +107,8 @@ list(APPEND llmath_SOURCE_FILES ${llmath_HEADER_FILES})
 
 add_library (llmath ${llmath_SOURCE_FILES})
 
-target_link_libraries(llmath
-    ${LLCOMMON_LIBRARIES}
-    )
+target_link_libraries(llmath llcommon)
+set_target_include_dirs( llmath ${CMAKE_CURRENT_SOURCE_DIR})
 
 # Add tests
 if (LL_TESTS)
@@ -124,15 +123,11 @@ if (LL_TESTS)
     v4color.cpp
     v4coloru.cpp
     )
-  set_source_files_properties(
-    ${llmath_TEST_SOURCE_FILES}
-    PROPERTIES
-    LL_TEST_ADDITIONAL_LIBRARIES "${BOOST_THREAD_LIBRARY}"
-  )
+
   LL_ADD_PROJECT_UNIT_TESTS(llmath "${llmath_TEST_SOURCE_FILES}")
 
   # INTEGRATION TESTS
-  set(test_libs llmath llcommon ${LLCOMMON_LIBRARIES} ${WINDOWS_LIBRARIES})
+  set(test_libs llmath llcommon ${WINDOWS_LIBRARIES})
   # TODO: Some of these need refactoring to be proper Unit tests rather than Integration tests.
   LL_ADD_INTEGRATION_TEST(alignment "" "${test_libs}")
   LL_ADD_INTEGRATION_TEST(llbbox llbbox.cpp "${test_libs}")
diff --git a/indra/llmessage/CMakeLists.txt b/indra/llmessage/CMakeLists.txt
index f0a1dfe9401..6be0262b254 100644
--- a/indra/llmessage/CMakeLists.txt
+++ b/indra/llmessage/CMakeLists.txt
@@ -7,9 +7,6 @@ include(GoogleMock)
 include(LLAddBuildTest)
 include(LLCommon)
 include(LLCoreHttp)
-include(LLMath)
-include(LLMessage)
-include(LLFileSystem)
 include(LLAddBuildTest)
 include(Python)
 include(Tut)
@@ -19,12 +16,9 @@ include(JsonCpp)
 include_directories (${CMAKE_CURRENT_SOURCE_DIR})
 
 include_directories(
-    ${LLCOMMON_INCLUDE_DIRS}
     ${LLCOREHTTP_INCLUDE_DIRS}
-    ${LLMATH_INCLUDE_DIRS}
     ${LLMESSAGE_INCLUDE_DIRS}
     ${LLFILESYSTEM_INCLUDE_DIRS}
-    ${JSONCPP_INCLUDE_DIR}
     )
 
 set(llmessage_SOURCE_FILES
@@ -204,42 +198,18 @@ list(APPEND llmessage_SOURCE_FILES ${llmessage_HEADER_FILES})
 
 add_library (llmessage ${llmessage_SOURCE_FILES})
 
-if (LINUX)
-target_link_libraries(
-  llmessage
-  ${CURL_LIBRARIES}
-  ${LLCOMMON_LIBRARIES}
-  ${LLFILESYSTEM_LIBRARIES}
-  ${LLMATH_LIBRARIES}
-  ${JSONCPP_LIBRARIES}
-  ${OPENSSL_LIBRARIES}
-  ${CRYPTO_LIBRARIES}
-  ${NGHTTP2_LIBRARIES}
-  ${XMLRPCEPI_LIBRARIES}
-  ${LLCOREHTTP_LIBRARIES}
-  ${BOOST_FIBER_LIBRARY}
-  ${BOOST_CONTEXT_LIBRARY}
-  ${BOOST_SYSTEM_LIBRARY}
-  rt
-  )
-else (LINUX)
 target_link_libraries(
-  llmessage
-  ${CURL_LIBRARIES}
-  ${LLCOMMON_LIBRARIES}
-  ${LLFILESYSTEM_LIBRARIES}
-  ${LLMATH_LIBRARIES}
-  ${JSONCPP_LIBRARIES}
-  ${OPENSSL_LIBRARIES}
-  ${CRYPTO_LIBRARIES}
-  ${NGHTTP2_LIBRARIES}
-  ${XMLRPCEPI_LIBRARIES}
-  ${LLCOREHTTP_LIBRARIES}
-  ${BOOST_FIBER_LIBRARY}
-  ${BOOST_CONTEXT_LIBRARY}
-  ${BOOST_SYSTEM_LIBRARY}
-  )
-endif(LINUX)
+        llmessage
+        libcurl::libcurl
+        llcommon
+        llfilesystem
+        llmath
+        openssl::openssl
+        xmlrpc-epi::xmlrpc-epi
+        llcorehttp
+        nghttp2::nghttp2
+)
+set_target_include_dirs( llmessage ${CMAKE_CURRENT_SOURCE_DIR})
 
 # tests
 if (LL_TESTS)
@@ -249,41 +219,29 @@ if (LL_TESTS)
     lltrustedmessageservice.cpp
     lltemplatemessagedispatcher.cpp
     )
+  set_property( SOURCE ${llmessage_TEST_SOURCE_FILES} PROPERTY LL_TEST_ADDITIONAL_LIBRARIES llmath llcorehttp)
   LL_ADD_PROJECT_UNIT_TESTS(llmessage "${llmessage_TEST_SOURCE_FILES}")
 
-  
   #    set(TEST_DEBUG on)
   
 if (LINUX)
   set(test_libs
-    ${WINDOWS_LIBRARIES}
-    ${LLFILESYSTEM_LIBRARIES}
-    ${LLMATH_LIBRARIES}
-    ${CURL_LIBRARIES}
-    ${NGHTTP2_LIBRARIES}
-    ${LLCOMMON_LIBRARIES}
-    ${LLMESSAGE_LIBRARIES}
-    ${LLCOREHTTP_LIBRARIES}
-    ${JSONCPP_LIBRARIES}
-    ${BOOST_FIBER_LIBRARY}
-    ${BOOST_CONTEXT_LIBRARY}
-    rt
-    ${GOOGLEMOCK_LIBRARIES}
+          ${WINDOWS_LIBRARIES}
+          llfilesystem
+          llmath
+          llcorehttp
+          llmessage
+          llcommon
+          rt
     )
 else (LINUX)
   set(test_libs
-    ${WINDOWS_LIBRARIES}
-    ${LLFILESYSTEM_LIBRARIES}
-    ${LLMATH_LIBRARIES}
-    ${CURL_LIBRARIES}
-    ${NGHTTP2_LIBRARIES}
-    ${LLCOMMON_LIBRARIES}
-    ${LLMESSAGE_LIBRARIES}
-    ${LLCOREHTTP_LIBRARIES}
-    ${JSONCPP_LIBRARIES}
-    ${BOOST_FIBER_LIBRARY}
-    ${BOOST_CONTEXT_LIBRARY}
-    ${GOOGLEMOCK_LIBRARIES}
+          ${WINDOWS_LIBRARIES}
+          llfilesystem
+          llmath
+          llcorehttp
+          llmessage
+          llcommon
     )
 endif(LINUX)
 
diff --git a/indra/llplugin/CMakeLists.txt b/indra/llplugin/CMakeLists.txt
index 5cc129a2677..872d62a2bb6 100644
--- a/indra/llplugin/CMakeLists.txt
+++ b/indra/llplugin/CMakeLists.txt
@@ -6,26 +6,7 @@ include(00-Common)
 include(CURL)
 include(LLCommon)
 include(LLImage)
-include(LLMath)
-include(LLMessage)
-include(LLRender)
-include(LLXML)
 include(LLWindow)
-include(Boost)
-
-include_directories(
-    ${LLCOMMON_INCLUDE_DIRS}
-    ${LLIMAGE_INCLUDE_DIRS}
-    ${LLMATH_INCLUDE_DIRS}
-    ${LLMESSAGE_INCLUDE_DIRS}
-    ${LLRENDER_INCLUDE_DIRS}
-    ${LLXML_INCLUDE_DIRS}
-    ${LLWINDOW_INCLUDE_DIRS}
-    )
-include_directories(SYSTEM
-    ${LLCOMMON_SYSTEM_INCLUDE_DIRS}
-    ${LLXML_SYSTEM_INCLUDE_DIRS}
-    )
 
 set(llplugin_SOURCE_FILES
     llpluginclassmedia.cpp
@@ -65,6 +46,7 @@ endif(NOT ADDRESS_SIZE EQUAL 32)
 list(APPEND llplugin_SOURCE_FILES ${llplugin_HEADER_FILES})
 
 add_library (llplugin ${llplugin_SOURCE_FILES})
-
+set_target_include_dirs(llplugin ${CMAKE_CURRENT_SOURCE_DIR})
+target_link_libraries( llplugin llcommon llmath llrender llmessage )
 add_subdirectory(slplugin)
 
diff --git a/indra/llplugin/slplugin/CMakeLists.txt b/indra/llplugin/slplugin/CMakeLists.txt
index e4f64448c55..7725489c3ed 100644
--- a/indra/llplugin/slplugin/CMakeLists.txt
+++ b/indra/llplugin/slplugin/CMakeLists.txt
@@ -2,19 +2,8 @@ project(SLPlugin)
 
 include(00-Common)
 include(LLCommon)
-include(LLPlugin)
 include(Linking)
 include(PluginAPI)
-include(LLMessage)
-
-include_directories(
-    ${LLPLUGIN_INCLUDE_DIRS}
-    ${LLMESSAGE_INCLUDE_DIRS}
-    ${LLCOMMON_INCLUDE_DIRS}
-)
-include_directories(SYSTEM
-    ${LLCOMMON_SYSTEM_INCLUDE_DIRS}
-    )
 
 if (DARWIN)
     include(CMakeFindFrameworks)
@@ -63,10 +52,10 @@ set_target_properties(SLPlugin
 endif ()
 
 target_link_libraries(SLPlugin
-  ${LEGACY_STDIO_LIBS}
-  ${LLPLUGIN_LIBRARIES}
-  ${LLMESSAGE_LIBRARIES}
-  ${LLCOMMON_LIBRARIES}
+      ${LEGACY_STDIO_LIBS}
+      llplugin
+      llmessage
+      llcommon
   ${PLUGIN_API_WINDOWS_LIBRARIES}
 )
 
diff --git a/indra/llprimitive/CMakeLists.txt b/indra/llprimitive/CMakeLists.txt
index 7b6d04b096e..fb81f192067 100644
--- a/indra/llprimitive/CMakeLists.txt
+++ b/indra/llprimitive/CMakeLists.txt
@@ -4,27 +4,9 @@ project(llprimitive)
 
 include(00-Common)
 include(LLCommon)
-include(LLMath)
-include(LLMessage)
 include(LLCoreHttp)
-include(LLXML)
 include(LLPhysicsExtensions)
-include(LLCharacter)
-
-include_directories(
-    ${LLCOMMON_INCLUDE_DIRS}
-    ${LLMATH_INCLUDE_DIRS}
-    ${LLMESSAGE_INCLUDE_DIRS}
-    ${LLXML_INCLUDE_DIRS}
-    ${LIBS_PREBUILT_DIR}/include/collada
-    ${LIBS_PREBUILT_DIR}/include/collada/1.4
-    ${LLCHARACTER_INCLUDE_DIRS}
-    )
-include_directories(SYSTEM
-    ${LLCOMMON_SYSTEM_INCLUDE_DIRS}
-    ${LLXML_SYSTEM_INCLUDE_DIRS}
-    ${LLPHYSICSEXTENSIONS_INCLUDE_DIRS}
-    )
+include(LLPrimitive)
 
 set(llprimitive_SOURCE_FILES
     lldaeloader.cpp
@@ -71,19 +53,19 @@ set_source_files_properties(${llprimitive_HEADER_FILES}
 list(APPEND llprimitive_SOURCE_FILES ${llprimitive_HEADER_FILES})
 
 add_library (llprimitive ${llprimitive_SOURCE_FILES})
+set_target_include_dirs( llprimitive ${CMAKE_CURRENT_SOURCE_DIR})
 
 target_link_libraries(llprimitive
-    ${LLCOMMON_LIBRARIES}
-    ${LLMATH_LIBRARIES}
-    ${LLMESSAGE_LIBRARIES}
-    ${LLCOREHTTP_LIBRARIES}
-    ${LLXML_LIBRARIES}
-    ${LLPHYSICSEXTENSIONS_LIBRARIES}
-    ${LLCHARACTER_LIBRARIES}
-    ${BOOST_FIBER_LIBRARY}
-    ${BOOST_CONTEXT_LIBRARY}
-    )
-
+        llcommon
+        llmath
+        llmessage
+        llcorehttp
+        llxml
+        llcharacter
+        llphysicsextensions
+        colladadom::colladadom
+        pcre::pcre
+        )
 
 #add unit tests
 if (LL_TESTS)
diff --git a/indra/llrender/CMakeLists.txt b/indra/llrender/CMakeLists.txt
index baab09a1048..7d42043613b 100644
--- a/indra/llrender/CMakeLists.txt
+++ b/indra/llrender/CMakeLists.txt
@@ -7,26 +7,7 @@ include(OpenGL)
 include(FreeType)
 include(LLCommon)
 include(LLImage)
-include(LLMath)
-include(LLRender)
 include(LLWindow)
-include(LLXML)
-include(LLFileSystem)
-
-include_directories(
-    ${FREETYPE_INCLUDE_DIRS}
-    ${LLCOMMON_INCLUDE_DIRS}
-    ${LLIMAGE_INCLUDE_DIRS}
-    ${LLMATH_INCLUDE_DIRS}
-    ${LLRENDER_INCLUDE_DIRS}
-    ${LLFILESYSTEM_INCLUDE_DIRS}
-    ${LLWINDOW_INCLUDE_DIRS}
-    ${LLXML_INCLUDE_DIRS}
-    )
-include_directories(SYSTEM
-    ${LLCOMMON_SYSTEM_INCLUDE_DIRS}
-    ${LLXML_SYSTEM_INCLUDE_DIRS}
-    )
 
 set(llrender_SOURCE_FILES
     llatmosphere.cpp
@@ -98,18 +79,17 @@ if (BUILD_HEADLESS)
       )
 
   target_link_libraries(llrenderheadless
-    ${LLCOMMON_LIBRARIES}
-    ${LLIMAGE_LIBRARIES}
-    ${LLMATH_LIBRARIES}
-    ${LLRENDER_HEADLESS_LIBRARIES}
-    ${LLXML_LIBRARIES}
-    ${LLFILESYSTEM_LIBRARIES}
-    ${LLWINDOW_HEADLESS_LIBRARIES}
-    ${OPENGL_HEADLESS_LIBRARIES})
-
+          llcommon
+          llimage
+          llmath
+          llrender
+          llxml
+          llfilesystem
+          )
 endif (BUILD_HEADLESS)
 
 add_library (llrender ${llrender_SOURCE_FILES})
+set_target_include_dirs(llrender ${CMAKE_CURRENT_SOURCE_DIR})
 
 if (SDL_FOUND)
   set_property(TARGET llrender
@@ -119,13 +99,15 @@ endif (SDL_FOUND)
 
 # Libraries on which this library depends, needed for Linux builds
 # Sort by high-level to low-level
-target_link_libraries(llrender 
-    ${LLCOMMON_LIBRARIES}
-    ${LLIMAGE_LIBRARIES}
-    ${LLMATH_LIBRARIES}
-    ${LLFILESYSTEM_LIBRARIES}
-    ${LLXML_LIBRARIES}
-    ${LLWINDOW_LIBRARIES}
-    ${FREETYPE_LIBRARIES}
-    ${OPENGL_LIBRARIES})
+target_link_libraries(llrender
+        llcommon
+        llimage
+        llmath
+        llfilesystem
+        llxml
+        llwindow
+        freetype::freetype
+        OpenGL::GL
+        OpenGL::GLU
+        )
 
diff --git a/indra/llui/CMakeLists.txt b/indra/llui/CMakeLists.txt
index d96824bbf8b..04103b1a94c 100644
--- a/indra/llui/CMakeLists.txt
+++ b/indra/llui/CMakeLists.txt
@@ -6,33 +6,9 @@ include(00-Common)
 include(Hunspell)
 include(LLCommon)
 include(LLImage)
-include(LLInventory)
-include(LLMath)
-include(LLMessage)
 include(LLCoreHttp)
-include(LLRender)
 include(LLWindow)
 include(LLCoreHttp)
-include(LLFileSystem)
-include(LLXML)
-
-include_directories(
-    ${LLCOMMON_INCLUDE_DIRS}
-    ${LLCOREHTTP_INCLUDE_DIRS}
-    ${LLIMAGE_INCLUDE_DIRS}
-    ${LLINVENTORY_INCLUDE_DIRS}
-    ${LLMATH_INCLUDE_DIRS}
-    ${LLMESSAGE_INCLUDE_DIRS}
-    ${LLRENDER_INCLUDE_DIRS}
-    ${LLWINDOW_INCLUDE_DIRS}
-    ${LLFILESYSTEM_INCLUDE_DIRS}
-    ${LLXML_INCLUDE_DIRS}
-    ${LIBS_PREBUILD_DIR}/include/hunspell
-    )
-include_directories(SYSTEM
-    ${LLCOMMON_SYSTEM_INCLUDE_DIRS}
-    ${LLXML_SYSTEM_INCLUDE_DIRS}
-    )
 
 set(llui_SOURCE_FILES
     llaccordionctrl.cpp
@@ -276,38 +252,37 @@ set_source_files_properties(llurlentry.cpp
 list(APPEND llui_SOURCE_FILES ${llui_HEADER_FILES})
 
 add_library (llui ${llui_SOURCE_FILES})
+set_target_include_dirs( llui ${CMAKE_CURRENT_SOURCE_DIR})
 # Libraries on which this library depends, needed for Linux builds
 # Sort by high-level to low-level
 target_link_libraries(llui
-    ${LLRENDER_LIBRARIES}
-    ${LLWINDOW_LIBRARIES}
-    ${LLIMAGE_LIBRARIES}
-    ${LLINVENTORY_LIBRARIES}
-    ${LLMESSAGE_LIBRARIES}
-    ${LLCOREHTTP_LIBRARIES}
-    ${LLFILESYSTEM_LIBRARIES}
-    ${LLXUIXML_LIBRARIES}
-    ${LLXML_LIBRARIES}
-    ${LLMATH_LIBRARIES}
-    ${HUNSPELL_LIBRARY}
-    ${LLMESSAGE_LIBRARIES}
-    ${LLCOMMON_LIBRARIES} # must be after llimage, llwindow, llrender
+        llrender
+        llwindow
+        llimage
+        llinventory
+        llmessage
+        llcorehttp
+        llfilesystem
+        llxml
+        llmath
+        hunspell::hunspell
+        llcommon
     )
 
 # Add tests
 if(LL_TESTS)
   include(LLAddBuildTest)
+  set(test_libs llmessage llcorehttp llxml llrender llcommon hunspell::hunspell ${WINDOWS_LIBRARIES})
+
   SET(llui_TEST_SOURCE_FILES
       llurlmatch.cpp
       )
+  set_property( SOURCE ${llui_TEST_SOURCE_FILES} PROPERTY LL_TEST_ADDITIONAL_LIBRARIES ${test_libs})
   LL_ADD_PROJECT_UNIT_TESTS(llui "${llui_TEST_SOURCE_FILES}")
   # INTEGRATION TESTS
-  set(test_libs llui llmessage llcorehttp llcommon
-      ${HUNSPELL_LIBRARY}
-      ${LLCOMMON_LIBRARIES}
-      ${BOOST_FIBER_LIBRARY} ${BOOST_CONTEXT_LIBRARY} ${BOOST_SYSTEM_LIBRARY}
-      ${WINDOWS_LIBRARIES})
+
   if(NOT LINUX)
+    set(test_libs llui llmessage llcorehttp llxml llrender llcommon hunspell::hunspell ${WINDOWS_LIBRARIES})
     LL_ADD_INTEGRATION_TEST(llurlentry llurlentry.cpp "${test_libs}")
   endif(NOT LINUX)
 endif(LL_TESTS)
diff --git a/indra/llwindow/CMakeLists.txt b/indra/llwindow/CMakeLists.txt
index 70eb99c86c4..952fbbb56f3 100644
--- a/indra/llwindow/CMakeLists.txt
+++ b/indra/llwindow/CMakeLists.txt
@@ -14,26 +14,9 @@ include(00-Common)
 include(DragDrop)
 include(LLCommon)
 include(LLImage)
-include(LLMath)
-include(LLRender)
-include(LLFileSystem)
 include(LLWindow)
-include(LLXML)
 include(UI)
 
-include_directories(
-    ${LLCOMMON_INCLUDE_DIRS}
-    ${LLIMAGE_INCLUDE_DIRS}
-    ${LLMATH_INCLUDE_DIRS}
-    ${LLRENDER_INCLUDE_DIRS}
-    ${LLFILESYSTEM_INCLUDE_DIRS}
-    ${LLWINDOW_INCLUDE_DIRS}
-    ${LLXML_INCLUDE_DIRS}
-    )
-include_directories(SYSTEM
-    ${LLCOMMON_SYSTEM_INCLUDE_DIRS}
-    ${LLXML_SYSTEM_INCLUDE_DIRS}
-    )
 
 set(llwindow_SOURCE_FILES
     llcursortypes.cpp
@@ -64,17 +47,18 @@ set(viewer_HEADER_FILES
     llmousehandler.h
     )
 
+set(llwindow_LINK_LIBRARIES
+        llcommon
+        llimage
+        llmath
+        llrender
+        llfilesystem
+        llxml
+        )
 # Libraries on which this library depends, needed for Linux builds
 # Sort by high-level to low-level
 if (LINUX)
-  set(llwindow_LINK_LIBRARIES
-      ${LLCOMMON_LIBRARIES}
-      ${LLIMAGE_LIBRARIES}
-      ${LLMATH_LIBRARIES}
-      ${LLRENDER_LIBRARIES}
-      ${LLFILESYSTEM_LIBRARIES}
-      ${LLWINDOW_LIBRARIES}
-      ${LLXML_LIBRARIES}
+  set(llwindow_LINK_LIBRARIES APPEND
       ${UI_LIBRARIES}     # for GTK
       ${SDL_LIBRARY}
       fontconfig          # For FCInit and other FC* functions.
@@ -196,5 +180,5 @@ if (SDL_FOUND)
     )
 endif (SDL_FOUND)
 
-  target_link_libraries (llwindow ${llwindow_LINK_LIBRARIES})
-
+target_link_libraries (llwindow ${llwindow_LINK_LIBRARIES})
+set_target_include_dirs(llwindow ${CMAKE_CURRENT_SOURCE_DIR})
diff --git a/indra/llxml/CMakeLists.txt b/indra/llxml/CMakeLists.txt
index 3a7a54e51d0..b585dbd26e2 100644
--- a/indra/llxml/CMakeLists.txt
+++ b/indra/llxml/CMakeLists.txt
@@ -4,18 +4,6 @@ project(llxml)
 
 include(00-Common)
 include(LLCommon)
-include(LLMath)
-include(LLFileSystem)
-include(LLXML)
-
-include_directories(
-    ${LLCOMMON_INCLUDE_DIRS}
-    ${LLMATH_INCLUDE_DIRS}
-    ${LLFILESYSTEM_INCLUDE_DIRS}
-    )
-include_directories(
-    ${LLCOMMON_SYSTEM_INCLUDE_DIRS}
-    )
 
 set(llxml_SOURCE_FILES
     llcontrol.cpp
@@ -42,11 +30,13 @@ add_library (llxml ${llxml_SOURCE_FILES})
 # Libraries on which this library depends, needed for Linux builds
 # Sort by high-level to low-level
 target_link_libraries( llxml
-    ${LLFILESYSTEM_LIBRARIES}
-    ${LLMATH_LIBRARIES}
-    ${LLCOMMON_LIBRARIES}
-    ${EXPAT_LIBRARIES}
+        llfilesystem
+        llmath
+        llcommon
+        expat::expat
     )
+set_target_include_dirs( llxml ${CMAKE_CURRENT_SOURCE_DIR})
+
 
 # tests
 
@@ -62,11 +52,11 @@ if (LL_TESTS)
 
     #    set(TEST_DEBUG on)
     set(test_libs
-      ${LLXML_LIBRARIES}
-      ${WINDOWS_LIBRARIES}
-      ${LLMATH_LIBRARIES}
-      ${LLCOMMON_LIBRARIES}
-      )
+            llxml
+            llmath
+            llcommon
+            ${WINDOWS_LIBRARIES}
+            )
 
     LL_ADD_INTEGRATION_TEST(llcontrol "" "${test_libs}")
 endif (LL_TESTS)
diff --git a/indra/media_plugins/base/CMakeLists.txt b/indra/media_plugins/base/CMakeLists.txt
index 7f2b82ffdd0..9da249bd27b 100644
--- a/indra/media_plugins/base/CMakeLists.txt
+++ b/indra/media_plugins/base/CMakeLists.txt
@@ -5,25 +5,9 @@ project(media_plugin_base)
 include(00-Common)
 include(LLCommon)
 include(LLImage)
-include(LLPlugin)
-include(LLMath)
-include(LLRender)
 include(LLWindow)
 include(Linking)
 include(PluginAPI)
-include(OpenGL)
-
-include_directories(
-    ${LLPLUGIN_INCLUDE_DIRS}
-    ${LLCOMMON_INCLUDE_DIRS}
-    ${LLMATH_INCLUDE_DIRS}
-    ${LLIMAGE_INCLUDE_DIRS}
-    ${LLRENDER_INCLUDE_DIRS}
-    ${LLWINDOW_INCLUDE_DIRS}
-)
-include_directories(SYSTEM
-    ${LLCOMMON_SYSTEM_INCLUDE_DIRS}
-    )
 
 
 ### media_plugin_base
@@ -48,5 +32,7 @@ set(media_plugin_base_HEADER_FILES
 
 add_library(media_plugin_base
     ${media_plugin_base_SOURCE_FILES}
-    )
+        )
 
+target_link_libraries( media_plugin_base llplugin )
+set_target_include_dirs(media_plugin_base ${CMAKE_CURRENT_SOURCE_DIR})
diff --git a/indra/media_plugins/cef/CMakeLists.txt b/indra/media_plugins/cef/CMakeLists.txt
index 854ba557312..8d147140202 100644
--- a/indra/media_plugins/cef/CMakeLists.txt
+++ b/indra/media_plugins/cef/CMakeLists.txt
@@ -5,29 +5,12 @@ project(media_plugin_cef)
 include(Boost)
 include(00-Common)
 include(LLCommon)
-include(LLPlugin)
-include(LLMath)
-include(LLRender)
 include(LLWindow)
 include(Linking)
 include(PluginAPI)
-include(MediaPluginBase)
 
 include(CEFPlugin)
 
-include_directories(
-    ${LLPLUGIN_INCLUDE_DIRS}
-    ${MEDIA_PLUGIN_BASE_INCLUDE_DIRS}
-    ${LLCOMMON_INCLUDE_DIRS}
-    ${LLMATH_INCLUDE_DIRS}
-    ${LLRENDER_INCLUDE_DIRS}
-    ${LLWINDOW_INCLUDE_DIRS}
-    ${CEF_INCLUDE_DIR}
-)
-include_directories(SYSTEM
-    ${LLCOMMON_SYSTEM_INCLUDE_DIRS}
-    )
-
 
 ### media_plugin_cef
 
@@ -47,13 +30,6 @@ set(media_plugin_cef_HEADER_FILES
     volume_catcher.h
     )
 
-set (media_plugin_cef_LINK_LIBRARIES
-  ${LLPLUGIN_LIBRARIES}
-  ${MEDIA_PLUGIN_BASE_LIBRARIES}
-  ${CEF_PLUGIN_LIBRARIES}
-  ${LLCOMMON_LIBRARIES}
-  ${PLUGIN_API_WINDOWS_LIBRARIES})
-
 # Select which VolumeCatcher implementation to use
 if (LINUX)
   message(FATAL_ERROR "CEF plugin has been enabled for a Linux compile.\n"
@@ -62,7 +38,7 @@ elseif (DARWIN)
   list(APPEND media_plugin_cef_SOURCE_FILES mac_volume_catcher_null.cpp)
   find_library(CORESERVICES_LIBRARY CoreServices)
   find_library(AUDIOUNIT_LIBRARY AudioUnit)
-  list(APPEND media_plugin_cef_LINK_LIBRARIES
+  set( media_plugin_cef_LINK_LIBRARIES
        ${CORESERVICES_LIBRARY}     # for Component Manager calls
        ${AUDIOUNIT_LIBRARY}        # for AudioUnit calls
        )
@@ -85,7 +61,9 @@ add_library(media_plugin_cef
 #)
 
 target_link_libraries(media_plugin_cef
-  ${media_plugin_cef_LINK_LIBRARIES}
+        media_plugin_base
+        cef::cef
+        ${media_plugin_cef_LINK_LIBRARIES}
 )
 
 if (WINDOWS)
diff --git a/indra/media_plugins/example/CMakeLists.txt b/indra/media_plugins/example/CMakeLists.txt
index eb067a7f6e5..7d3e7f663b5 100644
--- a/indra/media_plugins/example/CMakeLists.txt
+++ b/indra/media_plugins/example/CMakeLists.txt
@@ -5,31 +5,12 @@ project(media_plugin_example)
 include(00-Common)
 include(LLCommon)
 include(LLImage)
-include(LLPlugin)
-include(LLMath)
-include(LLRender)
 include(LLWindow)
 include(Linking)
 include(PluginAPI)
-include(MediaPluginBase)
-include(OpenGL)
 
 include(ExamplePlugin)
 
-include_directories(
-    ${LLPLUGIN_INCLUDE_DIRS}
-    ${MEDIA_PLUGIN_BASE_INCLUDE_DIRS}
-    ${LLCOMMON_INCLUDE_DIRS}
-    ${LLMATH_INCLUDE_DIRS}
-    ${LLIMAGE_INCLUDE_DIRS}
-    ${LLRENDER_INCLUDE_DIRS}
-    ${LLWINDOW_INCLUDE_DIRS}
-)
-include_directories(SYSTEM
-    ${LLCOMMON_SYSTEM_INCLUDE_DIRS}
-    )
-
-
 ### media_plugin_example
 
 if(NOT ADDRESS_SIZE EQUAL 32)
@@ -49,21 +30,7 @@ add_library(media_plugin_example
     ${media_plugin_example_SOURCE_FILES}
     )
 
-target_link_libraries(media_plugin_example
-  ${LLPLUGIN_LIBRARIES}
-  ${MEDIA_PLUGIN_BASE_LIBRARIES}
-  ${LLCOMMON_LIBRARIES}
-  ${EXAMPLE_PLUGIN_LIBRARIES}
-  ${PLUGIN_API_WINDOWS_LIBRARIES}
-)
-
-add_dependencies(media_plugin_example
-  ${LLPLUGIN_LIBRARIES}
-  ${MEDIA_PLUGIN_BASE_LIBRARIES}
-  # Using ${LLCOMMON_LIBRARIES} here drags in a whole bunch of Boost stuff
-  # that only produces CMake warnings about nonexistent dependencies.
-  llcommon
-)
+target_link_libraries(media_plugin_example media_plugin_base )
 
 if (WINDOWS)
   set_target_properties(
diff --git a/indra/media_plugins/gstreamer010/CMakeLists.txt b/indra/media_plugins/gstreamer010/CMakeLists.txt
index 571eb57b248..c66b5d0d2e1 100644
--- a/indra/media_plugins/gstreamer010/CMakeLists.txt
+++ b/indra/media_plugins/gstreamer010/CMakeLists.txt
@@ -16,20 +16,6 @@ include(OpenGL)
 
 include(GStreamer010Plugin)
 
-include_directories(
-    ${LLPLUGIN_INCLUDE_DIRS}
-    ${MEDIA_PLUGIN_BASE_INCLUDE_DIRS}
-    ${LLCOMMON_INCLUDE_DIRS}
-    ${LLMATH_INCLUDE_DIRS}
-    ${LLIMAGE_INCLUDE_DIRS}
-    ${LLRENDER_INCLUDE_DIRS}
-    ${LLWINDOW_INCLUDE_DIRS}
-    ${GSTREAMER010_INCLUDE_DIRS}
-    ${GSTREAMER010_PLUGINS_BASE_INCLUDE_DIRS}
-)
-include_directories(SYSTEM
-    ${LLCOMMON_SYSTEM_INCLUDE_DIRS}
-    )
 
 ### media_plugin_gstreamer010
 
@@ -59,17 +45,5 @@ add_library(media_plugin_gstreamer010
     )
 
 target_link_libraries(media_plugin_gstreamer010
-  ${LLPLUGIN_LIBRARIES}
-  ${MEDIA_PLUGIN_BASE_LIBRARIES}
-  ${LLCOMMON_LIBRARIES}
-  ${PLUGIN_API_WINDOWS_LIBRARIES}
-  ${GSTREAMER010_LIBRARIES}
-)
-
-add_dependencies(media_plugin_gstreamer010
-  ${LLPLUGIN_LIBRARIES}
-  ${MEDIA_PLUGIN_BASE_LIBRARIES}
-  ${LLCOMMON_LIBRARIES}
-)
-
-
+        media_plugin_base
+  )
diff --git a/indra/media_plugins/libvlc/CMakeLists.txt b/indra/media_plugins/libvlc/CMakeLists.txt
index 97392bbe089..cae1c4f92bd 100644
--- a/indra/media_plugins/libvlc/CMakeLists.txt
+++ b/indra/media_plugins/libvlc/CMakeLists.txt
@@ -5,32 +5,12 @@ project(media_plugin_libvlc)
 include(00-Common)
 include(LLCommon)
 include(LLImage)
-include(LLPlugin)
-include(LLMath)
-include(LLRender)
 include(LLWindow)
 include(Linking)
 include(PluginAPI)
-include(MediaPluginBase)
-include(OpenGL)
 
 include(LibVLCPlugin)
 
-include_directories(
-    ${LLPLUGIN_INCLUDE_DIRS}
-    ${MEDIA_PLUGIN_BASE_INCLUDE_DIRS}
-    ${LLCOMMON_INCLUDE_DIRS}
-    ${LLMATH_INCLUDE_DIRS}
-    ${LLIMAGE_INCLUDE_DIRS}
-    ${LLRENDER_INCLUDE_DIRS}
-    ${LLWINDOW_INCLUDE_DIRS}
-    ${VLC_INCLUDE_DIR}
-)
-include_directories(SYSTEM
-    ${LLCOMMON_SYSTEM_INCLUDE_DIRS}
-    )
-
-
 ### media_plugin_libvlc
 
 if(NOT ADDRESS_SIZE EQUAL 32)
@@ -51,27 +31,8 @@ add_library(media_plugin_libvlc
     )
 
 target_link_libraries(media_plugin_libvlc
-  ${LLPLUGIN_LIBRARIES}
-  ${MEDIA_PLUGIN_BASE_LIBRARIES}
-  ${LLCOMMON_LIBRARIES}
-  ${VLC_PLUGIN_LIBRARIES}
-  ${PLUGIN_API_WINDOWS_LIBRARIES}
-)
-
-add_dependencies(media_plugin_libvlc
-  ${LLPLUGIN_LIBRARIES}
-  ${MEDIA_PLUGIN_BASE_LIBRARIES}
-##${LLCOMMON_LIBRARIES}
-  # Just say 'llcommon' here. LLCOMMON_LIBRARIES is specified for use in
-  # target_link_libraries: it includes several Boost libraries, which are
-  # absolutely NOT dependencies in the sense intended here. Those Boost
-  # library macros, in turn, specify 'debug' and 'optimized' and a different
-  # library name for each, producing several wordy errors:
-  # Policy CMP0046 is not set: Error on non-existent dependency in
-  # add_dependencies.
-  # Really, the only dependency we should mention from LLCOMMON_LIBRARIES is
-  # llcommon itself.
-  llcommon
+        media_plugin_base
+        libvlc::libvlc
 )
 
 if (WINDOWS)
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 85e39bbb2d2..91689410144 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -24,24 +24,13 @@ include(JsonCpp)
 include(LLAppearance)
 include(LLAudio)
 include(LLCA)
-include(LLCharacter)
 include(LLCommon)
 include(LLCoreHttp)
 include(LLImage)
-include(LLImageJ2COJ)
-include(LLInventory)
 include(LLKDU)
-include(LLLogin)
-include(LLMath)
-include(LLMessage)
 include(LLPhysicsExtensions)
-include(LLPlugin)
 include(LLPrimitive)
-include(LLRender)
-include(LLUI)
-include(LLFileSystem)
 include(LLWindow)
-include(LLXML)
 include(NDOF)
 include(NVAPI)
 include(OPENAL)
@@ -57,57 +46,17 @@ include(ViewerManager)
 include(VisualLeakDetector)
 include(ZLIBNG)
 include(URIPARSER)
+include(LLPrimitive)
+
+include_directories( ${CMAKE_CURRENT_SOURCE_DIR} )
 
 if (NOT HAVOK_TPV)
    # When using HAVOK_TPV, the library is precompiled, so no need for this
    add_subdirectory(${LLPHYSICSEXTENSIONS_SRC_DIR} llphysicsextensions)
+   cmake_policy( SET CMP0079 NEW)
+   target_link_libraries(llphysicsextensionsstub llcommon llmath)
 endif (NOT HAVOK_TPV)
 
-if(FMODSTUDIO)
-  include_directories(${FMODSTUDIO_INCLUDE_DIR})
-endif(FMODSTUDIO)
-
-include_directories(
-    ${DBUSGLIB_INCLUDE_DIRS}
-    ${JSONCPP_INCLUDE_DIR}
-    ${GLOD_INCLUDE_DIR}
-    ${LLAUDIO_INCLUDE_DIRS}
-    ${LLCHARACTER_INCLUDE_DIRS}
-    ${LLCOMMON_INCLUDE_DIRS}
-    ${LLCOREHTTP_INCLUDE_DIRS}
-    ${LLPHYSICS_INCLUDE_DIRS}
-    ${LLIMAGE_INCLUDE_DIRS}
-    ${LLKDU_INCLUDE_DIRS}
-    ${LLINVENTORY_INCLUDE_DIRS}
-    ${LLMATH_INCLUDE_DIRS}
-    ${LLMESSAGE_INCLUDE_DIRS}
-    ${LLPLUGIN_INCLUDE_DIRS}
-    ${LLPRIMITIVE_INCLUDE_DIRS}
-    ${LLRENDER_INCLUDE_DIRS}
-    ${LLUI_INCLUDE_DIRS}
-    ${LLFILESYSTEM_INCLUDE_DIRS}
-    ${LLWINDOW_INCLUDE_DIRS}
-    ${LLXML_INCLUDE_DIRS}
-    ${LLLOGIN_INCLUDE_DIRS}
-    ${LIBS_PREBUILT_DIR}/include/collada
-    ${LIBS_PREBUILD_DIR}/include/hunspell
-    ${OPENAL_LIB_INCLUDE_DIRS}
-    ${LIBS_PREBUILT_DIR}/include/collada/1.4
-    ${LLAPPEARANCE_INCLUDE_DIRS}
-    ${CMAKE_CURRENT_SOURCE_DIR}
-    )
-
-include_directories(SYSTEM
-    ${LLCOMMON_SYSTEM_INCLUDE_DIRS}
-    ${LLXML_SYSTEM_INCLUDE_DIRS}
-    ${LLPHYSICSEXTENSIONS_INCLUDE_DIRS}
-    )
-
-if (USE_BUGSPLAT)
-  include_directories(AFTER
-    ${BUGSPLAT_INCLUDE_DIR}
-    )
-endif (USE_BUGSPLAT)
 
 set(viewer_SOURCE_FILES
     groupchatlistener.cpp
@@ -1428,7 +1377,7 @@ if (DARWIN)
 
   if (USE_BUGSPLAT)
     list(APPEND viewer_LIBRARIES
-      ${BUGSPLAT_LIBRARIES}
+      bugsplat::bugsplat
       )
   endif (USE_BUGSPLAT)
 
@@ -2023,54 +1972,41 @@ endif (WINDOWS)
 # modern version.
 
 target_link_libraries(${VIEWER_BINARY_NAME}
-    ${LEGACY_STDIO_LIBS}
-    ${PNG_PRELOAD_ARCHIVES}
-    ${ZLIBNG_PRELOAD_ARCHIVES}
-    ${URIPARSER_PRELOAD_ARCHIVES}
-    ${GOOGLE_PERFTOOLS_LIBRARIES}
-    ${LLAUDIO_LIBRARIES}
-    ${LLCHARACTER_LIBRARIES}
-    ${LLIMAGE_LIBRARIES}
-    ${LLINVENTORY_LIBRARIES}
-    ${LLMESSAGE_LIBRARIES}
-    ${LLPLUGIN_LIBRARIES}
-    ${LLPRIMITIVE_LIBRARIES}
-    ${LLRENDER_LIBRARIES}
-    ${FREETYPE_LIBRARIES}
-    ${LLUI_LIBRARIES}
-    ${LLFILESYSTEM_LIBRARIES}
-    ${LLWINDOW_LIBRARIES}
-    ${LLXML_LIBRARIES}
-    ${LLMATH_LIBRARIES}
-    ${LLCOREHTTP_LIBRARIES}
-    ${LLCOMMON_LIBRARIES}
-    ${NDOF_LIBRARY}
-    ${NVAPI_LIBRARY}
-    ${HUNSPELL_LIBRARY}
-    ${viewer_LIBRARIES}
-    ${BOOST_PROGRAM_OPTIONS_LIBRARY}
-    ${BOOST_REGEX_LIBRARY}
-    ${BOOST_FIBER_LIBRARY}
-    ${BOOST_CONTEXT_LIBRARY}
-    ${DBUSGLIB_LIBRARIES}
-    ${OPENGL_LIBRARIES}
-    ${FMODWRAPPER_LIBRARY} # must come after LLAudio
-    ${GLOD_LIBRARIES}
-    ${OPENGL_LIBRARIES}
-    ${JSONCPP_LIBRARIES}
-    ${SDL_LIBRARY}
-    ${SMARTHEAP_LIBRARY}
-    ${UI_LIBRARIES}
-    ${WINDOWS_LIBRARIES}
-    ${EXPAT_LIBRARIES}
-    ${XMLRPCEPI_LIBRARIES}
-    ${OPENSSL_LIBRARIES}
-    ${CRYPTO_LIBRARIES}
-    ${LLLOGIN_LIBRARIES}
-    ${LLPHYSICS_LIBRARIES}
-    ${LLPHYSICSEXTENSIONS_LIBRARIES}
-    ${LLAPPEARANCE_LIBRARIES}
-    )
+        ${LEGACY_STDIO_LIBS}
+        llaudio
+        llcharacter
+        llimage
+        llinventory
+        llmessage
+        llplugin
+        llprimitive
+        llrender
+        llui
+        llfilesystem
+        llwindow
+        llxml
+        llmath
+        llcorehttp
+        llcommon
+        ${viewer_LIBRARIES}
+        ${FMODWRAPPER_LIBRARY} # must come after LLAudio
+        glod::glod
+        ndof::ndof
+        ${SDL_LIBRARY}
+        ${SMARTHEAP_LIBRARY}
+        ${UI_LIBRARIES}
+        ${WINDOWS_LIBRARIES}
+        lllogin
+        llprimitive
+        llappearance
+        ${LLPHYSICS_LIBRARIES}
+        ${LLPHYSICSEXTENSIONS_LIBRARIES}
+        )
+
+if( TARGET nvapi::nvapi )
+   target_link_libraries(${VIEWER_BINARY_NAME} nvapi::nvapi )
+endif()
+
 
 if (USE_BUGSPLAT)
   target_link_libraries(${VIEWER_BINARY_NAME}
@@ -2386,10 +2322,15 @@ if (LL_TESTS)
   )
 
   set(test_libs
-    ${LLCOMMON_LIBRARIES}
-    ${JSONCPP_LIBRARIES}
-    ${CURL_LIBRARIES}
-    ${NGHTTP2_LIBRARIES}
+          llcommon
+          llfilesystem
+          llxml
+          llmessage
+          llcharacter
+          llui
+          lllogin
+          llplugin
+          llappearance
     )
 
   set_source_files_properties(
@@ -2398,17 +2339,6 @@ if (LL_TESTS)
     LL_TEST_ADDITIONAL_LIBRARIES "${test_libs}"
   )
 
-  set_source_files_properties(
-    llviewerhelputil.cpp
-    PROPERTIES
-    LL_TEST_ADDITIONAL_LIBRARIES "${BOOST_SYSTEM_LIBRARY}"
-  )
-
-  set_source_files_properties(
-    llremoteparcelrequest.cpp
-    PROPERTIES
-    LL_TEST_ADDITIONAL_LIBRARIES "${BOOST_SYSTEM_LIBRARY}"
-  )
 
   set_source_files_properties(
     llworldmap.cpp
@@ -2416,27 +2346,23 @@ if (LL_TESTS)
     PROPERTIES
     LL_TEST_ADDITIONAL_SOURCE_FILES
     tests/llviewertexture_stub.cpp
-    #llviewertexturelist.cpp
-    LL_TEST_ADDITIONAL_LIBRARIES "${BOOST_SYSTEM_LIBRARY}"
   )
 
   set_source_files_properties(
     llmediadataclient.cpp
     PROPERTIES
-    LL_TEST_ADDITIONAL_LIBRARIES "${LLPRIMITIVE_LIBRARIES}"
-  )
-
-  set_source_files_properties(
-    llagentaccess.cpp
-    PROPERTIES
-    LL_TEST_ADDITIONAL_LIBRARIES "${BOOST_SYSTEM_LIBRARY}"
+    LL_TEST_ADDITIONAL_LIBRARIES llprimitive
   )
 
   set_source_files_properties(
     lllogininstance.cpp
     PROPERTIES
     LL_TEST_ADDITIONAL_SOURCE_FILES llversioninfo.cpp
-    LL_TEST_ADDITIONAL_LIBRARIES "${BOOST_SYSTEM_LIBRARY}"
+  )
+  set_property( SOURCE
+          ${viewer_TEST_SOURCE_FILES}
+          PROPERTY
+          LL_TEST_ADDITIONAL_LIBRARIES ${test_libs}
   )
 
   ##################################################
@@ -2458,41 +2384,29 @@ if (LL_TESTS)
   # if(USE_PRECOMPILED_HEADERS)
   #     set(test_sources "${test_sources}" llviewerprecompiledheaders.cpp)
   # endif(USE_PRECOMPILED_HEADERS)
-  set(test_libs
-    ${LLMESSAGE_LIBRARIES}
-    ${WINDOWS_LIBRARIES}
-    ${LLFILESYSTEM_LIBRARIES}
-    ${LLMATH_LIBRARIES}
-    ${LLCOMMON_LIBRARIES}
-    ${GOOGLEMOCK_LIBRARIES}
-    )
 
-  if (LINUX)
-    # llcommon uses `clock_gettime' which is provided by librt on linux.
-    set(LIBRT_LIBRARY
-      rt
-      )
-  endif (LINUX)
 
   set(test_libs
-    ${WINDOWS_LIBRARIES}
-    ${LLFILESYSTEM_LIBRARIES}
-    ${LLMATH_LIBRARIES}
-    ${LLCOMMON_LIBRARIES}
-    ${LLMESSAGE_LIBRARIES}
-    ${LLCOREHTTP_LIBRARIES}
-    ${GOOGLEMOCK_LIBRARIES}
-    ${OPENSSL_LIBRARIES}
-    ${CRYPTO_LIBRARIES}
-    ${LIBRT_LIBRARY}
-    ${BOOST_FIBER_LIBRARY}
-    ${BOOST_CONTEXT_LIBRARY}
-  )
+          ${WINDOWS_LIBRARIES}
+          llfilesystem
+          llmath
+          llcommon
+          llmessage
+          llcorehttp
+          llxml
+          llui
+          llplugin
+          llappearance
+          lllogin
+          llprimitive
+          lllogin
+          )
 
   LL_ADD_INTEGRATION_TEST(cppfeatures
     ""
     "${test_libs}"
     )
+
   LL_ADD_INTEGRATION_TEST(llsechandler_basic
     llsechandler_basic.cpp
     "${test_libs}"
@@ -2508,7 +2422,6 @@ if (LL_TESTS)
       llviewernetwork.cpp
   )
 
-
   LL_ADD_INTEGRATION_TEST(llslurl
      "${llslurl_test_sources}"
     "${test_libs}"
@@ -2531,15 +2444,6 @@ if (LL_TESTS)
   #ADD_VIEWER_BUILD_TEST(lltextureinfo viewer)
   #ADD_VIEWER_BUILD_TEST(lltextureinfodetails viewer)
 
-include(LLAddBuildTest)
-SET(viewer_TEST_SOURCE_FILES
-  llagentaccess.cpp
-  )
-set_source_files_properties(
-  ${viewer_TEST_SOURCE_FILES}
-  PROPERTIES
-    LL_TEST_ADDITIONAL_SOURCE_FILES llviewerprecompiledheaders.cpp
-  )
 
 endif (LL_TESTS)
 
diff --git a/indra/test/CMakeLists.txt b/indra/test/CMakeLists.txt
index 084aa8d9f7f..1e9fdfa0036 100644
--- a/indra/test/CMakeLists.txt
+++ b/indra/test/CMakeLists.txt
@@ -5,11 +5,6 @@ project (lltest)
 include(00-Common)
 include(LLCommon)
 include(LLCoreHttp)
-include(LLInventory)
-include(LLMath)
-include(LLMessage)
-include(LLFileSystem)
-include(LLXML)
 include(Linking)
 include(Tut)
 include(LLAddBuildTest)
@@ -88,27 +83,18 @@ if (USE_BUGSPLAT)
 endif (USE_BUGSPLAT)
 
 target_link_libraries(lltest
-    ${LEGACY_STDIO_LIBS}
-    ${LLDATABASE_LIBRARIES}
-    ${LLINVENTORY_LIBRARIES}
-    ${LLMESSAGE_LIBRARIES}
-    ${LLMATH_LIBRARIES}
-    ${LLFILESYSTEM_LIBRARIES}
-    ${LLXML_LIBRARIES}
-    ${LSCRIPT_LIBRARIES}
-    ${LLCOMMON_LIBRARIES}
-    ${LLCOREHTTP_LIBRARIES}
-    ${EXPAT_LIBRARIES}
-    ${GOOGLEMOCK_LIBRARIES}
-    ${PTHREAD_LIBRARY}
-    ${WINDOWS_LIBRARIES}
-    ${BOOST_PROGRAM_OPTIONS_LIBRARY}
-    ${BOOST_REGEX_LIBRARY}
-    ${BOOST_FIBER_LIBRARY}
-    ${BOOST_CONTEXT_LIBRARY}
-    ${BOOST_SYSTEM_LIBRARY}
-    ${DL_LIBRARY}
-    )
+        ${LEGACY_STDIO_LIBS}
+        ${LLDATABASE_LIBRARIES}
+        llinventory
+        llmessage
+        llmath
+        llfilesystem
+        llxml
+        llcommon
+        llcorehttp
+        ${WINDOWS_LIBRARIES}
+        ${DL_LIBRARY}
+        )
 
 if (WINDOWS)
   set_target_properties(lltest
diff --git a/indra/viewer_components/login/CMakeLists.txt b/indra/viewer_components/login/CMakeLists.txt
index 23518b791c0..0508a17f3a5 100644
--- a/indra/viewer_components/login/CMakeLists.txt
+++ b/indra/viewer_components/login/CMakeLists.txt
@@ -7,21 +7,7 @@ if(LL_TESTS)
   include(LLAddBuildTest)
 endif(LL_TESTS)
 include(LLCommon)
-include(LLMath)
-include(LLXML)
-include(Boost)
 include(LLCoreHttp)
-include(LLMessage)
-
-include_directories(
-    ${LLCOMMON_INCLUDE_DIRS}
-    ${LLMATH_INCLUDE_DIRS}
-    ${LLXML_INCLUDE_DIRS}
-    )
-include_directories(SYSTEM
-    ${LLCOMMON_SYSTEM_INCLUDE_DIRS}
-    ${LLXML_SYSTEM_INCLUDE_DIRS}
-    )
 
 set(login_SOURCE_FILES
     lllogin.cpp
@@ -42,17 +28,14 @@ list(APPEND
 add_library(lllogin 
             ${login_SOURCE_FILES}
             )
+set_target_include_dirs( lllogin ${CMAKE_CURRENT_SOURCE_DIR})
 
 target_link_libraries(lllogin
-    ${LLMESSAGE_LIBRARIES}
-    ${LLCOREHTTP_LIBRARIES}
-    ${LLCOMMON_LIBRARIES}
-    ${LLMATH_LIBRARIES}
-    ${LLXML_LIBRARIES}
-    ${BOOST_THREAD_LIBRARY}
-    ${BOOST_FIBER_LIBRARY}
-    ${BOOST_CONTEXT_LIBRARY}
-    ${BOOST_SYSTEM_LIBRARY}
+        llmessage
+        llcorehttp
+        llcommon
+        llmath
+        llxml
     )
 
 if(LL_TESTS)
@@ -62,7 +45,7 @@ if(LL_TESTS)
   set_source_files_properties(
     lllogin.cpp
     PROPERTIES
-    LL_TEST_ADDITIONAL_LIBRARIES "${LLMESSAGE_LIBRARIES};${LLCOREHTTP_LIBRARIES};${LLCOMMON_LIBRARIES};${BOOST_FIBER_LIBRARY};${BOOST_CONTEXT_LIBRARY};${BOOST_THREAD_LIBRARY};${BOOST_SYSTEM_LIBRARY}"
+    LL_TEST_ADDITIONAL_LIBRARIES llmessage llcorehttp llcommon
     )
 
   LL_ADD_PROJECT_UNIT_TESTS(lllogin "${lllogin_TEST_SOURCE_FILES}")
-- 
GitLab