**Use case**
We want to use self-extracting compressor utility during build, which can be cross-compiled.
Currently self-extracting compressor utility includes appended decompressor binary, which is a base for building self-extracting executable. The problem arise from the fact that self-extracting executable usually required to be built during clickhouse build - which can be cross-compiled - so in such case additional compressor in native architecture should be built and then this compressor should compress target binaries and attach to target decompressor built in the target architecture.

**Describe the solution you'd like**
Provide --decompressor parameter so proper decompressor binary can be chosen.

**Additional context**
ref #34755

decompressed_full_size += data.uncompressed_size;
        check_pointer += sizeof(FileData) + data.name_length;
    }
    
    struct statfs fs_info;
    if (0 != fstatfs(input_fd, &fs_info))
    {
        perror(nullptr);
        if (0 != munmap(input, info_in.st_size))
                perror(nullptr);
        return 1;
    }
    if (fs_info.f_blocks * info_in.st_blksize < decompressed_full_size)
    {
        std::cerr << "Not enough space for decompression. Have " << fs_info.f_blocks * info_in.st_blksize << ", need " << decompressed_full_size << std::endl;
        return 1;
    }
    FileData file_info;
    
    for (size_t i = 0; i < metadata.number_of_files; ++i)
    {
        
        file_info = *reinterpret_cast<FileData*>(input + files_pointer);
        files_pointer += sizeof(FileData);
        size_t file_name_len =
            (strcmp(input + files_pointer, name) ? file_info.name_length : file_info.name_length + 13);
        size_t file_path_len = path ? strlen(path) + 1 + file_name_len : file_name_len;
        char file_name[file_path_len];
        memset(file_name, '\0', file_path_len);
        if (path)