Allow the setting of dependency source code path

Test: build
Bug: 155491613
Change-Id: Ida07a09c4b901ee6ff3e87e433592dd2914694a7
diff --git a/hal/vehicle/2.0/agl_build/CMakeLists.txt b/hal/vehicle/2.0/agl_build/CMakeLists.txt
index 3281351..184c01c 100644
--- a/hal/vehicle/2.0/agl_build/CMakeLists.txt
+++ b/hal/vehicle/2.0/agl_build/CMakeLists.txt
@@ -26,6 +26,10 @@
 set(trout_PREBUILT_DIR ${trout_VHAL_SRC_ROOT}/agl_build/prebuilt)
 set(trout_GENS_DIR ${trout_VHAL_SRC_ROOT}/agl_build/build/gens)
 
+if (NOT trout_NATIVE_VHAL_ROOT_DIR)
+    set(trout_NATIVE_VHAL_ROOT_DIR ${trout_VHAL_SRC_ROOT}/agl_build/third_party/default_native_vhal)
+endif()
+
 # ========== grpc proto prebuilts =================
 
 find_program(trout_PROTOC aprotoc REQUIRED)
@@ -43,7 +47,7 @@
   endif()
 
   set(_protobuf_include_path -I . -I ${_trout_PROTOBUF_WELLKNOWN_INCLUDE_DIR}
-      -I ${trout_VHAL_SRC_ROOT}/agl_build/third_party/default_native_vhal/impl/vhal_v2_0/proto)
+      -I ${trout_NATIVE_VHAL_ROOT_DIR}/impl/vhal_v2_0/proto)
 
   foreach(FIL ${ARGN})
     get_filename_component(ABS_FIL ${FIL} ABSOLUTE)
@@ -73,7 +77,7 @@
 
 
 trout_generate_grpc_cpp_from_proto(
-    ${trout_VHAL_SRC_ROOT}/agl_build/third_party/default_native_vhal/impl/vhal_v2_0/proto/VehicleHalProto.proto
+    ${trout_NATIVE_VHAL_ROOT_DIR}/impl/vhal_v2_0/proto/VehicleHalProto.proto
     ${trout_VHAL_SRC_ROOT}/proto/VehicleServer.proto)
 
 # ========== Protobuf generated code ==================
diff --git a/hal/vehicle/2.0/agl_build/cmake/android.cmake b/hal/vehicle/2.0/agl_build/cmake/android.cmake
index 6b37aac..3284793 100644
--- a/hal/vehicle/2.0/agl_build/cmake/android.cmake
+++ b/hal/vehicle/2.0/agl_build/cmake/android.cmake
@@ -1,4 +1,6 @@
-set(trout_ANDROID_SYSCORE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/third_party/android/system_core")
+if(NOT trout_ANDROID_SYSCORE_DIR)
+    set(trout_ANDROID_SYSCORE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/third_party/android/system_core")
+endif()
 
 set(_trout_ANDROID_CXX_FLAGS -Wall -Werror -Wextra -std=c++17)
 
@@ -19,66 +21,73 @@
 
 # =========== libbase =================
 
-add_library(${trout_ANDROID_LIBBASE_LIBRARY}
-    ${trout_ANDROID_LIBBASE_DIR}/liblog_symbols.cpp
-    ${trout_ANDROID_LIBBASE_DIR}/logging.cpp
-    ${trout_ANDROID_LIBBASE_DIR}/strings.cpp
-    ${trout_ANDROID_LIBBASE_DIR}/threads.cpp
-)
+if (NOT TARGET ${trout_ANDROID_LIBBASE_LIBRARY})
+    add_library(${trout_ANDROID_LIBBASE_LIBRARY}
+        ${trout_ANDROID_LIBBASE_DIR}/liblog_symbols.cpp
+        ${trout_ANDROID_LIBBASE_DIR}/logging.cpp
+        ${trout_ANDROID_LIBBASE_DIR}/strings.cpp
+        ${trout_ANDROID_LIBBASE_DIR}/stringprintf.cpp
+        ${trout_ANDROID_LIBBASE_DIR}/threads.cpp
+    )
 
-target_include_directories(${trout_ANDROID_LIBBASE_LIBRARY}
-    PUBLIC ${trout_ANDROID_LIBBASE_INCLUDE_DIR}
-    PRIVATE ${trout_FMTLIB_INCLUDE_DIRS}
-)
+    target_include_directories(${trout_ANDROID_LIBBASE_LIBRARY}
+        PUBLIC ${trout_ANDROID_LIBBASE_INCLUDE_DIR}
+        PRIVATE ${trout_FMTLIB_INCLUDE_DIRS}
+    )
 
-target_link_libraries(${trout_ANDROID_LIBBASE_LIBRARY}
-    ${trout_ANDROID_LIBLOG_LIBRARY}
-    ${trout_FMTLIB_LIBRARIES}
-)
+    target_link_libraries(${trout_ANDROID_LIBBASE_LIBRARY}
+        ${trout_ANDROID_LIBLOG_LIBRARY}
+        ${trout_FMTLIB_LIBRARIES}
+    )
 
-target_compile_options(${trout_ANDROID_LIBBASE_LIBRARY} PRIVATE ${_trout_ANDROID_CXX_FLAGS})
+    target_compile_options(${trout_ANDROID_LIBBASE_LIBRARY} PRIVATE ${_trout_ANDROID_CXX_FLAGS})
+endif()
 
 
 # =========== liblog =================
 
-add_library(${trout_ANDROID_LIBLOG_LIBRARY}
-    ${trout_ANDROID_LIBLOG_DIR}/logger_write.cpp
-    ${trout_ANDROID_LIBLOG_DIR}/properties.cpp
-)
+if (NOT TARGET ${trout_ANDROID_LIBLOG_LIBRARY})
+    add_library(${trout_ANDROID_LIBLOG_LIBRARY}
+        ${trout_ANDROID_LIBLOG_DIR}/logger_write.cpp
+        ${trout_ANDROID_LIBLOG_DIR}/properties.cpp
+    )
 
-target_include_directories(${trout_ANDROID_LIBLOG_LIBRARY}
-    PUBLIC ${trout_ANDROID_LIBLOG_INCLUDE_DIR}
-    PRIVATE ${trout_ANDROID_LIBBASE_INCLUDE_DIR}
-    PRIVATE ${trout_ANDROID_LIBCUTLS_INCLUDE_DIR}
-)
+    target_include_directories(${trout_ANDROID_LIBLOG_LIBRARY}
+        PUBLIC ${trout_ANDROID_LIBLOG_INCLUDE_DIR}
+        PRIVATE ${trout_ANDROID_LIBBASE_INCLUDE_DIR}
+        PRIVATE ${trout_ANDROID_LIBCUTLS_INCLUDE_DIR}
+    )
 
-target_compile_options(${trout_ANDROID_LIBLOG_LIBRARY} PRIVATE ${_trout_ANDROID_CXX_FLAGS})
+    target_compile_options(${trout_ANDROID_LIBLOG_LIBRARY} PRIVATE ${_trout_ANDROID_CXX_FLAGS})
+endif()
 
 
 # =========== libutils =================
 
-add_library(${trout_ANDROID_LIBUTILS_LIBRARY}
-     ${trout_ANDROID_LIBUTILS_DIR}/SystemClock.cpp
-     ${trout_ANDROID_LIBUTILS_DIR}/Timers.cpp
-)
+if (NOT TARGET ${trout_ANDROID_LIBUTILS_LIBRARY})
+    add_library(${trout_ANDROID_LIBUTILS_LIBRARY}
+         ${trout_ANDROID_LIBUTILS_DIR}/SystemClock.cpp
+         ${trout_ANDROID_LIBUTILS_DIR}/Timers.cpp
+    )
 
-target_include_directories(${trout_ANDROID_LIBUTILS_LIBRARY}
-    PUBLIC ${trout_ANDROID_LIBUTLS_INCLUDE_DIR}
-    PRIVATE ${trout_ANDROID_LIBCUTLS_INCLUDE_DIR}
-)
+    target_include_directories(${trout_ANDROID_LIBUTILS_LIBRARY}
+        PUBLIC ${trout_ANDROID_LIBUTLS_INCLUDE_DIR}
+        PRIVATE ${trout_ANDROID_LIBCUTLS_INCLUDE_DIR}
+    )
 
-target_link_libraries(${trout_ANDROID_LIBUTILS_LIBRARY}
-    ${trout_ANDROID_LIBLOG_LIBRARY}
-)
+    target_link_libraries(${trout_ANDROID_LIBUTILS_LIBRARY}
+        ${trout_ANDROID_LIBLOG_LIBRARY}
+    )
 
-target_compile_options(${trout_ANDROID_LIBUTILS_LIBRARY} PRIVATE ${_trout_ANDROID_CXX_FLAGS})
-
+    target_compile_options(${trout_ANDROID_LIBUTILS_LIBRARY} PRIVATE ${_trout_ANDROID_CXX_FLAGS})
+endif()
 
 
 # =========== export libraries =================
 
 set(trout_ANDROID_INCLUDE_DIRS
     ${trout_ANDROID_LIBBASE_INCLUDE_DIR}
+    ${trout_ANDROID_LIBCUTLS_INCLUDE_DIR}
 )
 
 set(trout_ANDROID_LIBRARIES
diff --git a/hal/vehicle/2.0/agl_build/cmake/fmtlib.cmake b/hal/vehicle/2.0/agl_build/cmake/fmtlib.cmake
index 4ecef94..c370c50 100644
--- a/hal/vehicle/2.0/agl_build/cmake/fmtlib.cmake
+++ b/hal/vehicle/2.0/agl_build/cmake/fmtlib.cmake
@@ -3,11 +3,13 @@
 endif()
 
 if(EXISTS "${trout_FMTLIB_ROOT_DIR}/CMakeLists.txt")
-  add_subdirectory(${trout_FMTLIB_ROOT_DIR})
-
   set(trout_FMTLIB_INCLUDE_DIRS "${trout_FMTLIB_ROOT_DIR}/include")
   set(trout_FMTLIB_LIBRARIES "fmt")
+  if (NOT TARGET ${trout_FMTLIB_LIBRARIES})
+    add_subdirectory(${trout_FMTLIB_ROOT_DIR} third_party/fmtlib)
+  endif()
+
 else()
-    message(FATAL_ERROR "${trout_FMTLIB_ROOT_DIR}/CMakeLists.txt not found")
+  message(FATAL_ERROR "${trout_FMTLIB_ROOT_DIR}/CMakeLists.txt not found")
 endif()
 
diff --git a/hal/vehicle/2.0/agl_build/cmake/grpc.cmake b/hal/vehicle/2.0/agl_build/cmake/grpc.cmake
index f506756..e3a9ba1 100644
--- a/hal/vehicle/2.0/agl_build/cmake/grpc.cmake
+++ b/hal/vehicle/2.0/agl_build/cmake/grpc.cmake
@@ -3,9 +3,13 @@
 endif()
 
 if(EXISTS "${trout_GRPC_ROOT_DIR}/CMakeLists.txt")
-  add_subdirectory(${trout_GRPC_ROOT_DIR})
   if(TARGET ${_trout_GRPCXX_LIBRARY_NAME})
     set(trout_GRPCXX_LIBRARIES ${_trout_GRPCXX_LIBRARY_NAME})
+  else()
+    set(trout_GRPCXX_LIBRARIES "grpc++")
+  endif()
+  if (NOT TARGET ${trout_GRPCXX_LIBRARIES})
+    add_subdirectory(${trout_GRPC_ROOT_DIR} third_party/grpc)
   endif()
 else()
   message(FATAL_ERROR "${trout_GRPC_ROOT_DIR}/CMakeLists.txt not found")
diff --git a/hal/vehicle/2.0/agl_build/cmake/jsoncpp.cmake b/hal/vehicle/2.0/agl_build/cmake/jsoncpp.cmake
index ae66dc4..7488771 100644
--- a/hal/vehicle/2.0/agl_build/cmake/jsoncpp.cmake
+++ b/hal/vehicle/2.0/agl_build/cmake/jsoncpp.cmake
@@ -3,10 +3,11 @@
 endif()
 
 if(EXISTS "${trout_JSONCPP_ROOT_DIR}/CMakeLists.txt")
-  add_subdirectory(${trout_JSONCPP_ROOT_DIR})
-
   set(trout_JSONCPP_INCLUDE_DIRS "${trout_JSONCPP_ROOT_DIR}/include")
   set(trout_JSONCPP_LIBRARIES "jsoncpp_lib")
+  if (NOT TARGET ${trout_JSONCPP_LIBRARIES})
+    add_subdirectory(${trout_JSONCPP_ROOT_DIR} third_party/jsoncpp)
+  endif()
 else()
     message(FATAL_ERROR "${trout_JSONCPP_ROOT_DIR}/CMakeLists.txt not found")
 endif()