You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: mod.rs
    path of file: ./repos/solang/src/linker
    
    the code of the file until where you have to start completion: // SPDX-License-Identifier: Apache-2.0

mod bpf;
mod polkadot_wasm;
mod soroban_wasm;
use crate::Target;
use once_cell::sync::Lazy;
use std::ffi::CString;
use std::sync::Mu
    
pub fn link(input: &[u8], name: &str, target: Target) -> Vec<u8> {
    // The lld linker is totally not thread-safe; it uses many globals
    // We should fix this one day
    let _lock = LINKER_MUTEX.lock().unwrap();

    match target {
        Target::Solana => bpf::link(input, name),
        Target::Soroban => soroban_wasm::link(input, name),
        Target::Polkadot {
            address_length: _,
            value_length: _,
        } => polkadot_wasm::link(input, name),
        _ => panic!("linker not implemented for target {:?}", target),
    }
}