CMakeLists: Allow overriding of building cppdap

Outer projects may already build this target, in which case we don't want to build it again.

Bug: b/148010928
Change-Id: I19eea95eb81f13495268f5109d5554ef16033598
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/40330
Reviewed-by: Antonio Maiorano <amaiorano@google.com>
Tested-by: Ben Clayton <bclayton@google.com>
Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
diff --git a/CMakeLists.txt b/CMakeLists.txt
index e5f2ad9..cd93e62 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -94,6 +94,12 @@
     endif()
 endfunction()
 
+function (set_if_not_defined name value)
+    if(NOT DEFINED ${name})
+        set(${name} ${value} PARENT_SCOPE)
+    endif()
+endfunction()
+
 option_if_not_defined(SWIFTSHADER_BUILD_EGL "Build the EGL library" 1)
 option_if_not_defined(SWIFTSHADER_BUILD_GLESv2 "Build the OpenGL ES 2 library" 1)
 option_if_not_defined(SWIFTSHADER_BUILD_GLES_CM "Build the OpenGL ES 1.1 library" 1)
@@ -120,9 +126,9 @@
 set(BUILD_MARL ${SWIFTSHADER_BUILD_VULKAN})
 
 if(${SWIFTSHADER_BUILD_VULKAN} AND ${SWIFTSHADER_ENABLE_VULKAN_DEBUGGER})
-    set(BUILD_CPPDAP 1)
+    set_if_not_defined(SWIFTSHADER_BUILD_CPPDAP 1)
 else()
-    set(BUILD_CPPDAP 0)
+    set_if_not_defined(SWIFTSHADER_BUILD_CPPDAP 0)
 endif()
 
 set(DEFAULT_REACTOR_BACKEND "LLVM")
@@ -2086,10 +2092,10 @@
     add_subdirectory(third_party/marl)
 endif(BUILD_MARL)
 
-if(BUILD_CPPDAP)
+if(SWIFTSHADER_BUILD_CPPDAP)
     set(CPPDAP_THIRD_PARTY_DIR ${THIRD_PARTY_DIR})
     add_subdirectory(${CPPDAP_DIR})
-endif(BUILD_CPPDAP)
+endif(SWIFTSHADER_BUILD_CPPDAP)
 
 if(SWIFTSHADER_BUILD_VULKAN)
     add_library(vk_swiftshader SHARED ${VULKAN_LIST})
@@ -2100,21 +2106,21 @@
         list(APPEND VULKAN_INCLUDE_DIR "${SPIRV-Headers_SOURCE_DIR}/include")
 
         add_subdirectory(third_party/SPIRV-Tools)
+    endif(NOT TARGET SPIRV-Tools)
 
-        # Copy the OpenCLDebugInfo100.h header that's generated by SPIRV-Tools
-        # out to a separate directory that can be added to the include path.
-        # Ideally, this header would just be pre-built and part of SPIRV-Headers.
-        # See: https://github.com/KhronosGroup/SPIRV-Headers/issues/137
-        set(SPIRV_TOOLS_EXT_INC_DIR ${CMAKE_CURRENT_BINARY_DIR}/spirv-tools-ext/include)
-        add_custom_target(spirv_tools_ext_includes
-            DEPENDS spirv-tools-header-OpenCLDebugInfo100
-            COMMAND ${CMAKE_COMMAND} -E copy
-                ${spirv-tools_BINARY_DIR}/OpenCLDebugInfo100.h
-                ${SPIRV_TOOLS_EXT_INC_DIR}/spirv-tools/ext/OpenCLDebugInfo100.h
-        )
-        list(APPEND VULKAN_INCLUDE_DIR "${SPIRV_TOOLS_EXT_INC_DIR}")
-        add_dependencies(vk_swiftshader spirv_tools_ext_includes)
-    endif()
+    # Copy the OpenCLDebugInfo100.h header that's generated by SPIRV-Tools
+    # out to a separate directory that can be added to the include path.
+    # Ideally, this header would just be pre-built and part of SPIRV-Headers.
+    # See: https://github.com/KhronosGroup/SPIRV-Headers/issues/137
+    set(SPIRV_TOOLS_EXT_INC_DIR ${CMAKE_CURRENT_BINARY_DIR}/spirv-tools-ext/include)
+    add_custom_target(spirv_tools_ext_includes
+        DEPENDS spirv-tools-header-OpenCLDebugInfo100
+        COMMAND ${CMAKE_COMMAND} -E copy
+            ${spirv-tools_BINARY_DIR}/OpenCLDebugInfo100.h
+            ${SPIRV_TOOLS_EXT_INC_DIR}/spirv-tools/ext/OpenCLDebugInfo100.h
+    )
+    list(APPEND VULKAN_INCLUDE_DIR "${SPIRV_TOOLS_EXT_INC_DIR}")
+    add_dependencies(vk_swiftshader spirv_tools_ext_includes)
 
     set_target_properties(vk_swiftshader PROPERTIES
         INCLUDE_DIRECTORIES "${VULKAN_INCLUDE_DIR}"