1*03ce13f7SAndroid Build Coastguard Worker# Copyright 2020 The SwiftShader Authors. All Rights Reserved. 2*03ce13f7SAndroid Build Coastguard Worker# 3*03ce13f7SAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); 4*03ce13f7SAndroid Build Coastguard Worker# you may not use this file except in compliance with the License. 5*03ce13f7SAndroid Build Coastguard Worker# You may obtain a copy of the License at 6*03ce13f7SAndroid Build Coastguard Worker# 7*03ce13f7SAndroid Build Coastguard Worker# http://www.apache.org/licenses/LICENSE-2.0 8*03ce13f7SAndroid Build Coastguard Worker# 9*03ce13f7SAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software 10*03ce13f7SAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, 11*03ce13f7SAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*03ce13f7SAndroid Build Coastguard Worker# See the License for the specific language governing permissions and 13*03ce13f7SAndroid Build Coastguard Worker# limitations under the License. 14*03ce13f7SAndroid Build Coastguard Worker 15*03ce13f7SAndroid Build Coastguard Workerset(ROOT_PROJECT_COMPILE_OPTIONS 16*03ce13f7SAndroid Build Coastguard Worker ${SWIFTSHADER_COMPILE_OPTIONS} 17*03ce13f7SAndroid Build Coastguard Worker ${WARNINGS_AS_ERRORS} 18*03ce13f7SAndroid Build Coastguard Worker) 19*03ce13f7SAndroid Build Coastguard Worker 20*03ce13f7SAndroid Build Coastguard Workerset(VULKAN_SRC_FILES 21*03ce13f7SAndroid Build Coastguard Worker libVulkan.cpp 22*03ce13f7SAndroid Build Coastguard Worker main.cpp 23*03ce13f7SAndroid Build Coastguard Worker resource.h 24*03ce13f7SAndroid Build Coastguard Worker Version.hpp 25*03ce13f7SAndroid Build Coastguard Worker VkBuffer.cpp 26*03ce13f7SAndroid Build Coastguard Worker VkBuffer.hpp 27*03ce13f7SAndroid Build Coastguard Worker VkBufferView.cpp 28*03ce13f7SAndroid Build Coastguard Worker VkBufferView.hpp 29*03ce13f7SAndroid Build Coastguard Worker VkCommandBuffer.cpp 30*03ce13f7SAndroid Build Coastguard Worker VkCommandBuffer.hpp 31*03ce13f7SAndroid Build Coastguard Worker VkCommandPool.cpp 32*03ce13f7SAndroid Build Coastguard Worker VkCommandPool.hpp 33*03ce13f7SAndroid Build Coastguard Worker VkConfig.hpp 34*03ce13f7SAndroid Build Coastguard Worker VkDebugUtilsMessenger.cpp 35*03ce13f7SAndroid Build Coastguard Worker VkDebugUtilsMessenger.hpp 36*03ce13f7SAndroid Build Coastguard Worker VkDescriptorPool.cpp 37*03ce13f7SAndroid Build Coastguard Worker VkDescriptorPool.hpp 38*03ce13f7SAndroid Build Coastguard Worker VkDescriptorSet.cpp 39*03ce13f7SAndroid Build Coastguard Worker VkDescriptorSet.hpp 40*03ce13f7SAndroid Build Coastguard Worker VkDescriptorSetLayout.cpp 41*03ce13f7SAndroid Build Coastguard Worker VkDescriptorSetLayout.hpp 42*03ce13f7SAndroid Build Coastguard Worker VkDescriptorUpdateTemplate.cpp 43*03ce13f7SAndroid Build Coastguard Worker VkDescriptorUpdateTemplate.hpp 44*03ce13f7SAndroid Build Coastguard Worker VkDestroy.hpp 45*03ce13f7SAndroid Build Coastguard Worker VkDevice.cpp 46*03ce13f7SAndroid Build Coastguard Worker VkDevice.hpp 47*03ce13f7SAndroid Build Coastguard Worker VkDeviceMemory.cpp 48*03ce13f7SAndroid Build Coastguard Worker VkDeviceMemory.hpp 49*03ce13f7SAndroid Build Coastguard Worker VkDeviceMemoryExternalHost.cpp 50*03ce13f7SAndroid Build Coastguard Worker VkDeviceMemoryExternalHost.hpp 51*03ce13f7SAndroid Build Coastguard Worker VkDeviceMemoryExternalLinux.hpp 52*03ce13f7SAndroid Build Coastguard Worker VkEvent.hpp 53*03ce13f7SAndroid Build Coastguard Worker VkFence.hpp 54*03ce13f7SAndroid Build Coastguard Worker VkFormat.cpp 55*03ce13f7SAndroid Build Coastguard Worker VkFormat.hpp 56*03ce13f7SAndroid Build Coastguard Worker VkFramebuffer.cpp 57*03ce13f7SAndroid Build Coastguard Worker VkFramebuffer.hpp 58*03ce13f7SAndroid Build Coastguard Worker VkGetProcAddress.cpp 59*03ce13f7SAndroid Build Coastguard Worker VkGetProcAddress.hpp 60*03ce13f7SAndroid Build Coastguard Worker VkImage.cpp 61*03ce13f7SAndroid Build Coastguard Worker VkImage.hpp 62*03ce13f7SAndroid Build Coastguard Worker VkImageView.cpp 63*03ce13f7SAndroid Build Coastguard Worker VkImageView.hpp 64*03ce13f7SAndroid Build Coastguard Worker VkInstance.cpp 65*03ce13f7SAndroid Build Coastguard Worker VkInstance.hpp 66*03ce13f7SAndroid Build Coastguard Worker VkMemory.cpp 67*03ce13f7SAndroid Build Coastguard Worker VkMemory.hpp 68*03ce13f7SAndroid Build Coastguard Worker VkObject.hpp 69*03ce13f7SAndroid Build Coastguard Worker VkPhysicalDevice.cpp 70*03ce13f7SAndroid Build Coastguard Worker VkPhysicalDevice.hpp 71*03ce13f7SAndroid Build Coastguard Worker VkPipeline.cpp 72*03ce13f7SAndroid Build Coastguard Worker VkPipeline.hpp 73*03ce13f7SAndroid Build Coastguard Worker VkPipelineCache.cpp 74*03ce13f7SAndroid Build Coastguard Worker VkPipelineCache.hpp 75*03ce13f7SAndroid Build Coastguard Worker VkPrivateData.hpp 76*03ce13f7SAndroid Build Coastguard Worker VkSpecializationInfo.cpp 77*03ce13f7SAndroid Build Coastguard Worker VkSpecializationInfo.hpp 78*03ce13f7SAndroid Build Coastguard Worker VkPipelineLayout.cpp 79*03ce13f7SAndroid Build Coastguard Worker VkPipelineLayout.hpp 80*03ce13f7SAndroid Build Coastguard Worker VkPromotedExtensions.cpp 81*03ce13f7SAndroid Build Coastguard Worker VkQueryPool.cpp 82*03ce13f7SAndroid Build Coastguard Worker VkQueryPool.hpp 83*03ce13f7SAndroid Build Coastguard Worker VkQueue.cpp 84*03ce13f7SAndroid Build Coastguard Worker VkQueue.hpp 85*03ce13f7SAndroid Build Coastguard Worker VkRenderPass.cpp 86*03ce13f7SAndroid Build Coastguard Worker VkRenderPass.hpp 87*03ce13f7SAndroid Build Coastguard Worker VkSampler.cpp 88*03ce13f7SAndroid Build Coastguard Worker VkSampler.hpp 89*03ce13f7SAndroid Build Coastguard Worker VkSemaphore.cpp 90*03ce13f7SAndroid Build Coastguard Worker VkSemaphore.hpp 91*03ce13f7SAndroid Build Coastguard Worker VkSemaphoreExternalFuchsia.hpp 92*03ce13f7SAndroid Build Coastguard Worker VkSemaphoreExternalLinux.hpp 93*03ce13f7SAndroid Build Coastguard Worker VkShaderModule.cpp 94*03ce13f7SAndroid Build Coastguard Worker VkShaderModule.hpp 95*03ce13f7SAndroid Build Coastguard Worker VkStringify.cpp 96*03ce13f7SAndroid Build Coastguard Worker VkStringify.hpp 97*03ce13f7SAndroid Build Coastguard Worker VkStructConversion.hpp 98*03ce13f7SAndroid Build Coastguard Worker VkTimelineSemaphore.cpp 99*03ce13f7SAndroid Build Coastguard Worker VkTimelineSemaphore.hpp 100*03ce13f7SAndroid Build Coastguard Worker VulkanPlatform.hpp 101*03ce13f7SAndroid Build Coastguard Worker) 102*03ce13f7SAndroid Build Coastguard Worker 103*03ce13f7SAndroid Build Coastguard Workerif(WIN32) 104*03ce13f7SAndroid Build Coastguard Worker list(APPEND VULKAN_SRC_FILES 105*03ce13f7SAndroid Build Coastguard Worker Vulkan.rc 106*03ce13f7SAndroid Build Coastguard Worker ) 107*03ce13f7SAndroid Build Coastguard Workerendif() 108*03ce13f7SAndroid Build Coastguard Worker 109*03ce13f7SAndroid Build Coastguard Workerif(SWIFTSHADER_ENABLE_VULKAN_DEBUGGER) 110*03ce13f7SAndroid Build Coastguard Worker list(APPEND VULKAN_SRC_FILES 111*03ce13f7SAndroid Build Coastguard Worker Debug/Context.cpp 112*03ce13f7SAndroid Build Coastguard Worker Debug/Context.hpp 113*03ce13f7SAndroid Build Coastguard Worker Debug/Debug.cpp 114*03ce13f7SAndroid Build Coastguard Worker Debug/EventListener.cpp 115*03ce13f7SAndroid Build Coastguard Worker Debug/EventListener.hpp 116*03ce13f7SAndroid Build Coastguard Worker Debug/File.cpp 117*03ce13f7SAndroid Build Coastguard Worker Debug/File.hpp 118*03ce13f7SAndroid Build Coastguard Worker Debug/ID.hpp 119*03ce13f7SAndroid Build Coastguard Worker Debug/Location.hpp 120*03ce13f7SAndroid Build Coastguard Worker Debug/Server.cpp 121*03ce13f7SAndroid Build Coastguard Worker Debug/Server.hpp 122*03ce13f7SAndroid Build Coastguard Worker Debug/Thread.cpp 123*03ce13f7SAndroid Build Coastguard Worker Debug/Thread.hpp 124*03ce13f7SAndroid Build Coastguard Worker Debug/TypeOf.cpp 125*03ce13f7SAndroid Build Coastguard Worker Debug/TypeOf.hpp 126*03ce13f7SAndroid Build Coastguard Worker Debug/Value.cpp 127*03ce13f7SAndroid Build Coastguard Worker Debug/Value.hpp 128*03ce13f7SAndroid Build Coastguard Worker Debug/Variable.cpp 129*03ce13f7SAndroid Build Coastguard Worker Debug/Variable.hpp 130*03ce13f7SAndroid Build Coastguard Worker Debug/WeakMap.hpp 131*03ce13f7SAndroid Build Coastguard Worker ) 132*03ce13f7SAndroid Build Coastguard Workerendif() 133*03ce13f7SAndroid Build Coastguard Worker 134*03ce13f7SAndroid Build Coastguard Workerset(VULKAN_COMPILE_OPTIONS "") 135*03ce13f7SAndroid Build Coastguard Workerif(FUCHSIA) 136*03ce13f7SAndroid Build Coastguard Worker # At the moment, the Fuchsia build uses unofficial VK_STRUCTURE_TYPE_XX 137*03ce13f7SAndroid Build Coastguard Worker # constants that are defined as macros in <vulkan/fuchsia_extras.h>. When 138*03ce13f7SAndroid Build Coastguard Worker # these appear in switch() cases, the compiler complains that the values 139*03ce13f7SAndroid Build Coastguard Worker # are not part of the VkStructureType enum. Silence this warning, until 140*03ce13f7SAndroid Build Coastguard Worker # the constants are upstreamed to the official Vulkan headers. 141*03ce13f7SAndroid Build Coastguard Worker list(APPEND VULKAN_COMPILE_OPTIONS "-Wno-switch") 142*03ce13f7SAndroid Build Coastguard Workerendif() 143*03ce13f7SAndroid Build Coastguard Workerif(CMAKE_CXX_COMPILER_ID MATCHES "Clang") 144*03ce13f7SAndroid Build Coastguard Worker list(APPEND VULKAN_COMPILE_OPTIONS 145*03ce13f7SAndroid Build Coastguard Worker # TODO(b/208256248): Avoid exit-time destructor. 146*03ce13f7SAndroid Build Coastguard Worker #"-Wexit-time-destructors" # declaration requires an exit-time destructor 147*03ce13f7SAndroid Build Coastguard Worker ) 148*03ce13f7SAndroid Build Coastguard Workerendif() 149*03ce13f7SAndroid Build Coastguard Worker 150*03ce13f7SAndroid Build Coastguard Workerset(VULKAN_LINKER_FLAGS "") 151*03ce13f7SAndroid Build Coastguard Workerif(FUCHSIA) 152*03ce13f7SAndroid Build Coastguard Worker # On Fuchsia, the Vulkan ICD is loaded into a process sandbox that doesn't 153*03ce13f7SAndroid Build Coastguard Worker # have system libraries available, so ensure it does not depend on libc++.so. 154*03ce13f7SAndroid Build Coastguard Worker list(APPEND VULKAN_LINKER_FLAGS "-static-libstdc++") 155*03ce13f7SAndroid Build Coastguard Workerendif() 156*03ce13f7SAndroid Build Coastguard Worker 157*03ce13f7SAndroid Build Coastguard Workeradd_library(vk_swiftshader SHARED 158*03ce13f7SAndroid Build Coastguard Worker ${VULKAN_SRC_FILES} 159*03ce13f7SAndroid Build Coastguard Worker) 160*03ce13f7SAndroid Build Coastguard Worker 161*03ce13f7SAndroid Build Coastguard Workerset_target_properties(vk_swiftshader PROPERTIES 162*03ce13f7SAndroid Build Coastguard Worker POSITION_INDEPENDENT_CODE 1 163*03ce13f7SAndroid Build Coastguard Worker FOLDER "SwiftShader VK" 164*03ce13f7SAndroid Build Coastguard Worker RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}" 165*03ce13f7SAndroid Build Coastguard Worker LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}" 166*03ce13f7SAndroid Build Coastguard Worker) 167*03ce13f7SAndroid Build Coastguard Worker 168*03ce13f7SAndroid Build Coastguard Workertarget_include_directories(vk_swiftshader 169*03ce13f7SAndroid Build Coastguard Worker PRIVATE 170*03ce13f7SAndroid Build Coastguard Worker ".." 171*03ce13f7SAndroid Build Coastguard Worker) 172*03ce13f7SAndroid Build Coastguard Worker 173*03ce13f7SAndroid Build Coastguard Workertarget_compile_options(vk_swiftshader 174*03ce13f7SAndroid Build Coastguard Worker PRIVATE 175*03ce13f7SAndroid Build Coastguard Worker ${ROOT_PROJECT_COMPILE_OPTIONS} 176*03ce13f7SAndroid Build Coastguard Worker ${VULKAN_COMPILE_OPTIONS} 177*03ce13f7SAndroid Build Coastguard Worker) 178*03ce13f7SAndroid Build Coastguard Worker 179*03ce13f7SAndroid Build Coastguard Workertarget_compile_definitions(vk_swiftshader 180*03ce13f7SAndroid Build Coastguard Worker PRIVATE 181*03ce13f7SAndroid Build Coastguard Worker "VK_EXPORT=" 182*03ce13f7SAndroid Build Coastguard Worker $<$<CONFIG:Debug>:"DEBUGGER_WAIT_DIALOG"> 183*03ce13f7SAndroid Build Coastguard Worker) 184*03ce13f7SAndroid Build Coastguard Worker 185*03ce13f7SAndroid Build Coastguard Workertarget_link_options(vk_swiftshader 186*03ce13f7SAndroid Build Coastguard Worker PRIVATE 187*03ce13f7SAndroid Build Coastguard Worker ${SWIFTSHADER_LINK_FLAGS} 188*03ce13f7SAndroid Build Coastguard Worker ${VULKAN_LINKER_FLAGS} 189*03ce13f7SAndroid Build Coastguard Worker) 190*03ce13f7SAndroid Build Coastguard Worker 191*03ce13f7SAndroid Build Coastguard Workertarget_link_libraries(vk_swiftshader 192*03ce13f7SAndroid Build Coastguard Worker PRIVATE 193*03ce13f7SAndroid Build Coastguard Worker vk_system 194*03ce13f7SAndroid Build Coastguard Worker vk_pipeline 195*03ce13f7SAndroid Build Coastguard Worker vk_device 196*03ce13f7SAndroid Build Coastguard Worker vk_wsi 197*03ce13f7SAndroid Build Coastguard Worker Reactor 198*03ce13f7SAndroid Build Coastguard Worker marl 199*03ce13f7SAndroid Build Coastguard Worker ${OS_LIBS} 200*03ce13f7SAndroid Build Coastguard Worker ${SWIFTSHADER_LIBS} 201*03ce13f7SAndroid Build Coastguard Worker $<$<BOOL:${SWIFTSHADER_ENABLE_VULKAN_DEBUGGER}>:cppdap> 202*03ce13f7SAndroid Build Coastguard Worker) 203*03ce13f7SAndroid Build Coastguard Worker 204*03ce13f7SAndroid Build Coastguard Workerset_shared_library_export_map(vk_swiftshader ${CMAKE_CURRENT_SOURCE_DIR}) 205*03ce13f7SAndroid Build Coastguard Worker 206*03ce13f7SAndroid Build Coastguard Worker# The name of the application-facing library. Usually this would be the Vulkan Loader, 207*03ce13f7SAndroid Build Coastguard Worker# which then loads the Installable Client Driver (ICD), see: 208*03ce13f7SAndroid Build Coastguard Worker# https://www.lunarg.com/tutorial-overview-of-vulkan-loader-layers/ 209*03ce13f7SAndroid Build Coastguard Worker# But SwiftShader can also be loaded directlty by the application. This enables using 210*03ce13f7SAndroid Build Coastguard Worker# SwiftShader without requiring a Loader to be installed, and simplifies testing and 211*03ce13f7SAndroid Build Coastguard Worker# debugging. ${VULKAN_API_LIBRARY_NAME} is the name of this drop-in API library. 212*03ce13f7SAndroid Build Coastguard Workerif(WIN32) 213*03ce13f7SAndroid Build Coastguard Worker set(VULKAN_API_LIBRARY_NAME "vulkan-1.dll") 214*03ce13f7SAndroid Build Coastguard Workerelseif(LINUX) 215*03ce13f7SAndroid Build Coastguard Worker set(VULKAN_API_LIBRARY_NAME "libvulkan.so.1") 216*03ce13f7SAndroid Build Coastguard Workerelseif(APPLE) 217*03ce13f7SAndroid Build Coastguard Worker set(VULKAN_API_LIBRARY_NAME "libvulkan.dylib") 218*03ce13f7SAndroid Build Coastguard Workerelseif(FUCHSIA) 219*03ce13f7SAndroid Build Coastguard Worker set(VULKAN_API_LIBRARY_NAME "libvulkan.so") 220*03ce13f7SAndroid Build Coastguard Workerelse() 221*03ce13f7SAndroid Build Coastguard Worker message(FATAL_ERROR "Platform does not support Vulkan yet") 222*03ce13f7SAndroid Build Coastguard Workerendif() 223*03ce13f7SAndroid Build Coastguard Worker 224*03ce13f7SAndroid Build Coastguard Workeradd_custom_command( 225*03ce13f7SAndroid Build Coastguard Worker TARGET vk_swiftshader 226*03ce13f7SAndroid Build Coastguard Worker POST_BUILD 227*03ce13f7SAndroid Build Coastguard Worker COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/${CMAKE_SYSTEM_NAME}/ 228*03ce13f7SAndroid Build Coastguard Worker COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:vk_swiftshader> ${CMAKE_BINARY_DIR}/${CMAKE_SYSTEM_NAME}/ 229*03ce13f7SAndroid Build Coastguard Worker COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:vk_swiftshader> ${CMAKE_BINARY_DIR}/${CMAKE_SYSTEM_NAME}/${VULKAN_API_LIBRARY_NAME} 230*03ce13f7SAndroid Build Coastguard Worker 231*03ce13f7SAndroid Build Coastguard Worker # Copy to ${CMAKE_BINARY_DIR}/bin so the library sits next to the PVR samples. 232*03ce13f7SAndroid Build Coastguard Worker COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/bin 233*03ce13f7SAndroid Build Coastguard Worker COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:vk_swiftshader> ${CMAKE_BINARY_DIR}/bin/${VULKAN_API_LIBRARY_NAME} 234*03ce13f7SAndroid Build Coastguard Worker) 235*03ce13f7SAndroid Build Coastguard Worker 236*03ce13f7SAndroid Build Coastguard Worker# The SWIFTSHADER_VULKAN_API_LIBRARY_INSTALL_PATH environment variable can be set to a path 237*03ce13f7SAndroid Build Coastguard Worker# where we'd like the drop-in API library to be installed. For example for testing with dEQP 238*03ce13f7SAndroid Build Coastguard Worker# this could be something like C:/src/deqp/build/external/vulkancts/modules/vulkan/Debug/ 239*03ce13f7SAndroid Build Coastguard Workerif(DEFINED ENV{SWIFTSHADER_VULKAN_API_LIBRARY_INSTALL_PATH}) 240*03ce13f7SAndroid Build Coastguard Worker add_custom_command( 241*03ce13f7SAndroid Build Coastguard Worker TARGET vk_swiftshader 242*03ce13f7SAndroid Build Coastguard Worker POST_BUILD 243*03ce13f7SAndroid Build Coastguard Worker COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:vk_swiftshader> $ENV{SWIFTSHADER_VULKAN_API_LIBRARY_INSTALL_PATH}${VULKAN_API_LIBRARY_NAME} 244*03ce13f7SAndroid Build Coastguard Worker ) 245*03ce13f7SAndroid Build Coastguard Workerendif() 246*03ce13f7SAndroid Build Coastguard Worker 247*03ce13f7SAndroid Build Coastguard Worker# The vk_swiftshader_icd.json manifest file will point to ICD_LIBRARY_PATH. 248*03ce13f7SAndroid Build Coastguard Worker# Set ICD_LIBRARY_PATH to be a relative path similar to "./libvk_swiftshader.so", so both files can be moved. 249*03ce13f7SAndroid Build Coastguard Worker# A relative path is relative to the manifest file. 250*03ce13f7SAndroid Build Coastguard Workerset(ICD_LIBRARY_PATH "${CMAKE_SHARED_LIBRARY_PREFIX}vk_swiftshader${CMAKE_SHARED_LIBRARY_SUFFIX}") 251*03ce13f7SAndroid Build Coastguard Workerif(WIN32) 252*03ce13f7SAndroid Build Coastguard Worker # The path is output to a JSON file, which requires backslashes to be escaped. 253*03ce13f7SAndroid Build Coastguard Worker set(ICD_LIBRARY_PATH ".\\\\${ICD_LIBRARY_PATH}") 254*03ce13f7SAndroid Build Coastguard Workerelse() 255*03ce13f7SAndroid Build Coastguard Worker set(ICD_LIBRARY_PATH "./${ICD_LIBRARY_PATH}") 256*03ce13f7SAndroid Build Coastguard Workerendif() 257*03ce13f7SAndroid Build Coastguard Workerconfigure_file( 258*03ce13f7SAndroid Build Coastguard Worker "vk_swiftshader_icd.json.tmpl" 259*03ce13f7SAndroid Build Coastguard Worker "${CMAKE_BINARY_DIR}/${CMAKE_SYSTEM_NAME}/vk_swiftshader_icd.json" 260*03ce13f7SAndroid Build Coastguard Worker) 261