init
This commit is contained in:
38
expkg/CMakeLists.txt
Normal file
38
expkg/CMakeLists.txt
Normal file
@ -0,0 +1,38 @@
|
||||
set(TARGET expkg)
|
||||
project(${TARGET})
|
||||
|
||||
add_subdirectory(vendor/lz4/build/cmake)
|
||||
|
||||
file(GLOB_RECURSE SRC_SOURCE src/**.cpp)
|
||||
|
||||
# static
|
||||
add_library(expkg-static STATIC
|
||||
${SRC_SOURCE}
|
||||
vendor/stb/stb_image_write.cpp
|
||||
)
|
||||
target_link_libraries(expkg-static PRIVATE lz4)
|
||||
|
||||
target_include_directories(expkg-static PRIVATE vendor/stb)
|
||||
|
||||
target_include_directories(expkg-static PUBLIC src)
|
||||
|
||||
|
||||
# shared
|
||||
add_library(expkg-shared SHARED
|
||||
${SRC_SOURCE}
|
||||
vendor/stb/stb_image_write.cpp
|
||||
)
|
||||
|
||||
set_target_properties(expkg-shared PROPERTIES
|
||||
OUTPUT_NAME "expkg"
|
||||
PREFIX ""
|
||||
)
|
||||
|
||||
target_link_libraries(expkg-shared PRIVATE lz4)
|
||||
target_compile_definitions(expkg-shared PRIVATE -DPKG_SHARED -DPKG_BUILD_DLL)
|
||||
|
||||
target_include_directories(expkg-shared PRIVATE vendor/stb)
|
||||
|
||||
target_include_directories(expkg-shared PUBLIC src)
|
||||
|
||||
|
||||
92
expkg/src/BinaryOPT/BinaryReader.cpp
Normal file
92
expkg/src/BinaryOPT/BinaryReader.cpp
Normal file
@ -0,0 +1,92 @@
|
||||
//
|
||||
// Created by sfd on 25-8-4.
|
||||
//
|
||||
|
||||
#include "BinaryReader.h"
|
||||
|
||||
#include <filesystem>
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <vector>
|
||||
|
||||
namespace PKG
|
||||
{
|
||||
BinaryReader::BinaryReader(const std::filesystem::path& fileName)
|
||||
{
|
||||
m_FilePath = fileName.string();
|
||||
|
||||
m_File.open(m_FilePath, std::ios::in | std::ios::binary);
|
||||
if (!m_File.is_open())
|
||||
{
|
||||
std::cerr << "Failed to open file " << m_FilePath << std::endl;
|
||||
system("pause");
|
||||
exit(0);
|
||||
}
|
||||
}
|
||||
|
||||
BinaryReader::~BinaryReader()
|
||||
{
|
||||
if (m_File.is_open())
|
||||
m_File.close();
|
||||
}
|
||||
|
||||
|
||||
int32_t BinaryReader::ReadInt32()
|
||||
{
|
||||
int32_t result = 0;
|
||||
m_File.read(reinterpret_cast<char*>(&result), sizeof(int32_t));
|
||||
return result;
|
||||
}
|
||||
|
||||
uint32_t BinaryReader::ReadUInt32()
|
||||
{
|
||||
uint32_t result = 0;
|
||||
m_File.read(reinterpret_cast<char*>(&result), sizeof(uint32_t));
|
||||
return result;
|
||||
}
|
||||
|
||||
char BinaryReader::ReadChar()
|
||||
{
|
||||
char result;
|
||||
m_File.read(&result, sizeof(char));
|
||||
pos_type a = m_File.tellg();
|
||||
return result;
|
||||
}
|
||||
|
||||
void BinaryReader::ReadData(std::string& data, const uint32_t length)
|
||||
{
|
||||
data.resize(length);
|
||||
m_File.read(data.data(), length);
|
||||
}
|
||||
|
||||
void BinaryReader::ReadData(std::vector<uint8_t>& data, uint32_t length)
|
||||
{
|
||||
data.resize(length);
|
||||
m_File.read(reinterpret_cast<char*>(data.data()), length);
|
||||
}
|
||||
|
||||
std::string BinaryReader::ReadString(const uint32_t length)
|
||||
{
|
||||
std::vector<uint8_t> result;
|
||||
result.resize(length);
|
||||
|
||||
m_File.read(reinterpret_cast<char*>(result.data()), length);
|
||||
return std::string(reinterpret_cast<const char*>(result.data()), length);
|
||||
}
|
||||
|
||||
std::string BinaryReader::ReadNString(const int32_t maxLength)
|
||||
{
|
||||
std::vector<uint8_t> result;
|
||||
result.resize(0);
|
||||
int count = maxLength <= 0 ? 16 : maxLength;
|
||||
|
||||
char chr = ReadChar();
|
||||
while (chr != '\0' && (maxLength == -1 || count <= maxLength))
|
||||
{
|
||||
result.push_back(chr);
|
||||
chr = ReadChar();
|
||||
}
|
||||
|
||||
return std::string(reinterpret_cast<const char*>(result.data()), result.size());
|
||||
}
|
||||
}
|
||||
47
expkg/src/BinaryOPT/BinaryReader.h
Normal file
47
expkg/src/BinaryOPT/BinaryReader.h
Normal file
@ -0,0 +1,47 @@
|
||||
//
|
||||
// Created by sfd on 25-8-4.
|
||||
//
|
||||
|
||||
#ifndef BINARYREADER_H
|
||||
#define BINARYREADER_H
|
||||
#include <cstdint>
|
||||
#include <filesystem>
|
||||
#include <fstream>
|
||||
#include <vector>
|
||||
|
||||
#include "../Core.h"
|
||||
|
||||
namespace PKG
|
||||
{
|
||||
using pos_type = long long;
|
||||
|
||||
class PKG_API BinaryReader
|
||||
{
|
||||
public:
|
||||
BinaryReader() = delete;
|
||||
explicit BinaryReader(const std::filesystem::path& fileName);
|
||||
~BinaryReader();
|
||||
|
||||
int32_t ReadInt32();
|
||||
uint32_t ReadUInt32();
|
||||
char ReadChar();
|
||||
std::string ReadString(uint32_t length);
|
||||
std::string ReadNString(int32_t maxLength = -1);
|
||||
void ReadData(std::string& data, uint32_t length);
|
||||
void ReadData(std::vector<uint8_t>& data, uint32_t length);
|
||||
|
||||
void seekg(const pos_type pos) { m_File.seekg(pos); }
|
||||
pos_type tellg() { return m_File.tellg(); }
|
||||
|
||||
std::string GetFilePath() const { return m_FilePath; }
|
||||
std::string GetFileName() const { return m_FilePath.substr(m_FilePath.find_last_of("\\/") + 1); }
|
||||
|
||||
private:
|
||||
std::ifstream m_File;
|
||||
|
||||
std::string m_FilePath;
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
#endif //BINARYREADER_H
|
||||
51
expkg/src/BinaryOPT/BinaryWriter.cpp
Normal file
51
expkg/src/BinaryOPT/BinaryWriter.cpp
Normal file
@ -0,0 +1,51 @@
|
||||
//
|
||||
// Created by sfd on 25-8-4.
|
||||
//
|
||||
|
||||
#include "BinaryWriter.h"
|
||||
|
||||
#include <filesystem>
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
|
||||
namespace PKG
|
||||
{
|
||||
BinaryWriter::BinaryWriter(const std::filesystem::path& fileName, const std::ios_base::openmode optMode)
|
||||
{
|
||||
m_FilePath = fileName.string();
|
||||
const std::filesystem::path path(fileName.parent_path());
|
||||
|
||||
m_File.open(m_FilePath, optMode);
|
||||
if (!m_File.is_open() && !std::filesystem::exists(path))
|
||||
{
|
||||
std::filesystem::create_directories(path);
|
||||
m_File.open(m_FilePath, optMode);
|
||||
if (!m_File.is_open())
|
||||
std::cerr << "cound not create file: " << m_FilePath << std::endl;
|
||||
}
|
||||
}
|
||||
|
||||
BinaryWriter::~BinaryWriter()
|
||||
{
|
||||
if (!m_File.is_open())
|
||||
close();
|
||||
}
|
||||
|
||||
void BinaryWriter::WriteBytes(const std::string& data, const uint32_t size)
|
||||
{
|
||||
if (size == 0)
|
||||
m_File.write(data.data(), data.size());
|
||||
else
|
||||
m_File.write(data.data(), size);
|
||||
}
|
||||
|
||||
void BinaryWriter::WriteString(const std::string& str)
|
||||
{
|
||||
m_File.write(str.c_str(), str.size());
|
||||
}
|
||||
|
||||
void BinaryWriter::close()
|
||||
{
|
||||
m_File.close();
|
||||
}
|
||||
}
|
||||
39
expkg/src/BinaryOPT/BinaryWriter.h
Normal file
39
expkg/src/BinaryOPT/BinaryWriter.h
Normal file
@ -0,0 +1,39 @@
|
||||
//
|
||||
// Created by sfd on 25-8-4.
|
||||
//
|
||||
|
||||
#ifndef BINARYWRITER_H
|
||||
#define BINARYWRITER_H
|
||||
|
||||
#include <filesystem>
|
||||
#include <fstream>
|
||||
#include <vector>
|
||||
|
||||
#include "../Core.h"
|
||||
|
||||
namespace PKG
|
||||
{
|
||||
class PKG_API BinaryWriter
|
||||
{
|
||||
public:
|
||||
BinaryWriter() = delete;
|
||||
explicit BinaryWriter(const std::filesystem::path& fileName, std::ios_base::openmode optMode = std::ios::out);
|
||||
~BinaryWriter();
|
||||
|
||||
void WriteBytes(const std::string& data, uint32_t size = 0);
|
||||
void WriteString(const std::string& str);
|
||||
|
||||
std::string GetFilePath() const { return m_FilePath; }
|
||||
std::string GetFileName() const { return m_FilePath.substr(m_FilePath.find_last_of("\\/") + 1); }
|
||||
|
||||
void close();
|
||||
|
||||
private:
|
||||
std::ofstream m_File;
|
||||
std::string m_FilePath;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
|
||||
#endif //BINARYWRITER_H
|
||||
267
expkg/src/BinaryOPT/ImageReader.cpp
Normal file
267
expkg/src/BinaryOPT/ImageReader.cpp
Normal file
@ -0,0 +1,267 @@
|
||||
//
|
||||
// Created by sfd on 25-8-5.
|
||||
//
|
||||
|
||||
#include "ImageReader.h"
|
||||
|
||||
#include <filesystem>
|
||||
#include <iostream>
|
||||
|
||||
#include "BinaryWriter.h"
|
||||
#include "lz4.h"
|
||||
|
||||
|
||||
namespace PKG
|
||||
{
|
||||
|
||||
|
||||
#include <vector>
|
||||
|
||||
std::vector<unsigned char> Lz4Decompress(const unsigned char* compressedData,
|
||||
size_t compressedSize,
|
||||
size_t decompressedSize)
|
||||
{
|
||||
// 准备输出缓冲区
|
||||
std::vector<unsigned char> output(decompressedSize);
|
||||
|
||||
// 执行解压缩
|
||||
int result = LZ4_decompress_safe(
|
||||
reinterpret_cast<const char*>(compressedData),
|
||||
reinterpret_cast<char*>(output.data()),
|
||||
static_cast<int>(compressedSize),
|
||||
static_cast<int>(decompressedSize)
|
||||
);
|
||||
|
||||
// 检查解压结果
|
||||
if (result < 0 || static_cast<size_t>(result) != decompressedSize) {
|
||||
throw std::runtime_error("LZ4 decompression failed");
|
||||
}
|
||||
|
||||
return output;
|
||||
}
|
||||
|
||||
TexImage ImageReader::ReadFrom(BinaryReader& reader, const TexImageContainer& container, const TexFormat format)
|
||||
{
|
||||
int mipMapCount = reader.ReadInt32();
|
||||
|
||||
auto aFormat = GetFormatFromTex(container.ImageFormat, format);
|
||||
|
||||
TexImage image{};
|
||||
|
||||
for (int i = 0; i < mipMapCount; i++)
|
||||
{
|
||||
|
||||
TexMipMap mipmap;
|
||||
|
||||
switch (container.ImageContainerVersion)
|
||||
{
|
||||
case ImageContainerVersion::VERSION1:
|
||||
mipmap = ReadMipMapV1(reader); break;
|
||||
case ImageContainerVersion::VERSION2:
|
||||
case ImageContainerVersion::VERSION3:
|
||||
mipmap = ReadMipMapV2AndV3(reader); break;
|
||||
case ImageContainerVersion::VERSION4:
|
||||
mipmap = ReadMipMapV4(reader); break;
|
||||
}
|
||||
|
||||
mipmap.Format = aFormat;
|
||||
if (mipmap.IsZ4Compressed)
|
||||
{
|
||||
mipmap.Data = Lz4Decompress(mipmap.Data.data(), mipmap.Data.size(), mipmap.DecompressedDataCount);
|
||||
mipmap.IsZ4Compressed = false;
|
||||
}
|
||||
|
||||
|
||||
image.Mipmaps.push_back(mipmap);
|
||||
}
|
||||
|
||||
return image;
|
||||
}
|
||||
|
||||
TexImageContainer ImageReader::ImageContainerReaderReadFrom(BinaryReader& reader, TexFormat texFormat)
|
||||
{
|
||||
TexImageContainer container;
|
||||
|
||||
container.Magic = reader.ReadNString();
|
||||
|
||||
int imageCount = reader.ReadInt32();
|
||||
|
||||
if (container.Magic == "TEXB0001")
|
||||
{
|
||||
}
|
||||
else if (container.Magic == "TEXB0002")
|
||||
{
|
||||
}
|
||||
else if (container.Magic == "TEXB0003")
|
||||
{
|
||||
container.ImageFormat = (FreeImageFormat)reader.ReadInt32();
|
||||
}
|
||||
else if (container.Magic == "TEXB0004")
|
||||
{
|
||||
auto format = (FreeImageFormat)reader.ReadInt32();
|
||||
|
||||
bool isVideoMp4 = reader.ReadInt32();
|
||||
if (format == FreeImageFormat::FIF_UNKNOWN)
|
||||
{
|
||||
if (isVideoMp4)
|
||||
format = FreeImageFormat::FIF_MP4;
|
||||
}
|
||||
container.ImageFormat = format;
|
||||
}
|
||||
else
|
||||
{
|
||||
std::cerr << "bad image format" << std::endl;
|
||||
}
|
||||
|
||||
|
||||
int version = std::stoi(container.Magic.substr(4, 4));
|
||||
|
||||
container.ImageContainerVersion = (ImageContainerVersion)version;
|
||||
|
||||
if (container.ImageContainerVersion == ImageContainerVersion::VERSION4 && container.ImageFormat != FreeImageFormat::FIF_MP4)
|
||||
{
|
||||
container.ImageContainerVersion = ImageContainerVersion::VERSION3;
|
||||
}
|
||||
|
||||
for (int i = 0; i < imageCount; i++)
|
||||
{
|
||||
container.Images.push_back(ReadFrom(reader, container, texFormat));
|
||||
}
|
||||
|
||||
return container;
|
||||
}
|
||||
|
||||
TexMipMap ImageReader::ReadMipMapV1(BinaryReader& reader)
|
||||
{
|
||||
TexMipMap mipmap{};
|
||||
mipmap.Width = reader.ReadInt32();
|
||||
mipmap.Height = reader.ReadInt32();
|
||||
mipmap.Data = ReadBytes(reader);
|
||||
|
||||
return mipmap;
|
||||
}
|
||||
|
||||
TexMipMap ImageReader::ReadMipMapV2AndV3(BinaryReader& reader)
|
||||
{
|
||||
TexMipMap mipmap{};
|
||||
|
||||
mipmap.Width = reader.ReadInt32();
|
||||
mipmap.Height = reader.ReadInt32();
|
||||
mipmap.IsZ4Compressed = reader.ReadInt32() == 1;
|
||||
mipmap.DecompressedDataCount = reader.ReadInt32();
|
||||
mipmap.Data = ReadBytes(reader);
|
||||
|
||||
return mipmap;
|
||||
}
|
||||
|
||||
TexMipMap ImageReader::ReadMipMapV4(BinaryReader& reader)
|
||||
{
|
||||
int param1 = reader.ReadInt32();
|
||||
if (param1 != 1)
|
||||
{
|
||||
std::cerr << "ReadMipmapV4 unknow param1: " << param1 << std::endl;
|
||||
}
|
||||
|
||||
int param2 = reader.ReadInt32();
|
||||
if (param2 != 2)
|
||||
{
|
||||
std::cerr << "ReadMipmapV4 unknow param2: " << param1 << std::endl;
|
||||
}
|
||||
|
||||
std::string condition = reader.ReadNString();
|
||||
|
||||
int param3 = reader.ReadInt32();
|
||||
if (param3 != 1)
|
||||
{
|
||||
std::cerr << "ReadMipmapV4 unknow param3: " << param1 << std::endl;
|
||||
}
|
||||
|
||||
TexMipMap mipmap{};
|
||||
mipmap.Width = reader.ReadInt32();
|
||||
mipmap.Height = reader.ReadInt32();
|
||||
mipmap.IsZ4Compressed = reader.ReadInt32() == 1;
|
||||
mipmap.DecompressedDataCount = reader.ReadInt32();
|
||||
mipmap.Data = ReadBytes(reader);
|
||||
|
||||
return mipmap;
|
||||
}
|
||||
|
||||
std::vector<uint8_t> ImageReader::ReadBytes(BinaryReader& reader)
|
||||
{
|
||||
int count = reader.ReadInt32();
|
||||
|
||||
std::vector<uint8_t> bytes;
|
||||
|
||||
reader.ReadData(bytes, count);
|
||||
|
||||
return bytes;
|
||||
}
|
||||
|
||||
MipmapFormat ImageReader::GetFormatFromTex(FreeImageFormat imageFormat, TexFormat format)
|
||||
{
|
||||
if (imageFormat != FreeImageFormat::FIF_UNKNOWN)
|
||||
{
|
||||
return FreeImageFormatToMipmapFormat(imageFormat);
|
||||
}
|
||||
|
||||
switch (format)
|
||||
{
|
||||
case TexFormat::RGBA8888: return MipmapFormat::RGBA8888;
|
||||
case TexFormat::DXT5: return MipmapFormat::CompressedDXT5;
|
||||
case TexFormat::DXT3: return MipmapFormat::CompressedDXT3;
|
||||
case TexFormat::DXT1: return MipmapFormat::CompressedDXT1;
|
||||
case TexFormat::RG88: return MipmapFormat::RG88;
|
||||
case TexFormat::R8: return MipmapFormat::R8;
|
||||
}
|
||||
|
||||
std::cerr << "unknow format" << std::endl;
|
||||
|
||||
return MipmapFormat::Invalid;
|
||||
}
|
||||
|
||||
MipmapFormat ImageReader::FreeImageFormatToMipmapFormat(FreeImageFormat imageFormat)
|
||||
{
|
||||
switch (imageFormat)
|
||||
{
|
||||
case FreeImageFormat::FIF_BMP: return MipmapFormat::ImageBMP;
|
||||
case FreeImageFormat::FIF_ICO: return MipmapFormat::ImageICO;
|
||||
case FreeImageFormat::FIF_JPEG: return MipmapFormat::ImageJPEG;
|
||||
case FreeImageFormat::FIF_JNG: return MipmapFormat::ImageJNG;
|
||||
case FreeImageFormat::FIF_KOALA: return MipmapFormat::ImageKOALA;
|
||||
case FreeImageFormat::FIF_LBM: return MipmapFormat::ImageLBM;
|
||||
case FreeImageFormat::FIF_MNG: return MipmapFormat::ImageMNG;
|
||||
case FreeImageFormat::FIF_PBM: return MipmapFormat::ImagePBM;
|
||||
case FreeImageFormat::FIF_PBMRAW: return MipmapFormat::ImagePBMRAW;
|
||||
case FreeImageFormat::FIF_PCD: return MipmapFormat::ImagePCD;
|
||||
case FreeImageFormat::FIF_PCX: return MipmapFormat::ImagePCX;
|
||||
case FreeImageFormat::FIF_PGM: return MipmapFormat::ImagePGM;
|
||||
case FreeImageFormat::FIF_PGMRAW: return MipmapFormat::ImagePGMRAW;
|
||||
case FreeImageFormat::FIF_PNG: return MipmapFormat::ImagePNG;
|
||||
case FreeImageFormat::FIF_PPM: return MipmapFormat::ImagePPM;
|
||||
case FreeImageFormat::FIF_PPMRAW: return MipmapFormat::ImagePPMRAW;
|
||||
case FreeImageFormat::FIF_RAS: return MipmapFormat::ImageRAS;
|
||||
case FreeImageFormat::FIF_TARGA: return MipmapFormat::ImageTARGA;
|
||||
case FreeImageFormat::FIF_TIFF: return MipmapFormat::ImageTIFF;
|
||||
case FreeImageFormat::FIF_WBMP: return MipmapFormat::ImageWBMP;
|
||||
case FreeImageFormat::FIF_PSD: return MipmapFormat::ImagePSD;
|
||||
case FreeImageFormat::FIF_CUT: return MipmapFormat::ImageCUT;
|
||||
case FreeImageFormat::FIF_XBM: return MipmapFormat::ImageXBM;
|
||||
case FreeImageFormat::FIF_XPM: return MipmapFormat::ImageXPM;
|
||||
case FreeImageFormat::FIF_DDS: return MipmapFormat::ImageDDS;
|
||||
case FreeImageFormat::FIF_GIF: return MipmapFormat::ImageGIF;
|
||||
case FreeImageFormat::FIF_HDR: return MipmapFormat::ImageHDR;
|
||||
case FreeImageFormat::FIF_FAXG3: return MipmapFormat::ImageFAXG3;
|
||||
case FreeImageFormat::FIF_SGI: return MipmapFormat::ImageSGI;
|
||||
case FreeImageFormat::FIF_EXR: return MipmapFormat::ImageEXR;
|
||||
case FreeImageFormat::FIF_J2K: return MipmapFormat::ImageJ2K;
|
||||
case FreeImageFormat::FIF_JP2: return MipmapFormat::ImageJP2;
|
||||
case FreeImageFormat::FIF_PFM: return MipmapFormat::ImagePFM;
|
||||
case FreeImageFormat::FIF_PICT: return MipmapFormat::ImagePICT;
|
||||
case FreeImageFormat::FIF_RAW: return MipmapFormat::ImageRAW;
|
||||
case FreeImageFormat::FIF_MP4: return MipmapFormat::VideoMp4;
|
||||
}
|
||||
|
||||
std::cerr << "unknown format" << std::endl;
|
||||
return MipmapFormat::Invalid;
|
||||
}
|
||||
}
|
||||
32
expkg/src/BinaryOPT/ImageReader.h
Normal file
32
expkg/src/BinaryOPT/ImageReader.h
Normal file
@ -0,0 +1,32 @@
|
||||
//
|
||||
// Created by sfd on 25-8-5.
|
||||
//
|
||||
|
||||
#ifndef IMAGEREADER_H
|
||||
#define IMAGEREADER_H
|
||||
#include "BinaryReader.h"
|
||||
#include "../Tex/TexImageContainer.h"
|
||||
|
||||
namespace PKG
|
||||
{
|
||||
class PKG_API ImageReader
|
||||
{
|
||||
public:
|
||||
static TexImage ReadFrom(BinaryReader& reader, const TexImageContainer& container, TexFormat format);
|
||||
|
||||
static TexImageContainer ImageContainerReaderReadFrom(BinaryReader& reader, TexFormat texFormat);
|
||||
|
||||
private:
|
||||
static TexMipMap ReadMipMapV1(BinaryReader& reader);
|
||||
static TexMipMap ReadMipMapV2AndV3(BinaryReader& reader);
|
||||
static TexMipMap ReadMipMapV4(BinaryReader& reader);
|
||||
|
||||
static std::vector<uint8_t> ReadBytes(BinaryReader& reader);
|
||||
|
||||
static MipmapFormat GetFormatFromTex(FreeImageFormat imageFormat, TexFormat format);
|
||||
static MipmapFormat FreeImageFormatToMipmapFormat(FreeImageFormat imageFormat);
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
#endif //IMAGEREADER_H
|
||||
5
expkg/src/Core.cpp
Normal file
5
expkg/src/Core.cpp
Normal file
@ -0,0 +1,5 @@
|
||||
//
|
||||
// Created by sfd on 25-8-4.
|
||||
//
|
||||
|
||||
#include "Core.h"
|
||||
19
expkg/src/Core.h
Normal file
19
expkg/src/Core.h
Normal file
@ -0,0 +1,19 @@
|
||||
//
|
||||
// Created by sfd on 25-8-4.
|
||||
//
|
||||
|
||||
#ifndef CORE_H
|
||||
#define CORE_H
|
||||
|
||||
#ifdef PKG_SHARED
|
||||
#ifdef PKG_BUILD_DLL
|
||||
#define PKG_API __declspec(dllexport)
|
||||
#else
|
||||
#define PKG_API __declspec(dllimport)
|
||||
#endif
|
||||
#else
|
||||
#define PKG_API
|
||||
#endif
|
||||
|
||||
#endif //CORE_H
|
||||
|
||||
346
expkg/src/EXPKG/EXPKG.cpp
Normal file
346
expkg/src/EXPKG/EXPKG.cpp
Normal file
@ -0,0 +1,346 @@
|
||||
//
|
||||
// Created by sfd on 25-8-4.
|
||||
//
|
||||
|
||||
#include "EXPKG.h"
|
||||
|
||||
#include "BinaryOPT/BinaryWriter.h"
|
||||
#include "BinaryOPT/ImageReader.h"
|
||||
|
||||
#include "stb_image_write.h"
|
||||
#include <iostream>
|
||||
|
||||
|
||||
extern "C" unsigned char* stbi_write_png_to_mem(const unsigned char* pixels, int stride_bytes, int x, int y, int n,
|
||||
int* out_len);
|
||||
|
||||
namespace PKG
|
||||
{
|
||||
const char* help = R"(
|
||||
usage:
|
||||
expkg path/to/file.pkg [path/to/output](optional)
|
||||
example:
|
||||
expkg demo.pkg
|
||||
expkg demo.pkg outdir
|
||||
)";
|
||||
|
||||
enum class FILE_EXTENSION
|
||||
{
|
||||
TEX,
|
||||
PKG,
|
||||
UNKNOWN
|
||||
};
|
||||
|
||||
EXPKG::EXPKG(const CommandArgs& commandArgs)
|
||||
{
|
||||
if (commandArgs.argc < 2)
|
||||
{
|
||||
std::cout << help << std::endl;
|
||||
system("pause");
|
||||
exit(0);
|
||||
}
|
||||
m_Reader = std::make_shared<BinaryReader>(commandArgs.argv[1]);
|
||||
|
||||
if (commandArgs.argc == 3)
|
||||
{
|
||||
m_OutDir = commandArgs.argv[2];
|
||||
m_OutDir = m_OutDir.make_preferred();
|
||||
}
|
||||
else
|
||||
{
|
||||
m_OutDir = "out";
|
||||
}
|
||||
|
||||
Run();
|
||||
}
|
||||
|
||||
EXPKG::EXPKG(const std::filesystem::path& filePath, const std::filesystem::path& outDir)
|
||||
{
|
||||
m_Reader = std::make_shared<BinaryReader>(filePath);
|
||||
m_OutDir = outDir;
|
||||
m_OutDir = m_OutDir.make_preferred();
|
||||
|
||||
|
||||
Run();
|
||||
}
|
||||
|
||||
FILE_EXTENSION EXPKG::checkExtension(const std::filesystem::path& filePath)
|
||||
{
|
||||
if (filePath.extension() == ".pkg")
|
||||
return FILE_EXTENSION::PKG;
|
||||
if (filePath.extension() == ".mpkg")
|
||||
return FILE_EXTENSION::PKG;
|
||||
if (filePath.extension() == ".tex")
|
||||
return FILE_EXTENSION::TEX;
|
||||
|
||||
return FILE_EXTENSION::UNKNOWN;
|
||||
}
|
||||
|
||||
|
||||
void EXPKG::Run()
|
||||
{
|
||||
switch (checkExtension(m_Reader->GetFilePath()))
|
||||
{
|
||||
case FILE_EXTENSION::TEX:
|
||||
ExtractTex();
|
||||
break;
|
||||
case FILE_EXTENSION::PKG:
|
||||
ExtractPkg();
|
||||
break;
|
||||
case FILE_EXTENSION::UNKNOWN:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void EXPKG::ExtractPkg()
|
||||
{
|
||||
|
||||
// Read Binary resource
|
||||
const int head = m_Reader->ReadInt32();
|
||||
const std::string magicHeader = m_Reader->ReadString(head);
|
||||
|
||||
|
||||
if (magicHeader.substr(0,3) != "PKG")
|
||||
{
|
||||
std::cerr << "unknown header: " << m_Reader->GetFilePath() << std::endl;
|
||||
std::cerr << "not a pkg file " << std::endl;
|
||||
exit(0);
|
||||
}
|
||||
|
||||
const int count = m_Reader->ReadInt32();
|
||||
|
||||
if (count > 0)
|
||||
{
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
Entry entry;
|
||||
|
||||
const int size = m_Reader->ReadInt32();
|
||||
entry.FullPath = m_Reader->ReadString(size);
|
||||
entry.FullPath = entry.FullPath.make_preferred(); // conflict with system "\\" or "/", use it to solve
|
||||
entry.Offset = m_Reader->ReadInt32();
|
||||
entry.Length = m_Reader->ReadInt32();
|
||||
entry.Type = entry.FullPath.extension().string();
|
||||
|
||||
m_Entries.push_back(entry);
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
std::cerr << "could not get resource: " << m_Reader->GetFilePath() << std::endl;
|
||||
exit(0);
|
||||
}
|
||||
|
||||
// try Extract
|
||||
|
||||
uint32_t offsetPosition = m_Reader->tellg();
|
||||
for (const auto& entry : m_Entries)
|
||||
{
|
||||
std::cout << "convert file: " << m_OutDir / entry.FullPath << std::endl;
|
||||
|
||||
m_Reader->seekg(entry.Offset + offsetPosition);
|
||||
|
||||
if (entry.Type == ".tex")
|
||||
{
|
||||
|
||||
std::filesystem::path texPath = m_OutDir / entry.FullPath;
|
||||
BinaryWriter writer(texPath, std::ios::binary);
|
||||
|
||||
std::string texdata;
|
||||
m_Reader->ReadData(texdata, entry.Length);
|
||||
writer.WriteBytes(texdata);
|
||||
writer.close();
|
||||
|
||||
|
||||
ExtractTex(texPath);
|
||||
}
|
||||
else if (entry.Type == ".gif")
|
||||
{
|
||||
BinaryWriter writer(m_OutDir / entry.FullPath, std::ios::binary);
|
||||
|
||||
std::string texdata;
|
||||
m_Reader->ReadData(texdata, entry.Length);
|
||||
writer.WriteBytes(texdata);
|
||||
writer.close();
|
||||
}
|
||||
else
|
||||
{
|
||||
BinaryWriter writer(m_OutDir / entry.FullPath);
|
||||
writer.WriteString(m_Reader->ReadString(entry.Length));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void EXPKG::ExtractTex(const std::filesystem::path& path)
|
||||
{
|
||||
std::shared_ptr<BinaryReader> reader = m_Reader;
|
||||
if (path != "")
|
||||
{
|
||||
reader = std::make_shared<BinaryReader>(path);
|
||||
|
||||
}
|
||||
// Tex ReadHeader
|
||||
Tex tex{};
|
||||
|
||||
|
||||
tex.Magic1 = reader->ReadNString(16);
|
||||
if (tex.Magic1 != "TEXV0005")
|
||||
{
|
||||
std::cerr << "bad magic" << std::endl;
|
||||
return;
|
||||
}
|
||||
|
||||
tex.Magic2 = reader->ReadNString(16);
|
||||
if (tex.Magic2 != "TEXI0001")
|
||||
{
|
||||
std::cerr << "bad magic" << std::endl;
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
tex.Header.Format = (TexFormat)reader->ReadInt32();
|
||||
tex.Header.Flags = (TexType)reader->ReadInt32();
|
||||
tex.Header.TextureWidth = reader->ReadInt32();
|
||||
tex.Header.TextureHeight = reader->ReadInt32();
|
||||
tex.Header.ImageWidth = reader->ReadInt32();
|
||||
tex.Header.ImageHeight = reader->ReadInt32();
|
||||
tex.Header.UnkInt0 = reader->ReadInt32();
|
||||
if ((int)tex.Header.Flags & (int)TexType::IsGif) tex.IsGif = true;
|
||||
if ((int)tex.Header.Flags & (int)TexType::IsVideoTexture) tex.IsVideoTexture = true;
|
||||
|
||||
tex.ImageContainer = ImageReader::ImageContainerReaderReadFrom(*reader, tex.Header.Format);
|
||||
|
||||
if (tex.IsGif)
|
||||
{
|
||||
//Read Frame
|
||||
}
|
||||
// ReadHeader end
|
||||
|
||||
if (!tex.ImageContainer.Images.empty())
|
||||
{
|
||||
// GetConvertFormat
|
||||
MipmapFormat format;
|
||||
if (tex.IsVideoTexture)
|
||||
format = MipmapFormat::VideoMp4;
|
||||
else
|
||||
format = tex.ImageContainer.Images[0].Mipmaps[0].Format;
|
||||
|
||||
switch (format)
|
||||
{
|
||||
case MipmapFormat::CompressedDXT5:
|
||||
case MipmapFormat::CompressedDXT3:
|
||||
case MipmapFormat::CompressedDXT1:
|
||||
std::cerr << "raw mipmap meybe compressed" << std::endl;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if ((int)format >= 1 && (int)format <= 3)
|
||||
{
|
||||
format = MipmapFormat::ImagePNG;
|
||||
}
|
||||
|
||||
// GetConvertFormat end
|
||||
|
||||
// Convert source
|
||||
|
||||
if (tex.IsGif)
|
||||
{
|
||||
// TODO: to impl it
|
||||
// convert gif
|
||||
}
|
||||
|
||||
auto& sourceMipmap = tex.ImageContainer.Images[0].Mipmaps[0];
|
||||
|
||||
if (tex.IsVideoTexture)
|
||||
{
|
||||
if (sourceMipmap.Data.size() < 12)
|
||||
{
|
||||
std::cerr << "expect mp4 magic header" << std::endl;
|
||||
}
|
||||
|
||||
std::string mp4Magic = std::string(reinterpret_cast<const char*>(&sourceMipmap.Data[4]), 8);
|
||||
|
||||
if (mp4Magic != "ftypisom" && mp4Magic != "ftypmsnv" && mp4Magic != "ftypmp42")
|
||||
{
|
||||
std::cerr << "bad mp4 magic header" << std::endl;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
auto imgformat = sourceMipmap.Format;
|
||||
|
||||
switch (imgformat)
|
||||
{
|
||||
case MipmapFormat::CompressedDXT5:
|
||||
case MipmapFormat::CompressedDXT3:
|
||||
case MipmapFormat::CompressedDXT1:
|
||||
std::cerr << "raw mipmap meybe compressed" << std::endl;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if ((int)imgformat >= 1 && (int)imgformat <= 3)
|
||||
{
|
||||
int len;
|
||||
auto& imgData = tex.ImageContainer.Images[0].Mipmaps[0].Data;
|
||||
|
||||
uint8_t* data = nullptr;
|
||||
|
||||
switch (imgformat)
|
||||
{
|
||||
case MipmapFormat::R8:
|
||||
data = stbi_write_png_to_mem(sourceMipmap.Data.data(),
|
||||
sourceMipmap.Width * 1,
|
||||
sourceMipmap.Width,
|
||||
sourceMipmap.Height,
|
||||
1,
|
||||
&len);
|
||||
break;
|
||||
case MipmapFormat::RG88:
|
||||
data = stbi_write_png_to_mem(sourceMipmap.Data.data(),
|
||||
sourceMipmap.Width * 2,
|
||||
sourceMipmap.Width,
|
||||
sourceMipmap.Height,
|
||||
2,
|
||||
&len);
|
||||
break;
|
||||
case MipmapFormat::RGBA8888:
|
||||
data = stbi_write_png_to_mem(sourceMipmap.Data.data(),
|
||||
sourceMipmap.Width * 4,
|
||||
sourceMipmap.Width,
|
||||
sourceMipmap.Height,
|
||||
4,
|
||||
&len);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (data)
|
||||
{
|
||||
imgData.assign(data, data + len);
|
||||
free(data);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// return ImageResult
|
||||
// data format
|
||||
std::filesystem::path outPath = m_OutDir / m_Reader->GetFileName();
|
||||
outPath.replace_extension(GetFileExtension(format));
|
||||
|
||||
std::cout << "convert file: " << outPath << std::endl;
|
||||
|
||||
BinaryWriter imageWriter(outPath, std::ios::binary);
|
||||
imageWriter.WriteBytes(std::string(reinterpret_cast<const char*>(sourceMipmap.Data.data()),
|
||||
sourceMipmap.Data.size()));
|
||||
imageWriter.close();
|
||||
// Convert source end
|
||||
}
|
||||
}
|
||||
}
|
||||
49
expkg/src/EXPKG/EXPKG.h
Normal file
49
expkg/src/EXPKG/EXPKG.h
Normal file
@ -0,0 +1,49 @@
|
||||
//
|
||||
// Created by sfd on 25-8-4.
|
||||
//
|
||||
|
||||
#ifndef EXPKG_H
|
||||
#define EXPKG_H
|
||||
#include <filesystem>
|
||||
#include <memory>
|
||||
|
||||
#include "BinaryOPT/BinaryReader.h"
|
||||
#include "Tex/Tex.h"
|
||||
|
||||
|
||||
typedef struct CommandArgs
|
||||
{
|
||||
int argc;
|
||||
char** argv;
|
||||
} CommandArgs;
|
||||
|
||||
namespace PKG
|
||||
{
|
||||
enum class FILE_EXTENSION;
|
||||
|
||||
class PKG_API EXPKG
|
||||
{
|
||||
public:
|
||||
EXPKG(const CommandArgs& commandArgs);
|
||||
EXPKG(const std::filesystem::path& filePath, const std::filesystem::path& outDir = "out");
|
||||
|
||||
|
||||
private:
|
||||
static FILE_EXTENSION checkExtension(const std::filesystem::path& filePath);
|
||||
|
||||
void ExtractTex(const std::filesystem::path& path = "");
|
||||
|
||||
void ExtractPkg();
|
||||
void Run();
|
||||
|
||||
private:
|
||||
std::shared_ptr<BinaryReader> m_Reader;
|
||||
std::shared_ptr<Tex> m_Tex;
|
||||
std::filesystem::path m_OutDir;
|
||||
|
||||
|
||||
std::vector<Entry> m_Entries;
|
||||
};
|
||||
}
|
||||
|
||||
#endif //EXPKG_H
|
||||
5
expkg/src/Entry.cpp
Normal file
5
expkg/src/Entry.cpp
Normal file
@ -0,0 +1,5 @@
|
||||
//
|
||||
// Created by sfd on 25-8-4.
|
||||
//
|
||||
|
||||
#include "Entry.h"
|
||||
426
expkg/src/Entry.h
Normal file
426
expkg/src/Entry.h
Normal file
@ -0,0 +1,426 @@
|
||||
//
|
||||
// Created by sfd on 25-8-4.
|
||||
//
|
||||
|
||||
#ifndef ENTRY_H
|
||||
#define ENTRY_H
|
||||
#include <cstdint>
|
||||
#include <filesystem>
|
||||
#include <string>
|
||||
|
||||
#include "Core.h"
|
||||
|
||||
namespace PKG
|
||||
{
|
||||
enum class TexFormat
|
||||
{
|
||||
RGBA8888 = 0,
|
||||
DXT5 = 4,
|
||||
DXT3 = 6,
|
||||
DXT1 = 7,
|
||||
RG88 = 8,
|
||||
R8 = 9
|
||||
};
|
||||
|
||||
enum class TexType
|
||||
{
|
||||
None = 0,
|
||||
NoInterpolation = 1,
|
||||
ClampUVs = 2,
|
||||
IsGif = 4,
|
||||
// Placeholders
|
||||
Unk3 = 8,
|
||||
Unk4 = 16,
|
||||
IsVideoTexture = 32,
|
||||
Unk6 = 64,
|
||||
Unk7 = 128,
|
||||
};
|
||||
|
||||
|
||||
enum class MipmapFormat
|
||||
{
|
||||
Invalid = 0,
|
||||
|
||||
/// Raw pixels (4 bytes per pixel) (RGBA8888)
|
||||
RGBA8888 = 1,
|
||||
|
||||
/// Raw pixels (1 byte per pixel) (R8)
|
||||
R8 = 2,
|
||||
|
||||
/// Raw pixels (2 bytes per pixel) (RG88)
|
||||
RG88 = 3,
|
||||
|
||||
/// Raw pixels compressed using DXT5
|
||||
CompressedDXT5,
|
||||
|
||||
/// Raw pixels compressed using DXT3
|
||||
CompressedDXT3,
|
||||
|
||||
/// Raw pixels compressed using DXT1
|
||||
CompressedDXT1,
|
||||
|
||||
|
||||
/// MP4 Video
|
||||
VideoMp4,
|
||||
|
||||
|
||||
/// Windows or OS/2 Bitmap File (*.BMP)
|
||||
|
||||
/// Keep '= 1000' because MipmapFormatExtensions.IsImage uses this to check if format is an image format
|
||||
ImageBMP = 1000,
|
||||
|
||||
|
||||
/// Windows Icon (*.ICO)
|
||||
ImageICO,
|
||||
|
||||
|
||||
/// Independent JPEG Group (*.JPG, *.JIF, *.JPEG, *.JPE)
|
||||
ImageJPEG,
|
||||
|
||||
|
||||
/// JPEG Network Graphics (*.JNG)
|
||||
ImageJNG,
|
||||
|
||||
|
||||
/// Commodore 64 Koala format (*.KOA)
|
||||
ImageKOALA,
|
||||
|
||||
|
||||
/// Amiga IFF (*.IFF, *.LBM)
|
||||
ImageLBM,
|
||||
|
||||
|
||||
/// Amiga IFF (*.IFF, *.LBM)
|
||||
ImageIFF,
|
||||
|
||||
|
||||
/// Multiple Network Graphics (*.MNG)
|
||||
ImageMNG,
|
||||
|
||||
|
||||
/// Portable Bitmap (ASCII) (*.PBM)
|
||||
ImagePBM,
|
||||
|
||||
|
||||
/// Portable Bitmap (BINARY) (*.PBM)
|
||||
ImagePBMRAW,
|
||||
|
||||
|
||||
/// Kodak PhotoCD (*.PCD)
|
||||
ImagePCD,
|
||||
|
||||
|
||||
/// Zsoft Paintbrush PCX bitmap format (*.PCX)
|
||||
ImagePCX,
|
||||
|
||||
|
||||
/// Portable Graymap (ASCII) (*.PGM)
|
||||
ImagePGM,
|
||||
|
||||
|
||||
/// Portable Graymap (BINARY) (*.PGM)
|
||||
ImagePGMRAW,
|
||||
|
||||
|
||||
/// Portable Network Graphics (*.PNG)
|
||||
ImagePNG,
|
||||
|
||||
|
||||
/// Portable Pixelmap (ASCII) (*.PPM)
|
||||
ImagePPM,
|
||||
|
||||
|
||||
/// Portable Pixelmap (BINARY) (*.PPM)
|
||||
ImagePPMRAW,
|
||||
|
||||
|
||||
/// Sun Rasterfile (*.RAS)
|
||||
ImageRAS,
|
||||
|
||||
|
||||
/// truevision Targa files (*.TGA, *.TARGA)
|
||||
ImageTARGA,
|
||||
|
||||
|
||||
/// Tagged Image File Format (*.TIF, *.TIFF)
|
||||
ImageTIFF,
|
||||
|
||||
|
||||
/// Wireless Bitmap (*.WBMP)
|
||||
ImageWBMP,
|
||||
|
||||
|
||||
/// Adobe Photoshop (*.PSD)
|
||||
ImagePSD,
|
||||
|
||||
|
||||
/// Dr. Halo (*.CUT)
|
||||
ImageCUT,
|
||||
|
||||
|
||||
/// X11 Bitmap Format (*.XBM)
|
||||
ImageXBM,
|
||||
|
||||
|
||||
/// X11 Pixmap Format (*.XPM)
|
||||
ImageXPM,
|
||||
|
||||
|
||||
/// DirectDraw Surface (*.DDS)
|
||||
ImageDDS,
|
||||
|
||||
|
||||
/// Graphics Interchange Format (*.GIF)
|
||||
ImageGIF,
|
||||
|
||||
|
||||
/// High Dynamic Range (*.HDR)
|
||||
ImageHDR,
|
||||
|
||||
|
||||
/// Raw Fax format CCITT G3 (*.G3)
|
||||
ImageFAXG3,
|
||||
|
||||
|
||||
/// Silicon Graphics SGI image format (*.SGI)
|
||||
ImageSGI,
|
||||
|
||||
|
||||
/// OpenEXR format (*.EXR)
|
||||
ImageEXR,
|
||||
|
||||
|
||||
/// JPEG-2000 format (*.J2K, *.J2C)
|
||||
ImageJ2K,
|
||||
|
||||
|
||||
/// JPEG-2000 format (*.JP2)
|
||||
ImageJP2,
|
||||
|
||||
|
||||
/// Portable FloatMap (*.PFM)
|
||||
ImagePFM,
|
||||
|
||||
|
||||
/// Macintosh PICT (*.PICT)
|
||||
ImagePICT,
|
||||
|
||||
|
||||
/// RAW camera image (*.*)
|
||||
ImageRAW,
|
||||
};
|
||||
|
||||
enum class FreeImageFormat {
|
||||
/// <summary>
|
||||
/// Unknown format (returned value only, never use it as input value)
|
||||
/// </summary>
|
||||
FIF_UNKNOWN = -1,
|
||||
|
||||
/// <summary>
|
||||
/// Windows or OS/2 Bitmap File (*.BMP)
|
||||
/// </summary>
|
||||
FIF_BMP = 0,
|
||||
|
||||
/// <summary>
|
||||
/// Windows Icon (*.ICO)
|
||||
/// </summary>
|
||||
FIF_ICO = 1,
|
||||
|
||||
/// <summary>
|
||||
/// Independent JPEG Group (*.JPG, *.JIF, *.JPEG, *.JPE)
|
||||
/// </summary>
|
||||
FIF_JPEG = 2,
|
||||
|
||||
/// <summary>
|
||||
/// JPEG Network Graphics (*.JNG)
|
||||
/// </summary>
|
||||
FIF_JNG = 3,
|
||||
|
||||
/// <summary>
|
||||
/// Commodore 64 Koala format (*.KOA)
|
||||
/// </summary>
|
||||
FIF_KOALA = 4,
|
||||
|
||||
/// <summary>
|
||||
/// Amiga IFF (*.IFF, *.LBM)
|
||||
/// </summary>
|
||||
FIF_LBM = 5,
|
||||
|
||||
/// <summary>
|
||||
/// Amiga IFF (*.IFF, *.LBM)
|
||||
/// </summary>
|
||||
FIF_IFF = 5,
|
||||
|
||||
/// <summary>
|
||||
/// Multiple Network Graphics (*.MNG)
|
||||
/// </summary>
|
||||
FIF_MNG = 6,
|
||||
|
||||
/// <summary>
|
||||
/// Portable Bitmap (ASCII) (*.PBM)
|
||||
/// </summary>
|
||||
FIF_PBM = 7,
|
||||
|
||||
/// <summary>
|
||||
/// Portable Bitmap (BINARY) (*.PBM)
|
||||
/// </summary>
|
||||
FIF_PBMRAW = 8,
|
||||
|
||||
/// <summary>
|
||||
/// Kodak PhotoCD (*.PCD)
|
||||
/// </summary>
|
||||
FIF_PCD = 9,
|
||||
|
||||
/// <summary>
|
||||
/// Zsoft Paintbrush PCX bitmap format (*.PCX)
|
||||
/// </summary>
|
||||
FIF_PCX = 10,
|
||||
|
||||
/// <summary>
|
||||
/// Portable Graymap (ASCII) (*.PGM)
|
||||
/// </summary>
|
||||
FIF_PGM = 11,
|
||||
|
||||
/// <summary>
|
||||
/// Portable Graymap (BINARY) (*.PGM)
|
||||
/// </summary>
|
||||
FIF_PGMRAW = 12,
|
||||
|
||||
/// <summary>
|
||||
/// Portable Network Graphics (*.PNG)
|
||||
/// </summary>
|
||||
FIF_PNG = 13,
|
||||
|
||||
/// <summary>
|
||||
/// Portable Pixelmap (ASCII) (*.PPM)
|
||||
/// </summary>
|
||||
FIF_PPM = 14,
|
||||
|
||||
/// <summary>
|
||||
/// Portable Pixelmap (BINARY) (*.PPM)
|
||||
/// </summary>
|
||||
FIF_PPMRAW = 15,
|
||||
|
||||
/// <summary>
|
||||
/// Sun Rasterfile (*.RAS)
|
||||
/// </summary>
|
||||
FIF_RAS = 16,
|
||||
|
||||
/// <summary>
|
||||
/// truevision Targa files (*.TGA, *.TARGA)
|
||||
/// </summary>
|
||||
FIF_TARGA = 17,
|
||||
|
||||
/// <summary>
|
||||
/// Tagged Image File Format (*.TIF, *.TIFF)
|
||||
/// </summary>
|
||||
FIF_TIFF = 18,
|
||||
|
||||
/// <summary>
|
||||
/// Wireless Bitmap (*.WBMP)
|
||||
/// </summary>
|
||||
FIF_WBMP = 19,
|
||||
|
||||
/// <summary>
|
||||
/// Adobe Photoshop (*.PSD)
|
||||
/// </summary>
|
||||
FIF_PSD = 20,
|
||||
|
||||
/// <summary>
|
||||
/// Dr. Halo (*.CUT)
|
||||
/// </summary>
|
||||
FIF_CUT = 21,
|
||||
|
||||
/// <summary>
|
||||
/// X11 Bitmap Format (*.XBM)
|
||||
/// </summary>
|
||||
FIF_XBM = 22,
|
||||
|
||||
/// <summary>
|
||||
/// X11 Pixmap Format (*.XPM)
|
||||
/// </summary>
|
||||
FIF_XPM = 23,
|
||||
|
||||
/// <summary>
|
||||
/// DirectDraw Surface (*.DDS)
|
||||
/// </summary>
|
||||
FIF_DDS = 24,
|
||||
|
||||
/// <summary>
|
||||
/// Graphics Interchange Format (*.GIF)
|
||||
/// </summary>
|
||||
FIF_GIF = 25,
|
||||
|
||||
/// <summary>
|
||||
/// High Dynamic Range (*.HDR)
|
||||
/// </summary>
|
||||
FIF_HDR = 26,
|
||||
|
||||
/// <summary>
|
||||
/// Raw Fax format CCITT G3 (*.G3)
|
||||
/// </summary>
|
||||
FIF_FAXG3 = 27,
|
||||
|
||||
/// <summary>
|
||||
/// Silicon Graphics SGI image format (*.SGI)
|
||||
/// </summary>
|
||||
FIF_SGI = 28,
|
||||
|
||||
/// <summary>
|
||||
/// OpenEXR format (*.EXR)
|
||||
/// </summary>
|
||||
FIF_EXR = 29,
|
||||
|
||||
/// <summary>
|
||||
/// JPEG-2000 format (*.J2K, *.J2C)
|
||||
/// </summary>
|
||||
FIF_J2K = 30,
|
||||
|
||||
/// <summary>
|
||||
/// JPEG-2000 format (*.JP2)
|
||||
/// </summary>
|
||||
FIF_JP2 = 31,
|
||||
|
||||
/// <summary>
|
||||
/// Portable FloatMap (*.PFM)
|
||||
/// </summary>
|
||||
FIF_PFM = 32,
|
||||
|
||||
/// <summary>
|
||||
/// Macintosh PICT (*.PICT)
|
||||
/// </summary>
|
||||
FIF_PICT = 33,
|
||||
|
||||
/// <summary>
|
||||
/// RAW camera image (*.*)
|
||||
/// </summary>
|
||||
FIF_RAW = 34,
|
||||
|
||||
/// <summary>
|
||||
/// RAW camera MP4 (*.mp4)
|
||||
/// </summary>
|
||||
FIF_MP4 = 35,
|
||||
};
|
||||
|
||||
struct PKG_API Entry
|
||||
{
|
||||
std::filesystem::path FullPath;
|
||||
int32_t Offset{};
|
||||
int32_t Length{};
|
||||
std::string Type;
|
||||
};
|
||||
|
||||
struct PKG_API TexHeader
|
||||
{
|
||||
TexFormat Format;
|
||||
TexType Flags;
|
||||
int32_t TextureWidth;
|
||||
int32_t TextureHeight;
|
||||
int32_t ImageWidth;
|
||||
int32_t ImageHeight;
|
||||
uint32_t UnkInt0;
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
#endif //ENTRY_H
|
||||
5
expkg/src/Tex/Tex.cpp
Normal file
5
expkg/src/Tex/Tex.cpp
Normal file
@ -0,0 +1,5 @@
|
||||
//
|
||||
// Created by sfd on 25-8-5.
|
||||
//
|
||||
|
||||
#include "Tex.h"
|
||||
32
expkg/src/Tex/Tex.h
Normal file
32
expkg/src/Tex/Tex.h
Normal file
@ -0,0 +1,32 @@
|
||||
//
|
||||
// Created by sfd on 25-8-5.
|
||||
//
|
||||
|
||||
#ifndef TEX_H
|
||||
#define TEX_H
|
||||
#include <optional>
|
||||
#include <string>
|
||||
|
||||
#include "Entry.h"
|
||||
#include "TexImageContainer.h"
|
||||
|
||||
|
||||
namespace PKG
|
||||
{
|
||||
class Tex
|
||||
{
|
||||
public:
|
||||
std::string Magic1;
|
||||
std::string Magic2;
|
||||
TexHeader Header = {};
|
||||
TexImageContainer ImageContainer = {};
|
||||
|
||||
bool IsGif = false;
|
||||
bool IsVideoTexture = false;
|
||||
|
||||
// std::optional<TexFrameInfoContainer> FrameInfoContainer = {};
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
#endif //TEX_H
|
||||
88
expkg/src/Tex/TexImage.cpp
Normal file
88
expkg/src/Tex/TexImage.cpp
Normal file
@ -0,0 +1,88 @@
|
||||
//
|
||||
// Created by sfd on 25-8-5.
|
||||
//
|
||||
|
||||
#include "TexImage.h"
|
||||
|
||||
#include <iostream>
|
||||
|
||||
std::string PKG::GetFileExtension(const MipmapFormat format)
|
||||
{
|
||||
switch (format)
|
||||
{
|
||||
case MipmapFormat::ImageBMP:
|
||||
return "bmp";
|
||||
case MipmapFormat::ImageICO:
|
||||
return "ico";
|
||||
case MipmapFormat::ImageJPEG:
|
||||
return "jpg";
|
||||
case MipmapFormat::ImageJNG:
|
||||
return "jng";
|
||||
case MipmapFormat::ImageKOALA:
|
||||
return "koa";
|
||||
case MipmapFormat::ImageLBM:
|
||||
return "lbm";
|
||||
case MipmapFormat::ImageIFF:
|
||||
return "iff";
|
||||
case MipmapFormat::ImageMNG:
|
||||
return "mng";
|
||||
case MipmapFormat::ImagePBM:
|
||||
case MipmapFormat::ImagePBMRAW:
|
||||
return "pbm";
|
||||
case MipmapFormat::ImagePCD:
|
||||
return "pcd";
|
||||
case MipmapFormat::ImagePCX:
|
||||
return "pcx";
|
||||
case MipmapFormat::ImagePGM:
|
||||
case MipmapFormat::ImagePGMRAW:
|
||||
return "pgm";
|
||||
case MipmapFormat::ImagePNG:
|
||||
return "png";
|
||||
case MipmapFormat::ImagePPM:
|
||||
case MipmapFormat::ImagePPMRAW:
|
||||
return "ppm";
|
||||
case MipmapFormat::ImageRAS:
|
||||
return "ras";
|
||||
case MipmapFormat::ImageTARGA:
|
||||
return "tga";
|
||||
case MipmapFormat::ImageTIFF:
|
||||
return "tif";
|
||||
case MipmapFormat::ImageWBMP:
|
||||
return "wbmp";
|
||||
case MipmapFormat::ImagePSD:
|
||||
return "psd";
|
||||
case MipmapFormat::ImageCUT:
|
||||
return "cut";
|
||||
case MipmapFormat::ImageXBM:
|
||||
return "xbm";
|
||||
case MipmapFormat::ImageXPM:
|
||||
return "xpm";
|
||||
case MipmapFormat::ImageDDS:
|
||||
return "dds";
|
||||
case MipmapFormat::ImageGIF:
|
||||
return "gif";
|
||||
case MipmapFormat::ImageHDR:
|
||||
return "hdr";
|
||||
case MipmapFormat::ImageFAXG3:
|
||||
return "g3";
|
||||
case MipmapFormat::ImageSGI:
|
||||
return "sgi";
|
||||
case MipmapFormat::ImageEXR:
|
||||
return "exr";
|
||||
case MipmapFormat::ImageJ2K:
|
||||
return "j2k";
|
||||
case MipmapFormat::ImageJP2:
|
||||
return "jp2";
|
||||
case MipmapFormat::ImagePFM:
|
||||
return "pfm";
|
||||
case MipmapFormat::ImagePICT:
|
||||
return "pict";
|
||||
case MipmapFormat::ImageRAW:
|
||||
return "raw";
|
||||
case MipmapFormat::VideoMp4:
|
||||
return "mp4";
|
||||
}
|
||||
|
||||
std::cerr << "unknown file type" << std::endl;
|
||||
return ".unknown";
|
||||
}
|
||||
36
expkg/src/Tex/TexImage.h
Normal file
36
expkg/src/Tex/TexImage.h
Normal file
@ -0,0 +1,36 @@
|
||||
//
|
||||
// Created by sfd on 25-8-5.
|
||||
//
|
||||
|
||||
#ifndef TEXIMAGE_H
|
||||
#define TEXIMAGE_H
|
||||
#include <vector>
|
||||
|
||||
#include "../Entry.h"
|
||||
|
||||
namespace PKG
|
||||
{
|
||||
|
||||
std::string GetFileExtension(MipmapFormat format);
|
||||
|
||||
class TexMipMap
|
||||
{
|
||||
public:
|
||||
int Width;
|
||||
int Height;
|
||||
int DecompressedDataCount;
|
||||
bool IsZ4Compressed = false;
|
||||
|
||||
MipmapFormat Format;
|
||||
|
||||
std::vector<uint8_t> Data;
|
||||
};
|
||||
|
||||
|
||||
class TexImage
|
||||
{
|
||||
public:
|
||||
std::vector<TexMipMap> Mipmaps;
|
||||
};
|
||||
}
|
||||
#endif //TEXIMAGE_H
|
||||
6
expkg/src/Tex/TexImageContainer.cpp
Normal file
6
expkg/src/Tex/TexImageContainer.cpp
Normal file
@ -0,0 +1,6 @@
|
||||
//
|
||||
// Created by sfd on 25-8-5.
|
||||
//
|
||||
|
||||
#include "TexImageContainer.h"
|
||||
|
||||
34
expkg/src/Tex/TexImageContainer.h
Normal file
34
expkg/src/Tex/TexImageContainer.h
Normal file
@ -0,0 +1,34 @@
|
||||
//
|
||||
// Created by sfd on 25-8-5.
|
||||
//
|
||||
|
||||
#ifndef TEXIMAGECONTAINER_H
|
||||
#define TEXIMAGECONTAINER_H
|
||||
#include <memory>
|
||||
|
||||
#include "../Entry.h"
|
||||
#include "TexImage.h"
|
||||
#include "BinaryOPT/BinaryReader.h"
|
||||
|
||||
namespace PKG
|
||||
{
|
||||
enum class ImageContainerVersion
|
||||
{
|
||||
VERSION1 = 1,
|
||||
VERSION2 = 2,
|
||||
VERSION3 = 3,
|
||||
VERSION4 = 4,
|
||||
};
|
||||
|
||||
class TexImageContainer
|
||||
{
|
||||
public:
|
||||
std::string Magic;
|
||||
FreeImageFormat ImageFormat{};
|
||||
ImageContainerVersion ImageContainerVersion;
|
||||
|
||||
std::vector<TexImage> Images;
|
||||
};
|
||||
}
|
||||
|
||||
#endif //TEXIMAGECONTAINER_H
|
||||
15
expkg/src/expkg.h
Normal file
15
expkg/src/expkg.h
Normal file
@ -0,0 +1,15 @@
|
||||
#ifndef EXPKG_H
|
||||
#define EXPKG_H
|
||||
|
||||
#include "BinaryOPT/BinaryReader.h"
|
||||
#include "BinaryOPT/BinaryWriter.h"
|
||||
#include "Entry.h"
|
||||
#include "Tex/Tex.h"
|
||||
#include "Tex/TexImage.h"
|
||||
#include "Tex/TexImageContainer.h"
|
||||
#include "BinaryOPT/ImageReader.h"
|
||||
|
||||
#include "EXPKG/EXPKG.h"
|
||||
|
||||
|
||||
#endif // EXPKG_H
|
||||
9
expkg/vendor/lz4/.cirrus.yml
vendored
Normal file
9
expkg/vendor/lz4/.cirrus.yml
vendored
Normal file
@ -0,0 +1,9 @@
|
||||
task:
|
||||
name: FreeBSD
|
||||
freebsd_instance:
|
||||
matrix:
|
||||
image_family: freebsd-14-2
|
||||
install_script: pkg install -y gmake
|
||||
script: |
|
||||
cc -v
|
||||
gmake test
|
||||
132
expkg/vendor/lz4/.clang-format
vendored
Normal file
132
expkg/vendor/lz4/.clang-format
vendored
Normal file
@ -0,0 +1,132 @@
|
||||
# This is the configuration file for clang-format, an automatic code formatter.
|
||||
# Introduction: https://clang.llvm.org/docs/ClangFormat.html
|
||||
# Supported options: https://clang.llvm.org/docs/ClangFormatStyleOptions.html
|
||||
|
||||
Language: Cpp
|
||||
Standard: Latest
|
||||
|
||||
ColumnLimit: 110
|
||||
|
||||
UseTab: Never
|
||||
IndentWidth: 4
|
||||
PPIndentWidth: 2
|
||||
ContinuationIndentWidth: 4
|
||||
|
||||
LineEnding: LF
|
||||
InsertNewlineAtEOF: true
|
||||
KeepEmptyLinesAtTheStartOfBlocks: false
|
||||
MaxEmptyLinesToKeep: 1
|
||||
|
||||
IndentCaseBlocks: false
|
||||
IndentCaseLabels: false
|
||||
IndentGotoLabels: false
|
||||
IndentPPDirectives: AfterHash
|
||||
IndentWrappedFunctionNames: false
|
||||
|
||||
AlignAfterOpenBracket: Align
|
||||
AlignArrayOfStructures: Right
|
||||
AlignEscapedNewlines: Left
|
||||
AlignOperands: Align
|
||||
AlignConsecutiveAssignments:
|
||||
Enabled: true
|
||||
AcrossEmptyLines: false
|
||||
AcrossComments: false
|
||||
AlignCompound: false
|
||||
PadOperators: false
|
||||
AlignConsecutiveBitFields:
|
||||
Enabled: true
|
||||
AcrossEmptyLines: false
|
||||
AcrossComments: false
|
||||
AlignConsecutiveDeclarations:
|
||||
Enabled: true
|
||||
AcrossEmptyLines: false
|
||||
AcrossComments: false
|
||||
AlignConsecutiveMacros:
|
||||
Enabled: true
|
||||
AcrossEmptyLines: false
|
||||
AcrossComments: false
|
||||
AlignTrailingComments:
|
||||
Kind: Leave
|
||||
OverEmptyLines: 0
|
||||
|
||||
BinPackArguments: true
|
||||
BinPackParameters: false
|
||||
AllowAllArgumentsOnNextLine: true
|
||||
AllowAllParametersOfDeclarationOnNextLine: false
|
||||
|
||||
AllowShortBlocksOnASingleLine: Never
|
||||
AllowShortCaseLabelsOnASingleLine: false
|
||||
AllowShortEnumsOnASingleLine: true
|
||||
AllowShortFunctionsOnASingleLine: None
|
||||
AllowShortIfStatementsOnASingleLine: AllIfsAndElse
|
||||
AllowShortLoopsOnASingleLine: false
|
||||
|
||||
AlwaysBreakAfterReturnType: None
|
||||
AlwaysBreakBeforeMultilineStrings: false
|
||||
BraceWrapping:
|
||||
AfterCaseLabel: false
|
||||
AfterControlStatement: Never
|
||||
AfterEnum: false
|
||||
AfterExternBlock: false
|
||||
AfterFunction: true
|
||||
AfterStruct: false
|
||||
AfterUnion: false
|
||||
BeforeElse: false
|
||||
BeforeWhile: false
|
||||
IndentBraces: false
|
||||
SplitEmptyFunction: false
|
||||
SplitEmptyRecord: false
|
||||
BreakAfterAttributes: Never
|
||||
BreakBeforeBinaryOperators: None
|
||||
BreakBeforeBraces: Custom
|
||||
BreakBeforeInlineASMColon: OnlyMultiline
|
||||
BreakBeforeTernaryOperators: true
|
||||
|
||||
DerivePointerAlignment: false
|
||||
PointerAlignment: Left
|
||||
|
||||
QualifierAlignment: Custom
|
||||
QualifierOrder: ["inline", "static", "volatile", "restrict", "const", "type"]
|
||||
|
||||
ReflowComments: false
|
||||
BreakStringLiterals: false
|
||||
RemoveSemicolon: true
|
||||
RemoveParentheses: ReturnStatement
|
||||
InsertBraces: false
|
||||
SeparateDefinitionBlocks: Always
|
||||
|
||||
SpaceAfterCStyleCast: false
|
||||
SpaceAfterLogicalNot: false
|
||||
SpaceAroundPointerQualifiers: Default
|
||||
SpaceBeforeAssignmentOperators: true
|
||||
SpaceBeforeCaseColon: false
|
||||
SpaceBeforeParens: ControlStatements
|
||||
BitFieldColonSpacing: Both
|
||||
SpaceBeforeSquareBrackets: false
|
||||
SpaceInEmptyBlock: false
|
||||
SpacesBeforeTrailingComments: 1
|
||||
SpacesInSquareBrackets: false
|
||||
SpacesInLineCommentPrefix:
|
||||
Minimum: 1
|
||||
Maximum: -1
|
||||
|
||||
SortIncludes: Never
|
||||
IncludeBlocks: Preserve
|
||||
IncludeIsMainRegex: ""
|
||||
IncludeCategories:
|
||||
- {Regex: "<.*>", Priority: -2, CaseSensitive: true}
|
||||
- {Regex: "\".*\"", Priority: -1, CaseSensitive: true}
|
||||
|
||||
AttributeMacros: ["__capability"]
|
||||
StatementAttributeLikeMacros: []
|
||||
StatementMacros: []
|
||||
|
||||
PenaltyBreakAssignment: 200
|
||||
PenaltyBreakBeforeFirstCallParameter: 19
|
||||
PenaltyBreakComment: 300
|
||||
PenaltyBreakFirstLessLess: 120
|
||||
PenaltyBreakOpenParenthesis: 0
|
||||
PenaltyBreakString: 1000
|
||||
PenaltyExcessCharacter: 10
|
||||
PenaltyIndentedWhitespace: 0
|
||||
PenaltyReturnTypeOnItsOwnLine: 60
|
||||
21
expkg/vendor/lz4/.gitattributes
vendored
Normal file
21
expkg/vendor/lz4/.gitattributes
vendored
Normal file
@ -0,0 +1,21 @@
|
||||
# Set the default behavior
|
||||
* text eol=lf
|
||||
|
||||
# Explicitly declare source files
|
||||
*.c text eol=lf
|
||||
*.h text eol=lf
|
||||
|
||||
# Denote files that should not be modified.
|
||||
*.odt binary
|
||||
*.png binary
|
||||
|
||||
# Visual Studio
|
||||
*.sln text eol=crlf
|
||||
*.vcxproj* text eol=crlf
|
||||
*.vcproj* text eol=crlf
|
||||
*.suo binary
|
||||
*.rc text eol=crlf
|
||||
|
||||
# Windows
|
||||
*.bat text eol=crlf
|
||||
*.cmd text eol=crlf
|
||||
64
expkg/vendor/lz4/.gitignore
vendored
Normal file
64
expkg/vendor/lz4/.gitignore
vendored
Normal file
@ -0,0 +1,64 @@
|
||||
# Object files
|
||||
*.o
|
||||
*.ko
|
||||
obj/
|
||||
cacheObjs/
|
||||
|
||||
# Libraries
|
||||
*.lib
|
||||
*.a
|
||||
|
||||
# Shared objects (inc. Windows DLLs)
|
||||
*.dll
|
||||
*.so
|
||||
*.so.*
|
||||
*.dylib
|
||||
*.dSYM # apple
|
||||
|
||||
# Executables
|
||||
*.exe
|
||||
*.out
|
||||
*.app
|
||||
lz4
|
||||
|
||||
# Builders
|
||||
cmakebuild/
|
||||
builddir/
|
||||
cachedObjs/
|
||||
|
||||
# IDE / editors files
|
||||
.clang_complete
|
||||
.vscode
|
||||
_codelite/
|
||||
_codelite_lz4/
|
||||
bin/
|
||||
*.zip
|
||||
*.swp
|
||||
compile_flags.txt
|
||||
compile_commands.json
|
||||
.vscode
|
||||
.cache
|
||||
|
||||
# analyzers
|
||||
infer-out
|
||||
|
||||
# Mac
|
||||
.DS_Store
|
||||
*.dSYM
|
||||
|
||||
# Windows / Msys
|
||||
nul
|
||||
ld.exe*
|
||||
|
||||
# test artifacts
|
||||
*.lz4
|
||||
tmp*
|
||||
.stdvars.log
|
||||
cmake_download/
|
||||
cmake_bins/
|
||||
cmake_build/
|
||||
cmake_install_test/
|
||||
|
||||
# generated Windows resource files
|
||||
lib/*.rc
|
||||
programs/*.rc
|
||||
57
expkg/vendor/lz4/CODING_STYLE
vendored
Normal file
57
expkg/vendor/lz4/CODING_STYLE
vendored
Normal file
@ -0,0 +1,57 @@
|
||||
LZ4 CODING STYLE
|
||||
================
|
||||
|
||||
When contributing code and patches to the `LZ4` project, the following rules are expected to be followed for a successful merge.
|
||||
|
||||
|
||||
Library
|
||||
-------
|
||||
|
||||
The library's source code in `lib/` directory has a BSD 2-clause license.
|
||||
It's designed to be integrated into 3rd party applications.
|
||||
|
||||
It adheres relatively strictly to vanilla `C90`, with the following exceptions:
|
||||
- `long long` type is required, in order to support 64-bit values
|
||||
- Variadic Macros are used for debug mode (but not required in release mode)
|
||||
|
||||
Beyond that, all other rules and limitations of C90 must be respected, including `/* ... */` comment style only, and variable declaration at top of block only. The automated CI test suite will check for these rules.
|
||||
|
||||
The code is allowed to use more modern variants (C99 / C11 / C23) when useful
|
||||
as long as it provides a clean C90 backup for older compilers.
|
||||
For example, C99+ compilers will employ the `restrict` keyword, while `C90` ones will ignore it, thanks to conditional macros.
|
||||
This ensures maximum portability across a wide range of systems.
|
||||
|
||||
Moreover, in the interest of safety, the code has to respect a fairly strigent list of additional restrictions, provided through warning flags, the list of which is maintained within `Makefile`.
|
||||
Among the less common ones, we want the source to be compatible with `-Wc++-compat`, which ensures that the code can be compiled "as is", with no modification, as C++ code. It makes it possible to copy-paste the code into other C++ source files, or the source files are just dropped into a C++ environment which then compiles them as C++ source files.
|
||||
|
||||
|
||||
Command Line Interface
|
||||
----------------------
|
||||
|
||||
The CLI executable's source code in `programs/` directory has a GPLv2+ license.
|
||||
While it's designed to be portable and freely distributable, it's not meant to be integrated into 3rd party applications.
|
||||
The license difference is meant to reflect that choice.
|
||||
|
||||
Similar to the library, the CLI adheres relatively strictly to vanilla `C90`, and features the same exceptions:
|
||||
- `long long` requirement for 64-bit values
|
||||
- Variadic Macros for console messages (now used all the time, not just debug mode)
|
||||
|
||||
The code can also use system-specific libraries and symbols (such as `posix` ones)
|
||||
as long as it provides a backup for plain `C90` platforms.
|
||||
It's even allowed to lose capabilities, as long as the CLI can be cleanly compiled on `C90`.
|
||||
For example, systems without `<pthread>` support nor Completion Ports will just not feature multi-threading support, and run single threaded.
|
||||
|
||||
In the interest of build familiarity, the CLI source code also respects the same set of advanced warning flags as the library.
|
||||
That being said, this last part is debatable and could deviate in the future.
|
||||
For example, there are less reasons to support `-Wc++-compat` on the CLI side, since it's not meant to be integrated into 3rd party applications.
|
||||
|
||||
|
||||
Others
|
||||
------
|
||||
|
||||
The repository includes other directories with their own set of compilable projects, such as `tests/`, `examples/` and `contrib/`.
|
||||
|
||||
These repositories do not have to respect the same set of restrictions, and can employ a larger array of different languages.
|
||||
For example, some tests employ `sh`, and others employ `python`.
|
||||
|
||||
These directories may nonetheless include several targets employing the same coding convention as the `lz4` library. This is in a no way a rule, more like a side effect of build familiarity.
|
||||
16
expkg/vendor/lz4/INSTALL
vendored
Normal file
16
expkg/vendor/lz4/INSTALL
vendored
Normal file
@ -0,0 +1,16 @@
|
||||
Installation
|
||||
=============
|
||||
|
||||
```
|
||||
make
|
||||
make install # this command may require root access
|
||||
```
|
||||
|
||||
LZ4's `Makefile` supports standard [Makefile conventions],
|
||||
including [staged installs], [redirection], or [command redefinition].
|
||||
It is compatible with parallel builds (`-j#`).
|
||||
|
||||
[Makefile conventions]: https://www.gnu.org/prep/standards/html_node/Makefile-Conventions.html
|
||||
[staged installs]: https://www.gnu.org/prep/standards/html_node/DESTDIR.html
|
||||
[redirection]: https://www.gnu.org/prep/standards/html_node/Directory-Variables.html
|
||||
[command redefinition]: https://www.gnu.org/prep/standards/html_node/Utilities-in-Makefiles.html
|
||||
12
expkg/vendor/lz4/LICENSE
vendored
Normal file
12
expkg/vendor/lz4/LICENSE
vendored
Normal file
@ -0,0 +1,12 @@
|
||||
This repository uses 2 different licenses :
|
||||
- all files in the `lib` directory use a BSD 2-Clause license
|
||||
- all other files use a GPL-2.0-or-later license, unless explicitly stated otherwise
|
||||
|
||||
Relevant license is reminded at the top of each source file,
|
||||
and with presence of COPYING or LICENSE file in associated directories.
|
||||
|
||||
This model is selected to emphasize that
|
||||
files in the `lib` directory are designed to be included into 3rd party applications,
|
||||
while all other files, in `programs`, `tests` or `examples`,
|
||||
are intended to be used "as is", as part of their intended scenarios,
|
||||
with no intention to support 3rd party integration use cases.
|
||||
256
expkg/vendor/lz4/Makefile
vendored
Normal file
256
expkg/vendor/lz4/Makefile
vendored
Normal file
@ -0,0 +1,256 @@
|
||||
# ################################################################
|
||||
# LZ4 - Makefile
|
||||
# Copyright (C) Yann Collet 2011-2023
|
||||
# All rights reserved.
|
||||
#
|
||||
# BSD license
|
||||
# Redistribution and use in source and binary forms, with or without modification,
|
||||
# are permitted provided that the following conditions are met:
|
||||
#
|
||||
# * Redistributions of source code must retain the above copyright notice, this
|
||||
# list of conditions and the following disclaimer.
|
||||
#
|
||||
# * Redistributions in binary form must reproduce the above copyright notice, this
|
||||
# list of conditions and the following disclaimer in the documentation and/or
|
||||
# other materials provided with the distribution.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||
# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
#
|
||||
# You can contact the author at :
|
||||
# - LZ4 source repository : https://github.com/lz4/lz4
|
||||
# - LZ4 forum froup : https://groups.google.com/forum/#!forum/lz4c
|
||||
# ################################################################
|
||||
|
||||
LZ4DIR = lib
|
||||
PRGDIR = programs
|
||||
TESTDIR = tests
|
||||
EXDIR = examples
|
||||
FUZZDIR = ossfuzz
|
||||
|
||||
include build/make/lz4defs.make
|
||||
|
||||
MAKE += --no-print-directory
|
||||
|
||||
.PHONY: default
|
||||
default: lib-release lz4-release
|
||||
|
||||
# silent mode by default; verbose can be triggered by V=1 or VERBOSE=1
|
||||
$(V)$(VERBOSE).SILENT:
|
||||
|
||||
.PHONY: all
|
||||
all: allmost examples manuals build_tests
|
||||
|
||||
.PHONY: allmost
|
||||
allmost: lib lz4
|
||||
|
||||
.PHONY: lib lib-release liblz4.a
|
||||
lib lib-release liblz4.a:
|
||||
$(MAKE) -C $(LZ4DIR) $@
|
||||
|
||||
.PHONY: lz4 lz4-release
|
||||
lz4 lz4-release :
|
||||
$(MAKE) -C $(PRGDIR) $@
|
||||
$(LN_SF) $(PRGDIR)/lz4$(EXT) .
|
||||
echo lz4 build completed
|
||||
|
||||
.PHONY: examples
|
||||
examples: liblz4.a
|
||||
$(MAKE) -C $(EXDIR) all
|
||||
|
||||
.PHONY: manuals
|
||||
manuals:
|
||||
$(MAKE) -C contrib/gen_manual $@
|
||||
|
||||
.PHONY: build_tests
|
||||
build_tests:
|
||||
$(MAKE) -C $(TESTDIR) all
|
||||
|
||||
.PHONY: clean
|
||||
clean:
|
||||
$(MAKE) -C $(LZ4DIR) $@ > $(VOID)
|
||||
$(MAKE) -C $(PRGDIR) $@ > $(VOID)
|
||||
$(MAKE) -C $(TESTDIR) $@ > $(VOID)
|
||||
$(MAKE) -C $(EXDIR) $@ > $(VOID)
|
||||
$(MAKE) -C $(FUZZDIR) $@ > $(VOID)
|
||||
$(MAKE) -C contrib/gen_manual $@ > $(VOID)
|
||||
$(RM) lz4$(EXT)
|
||||
$(RM) -r $(CMAKE_BUILD_DIR) $(MESON_BUILD_DIR)
|
||||
@echo Cleaning completed
|
||||
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# make install is validated only for Posix environments
|
||||
#-----------------------------------------------------------------------------
|
||||
ifeq ($(POSIX_ENV),Yes)
|
||||
HOST_OS = POSIX
|
||||
|
||||
.PHONY: install uninstall
|
||||
install uninstall:
|
||||
$(MAKE) -C $(LZ4DIR) $@
|
||||
$(MAKE) -C $(PRGDIR) $@
|
||||
|
||||
.PHONY: test-install
|
||||
test-install:
|
||||
$(MAKE) -j1 install DESTDIR=~/install_test_dir
|
||||
|
||||
endif # POSIX_ENV
|
||||
|
||||
|
||||
CMAKE ?= cmake
|
||||
CMAKE_BUILD_DIR ?= build/cmake/build
|
||||
ifneq (,$(filter MSYS%,$(shell $(UNAME))))
|
||||
HOST_OS = MSYS
|
||||
CMAKE_PARAMS = -G"MSYS Makefiles"
|
||||
endif
|
||||
|
||||
.PHONY: cmakebuild
|
||||
cmakebuild:
|
||||
mkdir -p $(CMAKE_BUILD_DIR)
|
||||
cd $(CMAKE_BUILD_DIR); $(CMAKE) $(CMAKE_PARAMS) ..; $(CMAKE) --build .
|
||||
|
||||
MESON ?= meson
|
||||
MESON_BUILD_DIR ?= mesonBuildDir
|
||||
|
||||
.PHONY: mesonbuild
|
||||
mesonbuild:
|
||||
$(MESON) setup --fatal-meson-warnings --buildtype=debug -Db_lundef=false -Dauto_features=enabled -Dprograms=true -Dcontrib=true -Dtests=true -Dexamples=true build/meson $(MESON_BUILD_DIR)
|
||||
$(MESON) test -C $(MESON_BUILD_DIR)
|
||||
|
||||
#------------------------------------------------------------------------
|
||||
# make tests validated only for MSYS and Posix environments
|
||||
#------------------------------------------------------------------------
|
||||
ifneq (,$(filter $(HOST_OS),MSYS POSIX))
|
||||
|
||||
.PHONY: list
|
||||
list:
|
||||
$(MAKE) -pRrq -f $(lastword $(MAKEFILE_LIST)) : 2>/dev/null | awk -v RS= -F: '/^# File/,/^# Finished Make data base/ {if ($$1 !~ "^[#.]") {print $$1}}' | sort | egrep -v -e '^[^[:alnum:]]' -e '^$@$$' | xargs
|
||||
|
||||
.PHONY: check
|
||||
check:
|
||||
$(MAKE) -C $(TESTDIR) test-lz4-essentials
|
||||
|
||||
.PHONY: test
|
||||
test:
|
||||
$(MAKE) -C $(TESTDIR) $@
|
||||
$(MAKE) -C $(EXDIR) $@
|
||||
|
||||
.PHONY: usan
|
||||
usan: CC = clang
|
||||
usan: CFLAGS = -O3 -g -fsanitize=undefined -fno-sanitize-recover=undefined -fsanitize-recover=pointer-overflow
|
||||
usan: LDFLAGS = $(CFLAGS)
|
||||
usan: clean
|
||||
CC=$(CC) CFLAGS='$(CFLAGS)' LDFLAGS='$(LDFLAGS)' $(MAKE) test FUZZER_TIME="-T30s" NB_LOOPS=-i1
|
||||
|
||||
.PHONY: ubsan
|
||||
ubsan: usan
|
||||
|
||||
.PHONY: usan32
|
||||
usan32: CFLAGS = -m32 -O3 -g -fsanitize=undefined -fno-sanitize-recover=undefined -fsanitize-recover=pointer-overflow
|
||||
usan32: LDFLAGS = $(CFLAGS)
|
||||
usan32: clean
|
||||
CFLAGS='$(CFLAGS)' LDFLAGS='$(LDFLAGS)' $(MAKE) V=1 test FUZZER_TIME="-T30s" NB_LOOPS=-i1
|
||||
|
||||
SCANBUILD ?= scan-build
|
||||
SCANBUILD_FLAGS += --status-bugs -v --force-analyze-debug-code
|
||||
.PHONY: staticAnalyze
|
||||
staticAnalyze: clean
|
||||
CPPFLAGS=-DLZ4_DEBUG=1 CFLAGS=-g $(SCANBUILD) $(SCANBUILD_FLAGS) $(MAKE) all V=1 DEBUGLEVEL=1
|
||||
|
||||
.PHONY: cppcheck
|
||||
cppcheck:
|
||||
cppcheck . --force --enable=warning,portability,performance,style --error-exitcode=1 > /dev/null
|
||||
|
||||
.PHONY: platformTest
|
||||
platformTest: clean
|
||||
@echo "\n ---- test lz4 with $(CC) compiler ----"
|
||||
$(CC) -v
|
||||
CFLAGS="$(CFLAGS) -O3 -Werror" $(MAKE) -C $(LZ4DIR) all
|
||||
CFLAGS="$(CFLAGS) -O3 -Werror -static" $(MAKE) -C $(PRGDIR) all
|
||||
CFLAGS="$(CFLAGS) -O3 -Werror -static" $(MAKE) -C $(TESTDIR) all
|
||||
$(MAKE) -C $(TESTDIR) test-platform
|
||||
|
||||
.PHONY: versionsTest
|
||||
versionsTest:
|
||||
$(MAKE) -C $(TESTDIR) clean
|
||||
$(MAKE) -C $(TESTDIR) $@
|
||||
|
||||
.PHONY: test-freestanding
|
||||
test-freestanding:
|
||||
$(MAKE) -C $(TESTDIR) clean
|
||||
$(MAKE) -C $(TESTDIR) $@
|
||||
|
||||
# test linking C libraries from C++ executables
|
||||
.PHONY: ctocxxtest
|
||||
ctocxxtest: LIBCC="$(CC)"
|
||||
ctocxxtest: EXECC="$(CXX) -Wno-deprecated"
|
||||
ctocxxtest: CFLAGS=-O0
|
||||
ctocxxtest:
|
||||
CFLAGS="$(CFLAGS)" CC=$(LIBCC) $(MAKE) -C $(LZ4DIR) all
|
||||
CC=$(LIBCC) $(MAKE) -C $(TESTDIR) CFLAGS="$(CFLAGS)" lz4.o lz4hc.o lz4frame.o
|
||||
CC=$(EXECC) $(MAKE) -C $(TESTDIR) CFLAGS="$(CFLAGS)" all
|
||||
|
||||
.PHONY: cxxtest cxx32test
|
||||
cxx32test: CFLAGS += -m32
|
||||
cxxtest cxx32test: CC := "$(CXX) -Wno-deprecated"
|
||||
cxxtest cxx32test: CFLAGS = -O3 -Wall -Wextra -Wundef -Wshadow -Wcast-align -Werror
|
||||
cxxtest cxx32test:
|
||||
$(CXX) -v
|
||||
CC=$(CC) CFLAGS="$(CFLAGS)" $(MAKE) -C $(LZ4DIR) all
|
||||
CC=$(CC) CFLAGS="$(CFLAGS)" $(MAKE) -C $(PRGDIR) all
|
||||
CC=$(CC) CFLAGS="$(CFLAGS)" $(MAKE) -C $(TESTDIR) all
|
||||
|
||||
.PHONY: cxx17build
|
||||
cxx17build : CC = "$(CXX) -Wno-deprecated"
|
||||
cxx17build : CFLAGS = -std=c++17 -Wall -Wextra -Wundef -Wshadow -Wcast-align -Werror -Wpedantic
|
||||
cxx17build : clean
|
||||
$(CXX) -v
|
||||
CC=$(CC) $(MAKE) -C $(LZ4DIR) all CFLAGS="$(CFLAGS)"
|
||||
CC=$(CC) $(MAKE) -C $(PRGDIR) all CFLAGS="$(CFLAGS)"
|
||||
CC=$(CC) $(MAKE) -C $(TESTDIR) all CFLAGS="$(CFLAGS)"
|
||||
|
||||
.PHONY: c_standards
|
||||
c_standards: clean c_standards_c11 c_standards_c99 c_standards_c90
|
||||
|
||||
.PHONY: c_standards_c90
|
||||
c_standards_c90: clean
|
||||
$(MAKE) clean; CFLAGS="-std=c90 -Werror -Wpedantic -Wno-long-long -Wno-variadic-macros" $(MAKE) allmost
|
||||
$(MAKE) clean; CFLAGS="-std=gnu90 -Werror -Wpedantic -Wno-long-long -Wno-variadic-macros" $(MAKE) allmost
|
||||
|
||||
.PHONY: c_standards_c99
|
||||
c_standards_c99: clean
|
||||
$(MAKE) clean; CFLAGS="-std=c99 -Werror -Wpedantic" $(MAKE) all
|
||||
$(MAKE) clean; CFLAGS="-std=gnu99 -Werror -Wpedantic" $(MAKE) all
|
||||
|
||||
.PHONY: c_standards_c11
|
||||
c_standards_c11: clean
|
||||
$(MAKE) clean; CFLAGS="-std=c11 -Werror" $(MAKE) all
|
||||
|
||||
# The following test ensures that standard Makefile variables set through environment
|
||||
# are correctly transmitted at compilation stage.
|
||||
# This test is meant to detect issues like https://github.com/lz4/lz4/issues/958
|
||||
.PHONY: test_stdvars
|
||||
test_stdvars: ## CI helper – verifies CC/CFLAGS/CPPFLAGS/LDFLAGS/LDLIBS propagation
|
||||
@echo '--- standard-variable propagation test ---'
|
||||
@$(RM) .stdvars.log
|
||||
|
||||
@$(MAKE) -rn V=1 \
|
||||
CC='cc -DCC_TEST' \
|
||||
CFLAGS='-DCFLAGS_TEST' \
|
||||
CPPFLAGS='-DCPPFLAGS_TEST' \
|
||||
LDFLAGS='-DLDFLAGS_TEST' \
|
||||
LDLIBS='-DLDLIBS_TEST' \
|
||||
| tee .stdvars.log >/dev/null
|
||||
|
||||
@tests/check_stdvars.sh .stdvars.log
|
||||
@$(RM) .stdvars.log
|
||||
|
||||
endif # MSYS POSIX
|
||||
366
expkg/vendor/lz4/NEWS
vendored
Normal file
366
expkg/vendor/lz4/NEWS
vendored
Normal file
@ -0,0 +1,366 @@
|
||||
v1.10.0
|
||||
cli : multithreading compression support: improves speed by X times threads allocated
|
||||
cli : overlap decompression with i/o, improving speed by ~+60%
|
||||
cli : support environment variables LZ4_CLEVEL and LZ4_NBWORKERS
|
||||
cli : license of CLI more clearly labelled GPL-2.0-or-later
|
||||
cli : fix: refuse to compress directories
|
||||
cli : fix dictionary compression benchmark on multiple files
|
||||
cli : change: no more implicit `stdout` (except when input is `stdin`)
|
||||
lib : new level 2, offering mid-way performance (speed and compression)
|
||||
lib : Improved lz4frame compression speed for small data (up to +160% at 1KB)
|
||||
lib : Slightly faster (+5%) HC compression speed (levels 3-9), by @JunHe77
|
||||
lib : dictionary compression support now in stable status
|
||||
lib : lz4frame states can be safely reset and reused after a processing error (described by @QrczakMK)
|
||||
lib : `lz4file` API improvements, by @vsolontsov-volant and @t-mat
|
||||
lib : new experimental symbol `LZ4_compress_destSize_extState()`
|
||||
build: cmake minimum version raised to 3.5
|
||||
build: cmake improvements, by @foxeng, @Ohjurot, @LocalSpook, @teo-tsirpanis, @ur4t and @t-mat
|
||||
build: meson scripts are now hosted into `build/` directory, by @eli-schwartz
|
||||
build: meson improvements, by @tristan957
|
||||
build: Visual Studio solutions generated by `cmake` via scripts
|
||||
port : support for loongArch, risc-v, m68k, mips and sparc architectures
|
||||
port : improved Visual Studio compatibility, by @t-mat
|
||||
port : freestanding support improvements, by @t-mat
|
||||
|
||||
v1.9.4
|
||||
perf : faster decoding speed (~+20%) on aarch64 platforms
|
||||
perf : faster decoding speed (~+70%) for -BD4 setting in CLI
|
||||
api : new function `LZ4_decompress_safe_partial_usingDict()` by @yawqi
|
||||
api : lz4frame: ability to provide custom allocators at state creation
|
||||
api : can skip checksum validation for improved decoding speed
|
||||
api : new experimental unit `lz4file` for file i/o API, by @anjiahao1
|
||||
api : new experimental function `LZ4F_uncompressedUpdate()`, by @alexmohr
|
||||
cli : `--list` works on `stdin` input, by @Low-power
|
||||
cli : `--no-crc` does not produce (compression) nor check (decompression) checksums
|
||||
cli : fix: `--test` and `--list` produce an error code when parsing invalid input
|
||||
cli : fix: `--test -m` does no longer create decompressed file artifacts
|
||||
cli : fix: support skippable frames when passed via `stdin`, reported by @davidmankin
|
||||
build: fix: Makefile respects CFLAGS directives passed via environment variable
|
||||
build: `LZ4_FREESTANDING`, new build macro for freestanding environments, by @t-mat
|
||||
build: `make` and `make test` are compatible with `-j` parallel run
|
||||
build: AS/400 compatibility, by @jonrumsey
|
||||
build: Solaris 10 compatibility, by @pekdon
|
||||
build: MSVC 2022 support, by @t-mat
|
||||
build: improved meson script, by @eli-schwartz
|
||||
doc : Updated LZ4 block format, provide an "implementation notes" section
|
||||
|
||||
v1.9.3
|
||||
perf: highly improved speed in kernel space, by @terrelln
|
||||
perf: faster speed with Visual Studio, thanks to @wolfpld and @remittor
|
||||
perf: improved dictionary compression speed, by @felixhandte
|
||||
perf: fixed LZ4_compress_HC_destSize() ratio, detected by @hsiangkao
|
||||
perf: reduced stack usage in high compression mode, by @Yanpas
|
||||
api : LZ4_decompress_safe_partial() supports unknown compressed size, requested by @jfkthame
|
||||
api : improved LZ4F_compressBound() with automatic flushing, by Christopher Harvie
|
||||
api : can (de)compress to/from NULL without UBs
|
||||
api : fix alignment test on 32-bit systems (state initialization)
|
||||
api : fix LZ4_saveDictHC() in corner case scenario, detected by @IgorKorkin
|
||||
cli : `-l` legacy format is now compatible with `-m` multiple files, by Filipe Calasans
|
||||
cli : benchmark mode supports dictionary, by @rkoradi
|
||||
cli : fix --fast with large argument, detected by @picoHz
|
||||
build: link to user-defined memory functions with LZ4_USER_MEMORY_FUNCTIONS, suggested by Yuriy Levchenko
|
||||
build: contrib/cmake_unofficial/ moved to build/cmake/
|
||||
build: visual/* moved to build/
|
||||
build: updated meson script, by @neheb
|
||||
build: tinycc support, by Anton Kochkov
|
||||
install: Haiku support, by Jerome Duval
|
||||
doc : updated LZ4 frame format, clarify EndMark
|
||||
|
||||
v1.9.2
|
||||
fix : out-of-bound read in exceptional circumstances when using decompress_partial(), by @terrelln
|
||||
fix : slim opportunity for out-of-bound write with compress_fast() with a large enough input and when providing an output smaller than recommended (< LZ4_compressBound(inputSize)), by @terrelln
|
||||
fix : rare data corruption bug with LZ4_compress_destSize(), by @terrelln
|
||||
fix : data corruption bug when Streaming with an Attached Dict in HC Mode, by @felixhandte
|
||||
perf: enable LZ4_FAST_DEC_LOOP on aarch64/GCC by default, by @prekageo
|
||||
perf: improved lz4frame streaming API speed, by @dreambottle
|
||||
perf: speed up lz4hc on slow patterns when using external dictionary, by @terrelln
|
||||
api: better in-place decompression and compression support
|
||||
cli : --list supports multi-frames files, by @gstedman
|
||||
cli: --version outputs to stdout
|
||||
cli : add option --best as an alias of -12 , by @Low-power
|
||||
misc: Integration into oss-fuzz by @cmeister2, expanded list of scenarios by @terrelln
|
||||
|
||||
v1.9.1
|
||||
fix : decompression functions were reading a few bytes beyond input size (introduced in v1.9.0, reported by @ppodolsky and @danlark1)
|
||||
api : fix : lz4frame initializers compatibility with c++, reported by @degski
|
||||
cli : added command --list, based on a patch by @gabrielstedman
|
||||
build: improved Windows build, by @JPeterMugaas
|
||||
build: AIX, by Norman Green
|
||||
|
||||
v1.9.0
|
||||
perf: large decompression speed improvement on x86/x64 (up to +20%) by @djwatson
|
||||
api : changed : _destSize() compression variants are promoted to stable API
|
||||
api : new : LZ4_initStream(HC), replacing LZ4_resetStream(HC)
|
||||
api : changed : LZ4_resetStream(HC) as recommended reset function, for better performance on small data
|
||||
cli : support custom block sizes, by @blezsan
|
||||
build: source code can be amalgamated, by Bing Xu
|
||||
build: added meson build, by @lzutao
|
||||
build: new build macros : LZ4_DISTANCE_MAX, LZ4_FAST_DEC_LOOP
|
||||
install: MidnightBSD, by @laffer1
|
||||
install: msys2 on Windows 10, by @vtorri
|
||||
|
||||
v1.8.3
|
||||
perf: minor decompression speed improvement (~+2%) with gcc
|
||||
fix : corruption in v1.8.2 at level 9 for files > 64KB under rare conditions (#560)
|
||||
cli : new command --fast, by @jennifermliu
|
||||
cli : fixed elapsed time, and added cpu load indicator (on -vv) (#555)
|
||||
api : LZ4_decompress_safe_partial() now decodes exactly the nb of bytes requested (feature request #566)
|
||||
build : added Haiku target, by @fbrosson, and MidnightBSD, by @laffer1
|
||||
doc : updated documentation regarding dictionary compression
|
||||
|
||||
v1.8.2
|
||||
perf: *much* faster dictionary compression on small files, by @felixhandte
|
||||
perf: improved decompression speed and binary size, by Alexey Tourbin (@svpv)
|
||||
perf: slightly faster HC compression and decompression speed
|
||||
perf: very small compression ratio improvement
|
||||
fix : compression compatible with low memory addresses (< 0xFFFF)
|
||||
fix : decompression segfault when provided with NULL input, by @terrelln
|
||||
cli : new command --favor-decSpeed
|
||||
cli : benchmark mode more accurate for small inputs
|
||||
fullbench : can bench _destSize() variants, by @felixhandte
|
||||
doc : clarified block format parsing restrictions, by Alexey Tourbin (@svpv)
|
||||
|
||||
v1.8.1
|
||||
perf : faster and stronger ultra modes (levels 10+)
|
||||
perf : slightly faster compression and decompression speed
|
||||
perf : fix bad degenerative case, reported by @c-morgenstern
|
||||
fix : decompression failed when using a combination of extDict + low memory address (#397), reported and fixed by Julian Scheid (@jscheid)
|
||||
cli : support for dictionary compression (`-D`), by Felix Handte @felixhandte
|
||||
cli : fix : `lz4 -d --rm` preserves timestamp (#441)
|
||||
cli : fix : do not modify /dev/null permission as root, by @aliceatlas
|
||||
api : `_destSize()` variant supported for all compression levels
|
||||
build : `make` and `make test` compatible with `-jX`, reported by @mwgamera
|
||||
build : can control LZ4LIB_VISIBILITY macro, by @mikir
|
||||
install: fix man page directory (#387), reported by Stuart Cardall (@itoffshore)
|
||||
|
||||
v1.8.0
|
||||
cli : fix : do not modify /dev/null permissions, reported by @Maokaman1
|
||||
cli : added GNU separator -- specifying that all following arguments are files
|
||||
API : added LZ4_compress_HC_destSize(), by Oleg (@remittor)
|
||||
API : added LZ4F_resetDecompressionContext()
|
||||
API : lz4frame : negative compression levels trigger fast acceleration, request by Lawrence Chan
|
||||
API : lz4frame : can control block checksum and dictionary ID
|
||||
API : fix : expose obsolete decoding functions, reported by Chen Yufei
|
||||
API : experimental : lz4frame_static : new dictionary compression API
|
||||
build : fix : static lib installation, by Ido Rosen
|
||||
build : dragonFlyBSD, OpenBSD, NetBSD supported
|
||||
build : LZ4_MEMORY_USAGE can be modified at compile time, through external define
|
||||
doc : Updated LZ4 Frame format to v1.6.0, restoring Dictionary-ID field
|
||||
doc : lz4 api manual, by Przemyslaw Skibinski
|
||||
|
||||
v1.7.5
|
||||
lz4hc : new high compression mode : levels 10-12 compress more and slower, by Przemyslaw Skibinski
|
||||
lz4cat : fix : works with relative path (#284) and stdin (#285) (reported by @beiDei8z)
|
||||
cli : fix minor notification when using -r recursive mode
|
||||
API : lz4frame : LZ4F_frameBound(0) gives upper bound of *flush() and *End() operations (#290, #280)
|
||||
doc : markdown version of man page, by Takayuki Matsuoka (#279)
|
||||
build : Makefile : fix make -jX lib+exe concurrency (#277)
|
||||
build : cmake : improvements by Michał Górny (#296)
|
||||
|
||||
v1.7.4.2
|
||||
fix : Makefile : release build compatible with PIE and customized compilation directives provided through environment variables (#274, reported by Antoine Martin)
|
||||
|
||||
v1.7.4
|
||||
Improved : much better speed in -mx32 mode
|
||||
cli : fix : Large file support in 32-bits mode on Mac OS-X
|
||||
fix : compilation on gcc 4.4 (#272), reported by Antoine Martin
|
||||
|
||||
v1.7.3
|
||||
Changed : moved to versioning; package, cli and library have same version number
|
||||
Improved: Small decompression speed boost
|
||||
Improved: Small compression speed improvement on 64-bits systems
|
||||
Improved: Small compression ratio and speed improvement on small files
|
||||
Improved: Significant speed boost on ARMv6 and ARMv7
|
||||
Fix : better ratio on 64-bits big-endian targets
|
||||
Improved cmake build script, by Evan Nemerson
|
||||
New liblz4-dll project, by Przemyslaw Skibinki
|
||||
Makefile: Generates object files (*.o) for faster (re)compilation on low power systems
|
||||
cli : new : --rm and --help commands
|
||||
cli : new : preserved file attributes, by Przemyslaw Skibinki
|
||||
cli : fix : crash on some invalid inputs
|
||||
cli : fix : -t correctly validates lz4-compressed files, by Nick Terrell
|
||||
cli : fix : detects and reports fread() errors, thanks to Hiroshi Fujishima report #243
|
||||
cli : bench : new : -r recursive mode
|
||||
lz4cat : can cat multiple files in a single command line (#184)
|
||||
Added : doc/lz4_manual.html, by Przemyslaw Skibinski
|
||||
Added : dictionary compression and frame decompression examples, by Nick Terrell
|
||||
Added : Debianization, by Evgeniy Polyakov
|
||||
|
||||
r131
|
||||
New : Dos/DJGPP target, thanks to Louis Santillan (#114)
|
||||
Added : Example using lz4frame library, by Zbigniew Jędrzejewski-Szmek (#118)
|
||||
Changed: xxhash symbols are modified (namespace emulation) within liblz4
|
||||
|
||||
r130:
|
||||
Fixed : incompatibility sparse mode vs console, reported by Yongwoon Cho (#105)
|
||||
Fixed : LZ4IO exits too early when frame crc not present, reported by Yongwoon Cho (#106)
|
||||
Fixed : incompatibility sparse mode vs append mode, reported by Takayuki Matsuoka (#110)
|
||||
Performance fix : big compression speed boost for clang (+30%)
|
||||
New : cross-version test, by Takayuki Matsuoka
|
||||
|
||||
r129:
|
||||
Added : LZ4_compress_fast(), LZ4_compress_fast_continue()
|
||||
Added : LZ4_compress_destSize()
|
||||
Changed: New lz4 and lz4hc compression API. Previous function prototypes still supported.
|
||||
Changed: Sparse file support enabled by default
|
||||
New : LZ4 CLI improved performance compressing/decompressing multiple files (#86, kind contribution from Kyle J. Harper & Takayuki Matsuoka)
|
||||
Fixed : GCC 4.9+ optimization bug - Reported by Markus Trippelsdorf, Greg Slazinski & Evan Nemerson
|
||||
Changed: Enums converted to LZ4F_ namespace convention - by Takayuki Matsuoka
|
||||
Added : AppVeyor CI environment, for Visual tests - Suggested by Takayuki Matsuoka
|
||||
Modified:Obsolete functions generate warnings - Suggested by Evan Nemerson, contributed by Takayuki Matsuoka
|
||||
Fixed : Bug #75 (unfinished stream), reported by Yongwoon Cho
|
||||
Updated: Documentation converted to MarkDown format
|
||||
|
||||
r128:
|
||||
New : lz4cli sparse file support (Requested by Neil Wilson, and contributed by Takayuki Matsuoka)
|
||||
New : command -m, to compress multiple files in a single command (suggested by Kyle J. Harper)
|
||||
Fixed : Restored lz4hc compression ratio (slightly lower since r124)
|
||||
New : lz4 cli supports long commands (suggested by Takayuki Matsuoka)
|
||||
New : lz4frame & lz4cli frame content size support
|
||||
New : lz4frame supports skippable frames, as requested by Sergey Cherepanov
|
||||
Changed: Default "make install" directory is /usr/local, as notified by Ron Johnson
|
||||
New : lz4 cli supports "pass-through" mode, requested by Neil Wilson
|
||||
New : datagen can generate sparse files
|
||||
New : scan-build tests, thanks to kind help by Takayuki Matsuoka
|
||||
New : g++ compatibility tests
|
||||
New : arm cross-compilation test, thanks to kind help by Takayuki Matsuoka
|
||||
Fixed : Fuzzer + frametest compatibility with NetBSD (issue #48, reported by Thomas Klausner)
|
||||
Added : Visual project directory
|
||||
Updated: Man page & Specification
|
||||
|
||||
r127:
|
||||
N/A : added a file on SVN
|
||||
|
||||
r126:
|
||||
New : lz4frame API is now integrated into liblz4
|
||||
Fixed : GCC 4.9 bug on highest performance settings, reported by Greg Slazinski
|
||||
Fixed : bug within LZ4 HC streaming mode, reported by James Boyle
|
||||
Fixed : older compiler don't like nameless unions, reported by Cheyi Lin
|
||||
Changed : lz4 is C90 compatible
|
||||
Changed : added -pedantic option, fixed a few mminor warnings
|
||||
|
||||
r125:
|
||||
Changed : endian and alignment code
|
||||
Changed : directory structure : new "lib" directory
|
||||
Updated : lz4io, now uses lz4frame
|
||||
Improved: slightly improved decoding speed
|
||||
Fixed : LZ4_compress_limitedOutput(); Special thanks to Christopher Speller !
|
||||
Fixed : some alignment warnings under clang
|
||||
Fixed : deprecated function LZ4_slideInputBufferHC()
|
||||
|
||||
r124:
|
||||
New : LZ4 HC streaming mode
|
||||
Fixed : LZ4F_compressBound() using null preferencesPtr
|
||||
Updated : xxHash to r38
|
||||
Updated library number, to 1.4.0
|
||||
|
||||
r123:
|
||||
Added : experimental lz4frame API, thanks to Takayuki Matsuoka and Christopher Jackson for testings
|
||||
Fix : s390x support, thanks to Nobuhiro Iwamatsu
|
||||
Fix : test mode (-t) no longer requires confirmation, thanks to Thary Nguyen
|
||||
|
||||
r122:
|
||||
Fix : AIX & AIX64 support (SamG)
|
||||
Fix : mips 64-bits support (lew van)
|
||||
Added : Examples directory, using code examples from Takayuki Matsuoka
|
||||
Updated : Framing specification, to v1.4.1
|
||||
Updated : xxHash, to r36
|
||||
|
||||
r121:
|
||||
Added : Makefile : install for kFreeBSD and Hurd (Nobuhiro Iwamatsu)
|
||||
Fix : Makefile : install for OS-X and BSD, thanks to Takayuki Matsuoka
|
||||
|
||||
r120:
|
||||
Modified : Streaming API, using strong types
|
||||
Added : LZ4_versionNumber(), thanks to Takayuki Matsuoka
|
||||
Fix : OS-X : library install name, thanks to Clemens Lang
|
||||
Updated : Makefile : synchronize library version number with lz4.h, thanks to Takayuki Matsuoka
|
||||
Updated : Makefile : stricter compilation flags
|
||||
Added : pkg-config, thanks to Zbigniew Jędrzejewski-Szmek (issue 135)
|
||||
Makefile : lz4-test only test native binaries, as suggested by Michał Górny (issue 136)
|
||||
Updated : xxHash to r35
|
||||
|
||||
r119:
|
||||
Fix : Issue 134 : extended malicious address space overflow in 32-bits mode for some specific configurations
|
||||
|
||||
r118:
|
||||
New : LZ4 Streaming API (Fast version), special thanks to Takayuki Matsuoka
|
||||
New : datagen : parametrable synthetic data generator for tests
|
||||
Improved : fuzzer, support more test cases, more parameters, ability to jump to specific test
|
||||
fix : support ppc64le platform (issue 131)
|
||||
fix : Issue 52 (malicious address space overflow in 32-bits mode when using large custom format)
|
||||
fix : Makefile : minor issue 130 : header files permissions
|
||||
|
||||
r117:
|
||||
Added : man pages for lz4c and lz4cat
|
||||
Added : automated tests on Travis, thanks to Takayuki Matsuoka !
|
||||
fix : block-dependency command line (issue 127)
|
||||
fix : lz4fullbench (issue 128)
|
||||
|
||||
r116:
|
||||
hotfix (issue 124 & 125)
|
||||
|
||||
r115:
|
||||
Added : lz4cat utility, installed on POSX systems (issue 118)
|
||||
OS-X compatible compilation of dynamic library (issue 115)
|
||||
|
||||
r114:
|
||||
Makefile : library correctly compiled with -O3 switch (issue 114)
|
||||
Makefile : library compilation compatible with clang
|
||||
Makefile : library is versioned and linked (issue 119)
|
||||
lz4.h : no more static inline prototypes (issue 116)
|
||||
man : improved header/footer (issue 111)
|
||||
Makefile : Use system default $(CC) & $(MAKE) variables (issue 112)
|
||||
xxhash : updated to r34
|
||||
|
||||
r113:
|
||||
Large decompression speed improvement for GCC 32-bits. Thanks to Valery Croizier !
|
||||
LZ4HC : Compression Level is now a programmable parameter (CLI from 4 to 9)
|
||||
Separated IO routines from command line (lz4io.c)
|
||||
Version number into lz4.h (suggested by Francesc Alted)
|
||||
|
||||
r112:
|
||||
quickfix
|
||||
|
||||
r111 :
|
||||
Makefile : added capability to install libraries
|
||||
Modified Directory tree, to better separate libraries from programs.
|
||||
|
||||
r110 :
|
||||
lz4 & lz4hc : added capability to allocate state & stream state with custom allocator (issue 99)
|
||||
fuzzer & fullbench : updated to test new functions
|
||||
man : documented -l command (Legacy format, for Linux kernel compression) (issue 102)
|
||||
cmake : improved version by Mika Attila, building programs and libraries (issue 100)
|
||||
xxHash : updated to r33
|
||||
Makefile : clean also delete local package .tar.gz
|
||||
|
||||
r109 :
|
||||
lz4.c : corrected issue 98 (LZ4_compress_limitedOutput())
|
||||
Makefile : can specify version number from makefile
|
||||
|
||||
r108 :
|
||||
lz4.c : corrected compression efficiency issue 97 in 64-bits chained mode (-BD) for streams > 4 GB (thanks Roman Strashkin for reporting)
|
||||
|
||||
r107 :
|
||||
Makefile : support DESTDIR for staged installs. Thanks Jorge Aparicio.
|
||||
Makefile : make install installs both lz4 and lz4c (Jorge Aparicio)
|
||||
Makefile : removed -Wno-implicit-declaration compilation switch
|
||||
lz4cli.c : include <stduni.h> for isatty() (Luca Barbato)
|
||||
lz4.h : introduced LZ4_MAX_INPUT_SIZE constant (Shay Green)
|
||||
lz4.h : LZ4_compressBound() : unified macro and inline definitions (Shay Green)
|
||||
lz4.h : LZ4_decompressSafe_partial() : clarify comments (Shay Green)
|
||||
lz4.c : LZ4_compress() verify input size condition (Shay Green)
|
||||
bench.c : corrected a bug in free memory size evaluation
|
||||
cmake : install into bin/ directory (Richard Yao)
|
||||
cmake : check for just C compiler (Elan Ruusamae)
|
||||
|
||||
r106 :
|
||||
Makefile : make dist modify text files in the package to respect Unix EoL convention
|
||||
lz4cli.c : corrected small display bug in HC mode
|
||||
|
||||
r105 :
|
||||
Makefile : New install script and man page, contributed by Prasad Pandit
|
||||
lz4cli.c : Minor modifications, for easier extensibility
|
||||
COPYING : added license file
|
||||
LZ4_Streaming_Format.odt : modified file name to remove white space characters
|
||||
Makefile : .exe suffix now properly added only for Windows target
|
||||
128
expkg/vendor/lz4/README.md
vendored
Normal file
128
expkg/vendor/lz4/README.md
vendored
Normal file
@ -0,0 +1,128 @@
|
||||
LZ4 - Extremely fast compression
|
||||
================================
|
||||
|
||||
LZ4 is lossless compression algorithm,
|
||||
providing compression speed > 500 MB/s per core,
|
||||
scalable with multi-cores CPU.
|
||||
It features an extremely fast decoder,
|
||||
with speed in multiple GB/s per core,
|
||||
typically reaching RAM speed limits on multi-core systems.
|
||||
|
||||
Speed can be tuned dynamically, selecting an "acceleration" factor
|
||||
which trades compression ratio for faster speed.
|
||||
On the other end, a high compression derivative, LZ4_HC, is also provided,
|
||||
trading CPU time for improved compression ratio.
|
||||
All versions feature the same decompression speed.
|
||||
|
||||
LZ4 is also compatible with [dictionary compression](https://github.com/facebook/zstd#the-case-for-small-data-compression),
|
||||
both at [API](https://github.com/lz4/lz4/blob/v1.8.3/lib/lz4frame.h#L481) and [CLI](https://github.com/lz4/lz4/blob/v1.8.3/programs/lz4.1.md#operation-modifiers) levels.
|
||||
It can ingest any input file as dictionary, though only the final 64KB are used.
|
||||
This capability can be combined with the [Zstandard Dictionary Builder](https://github.com/facebook/zstd/blob/v1.3.5/programs/zstd.1.md#dictionary-builder),
|
||||
in order to drastically improve compression performance on small files.
|
||||
|
||||
|
||||
LZ4 library is provided as open-source software using BSD 2-Clause license.
|
||||
|
||||
|
||||
|Branch |Status |
|
||||
|------------|---------|
|
||||
|dev | [![Build status][AppveyorDevBadge]][AppveyorLink] |
|
||||
|
||||
[AppveyorDevBadge]: https://ci.appveyor.com/api/projects/status/github/lz4/lz4?branch=dev&svg=true "Windows test suite"
|
||||
[AppveyorLink]: https://ci.appveyor.com/project/YannCollet/lz4-1lndh
|
||||
|
||||
|
||||
Benchmarks
|
||||
-------------------------
|
||||
|
||||
The benchmark uses [lzbench], from @inikep
|
||||
compiled with GCC v8.2.0 on Linux 64-bits (Ubuntu 4.18.0-17).
|
||||
The reference system uses a Core i7-9700K CPU @ 4.9GHz (w/ turbo boost).
|
||||
Benchmark evaluates the compression of reference [Silesia Corpus]
|
||||
in single-thread mode.
|
||||
|
||||
[lzbench]: https://github.com/inikep/lzbench
|
||||
[Silesia Corpus]: http://sun.aei.polsl.pl/~sdeor/index.php?page=silesia
|
||||
|
||||
| Compressor | Factor | Compression | Decompression |
|
||||
| ---------- | ----- | ----------- | ------------- |
|
||||
| memcpy | 1.000 | 13700 MB/s | 13700 MB/s |
|
||||
|**LZ4 default (v1.9.0)** |**2.101**| **780 MB/s**| **4970 MB/s** |
|
||||
| LZO 2.09 | 2.108 | 670 MB/s | 860 MB/s |
|
||||
| QuickLZ 1.5.0 | 2.238 | 575 MB/s | 780 MB/s |
|
||||
| Snappy 1.1.4 | 2.091 | 565 MB/s | 1950 MB/s |
|
||||
| [Zstandard] 1.4.0 -1 | 2.883 | 515 MB/s | 1380 MB/s |
|
||||
| LZF v3.6 | 2.073 | 415 MB/s | 910 MB/s |
|
||||
| [zlib] deflate 1.2.11 -1| 2.730 | 100 MB/s | 415 MB/s |
|
||||
|**LZ4 HC -9 (v1.9.0)** |**2.721**| 41 MB/s | **4900 MB/s** |
|
||||
| [zlib] deflate 1.2.11 -6| 3.099 | 36 MB/s | 445 MB/s |
|
||||
|
||||
[zlib]: http://www.zlib.net/
|
||||
[Zstandard]: http://www.zstd.net/
|
||||
|
||||
|
||||
Installation
|
||||
-------------------------
|
||||
|
||||
```
|
||||
make
|
||||
make install # this command may require root permissions
|
||||
```
|
||||
|
||||
LZ4's `Makefile` supports standard [Makefile conventions],
|
||||
including [staged installs], [redirection], or [command redefinition].
|
||||
It is compatible with parallel builds (`-j#`).
|
||||
|
||||
[Makefile conventions]: https://www.gnu.org/prep/standards/html_node/Makefile-Conventions.html
|
||||
[staged installs]: https://www.gnu.org/prep/standards/html_node/DESTDIR.html
|
||||
[redirection]: https://www.gnu.org/prep/standards/html_node/Directory-Variables.html
|
||||
[command redefinition]: https://www.gnu.org/prep/standards/html_node/Utilities-in-Makefiles.html
|
||||
|
||||
### Building LZ4 - Using vcpkg
|
||||
|
||||
You can download and install LZ4 using the [vcpkg](https://github.com/Microsoft/vcpkg) dependency manager:
|
||||
|
||||
git clone https://github.com/Microsoft/vcpkg.git
|
||||
cd vcpkg
|
||||
./bootstrap-vcpkg.sh
|
||||
./vcpkg integrate install
|
||||
./vcpkg.exe install lz4
|
||||
|
||||
The LZ4 port in vcpkg is kept up to date by Microsoft team members and community contributors. If the version is out of date, please [create an issue or pull request](https://github.com/Microsoft/vcpkg) on the vcpkg repository.
|
||||
|
||||
Documentation
|
||||
-------------------------
|
||||
|
||||
The raw LZ4 block compression format is detailed within [lz4_Block_format].
|
||||
|
||||
Arbitrarily long files or data streams are compressed using multiple blocks,
|
||||
for streaming requirements. These blocks are organized into a frame,
|
||||
defined into [lz4_Frame_format].
|
||||
Interoperable versions of LZ4 must also respect the frame format.
|
||||
|
||||
[lz4_Block_format]: doc/lz4_Block_format.md
|
||||
[lz4_Frame_format]: doc/lz4_Frame_format.md
|
||||
|
||||
|
||||
Other source versions
|
||||
-------------------------
|
||||
|
||||
Beyond the C reference source,
|
||||
many contributors have created versions of lz4 in multiple languages
|
||||
(Java, C#, Python, Perl, Ruby, etc.).
|
||||
A list of known source ports is maintained on the [LZ4 Homepage].
|
||||
|
||||
[LZ4 Homepage]: http://www.lz4.org
|
||||
|
||||
### Packaging status
|
||||
|
||||
Most distributions are bundled with a package manager
|
||||
which allows easy installation of both the `liblz4` library
|
||||
and the `lz4` command line interface.
|
||||
|
||||
[](https://repology.org/project/lz4/versions)
|
||||
|
||||
|
||||
### Special Thanks
|
||||
|
||||
- Takayuki Matsuoka, aka @t-mat, for exceptional first-class support throughout the lifetime of this project
|
||||
17
expkg/vendor/lz4/SECURITY.md
vendored
Normal file
17
expkg/vendor/lz4/SECURITY.md
vendored
Normal file
@ -0,0 +1,17 @@
|
||||
# Security Policy
|
||||
|
||||
If you have discovered a security vulnerability in this project, please report it
|
||||
privately. **Do not disclose it as a public issue.** This gives me time to work with you
|
||||
to fix the issue before public exposure, reducing the chance that the exploit will be
|
||||
used before a patch is released.
|
||||
|
||||
Please submit the report by filling out
|
||||
[this form](https://github.com/lz4/lz4/security/advisories/new).
|
||||
|
||||
Please provide the following information in your report:
|
||||
|
||||
- A description of the vulnerability and its impact
|
||||
- How to reproduce the issue
|
||||
|
||||
This project is maintained by a single maintainer on a reasonable-effort basis. As such,
|
||||
I ask that you give me 90 days to work on a fix before public exposure.
|
||||
86
expkg/vendor/lz4/appveyor.yml
vendored
Normal file
86
expkg/vendor/lz4/appveyor.yml
vendored
Normal file
@ -0,0 +1,86 @@
|
||||
version: 1.0.{build}
|
||||
|
||||
# Test matrix: MinGW compilers only (Visual Studio testing moved to GitHub Actions)
|
||||
environment:
|
||||
matrix:
|
||||
- COMPILER: gcc
|
||||
PLATFORM: mingw32
|
||||
- COMPILER: gcc
|
||||
PLATFORM: mingw64
|
||||
- COMPILER: clang
|
||||
PLATFORM: mingw64
|
||||
|
||||
install:
|
||||
- echo Installing %COMPILER% %PLATFORM%
|
||||
- mkdir bin
|
||||
# Setup MinGW environment
|
||||
- set "PATH_MINGW32=c:\MinGW\bin;c:\MinGW\usr\bin"
|
||||
- set "PATH_MINGW64=c:\msys64\mingw64\bin;c:\msys64\usr\bin"
|
||||
- copy C:\MinGW\bin\mingw32-make.exe C:\MinGW\bin\make.exe >nul 2>&1
|
||||
- copy C:\MinGW\bin\gcc.exe C:\MinGW\bin\cc.exe >nul 2>&1
|
||||
|
||||
build_script:
|
||||
- echo "*** Building %COMPILER% %PLATFORM% ***"
|
||||
# Configure PATH for MinGW builds
|
||||
- if [%PLATFORM%]==[mingw32] set PATH=%PATH_MINGW32%;%PATH%
|
||||
- if [%PLATFORM%]==[mingw64] set PATH=%PATH_MINGW64%;%PATH%
|
||||
|
||||
# GCC Build
|
||||
- if [%COMPILER%]==[gcc] (
|
||||
echo "GCC build started" &&
|
||||
gcc -v &&
|
||||
make -v &&
|
||||
make -j -C programs lz4 V=1 &&
|
||||
make -j -C tests fullbench V=1 &&
|
||||
make -j -C tests fuzzer V=1 &&
|
||||
make -j -C lib lib V=1 &&
|
||||
echo "Packaging GCC build..." &&
|
||||
mkdir bin\dll bin\static bin\example bin\include &&
|
||||
copy tests\fullbench.c bin\example\ &&
|
||||
copy lib\xxhash.* bin\example\ &&
|
||||
copy lib\lz4*.h bin\include\ &&
|
||||
copy lib\liblz4.a bin\static\liblz4_static.lib &&
|
||||
copy lib\liblz4.dll* bin\dll\ >nul 2>&1 &&
|
||||
copy lib\dll\example\* bin\example\ >nul 2>&1 &&
|
||||
copy programs\lz4.exe bin\lz4.exe &&
|
||||
copy tests\*.exe programs\
|
||||
)
|
||||
|
||||
# Clang Build
|
||||
- if [%COMPILER%]==[clang] (
|
||||
echo "Clang build started" &&
|
||||
clang -v &&
|
||||
make -v &&
|
||||
set "CFLAGS=--target=x86_64-w64-mingw32 -Werror -Wconversion -Wno-sign-conversion" &&
|
||||
make -j -C programs lz4 CC=clang V=1 &&
|
||||
make -j -C tests fullbench CC=clang V=1 &&
|
||||
make -j -C tests fuzzer CC=clang V=1 &&
|
||||
make -j -C lib lib CC=clang V=1 &&
|
||||
copy tests\*.exe programs\
|
||||
)
|
||||
|
||||
# Create release archives (GCC only)
|
||||
- if [%COMPILER%]==[gcc] if [%PLATFORM%]==[mingw64] 7z.exe a -bb1 bin\lz4_x64.zip NEWS .\bin\lz4.exe README.md .\bin\example .\bin\dll .\bin\static .\bin\include
|
||||
- if [%COMPILER%]==[gcc] if [%PLATFORM%]==[mingw64] appveyor PushArtifact bin\lz4_x64.zip
|
||||
- if [%COMPILER%]==[gcc] if [%PLATFORM%]==[mingw32] 7z.exe a -bb1 bin\lz4_x86.zip NEWS .\bin\lz4.exe README.md .\bin\example .\bin\dll .\bin\static .\bin\include
|
||||
- if [%COMPILER%]==[gcc] if [%PLATFORM%]==[mingw32] appveyor PushArtifact bin\lz4_x86.zip
|
||||
|
||||
test_script:
|
||||
- echo "*** Testing %COMPILER% %PLATFORM% ***"
|
||||
- cd programs
|
||||
- lz4 -h
|
||||
- lz4 -i1b lz4.exe
|
||||
- lz4 -i1b5 lz4.exe
|
||||
- lz4 -i1b10 lz4.exe
|
||||
- lz4 -i1b15 lz4.exe
|
||||
- echo "------- lz4 tested -------"
|
||||
- fullbench.exe -i0 fullbench.exe
|
||||
- echo "Launching fuzzer test..."
|
||||
- fuzzer.exe -v -T20s
|
||||
- cd ..
|
||||
|
||||
artifacts:
|
||||
- path: bin\lz4_x64.zip
|
||||
name: LZ4 Windows x64 Build
|
||||
- path: bin\lz4_x86.zip
|
||||
name: LZ4 Windows x86 Build
|
||||
18
expkg/vendor/lz4/build/.gitignore
vendored
Normal file
18
expkg/vendor/lz4/build/.gitignore
vendored
Normal file
@ -0,0 +1,18 @@
|
||||
# Visual C++
|
||||
.vs/
|
||||
*Copy
|
||||
*.db
|
||||
*.opensdf
|
||||
*.sdf
|
||||
*.suo
|
||||
*.user
|
||||
ver*/
|
||||
VS2010/bin/
|
||||
VS2017/bin/
|
||||
VS*/bin/
|
||||
ipch
|
||||
|
||||
# Fixup for lz4 project directories
|
||||
!VS2010/lz4
|
||||
!VS2017/lz4
|
||||
!VS*/lz4
|
||||
44
expkg/vendor/lz4/build/README.md
vendored
Normal file
44
expkg/vendor/lz4/build/README.md
vendored
Normal file
@ -0,0 +1,44 @@
|
||||
Projects for various integrated development environments (IDE)
|
||||
==============================================================
|
||||
|
||||
#### Included projects
|
||||
|
||||
The following projects are included with the lz4 distribution:
|
||||
- `cmake` - CMake project
|
||||
- `meson` - Meson project
|
||||
- `visual` - scripts to generate Visual Studio solutions from `cmake` script
|
||||
- `VS2022` - Visual Studio 2022 solution - will soon be deprecated, prefer `visual` generators
|
||||
|
||||
|
||||
#### Projects available within VS2022\lz4.sln
|
||||
|
||||
The Visual Studio solution file `lz4.sln` contains many projects that will be compiled to the
|
||||
`build\VS2010\bin\$(Platform)_$(Configuration)` directory. For example `lz4` set to `x64` and
|
||||
`Release` will be compiled to `build\VS2010\bin\x64_Release\lz4.exe`. The solution file contains the
|
||||
following projects:
|
||||
|
||||
- `lz4` : Command Line Utility, supporting gzip-like arguments
|
||||
- `datagen` : Synthetic and parametrable data generator, for tests
|
||||
- `frametest` : Test tool that checks lz4frame integrity on target platform
|
||||
- `fullbench` : Precisely measure speed for each lz4 inner functions
|
||||
- `fuzzer` : Test tool, to check lz4 integrity on target platform
|
||||
- `liblz4` : A static LZ4 library compiled to `liblz4_static.lib`
|
||||
- `liblz4-dll` : A dynamic LZ4 library (DLL) compiled to `liblz4.dll` with the import library `liblz4.lib`
|
||||
- `fullbench-dll` : The fullbench program compiled with the import library; the executable requires LZ4 DLL
|
||||
|
||||
|
||||
#### Using LZ4 DLL with Microsoft Visual C++ project
|
||||
|
||||
The header files `lib\lz4.h`, `lib\lz4hc.h`, `lib\lz4frame.h` and the import library
|
||||
`build\VS2010\bin\$(Platform)_$(Configuration)\liblz4.lib` are required to
|
||||
compile a project using Visual C++.
|
||||
|
||||
1. The path to header files should be added to `Additional Include Directories` that can
|
||||
be found in Project Properties of Visual Studio IDE in the `C/C++` Property Pages on the `General` page.
|
||||
2. The import library has to be added to `Additional Dependencies` that can
|
||||
be found in Project Properties in the `Linker` Property Pages on the `Input` page.
|
||||
If one will provide only the name `liblz4.lib` without a full path to the library
|
||||
then the directory has to be added to `Linker\General\Additional Library Directories`.
|
||||
|
||||
The compiled executable will require LZ4 DLL which is available at
|
||||
`build\VS2010\bin\$(Platform)_$(Configuration)\liblz4.dll`.
|
||||
39
expkg/vendor/lz4/build/VS2022/_build.bat
vendored
Normal file
39
expkg/vendor/lz4/build/VS2022/_build.bat
vendored
Normal file
@ -0,0 +1,39 @@
|
||||
set /a errorno=1
|
||||
for /F "delims=#" %%E in ('"prompt #$E# & for %%E in (1) do rem"') do set "esc=%%E"
|
||||
|
||||
rem https://docs.microsoft.com/visualstudio/msbuild/msbuild-command-line-reference
|
||||
|
||||
set "sln=lz4.sln"
|
||||
|
||||
@rem set "Configuration=Debug"
|
||||
@rem set "Platform=Win32"
|
||||
|
||||
set "BIN=.\bin\!Platform!_!Configuration!"
|
||||
rmdir /S /Q "!BIN!" 2>nul
|
||||
echo msbuild "%sln%" /p:Configuration=!Configuration! /p:Platform=!Platform!
|
||||
msbuild "%sln%" ^
|
||||
/nologo ^
|
||||
/v:minimal ^
|
||||
/m ^
|
||||
/p:Configuration=!Configuration! ^
|
||||
/p:Platform=!Platform! ^
|
||||
/t:Clean,Build ^
|
||||
|| goto :ERROR
|
||||
|
||||
if not exist "!BIN!\datagen.exe" ( echo FAIL: "!BIN!\datagen.exe" && goto :ERROR )
|
||||
if not exist "!BIN!\frametest.exe" ( echo FAIL: "!BIN!\frametest.exe" && goto :ERROR )
|
||||
if not exist "!BIN!\fullbench-dll.exe" ( echo FAIL: "!BIN!\fullbench-dll.exe" && goto :ERROR )
|
||||
if not exist "!BIN!\fullbench.exe" ( echo FAIL: "!BIN!\fullbench.exe" && goto :ERROR )
|
||||
if not exist "!BIN!\fuzzer.exe" ( echo FAIL: "!BIN!\fuzzer.exe" && goto :ERROR )
|
||||
if not exist "!BIN!\liblz4.dll" ( echo FAIL: "!BIN!\liblz4.dll" && goto :ERROR )
|
||||
if not exist "!BIN!\liblz4.lib" ( echo FAIL: "!BIN!\liblz4.lib" && goto :ERROR )
|
||||
if not exist "!BIN!\liblz4_static.lib" ( echo FAIL: "!BIN!\liblz4_static.lib" && goto :ERROR )
|
||||
if not exist "!BIN!\lz4.exe" ( echo FAIL: "!BIN!\lz4.exe" && goto :ERROR )
|
||||
|
||||
set /a errorno=0
|
||||
goto :END
|
||||
|
||||
:ERROR
|
||||
|
||||
:END
|
||||
exit /B %errorno%
|
||||
35
expkg/vendor/lz4/build/VS2022/_setup.bat
vendored
Normal file
35
expkg/vendor/lz4/build/VS2022/_setup.bat
vendored
Normal file
@ -0,0 +1,35 @@
|
||||
set /a errorno=1
|
||||
for /F "delims=#" %%E in ('"prompt #$E# & for %%E in (1) do rem"') do set "esc=%%E"
|
||||
|
||||
rem https://github.com/Microsoft/vswhere
|
||||
rem https://github.com/microsoft/vswhere/wiki/Find-VC#batch
|
||||
|
||||
set "vswhere=%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe"
|
||||
if not exist "%vswhere%" (
|
||||
echo Failed to find "vswhere.exe". Please install the latest version of Visual Studio.
|
||||
goto :ERROR
|
||||
)
|
||||
|
||||
set "InstallDir="
|
||||
for /f "usebackq tokens=*" %%i in (
|
||||
`"%vswhere%" -latest ^
|
||||
-products * ^
|
||||
-requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 ^
|
||||
-property installationPath`
|
||||
) do (
|
||||
set "InstallDir=%%i"
|
||||
)
|
||||
if "%InstallDir%" == "" (
|
||||
echo Failed to find Visual C++. Please install the latest version of Visual C++.
|
||||
goto :ERROR
|
||||
)
|
||||
|
||||
call "%InstallDir%\VC\Auxiliary\Build\vcvars64.bat" || goto :ERROR
|
||||
|
||||
set /a errorno=0
|
||||
goto :END
|
||||
|
||||
:ERROR
|
||||
|
||||
:END
|
||||
exit /B %errorno%
|
||||
38
expkg/vendor/lz4/build/VS2022/_test.bat
vendored
Normal file
38
expkg/vendor/lz4/build/VS2022/_test.bat
vendored
Normal file
@ -0,0 +1,38 @@
|
||||
set /a errorno=1
|
||||
for /F "delims=#" %%E in ('"prompt #$E# & for %%E in (1) do rem"') do set "esc=%%E"
|
||||
|
||||
@rem set "Configuration=Debug"
|
||||
@rem set "Platform=Win32"
|
||||
|
||||
set "BIN=.\bin\!Platform!_!Configuration!"
|
||||
set "TEST_FILES=..\..\tests\COPYING"
|
||||
|
||||
echo !BIN!\lz4 -h
|
||||
!BIN!\lz4 -h || goto :ERROR
|
||||
|
||||
echo !BIN!\lz4 -i1b
|
||||
!BIN!\lz4 -i1b || goto :ERROR
|
||||
|
||||
echo !BIN!\lz4 -i1b5
|
||||
!BIN!\lz4 -i1b5 || goto :ERROR
|
||||
|
||||
echo !BIN!\lz4 -i1b10
|
||||
!BIN!\lz4 -i1b10 || goto :ERROR
|
||||
|
||||
echo !BIN!\lz4 -i1b15
|
||||
!BIN!\lz4 -i1b15 || goto :ERROR
|
||||
|
||||
echo fullbench
|
||||
!BIN!\fullbench.exe --no-prompt -i1 %TEST_FILES% || goto :ERROR
|
||||
|
||||
echo fuzzer
|
||||
!BIN!\fuzzer.exe -v -T30s || goto :ERROR
|
||||
|
||||
|
||||
set /a errorno=0
|
||||
goto :END
|
||||
|
||||
:ERROR
|
||||
|
||||
:END
|
||||
exit /B %errorno%
|
||||
26
expkg/vendor/lz4/build/VS2022/build-and-test-win32-debug.bat
vendored
Normal file
26
expkg/vendor/lz4/build/VS2022/build-and-test-win32-debug.bat
vendored
Normal file
@ -0,0 +1,26 @@
|
||||
@setlocal enabledelayedexpansion
|
||||
@echo off
|
||||
set /a errorno=1
|
||||
for /F "delims=#" %%E in ('"prompt #$E# & for %%E in (1) do rem"') do set "esc=%%E"
|
||||
|
||||
call _setup.bat || goto :ERROR
|
||||
|
||||
set "Configuration=Debug"
|
||||
set "Platform=Win32"
|
||||
|
||||
call _build.bat || goto :ERROR
|
||||
call _test.bat || goto :ERROR
|
||||
|
||||
|
||||
echo Build Status -%esc%[92m SUCCEEDED %esc%[0m
|
||||
set /a errorno=0
|
||||
goto :END
|
||||
|
||||
|
||||
:ERROR
|
||||
echo Abort by error.
|
||||
echo Build Status -%esc%[91m ERROR %esc%[0m
|
||||
|
||||
|
||||
:END
|
||||
exit /B %errorno%
|
||||
26
expkg/vendor/lz4/build/VS2022/build-and-test-win32-release.bat
vendored
Normal file
26
expkg/vendor/lz4/build/VS2022/build-and-test-win32-release.bat
vendored
Normal file
@ -0,0 +1,26 @@
|
||||
@setlocal enabledelayedexpansion
|
||||
@echo off
|
||||
set /a errorno=1
|
||||
for /F "delims=#" %%E in ('"prompt #$E# & for %%E in (1) do rem"') do set "esc=%%E"
|
||||
|
||||
call _setup.bat || goto :ERROR
|
||||
|
||||
set "Configuration=Release"
|
||||
set "Platform=Win32"
|
||||
|
||||
call _build.bat || goto :ERROR
|
||||
call _test.bat || goto :ERROR
|
||||
|
||||
|
||||
echo Build Status -%esc%[92m SUCCEEDED %esc%[0m
|
||||
set /a errorno=0
|
||||
goto :END
|
||||
|
||||
|
||||
:ERROR
|
||||
echo Abort by error.
|
||||
echo Build Status -%esc%[91m ERROR %esc%[0m
|
||||
|
||||
|
||||
:END
|
||||
exit /B %errorno%
|
||||
26
expkg/vendor/lz4/build/VS2022/build-and-test-x64-debug.bat
vendored
Normal file
26
expkg/vendor/lz4/build/VS2022/build-and-test-x64-debug.bat
vendored
Normal file
@ -0,0 +1,26 @@
|
||||
@setlocal enabledelayedexpansion
|
||||
@echo off
|
||||
set /a errorno=1
|
||||
for /F "delims=#" %%E in ('"prompt #$E# & for %%E in (1) do rem"') do set "esc=%%E"
|
||||
|
||||
call _setup.bat || goto :ERROR
|
||||
|
||||
set "Configuration=Debug"
|
||||
set "Platform=x64"
|
||||
|
||||
call _build.bat || goto :ERROR
|
||||
call _test.bat || goto :ERROR
|
||||
|
||||
|
||||
echo Build Status -%esc%[92m SUCCEEDED %esc%[0m
|
||||
set /a errorno=0
|
||||
goto :END
|
||||
|
||||
|
||||
:ERROR
|
||||
echo Abort by error.
|
||||
echo Build Status -%esc%[91m ERROR %esc%[0m
|
||||
|
||||
|
||||
:END
|
||||
exit /B %errorno%
|
||||
26
expkg/vendor/lz4/build/VS2022/build-and-test-x64-release.bat
vendored
Normal file
26
expkg/vendor/lz4/build/VS2022/build-and-test-x64-release.bat
vendored
Normal file
@ -0,0 +1,26 @@
|
||||
@setlocal enabledelayedexpansion
|
||||
@echo off
|
||||
set /a errorno=1
|
||||
for /F "delims=#" %%E in ('"prompt #$E# & for %%E in (1) do rem"') do set "esc=%%E"
|
||||
|
||||
call _setup.bat || goto :ERROR
|
||||
|
||||
set "Configuration=Release"
|
||||
set "Platform=x64"
|
||||
|
||||
call _build.bat || goto :ERROR
|
||||
call _test.bat || goto :ERROR
|
||||
|
||||
|
||||
echo Build Status -%esc%[92m SUCCEEDED %esc%[0m
|
||||
set /a errorno=0
|
||||
goto :END
|
||||
|
||||
|
||||
:ERROR
|
||||
echo Abort by error.
|
||||
echo Build Status -%esc%[91m ERROR %esc%[0m
|
||||
|
||||
|
||||
:END
|
||||
exit /B %errorno%
|
||||
177
expkg/vendor/lz4/build/VS2022/datagen/datagen.vcxproj
vendored
Normal file
177
expkg/vendor/lz4/build/VS2022/datagen/datagen.vcxproj
vendored
Normal file
@ -0,0 +1,177 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|x64">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|x64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<ProjectGuid>{D745AE2F-596A-403A-9B91-81A8C6779243}</ProjectGuid>
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
<RootNamespace>datagen</RootNamespace>
|
||||
<OutDir>$(SolutionDir)bin\$(Platform)_$(Configuration)\</OutDir>
|
||||
<IntDir>$(SolutionDir)bin\obj\$(RootNamespace)_$(Platform)_$(Configuration)\</IntDir>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<WholeProgramOptimization Condition="'$(EnableWholeProgramOptimization)'=='true'">true</WholeProgramOptimization>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<WholeProgramOptimization Condition="'$(EnableWholeProgramOptimization)'=='true'">true</WholeProgramOptimization>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
<IncludePath>$(IncludePath);$(UniversalCRT_IncludePath);$(SolutionDir)..\..\programs;$(SolutionDir)..\..\lib;$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSDK_IncludePath);</IncludePath>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
<IncludePath>$(IncludePath);$(UniversalCRT_IncludePath);$(SolutionDir)..\..\programs;$(SolutionDir)..\..\lib;$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSDK_IncludePath);</IncludePath>
|
||||
<RunCodeAnalysis>true</RunCodeAnalysis>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
<IncludePath>$(IncludePath);$(UniversalCRT_IncludePath);$(SolutionDir)..\..\programs;$(SolutionDir)..\..\lib;$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSDK_IncludePath);</IncludePath>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
<IncludePath>$(IncludePath);$(UniversalCRT_IncludePath);$(SolutionDir)..\..\programs;$(SolutionDir)..\..\lib;$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSDK_IncludePath);</IncludePath>
|
||||
<RunCodeAnalysis>true</RunCodeAnalysis>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
<PrecompiledHeader>
|
||||
</PrecompiledHeader>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<TreatWarningAsError>true</TreatWarningAsError>
|
||||
<EnablePREfast>false</EnablePREfast>
|
||||
<RuntimeLibrary Condition="'$(UseStaticCRT)'=='true'">MultiThreadedDebug</RuntimeLibrary>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<ClCompile>
|
||||
<PrecompiledHeader>
|
||||
</PrecompiledHeader>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<TreatWarningAsError>true</TreatWarningAsError>
|
||||
<EnablePREfast>true</EnablePREfast>
|
||||
<AdditionalOptions>/analyze:stacksize295252 %(AdditionalOptions)</AdditionalOptions>
|
||||
<RuntimeLibrary Condition="'$(UseStaticCRT)'=='true'">MultiThreadedDebug</RuntimeLibrary>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<PrecompiledHeader>
|
||||
</PrecompiledHeader>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<TreatWarningAsError>false</TreatWarningAsError>
|
||||
<EnablePREfast>false</EnablePREfast>
|
||||
<RuntimeLibrary Condition="'$(UseStaticCRT)'=='true'">MultiThreaded</RuntimeLibrary>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<PrecompiledHeader>
|
||||
</PrecompiledHeader>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<TreatWarningAsError>false</TreatWarningAsError>
|
||||
<EnablePREfast>true</EnablePREfast>
|
||||
<AdditionalOptions>/analyze:stacksize295252 %(AdditionalOptions)</AdditionalOptions>
|
||||
<RuntimeLibrary Condition="'$(UseStaticCRT)'=='true'">MultiThreaded</RuntimeLibrary>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="..\..\..\programs\lorem.c" />
|
||||
<ClCompile Include="..\..\..\tests\datagen.c" />
|
||||
<ClCompile Include="..\..\..\tests\datagencli.c" />
|
||||
<ClCompile Include="..\..\..\tests\loremOut.c" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\..\..\programs\lorem.h" />
|
||||
<ClInclude Include="..\..\..\tests\datagen.h" />
|
||||
<ClInclude Include="..\..\..\tests\loremOut.h" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
||||
180
expkg/vendor/lz4/build/VS2022/frametest/frametest.vcxproj
vendored
Normal file
180
expkg/vendor/lz4/build/VS2022/frametest/frametest.vcxproj
vendored
Normal file
@ -0,0 +1,180 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|x64">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|x64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<ProjectGuid>{39AD6ECC-8BAD-4368-95E4-A1AA2F077BB7}</ProjectGuid>
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
<RootNamespace>frametest</RootNamespace>
|
||||
<OutDir>$(SolutionDir)bin\$(Platform)_$(Configuration)\</OutDir>
|
||||
<IntDir>$(SolutionDir)bin\obj\$(RootNamespace)_$(Platform)_$(Configuration)\</IntDir>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<WholeProgramOptimization Condition="'$(EnableWholeProgramOptimization)'=='true'">true</WholeProgramOptimization>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<WholeProgramOptimization Condition="'$(EnableWholeProgramOptimization)'=='true'">true</WholeProgramOptimization>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
<IncludePath>$(IncludePath);$(UniversalCRT_IncludePath);$(SolutionDir)..\..\lib;$(SolutionDir)..\..\programs;$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSDK_IncludePath);</IncludePath>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
<IncludePath>$(IncludePath);$(UniversalCRT_IncludePath);$(SolutionDir)..\..\lib;$(SolutionDir)..\..\programs;$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSDK_IncludePath);</IncludePath>
|
||||
<RunCodeAnalysis>true</RunCodeAnalysis>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
<IncludePath>$(IncludePath);$(UniversalCRT_IncludePath);$(SolutionDir)..\..\lib;$(SolutionDir)..\..\programs;$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSDK_IncludePath);</IncludePath>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
<IncludePath>$(IncludePath);$(UniversalCRT_IncludePath);$(SolutionDir)..\..\lib;$(SolutionDir)..\..\programs;$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSDK_IncludePath);</IncludePath>
|
||||
<RunCodeAnalysis>true</RunCodeAnalysis>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
<PrecompiledHeader>
|
||||
</PrecompiledHeader>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<TreatWarningAsError>true</TreatWarningAsError>
|
||||
<EnablePREfast>false</EnablePREfast>
|
||||
<RuntimeLibrary Condition="'$(UseStaticCRT)'=='true'">MultiThreadedDebug</RuntimeLibrary>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<ClCompile>
|
||||
<PrecompiledHeader>
|
||||
</PrecompiledHeader>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<TreatWarningAsError>true</TreatWarningAsError>
|
||||
<EnablePREfast>true</EnablePREfast>
|
||||
<AdditionalOptions>/analyze:stacksize295252 %(AdditionalOptions)</AdditionalOptions>
|
||||
<RuntimeLibrary Condition="'$(UseStaticCRT)'=='true'">MultiThreadedDebug</RuntimeLibrary>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<PrecompiledHeader>
|
||||
</PrecompiledHeader>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<TreatWarningAsError>false</TreatWarningAsError>
|
||||
<EnablePREfast>false</EnablePREfast>
|
||||
<RuntimeLibrary Condition="'$(UseStaticCRT)'=='true'">MultiThreaded</RuntimeLibrary>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<PrecompiledHeader>
|
||||
</PrecompiledHeader>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<TreatWarningAsError>false</TreatWarningAsError>
|
||||
<EnablePREfast>true</EnablePREfast>
|
||||
<AdditionalOptions>/analyze:stacksize295252 %(AdditionalOptions)</AdditionalOptions>
|
||||
<RuntimeLibrary Condition="'$(UseStaticCRT)'=='true'">MultiThreaded</RuntimeLibrary>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="..\..\..\lib\lz4.c" />
|
||||
<ClCompile Include="..\..\..\lib\lz4frame.c" />
|
||||
<ClCompile Include="..\..\..\lib\lz4hc.c" />
|
||||
<ClCompile Include="..\..\..\lib\xxhash.c" />
|
||||
<ClCompile Include="..\..\..\tests\frametest.c" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\..\..\lib\lz4.h" />
|
||||
<ClInclude Include="..\..\..\lib\lz4frame.h" />
|
||||
<ClInclude Include="..\..\..\lib\lz4frame_static.h" />
|
||||
<ClInclude Include="..\..\..\lib\lz4hc.h" />
|
||||
<ClInclude Include="..\..\..\lib\xxhash.h" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
||||
184
expkg/vendor/lz4/build/VS2022/fullbench-dll/fullbench-dll.vcxproj
vendored
Normal file
184
expkg/vendor/lz4/build/VS2022/fullbench-dll/fullbench-dll.vcxproj
vendored
Normal file
@ -0,0 +1,184 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|x64">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|x64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<ProjectGuid>{13992FD2-077E-4954-B065-A428198201A9}</ProjectGuid>
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
<RootNamespace>fullbench-dll</RootNamespace>
|
||||
<OutDir>$(SolutionDir)bin\$(Platform)_$(Configuration)\</OutDir>
|
||||
<IntDir>$(SolutionDir)bin\obj\$(RootNamespace)_$(Platform)_$(Configuration)\</IntDir>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<WholeProgramOptimization Condition="'$(EnableWholeProgramOptimization)'=='true'">true</WholeProgramOptimization>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<WholeProgramOptimization Condition="'$(EnableWholeProgramOptimization)'=='true'">true</WholeProgramOptimization>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
<IncludePath>$(IncludePath);$(UniversalCRT_IncludePath);$(SolutionDir)..\..\lib;$(SolutionDir)..\..\programs;$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSDK_IncludePath);</IncludePath>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
<IncludePath>$(IncludePath);$(UniversalCRT_IncludePath);$(SolutionDir)..\..\lib;$(SolutionDir)..\..\programs;$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSDK_IncludePath);</IncludePath>
|
||||
<RunCodeAnalysis>true</RunCodeAnalysis>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
<IncludePath>$(IncludePath);$(UniversalCRT_IncludePath);$(SolutionDir)..\..\lib;$(SolutionDir)..\..\programs;$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSDK_IncludePath);</IncludePath>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
<IncludePath>$(IncludePath);$(UniversalCRT_IncludePath);$(SolutionDir)..\..\lib;$(SolutionDir)..\..\programs;$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSDK_IncludePath);</IncludePath>
|
||||
<RunCodeAnalysis>true</RunCodeAnalysis>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
<PrecompiledHeader>
|
||||
</PrecompiledHeader>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;LZ4_DLL_IMPORT=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<TreatWarningAsError>true</TreatWarningAsError>
|
||||
<EnablePREfast>false</EnablePREfast>
|
||||
<RuntimeLibrary Condition="'$(UseStaticCRT)'=='true'">MultiThreadedDebug</RuntimeLibrary>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<AdditionalLibraryDirectories>$(SolutionDir)bin\$(Platform)_$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||
<AdditionalDependencies>liblz4.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<ClCompile>
|
||||
<PrecompiledHeader>
|
||||
</PrecompiledHeader>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;LZ4_DLL_IMPORT=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<TreatWarningAsError>true</TreatWarningAsError>
|
||||
<EnablePREfast>true</EnablePREfast>
|
||||
<AdditionalOptions>/analyze:stacksize295252 %(AdditionalOptions)</AdditionalOptions>
|
||||
<RuntimeLibrary Condition="'$(UseStaticCRT)'=='true'">MultiThreadedDebug</RuntimeLibrary>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<AdditionalLibraryDirectories>$(SolutionDir)bin\$(Platform)_$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||
<AdditionalDependencies>liblz4.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<PrecompiledHeader>
|
||||
</PrecompiledHeader>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;LZ4_DLL_IMPORT=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<TreatWarningAsError>false</TreatWarningAsError>
|
||||
<EnablePREfast>false</EnablePREfast>
|
||||
<RuntimeLibrary Condition="'$(UseStaticCRT)'=='true'">MultiThreaded</RuntimeLibrary>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<AdditionalLibraryDirectories>$(SolutionDir)bin\$(Platform)_$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||
<AdditionalDependencies>liblz4.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<PrecompiledHeader>
|
||||
</PrecompiledHeader>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;LZ4_DLL_IMPORT=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<TreatWarningAsError>false</TreatWarningAsError>
|
||||
<EnablePREfast>true</EnablePREfast>
|
||||
<AdditionalOptions>/analyze:stacksize295252 %(AdditionalOptions)</AdditionalOptions>
|
||||
<RuntimeLibrary Condition="'$(UseStaticCRT)'=='true'">MultiThreaded</RuntimeLibrary>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<AdditionalLibraryDirectories>$(SolutionDir)bin\$(Platform)_$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||
<AdditionalDependencies>liblz4.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="..\..\..\lib\xxhash.c" />
|
||||
<ClCompile Include="..\..\..\tests\fullbench.c" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\..\..\lib\lz4.h" />
|
||||
<ClInclude Include="..\..\..\lib\lz4frame.h" />
|
||||
<ClInclude Include="..\..\..\lib\lz4hc.h" />
|
||||
<ClInclude Include="..\..\..\lib\xxhash.h" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
||||
180
expkg/vendor/lz4/build/VS2022/fullbench/fullbench.vcxproj
vendored
Normal file
180
expkg/vendor/lz4/build/VS2022/fullbench/fullbench.vcxproj
vendored
Normal file
@ -0,0 +1,180 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|x64">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|x64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<ProjectGuid>{6A4DF4EF-C77F-43C6-8901-DDCD20879E4E}</ProjectGuid>
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
<RootNamespace>fullbench</RootNamespace>
|
||||
<OutDir>$(SolutionDir)bin\$(Platform)_$(Configuration)\</OutDir>
|
||||
<IntDir>$(SolutionDir)bin\obj\$(RootNamespace)_$(Platform)_$(Configuration)\</IntDir>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<WholeProgramOptimization Condition="'$(EnableWholeProgramOptimization)'=='true'">true</WholeProgramOptimization>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<WholeProgramOptimization Condition="'$(EnableWholeProgramOptimization)'=='true'">true</WholeProgramOptimization>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
<IncludePath>$(IncludePath);$(UniversalCRT_IncludePath);$(SolutionDir)..\..\lib;$(SolutionDir)..\..\programs;$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSDK_IncludePath);</IncludePath>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
<IncludePath>$(IncludePath);$(UniversalCRT_IncludePath);$(SolutionDir)..\..\lib;$(SolutionDir)..\..\programs;$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSDK_IncludePath);</IncludePath>
|
||||
<RunCodeAnalysis>true</RunCodeAnalysis>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
<IncludePath>$(IncludePath);$(UniversalCRT_IncludePath);$(SolutionDir)..\..\lib;$(SolutionDir)..\..\programs;$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSDK_IncludePath);</IncludePath>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
<IncludePath>$(IncludePath);$(UniversalCRT_IncludePath);$(SolutionDir)..\..\lib;$(SolutionDir)..\..\programs;$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSDK_IncludePath);</IncludePath>
|
||||
<RunCodeAnalysis>true</RunCodeAnalysis>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
<PrecompiledHeader>
|
||||
</PrecompiledHeader>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<TreatWarningAsError>true</TreatWarningAsError>
|
||||
<EnablePREfast>false</EnablePREfast>
|
||||
<RuntimeLibrary Condition="'$(UseStaticCRT)'=='true'">MultiThreadedDebug</RuntimeLibrary>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<ClCompile>
|
||||
<PrecompiledHeader>
|
||||
</PrecompiledHeader>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<TreatWarningAsError>true</TreatWarningAsError>
|
||||
<EnablePREfast>true</EnablePREfast>
|
||||
<AdditionalOptions>/analyze:stacksize295252 %(AdditionalOptions)</AdditionalOptions>
|
||||
<RuntimeLibrary Condition="'$(UseStaticCRT)'=='true'">MultiThreadedDebug</RuntimeLibrary>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<PrecompiledHeader>
|
||||
</PrecompiledHeader>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<TreatWarningAsError>false</TreatWarningAsError>
|
||||
<EnablePREfast>false</EnablePREfast>
|
||||
<RuntimeLibrary Condition="'$(UseStaticCRT)'=='true'">MultiThreaded</RuntimeLibrary>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<PrecompiledHeader>
|
||||
</PrecompiledHeader>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<TreatWarningAsError>false</TreatWarningAsError>
|
||||
<EnablePREfast>true</EnablePREfast>
|
||||
<AdditionalOptions>/analyze:stacksize295252 %(AdditionalOptions)</AdditionalOptions>
|
||||
<RuntimeLibrary Condition="'$(UseStaticCRT)'=='true'">MultiThreaded</RuntimeLibrary>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="..\..\..\lib\lz4.c" />
|
||||
<ClCompile Include="..\..\..\lib\lz4frame.c" />
|
||||
<ClCompile Include="..\..\..\lib\lz4hc.c" />
|
||||
<ClCompile Include="..\..\..\lib\xxhash.c" />
|
||||
<ClCompile Include="..\..\..\tests\fullbench.c" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\..\..\lib\lz4.h" />
|
||||
<ClInclude Include="..\..\..\lib\lz4frame.h" />
|
||||
<ClInclude Include="..\..\..\lib\lz4frame_static.h" />
|
||||
<ClInclude Include="..\..\..\lib\lz4hc.h" />
|
||||
<ClInclude Include="..\..\..\lib\xxhash.h" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
||||
177
expkg/vendor/lz4/build/VS2022/fuzzer/fuzzer.vcxproj
vendored
Normal file
177
expkg/vendor/lz4/build/VS2022/fuzzer/fuzzer.vcxproj
vendored
Normal file
@ -0,0 +1,177 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|x64">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|x64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<ProjectGuid>{18B9F1A7-9C66-4352-898B-30804DADE0FD}</ProjectGuid>
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
<RootNamespace>fuzzer</RootNamespace>
|
||||
<OutDir>$(SolutionDir)bin\$(Platform)_$(Configuration)\</OutDir>
|
||||
<IntDir>$(SolutionDir)bin\obj\$(RootNamespace)_$(Platform)_$(Configuration)\</IntDir>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<WholeProgramOptimization Condition="'$(EnableWholeProgramOptimization)'=='true'">true</WholeProgramOptimization>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<WholeProgramOptimization Condition="'$(EnableWholeProgramOptimization)'=='true'">true</WholeProgramOptimization>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
<IncludePath>$(IncludePath);$(UniversalCRT_IncludePath);$(SolutionDir)..\..\lib;$(SolutionDir)..\..\programs;$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSDK_IncludePath);</IncludePath>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
<IncludePath>$(IncludePath);$(UniversalCRT_IncludePath);$(SolutionDir)..\..\lib;$(SolutionDir)..\..\programs;$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSDK_IncludePath);</IncludePath>
|
||||
<RunCodeAnalysis>true</RunCodeAnalysis>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
<IncludePath>$(IncludePath);$(UniversalCRT_IncludePath);$(SolutionDir)..\..\lib;$(SolutionDir)..\..\programs;$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSDK_IncludePath);</IncludePath>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
<IncludePath>$(IncludePath);$(UniversalCRT_IncludePath);$(SolutionDir)..\..\lib;$(SolutionDir)..\..\programs;$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSDK_IncludePath);</IncludePath>
|
||||
<RunCodeAnalysis>true</RunCodeAnalysis>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
<PrecompiledHeader>
|
||||
</PrecompiledHeader>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<TreatWarningAsError>true</TreatWarningAsError>
|
||||
<EnablePREfast>false</EnablePREfast>
|
||||
<RuntimeLibrary Condition="'$(UseStaticCRT)'=='true'">MultiThreadedDebug</RuntimeLibrary>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<ClCompile>
|
||||
<PrecompiledHeader>
|
||||
</PrecompiledHeader>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<TreatWarningAsError>true</TreatWarningAsError>
|
||||
<EnablePREfast>true</EnablePREfast>
|
||||
<AdditionalOptions>/analyze:stacksize295252 %(AdditionalOptions)</AdditionalOptions>
|
||||
<RuntimeLibrary Condition="'$(UseStaticCRT)'=='true'">MultiThreadedDebug</RuntimeLibrary>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<PrecompiledHeader>
|
||||
</PrecompiledHeader>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<TreatWarningAsError>false</TreatWarningAsError>
|
||||
<EnablePREfast>false</EnablePREfast>
|
||||
<RuntimeLibrary Condition="'$(UseStaticCRT)'=='true'">MultiThreaded</RuntimeLibrary>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<PrecompiledHeader>
|
||||
</PrecompiledHeader>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<TreatWarningAsError>false</TreatWarningAsError>
|
||||
<EnablePREfast>true</EnablePREfast>
|
||||
<AdditionalOptions>/analyze:stacksize295252 %(AdditionalOptions)</AdditionalOptions>
|
||||
<RuntimeLibrary Condition="'$(UseStaticCRT)'=='true'">MultiThreaded</RuntimeLibrary>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="..\..\..\lib\lz4.c" />
|
||||
<ClCompile Include="..\..\..\lib\lz4hc.c" />
|
||||
<ClCompile Include="..\..\..\lib\xxhash.c" />
|
||||
<ClCompile Include="..\..\..\tests\fuzzer.c" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\..\..\lib\lz4.h" />
|
||||
<ClInclude Include="..\..\..\lib\lz4hc.h" />
|
||||
<ClInclude Include="..\..\..\lib\xxhash.h" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
||||
51
expkg/vendor/lz4/build/VS2022/liblz4-dll/liblz4-dll.rc
vendored
Normal file
51
expkg/vendor/lz4/build/VS2022/liblz4-dll/liblz4-dll.rc
vendored
Normal file
@ -0,0 +1,51 @@
|
||||
// Microsoft Visual C++ generated resource script.
|
||||
//
|
||||
|
||||
#include "lz4.h" /* LZ4_VERSION_STRING */
|
||||
#define APSTUDIO_READONLY_SYMBOLS
|
||||
#include "verrsrc.h"
|
||||
#undef APSTUDIO_READONLY_SYMBOLS
|
||||
|
||||
|
||||
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
|
||||
LANGUAGE 9, 1
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Version
|
||||
//
|
||||
|
||||
VS_VERSION_INFO VERSIONINFO
|
||||
FILEVERSION LZ4_VERSION_MAJOR,LZ4_VERSION_MINOR,LZ4_VERSION_RELEASE,0
|
||||
PRODUCTVERSION LZ4_VERSION_MAJOR,LZ4_VERSION_MINOR,LZ4_VERSION_RELEASE,0
|
||||
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
|
||||
#ifdef _DEBUG
|
||||
FILEFLAGS VS_FF_DEBUG
|
||||
#else
|
||||
FILEFLAGS 0x0L
|
||||
#endif
|
||||
FILEOS VOS_NT_WINDOWS32
|
||||
FILETYPE VFT_DLL
|
||||
FILESUBTYPE VFT2_UNKNOWN
|
||||
BEGIN
|
||||
BLOCK "StringFileInfo"
|
||||
BEGIN
|
||||
BLOCK "040904B0"
|
||||
BEGIN
|
||||
VALUE "CompanyName", "Yann Collet"
|
||||
VALUE "FileDescription", "Extremely fast compression"
|
||||
VALUE "FileVersion", LZ4_VERSION_STRING
|
||||
VALUE "InternalName", "lz4.dll"
|
||||
VALUE "LegalCopyright", "Copyright (C) 2013-2020, Yann Collet"
|
||||
VALUE "OriginalFilename", "lz4.dll"
|
||||
VALUE "ProductName", "LZ4"
|
||||
VALUE "ProductVersion", LZ4_VERSION_STRING
|
||||
END
|
||||
END
|
||||
BLOCK "VarFileInfo"
|
||||
BEGIN
|
||||
VALUE "Translation", 0x0409, 1200
|
||||
END
|
||||
END
|
||||
|
||||
#endif
|
||||
183
expkg/vendor/lz4/build/VS2022/liblz4-dll/liblz4-dll.vcxproj
vendored
Normal file
183
expkg/vendor/lz4/build/VS2022/liblz4-dll/liblz4-dll.vcxproj
vendored
Normal file
@ -0,0 +1,183 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|x64">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|x64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<ProjectGuid>{9800039D-4AAA-43A4-BB78-FEF6F4836927}</ProjectGuid>
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
<RootNamespace>liblz4-dll</RootNamespace>
|
||||
<OutDir>$(SolutionDir)bin\$(Platform)_$(Configuration)\</OutDir>
|
||||
<IntDir>$(SolutionDir)bin\obj\$(RootNamespace)_$(Platform)_$(Configuration)\</IntDir>
|
||||
<ProjectName>liblz4-dll</ProjectName>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<WholeProgramOptimization Condition="'$(EnableWholeProgramOptimization)'=='true'">true</WholeProgramOptimization>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<WholeProgramOptimization Condition="'$(EnableWholeProgramOptimization)'=='true'">true</WholeProgramOptimization>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
<TargetName>liblz4</TargetName>
|
||||
<IncludePath>$(IncludePath);$(UniversalCRT_IncludePath);$(SolutionDir)..\..\lib;$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSDK_IncludePath);</IncludePath>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
<TargetName>liblz4</TargetName>
|
||||
<IncludePath>$(IncludePath);$(UniversalCRT_IncludePath);$(SolutionDir)..\..\lib;$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSDK_IncludePath);</IncludePath>
|
||||
<RunCodeAnalysis>true</RunCodeAnalysis>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
<TargetName>liblz4</TargetName>
|
||||
<IncludePath>$(IncludePath);$(UniversalCRT_IncludePath);$(SolutionDir)..\..\lib;$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSDK_IncludePath);</IncludePath>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
<TargetName>liblz4</TargetName>
|
||||
<IncludePath>$(IncludePath);$(UniversalCRT_IncludePath);$(SolutionDir)..\..\lib;$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSDK_IncludePath);</IncludePath>
|
||||
<RunCodeAnalysis>true</RunCodeAnalysis>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
<PrecompiledHeader>
|
||||
</PrecompiledHeader>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;LZ4_DLL_EXPORT=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<TreatWarningAsError>true</TreatWarningAsError>
|
||||
<EnablePREfast>false</EnablePREfast>
|
||||
<RuntimeLibrary Condition="'$(UseStaticCRT)'=='true'">MultiThreadedDebug</RuntimeLibrary>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<ClCompile>
|
||||
<PrecompiledHeader>
|
||||
</PrecompiledHeader>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;LZ4_DLL_EXPORT=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<TreatWarningAsError>true</TreatWarningAsError>
|
||||
<EnablePREfast>true</EnablePREfast>
|
||||
<AdditionalOptions>/analyze:stacksize295252 %(AdditionalOptions)</AdditionalOptions>
|
||||
<RuntimeLibrary Condition="'$(UseStaticCRT)'=='true'">MultiThreadedDebug</RuntimeLibrary>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<PrecompiledHeader>
|
||||
</PrecompiledHeader>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;LZ4_DLL_EXPORT=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<TreatWarningAsError>false</TreatWarningAsError>
|
||||
<EnablePREfast>false</EnablePREfast>
|
||||
<RuntimeLibrary Condition="'$(UseStaticCRT)'=='true'">MultiThreaded</RuntimeLibrary>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<PrecompiledHeader>
|
||||
</PrecompiledHeader>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;LZ4_DLL_EXPORT=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<TreatWarningAsError>false</TreatWarningAsError>
|
||||
<EnablePREfast>true</EnablePREfast>
|
||||
<AdditionalOptions>/analyze:stacksize295252 %(AdditionalOptions)</AdditionalOptions>
|
||||
<RuntimeLibrary Condition="'$(UseStaticCRT)'=='true'">MultiThreaded</RuntimeLibrary>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\..\..\lib\lz4.h" />
|
||||
<ClInclude Include="..\..\..\lib\lz4frame.h" />
|
||||
<ClInclude Include="..\..\..\lib\lz4frame_static.h" />
|
||||
<ClInclude Include="..\..\..\lib\lz4hc.h" />
|
||||
<ClInclude Include="..\..\..\lib\xxhash.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="..\..\..\lib\lz4.c" />
|
||||
<ClCompile Include="..\..\..\lib\lz4frame.c" />
|
||||
<ClCompile Include="..\..\..\lib\lz4hc.c" />
|
||||
<ClCompile Include="..\..\..\lib\xxhash.c" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ResourceCompile Include="liblz4-dll.rc" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
||||
179
expkg/vendor/lz4/build/VS2022/liblz4/liblz4.vcxproj
vendored
Normal file
179
expkg/vendor/lz4/build/VS2022/liblz4/liblz4.vcxproj
vendored
Normal file
@ -0,0 +1,179 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|x64">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|x64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<ProjectGuid>{9092C5CC-3E71-41B3-BF68-4A7BDD8A5476}</ProjectGuid>
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
<RootNamespace>liblz4</RootNamespace>
|
||||
<OutDir>$(SolutionDir)bin\$(Platform)_$(Configuration)\</OutDir>
|
||||
<IntDir>$(SolutionDir)bin\obj\$(RootNamespace)_$(Platform)_$(Configuration)\</IntDir>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<WholeProgramOptimization Condition="'$(EnableWholeProgramOptimization)'=='true'">true</WholeProgramOptimization>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<WholeProgramOptimization Condition="'$(EnableWholeProgramOptimization)'=='true'">true</WholeProgramOptimization>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
<TargetName>liblz4_static</TargetName>
|
||||
<IncludePath>$(IncludePath);$(UniversalCRT_IncludePath);$(SolutionDir)..\..\lib;$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSDK_IncludePath);</IncludePath>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
<TargetName>liblz4_static</TargetName>
|
||||
<IncludePath>$(IncludePath);$(UniversalCRT_IncludePath);$(SolutionDir)..\..\lib;$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSDK_IncludePath);</IncludePath>
|
||||
<RunCodeAnalysis>true</RunCodeAnalysis>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
<TargetName>liblz4_static</TargetName>
|
||||
<IncludePath>$(IncludePath);$(UniversalCRT_IncludePath);$(SolutionDir)..\..\lib;$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSDK_IncludePath);</IncludePath>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
<TargetName>liblz4_static</TargetName>
|
||||
<IncludePath>$(IncludePath);$(UniversalCRT_IncludePath);$(SolutionDir)..\..\lib;$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSDK_IncludePath);</IncludePath>
|
||||
<RunCodeAnalysis>true</RunCodeAnalysis>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
<PrecompiledHeader>
|
||||
</PrecompiledHeader>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;LZ4_DLL_EXPORT=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<TreatWarningAsError>true</TreatWarningAsError>
|
||||
<EnablePREfast>false</EnablePREfast>
|
||||
<RuntimeLibrary Condition="'$(UseStaticCRT)'=='true'">MultiThreadedDebug</RuntimeLibrary>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<ClCompile>
|
||||
<PrecompiledHeader>
|
||||
</PrecompiledHeader>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;LZ4_DLL_EXPORT=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<TreatWarningAsError>true</TreatWarningAsError>
|
||||
<EnablePREfast>true</EnablePREfast>
|
||||
<AdditionalOptions>/analyze:stacksize295252 %(AdditionalOptions)</AdditionalOptions>
|
||||
<RuntimeLibrary Condition="'$(UseStaticCRT)'=='true'">MultiThreadedDebug</RuntimeLibrary>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<PrecompiledHeader>
|
||||
</PrecompiledHeader>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;LZ4_DLL_EXPORT=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<TreatWarningAsError>false</TreatWarningAsError>
|
||||
<EnablePREfast>false</EnablePREfast>
|
||||
<RuntimeLibrary Condition="'$(UseStaticCRT)'=='true'">MultiThreaded</RuntimeLibrary>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<PrecompiledHeader>
|
||||
</PrecompiledHeader>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;LZ4_DLL_EXPORT=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<TreatWarningAsError>false</TreatWarningAsError>
|
||||
<EnablePREfast>true</EnablePREfast>
|
||||
<AdditionalOptions>/analyze:stacksize295252 %(AdditionalOptions)</AdditionalOptions>
|
||||
<RuntimeLibrary Condition="'$(UseStaticCRT)'=='true'">MultiThreaded</RuntimeLibrary>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\..\..\lib\lz4.h" />
|
||||
<ClInclude Include="..\..\..\lib\lz4frame.h" />
|
||||
<ClInclude Include="..\..\..\lib\lz4frame_static.h" />
|
||||
<ClInclude Include="..\..\..\lib\lz4hc.h" />
|
||||
<ClInclude Include="..\..\..\lib\xxhash.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="..\..\..\lib\lz4.c" />
|
||||
<ClCompile Include="..\..\..\lib\lz4frame.c" />
|
||||
<ClCompile Include="..\..\..\lib\lz4hc.c" />
|
||||
<ClCompile Include="..\..\..\lib\xxhash.c" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
||||
106
expkg/vendor/lz4/build/VS2022/lz4.sln
vendored
Normal file
106
expkg/vendor/lz4/build/VS2022/lz4.sln
vendored
Normal file
@ -0,0 +1,106 @@
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.6.33712.159
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "liblz4-dll", "liblz4-dll\liblz4-dll.vcxproj", "{9800039D-4AAA-43A4-BB78-FEF6F4836927}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "liblz4", "liblz4\liblz4.vcxproj", "{9092C5CC-3E71-41B3-BF68-4A7BDD8A5476}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fuzzer", "fuzzer\fuzzer.vcxproj", "{18B9F1A7-9C66-4352-898B-30804DADE0FD}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fullbench", "fullbench\fullbench.vcxproj", "{6A4DF4EF-C77F-43C6-8901-DDCD20879E4E}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "frametest", "frametest\frametest.vcxproj", "{39AD6ECC-8BAD-4368-95E4-A1AA2F077BB7}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "datagen", "datagen\datagen.vcxproj", "{D745AE2F-596A-403A-9B91-81A8C6779243}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fullbench-dll", "fullbench-dll\fullbench-dll.vcxproj", "{13992FD2-077E-4954-B065-A428198201A9}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{9800039D-4AAA-43A4-BB78-FEF6F4836927} = {9800039D-4AAA-43A4-BB78-FEF6F4836927}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lz4", "lz4\lz4.vcxproj", "{60A3115E-B988-41EE-8815-F4D4F253D866}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{9092C5CC-3E71-41B3-BF68-4A7BDD8A5476} = {9092C5CC-3E71-41B3-BF68-4A7BDD8A5476}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Win32 = Debug|Win32
|
||||
Debug|x64 = Debug|x64
|
||||
Release|Win32 = Release|Win32
|
||||
Release|x64 = Release|x64
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{9800039D-4AAA-43A4-BB78-FEF6F4836927}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{9800039D-4AAA-43A4-BB78-FEF6F4836927}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{9800039D-4AAA-43A4-BB78-FEF6F4836927}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{9800039D-4AAA-43A4-BB78-FEF6F4836927}.Debug|x64.Build.0 = Debug|x64
|
||||
{9800039D-4AAA-43A4-BB78-FEF6F4836927}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{9800039D-4AAA-43A4-BB78-FEF6F4836927}.Release|Win32.Build.0 = Release|Win32
|
||||
{9800039D-4AAA-43A4-BB78-FEF6F4836927}.Release|x64.ActiveCfg = Release|x64
|
||||
{9800039D-4AAA-43A4-BB78-FEF6F4836927}.Release|x64.Build.0 = Release|x64
|
||||
{9092C5CC-3E71-41B3-BF68-4A7BDD8A5476}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{9092C5CC-3E71-41B3-BF68-4A7BDD8A5476}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{9092C5CC-3E71-41B3-BF68-4A7BDD8A5476}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{9092C5CC-3E71-41B3-BF68-4A7BDD8A5476}.Debug|x64.Build.0 = Debug|x64
|
||||
{9092C5CC-3E71-41B3-BF68-4A7BDD8A5476}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{9092C5CC-3E71-41B3-BF68-4A7BDD8A5476}.Release|Win32.Build.0 = Release|Win32
|
||||
{9092C5CC-3E71-41B3-BF68-4A7BDD8A5476}.Release|x64.ActiveCfg = Release|x64
|
||||
{9092C5CC-3E71-41B3-BF68-4A7BDD8A5476}.Release|x64.Build.0 = Release|x64
|
||||
{18B9F1A7-9C66-4352-898B-30804DADE0FD}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{18B9F1A7-9C66-4352-898B-30804DADE0FD}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{18B9F1A7-9C66-4352-898B-30804DADE0FD}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{18B9F1A7-9C66-4352-898B-30804DADE0FD}.Debug|x64.Build.0 = Debug|x64
|
||||
{18B9F1A7-9C66-4352-898B-30804DADE0FD}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{18B9F1A7-9C66-4352-898B-30804DADE0FD}.Release|Win32.Build.0 = Release|Win32
|
||||
{18B9F1A7-9C66-4352-898B-30804DADE0FD}.Release|x64.ActiveCfg = Release|x64
|
||||
{18B9F1A7-9C66-4352-898B-30804DADE0FD}.Release|x64.Build.0 = Release|x64
|
||||
{6A4DF4EF-C77F-43C6-8901-DDCD20879E4E}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{6A4DF4EF-C77F-43C6-8901-DDCD20879E4E}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{6A4DF4EF-C77F-43C6-8901-DDCD20879E4E}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{6A4DF4EF-C77F-43C6-8901-DDCD20879E4E}.Debug|x64.Build.0 = Debug|x64
|
||||
{6A4DF4EF-C77F-43C6-8901-DDCD20879E4E}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{6A4DF4EF-C77F-43C6-8901-DDCD20879E4E}.Release|Win32.Build.0 = Release|Win32
|
||||
{6A4DF4EF-C77F-43C6-8901-DDCD20879E4E}.Release|x64.ActiveCfg = Release|x64
|
||||
{6A4DF4EF-C77F-43C6-8901-DDCD20879E4E}.Release|x64.Build.0 = Release|x64
|
||||
{39AD6ECC-8BAD-4368-95E4-A1AA2F077BB7}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{39AD6ECC-8BAD-4368-95E4-A1AA2F077BB7}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{39AD6ECC-8BAD-4368-95E4-A1AA2F077BB7}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{39AD6ECC-8BAD-4368-95E4-A1AA2F077BB7}.Debug|x64.Build.0 = Debug|x64
|
||||
{39AD6ECC-8BAD-4368-95E4-A1AA2F077BB7}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{39AD6ECC-8BAD-4368-95E4-A1AA2F077BB7}.Release|Win32.Build.0 = Release|Win32
|
||||
{39AD6ECC-8BAD-4368-95E4-A1AA2F077BB7}.Release|x64.ActiveCfg = Release|x64
|
||||
{39AD6ECC-8BAD-4368-95E4-A1AA2F077BB7}.Release|x64.Build.0 = Release|x64
|
||||
{D745AE2F-596A-403A-9B91-81A8C6779243}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{D745AE2F-596A-403A-9B91-81A8C6779243}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{D745AE2F-596A-403A-9B91-81A8C6779243}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{D745AE2F-596A-403A-9B91-81A8C6779243}.Debug|x64.Build.0 = Debug|x64
|
||||
{D745AE2F-596A-403A-9B91-81A8C6779243}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{D745AE2F-596A-403A-9B91-81A8C6779243}.Release|Win32.Build.0 = Release|Win32
|
||||
{D745AE2F-596A-403A-9B91-81A8C6779243}.Release|x64.ActiveCfg = Release|x64
|
||||
{D745AE2F-596A-403A-9B91-81A8C6779243}.Release|x64.Build.0 = Release|x64
|
||||
{13992FD2-077E-4954-B065-A428198201A9}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{13992FD2-077E-4954-B065-A428198201A9}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{13992FD2-077E-4954-B065-A428198201A9}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{13992FD2-077E-4954-B065-A428198201A9}.Debug|x64.Build.0 = Debug|x64
|
||||
{13992FD2-077E-4954-B065-A428198201A9}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{13992FD2-077E-4954-B065-A428198201A9}.Release|Win32.Build.0 = Release|Win32
|
||||
{13992FD2-077E-4954-B065-A428198201A9}.Release|x64.ActiveCfg = Release|x64
|
||||
{13992FD2-077E-4954-B065-A428198201A9}.Release|x64.Build.0 = Release|x64
|
||||
{60A3115E-B988-41EE-8815-F4D4F253D866}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{60A3115E-B988-41EE-8815-F4D4F253D866}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{60A3115E-B988-41EE-8815-F4D4F253D866}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{60A3115E-B988-41EE-8815-F4D4F253D866}.Debug|x64.Build.0 = Debug|x64
|
||||
{60A3115E-B988-41EE-8815-F4D4F253D866}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{60A3115E-B988-41EE-8815-F4D4F253D866}.Release|Win32.Build.0 = Release|Win32
|
||||
{60A3115E-B988-41EE-8815-F4D4F253D866}.Release|x64.ActiveCfg = Release|x64
|
||||
{60A3115E-B988-41EE-8815-F4D4F253D866}.Release|x64.Build.0 = Release|x64
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {BBC259B2-BABF-47CD-8A6A-7B8318A803AC}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
51
expkg/vendor/lz4/build/VS2022/lz4/lz4.rc
vendored
Normal file
51
expkg/vendor/lz4/build/VS2022/lz4/lz4.rc
vendored
Normal file
@ -0,0 +1,51 @@
|
||||
// Microsoft Visual C++ generated resource script.
|
||||
//
|
||||
|
||||
#include "lz4.h" /* LZ4_VERSION_STRING */
|
||||
#define APSTUDIO_READONLY_SYMBOLS
|
||||
#include "verrsrc.h"
|
||||
#undef APSTUDIO_READONLY_SYMBOLS
|
||||
|
||||
|
||||
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
|
||||
LANGUAGE 9, 1
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Version
|
||||
//
|
||||
|
||||
VS_VERSION_INFO VERSIONINFO
|
||||
FILEVERSION LZ4_VERSION_MAJOR,LZ4_VERSION_MINOR,LZ4_VERSION_RELEASE,0
|
||||
PRODUCTVERSION LZ4_VERSION_MAJOR,LZ4_VERSION_MINOR,LZ4_VERSION_RELEASE,0
|
||||
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
|
||||
#ifdef _DEBUG
|
||||
FILEFLAGS VS_FF_DEBUG
|
||||
#else
|
||||
FILEFLAGS 0x0L
|
||||
#endif
|
||||
FILEOS VOS_NT_WINDOWS32
|
||||
FILETYPE VFT_DLL
|
||||
FILESUBTYPE VFT2_UNKNOWN
|
||||
BEGIN
|
||||
BLOCK "StringFileInfo"
|
||||
BEGIN
|
||||
BLOCK "040904B0"
|
||||
BEGIN
|
||||
VALUE "CompanyName", "Yann Collet"
|
||||
VALUE "FileDescription", "Extremely fast compression"
|
||||
VALUE "FileVersion", LZ4_VERSION_STRING
|
||||
VALUE "InternalName", "lz4.exe"
|
||||
VALUE "LegalCopyright", "Copyright (C) 2013-2020, Yann Collet"
|
||||
VALUE "OriginalFilename", "lz4.exe"
|
||||
VALUE "ProductName", "LZ4"
|
||||
VALUE "ProductVersion", LZ4_VERSION_STRING
|
||||
END
|
||||
END
|
||||
BLOCK "VarFileInfo"
|
||||
BEGIN
|
||||
VALUE "Translation", 0x0409, 1200
|
||||
END
|
||||
END
|
||||
|
||||
#endif
|
||||
189
expkg/vendor/lz4/build/VS2022/lz4/lz4.vcxproj
vendored
Normal file
189
expkg/vendor/lz4/build/VS2022/lz4/lz4.vcxproj
vendored
Normal file
@ -0,0 +1,189 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|x64">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|x64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<VCProjectVersion>15.0</VCProjectVersion>
|
||||
<ProjectGuid>{60A3115E-B988-41EE-8815-F4D4F253D866}</ProjectGuid>
|
||||
<RootNamespace>lz4</RootNamespace>
|
||||
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<WholeProgramOptimization>false</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="Shared">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<OutDir>$(SolutionDir)bin\$(Platform)_$(Configuration)\</OutDir>
|
||||
<IntDir>$(SolutionDir)bin\obj\$(RootNamespace)_$(Platform)_$(Configuration)\</IntDir>
|
||||
<IncludePath>$(IncludePath);$(UniversalCRT_IncludePath);$(SolutionDir)..\..\lib;$(SolutionDir)..\..\programs;$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSDK_IncludePath);</IncludePath>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<OutDir>$(SolutionDir)bin\$(Platform)_$(Configuration)\</OutDir>
|
||||
<IntDir>$(SolutionDir)bin\obj\$(RootNamespace)_$(Platform)_$(Configuration)\</IntDir>
|
||||
<IncludePath>$(IncludePath);$(UniversalCRT_IncludePath);$(SolutionDir)..\..\lib;$(SolutionDir)..\..\programs;$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSDK_IncludePath);</IncludePath>
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<OutDir>$(SolutionDir)bin\$(Platform)_$(Configuration)\</OutDir>
|
||||
<IntDir>$(SolutionDir)bin\obj\$(RootNamespace)_$(Platform)_$(Configuration)\</IntDir>
|
||||
<IncludePath>$(IncludePath);$(UniversalCRT_IncludePath);$(SolutionDir)..\..\lib;$(SolutionDir)..\..\programs;$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSDK_IncludePath);</IncludePath>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<OutDir>$(SolutionDir)bin\$(Platform)_$(Configuration)\</OutDir>
|
||||
<IntDir>$(SolutionDir)bin\obj\$(RootNamespace)_$(Platform)_$(Configuration)\</IntDir>
|
||||
<IncludePath>$(IncludePath);$(UniversalCRT_IncludePath);$(SolutionDir)..\..\lib;$(SolutionDir)..\..\programs;$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSDK_IncludePath);</IncludePath>
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<TreatWarningAsError>true</TreatWarningAsError>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<OptimizeReferences>false</OptimizeReferences>
|
||||
<EnableCOMDATFolding>false</EnableCOMDATFolding>
|
||||
<AdditionalLibraryDirectories>$(ProjectDir)..\bin\$(Platform)_$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||
<AdditionalDependencies>liblz4_static.lib;$(CoreLibraryDependencies);%(AdditionalDependencies)</AdditionalDependencies>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<AdditionalLibraryDirectories>$(ProjectDir)..\bin\$(Platform)_$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||
<AdditionalDependencies>liblz4_static.lib;$(CoreLibraryDependencies);%(AdditionalDependencies)</AdditionalDependencies>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<AdditionalLibraryDirectories>$(ProjectDir)..\bin\$(Platform)_$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||
<AdditionalDependencies>liblz4_static.lib;$(CoreLibraryDependencies);%(AdditionalDependencies)</AdditionalDependencies>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<AdditionalLibraryDirectories>$(ProjectDir)..\bin\$(Platform)_$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||
<AdditionalDependencies>liblz4_static.lib;$(CoreLibraryDependencies);%(AdditionalDependencies)</AdditionalDependencies>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="..\..\..\lib\lz4.c" />
|
||||
<ClCompile Include="..\..\..\lib\lz4frame.c" />
|
||||
<ClCompile Include="..\..\..\lib\lz4hc.c" />
|
||||
<ClCompile Include="..\..\..\lib\xxhash.c" />
|
||||
<ClCompile Include="..\..\..\programs\bench.c" />
|
||||
<ClCompile Include="..\..\..\programs\lorem.c" />
|
||||
<ClCompile Include="..\..\..\programs\lz4cli.c" />
|
||||
<ClCompile Include="..\..\..\programs\lz4io.c" />
|
||||
<ClCompile Include="..\..\..\programs\threadpool.c" />
|
||||
<ClCompile Include="..\..\..\programs\timefn.c" />
|
||||
<ClCompile Include="..\..\..\programs\util.c" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\..\..\lib\lz4.h" />
|
||||
<ClInclude Include="..\..\..\lib\lz4frame.h" />
|
||||
<ClInclude Include="..\..\..\lib\lz4frame_static.h" />
|
||||
<ClInclude Include="..\..\..\lib\lz4hc.h" />
|
||||
<ClInclude Include="..\..\..\lib\xxhash.h" />
|
||||
<ClInclude Include="..\..\..\programs\bench.h" />
|
||||
<ClInclude Include="..\..\..\programs\lorem.h" />
|
||||
<ClInclude Include="..\..\..\programs\lz4io.h" />
|
||||
<ClInclude Include="..\..\..\programs\util.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ResourceCompile Include="lz4.rc" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
||||
10
expkg/vendor/lz4/build/cmake/.gitignore
vendored
Normal file
10
expkg/vendor/lz4/build/cmake/.gitignore
vendored
Normal file
@ -0,0 +1,10 @@
|
||||
# cmake build artefact
|
||||
|
||||
CMakeCache.txt
|
||||
CMakeFiles
|
||||
*.cmake
|
||||
Makefile
|
||||
liblz4.pc
|
||||
lz4c
|
||||
install_manifest.txt
|
||||
build
|
||||
362
expkg/vendor/lz4/build/cmake/CMakeLists.txt
vendored
Normal file
362
expkg/vendor/lz4/build/cmake/CMakeLists.txt
vendored
Normal file
@ -0,0 +1,362 @@
|
||||
# CMake support for LZ4
|
||||
#
|
||||
# To the extent possible under law, the author(s) have dedicated all
|
||||
# copyright and related and neighboring rights to this software to
|
||||
# the public domain worldwide. This software is distributed without
|
||||
# any warranty.
|
||||
#
|
||||
# For details, see <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||
|
||||
|
||||
# Use range version specification for policy control while maintaining
|
||||
# compatibility with older CMake versions
|
||||
cmake_minimum_required(VERSION 3.5...4.0.2)
|
||||
|
||||
set(LZ4_TOP_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../..")
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# VERSION EXTRACTION - Parse version information from header file
|
||||
#-----------------------------------------------------------------------------
|
||||
function(parse_lz4_version VERSION_TYPE)
|
||||
file(STRINGS "${LZ4_TOP_SOURCE_DIR}/lib/lz4.h" version_line REGEX "^#define LZ4_VERSION_${VERSION_TYPE} +([0-9]+).*$")
|
||||
string(REGEX REPLACE "^#define LZ4_VERSION_${VERSION_TYPE} +([0-9]+).*$" "\\1" version_number "${version_line}")
|
||||
set(LZ4_VERSION_${VERSION_TYPE} ${version_number} PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
foreach(version_type IN ITEMS MAJOR MINOR RELEASE)
|
||||
parse_lz4_version(${version_type})
|
||||
endforeach()
|
||||
|
||||
set(LZ4_VERSION_STRING "${LZ4_VERSION_MAJOR}.${LZ4_VERSION_MINOR}.${LZ4_VERSION_RELEASE}")
|
||||
mark_as_advanced(LZ4_VERSION_STRING LZ4_VERSION_MAJOR LZ4_VERSION_MINOR LZ4_VERSION_RELEASE)
|
||||
|
||||
message(STATUS "Creating build script for LZ4 version: ${LZ4_VERSION_STRING}")
|
||||
|
||||
project(LZ4 VERSION ${LZ4_VERSION_STRING} LANGUAGES C)
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# DEFAULT BUILD TYPE - Set Release as default when no build type is specified
|
||||
#-----------------------------------------------------------------------------
|
||||
# Set a default build type if none was specified
|
||||
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
|
||||
message(STATUS "Setting build type to 'Release' as none was specified.")
|
||||
set(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build." FORCE)
|
||||
# Set the possible values of build type for cmake-gui
|
||||
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS
|
||||
"Debug" "Release" "MinSizeRel" "RelWithDebInfo")
|
||||
endif()
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# BUILD OPTIONS - Configure build targets and features
|
||||
#-----------------------------------------------------------------------------
|
||||
option(LZ4_BUILD_CLI "Build lz4 program" ON)
|
||||
option(LZ4_BUILD_LEGACY_LZ4C "Build lz4c program with legacy argument support" OFF)
|
||||
|
||||
|
||||
# Determine if LZ4 is being built as part of another project.
|
||||
# If LZ4 is bundled in another project, we don't want to install anything.
|
||||
# Default behavior can be overridden by setting the LZ4_BUNDLED_MODE variable.
|
||||
if(NOT DEFINED LZ4_BUNDLED_MODE)
|
||||
get_directory_property(LZ4_IS_SUBPROJECT PARENT_DIRECTORY)
|
||||
if(LZ4_IS_SUBPROJECT)
|
||||
set(LZ4_BUNDLED_MODE ON)
|
||||
else()
|
||||
set(LZ4_BUNDLED_MODE OFF)
|
||||
endif()
|
||||
endif()
|
||||
mark_as_advanced(LZ4_BUNDLED_MODE)
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# PACKAGING - CPack configuration
|
||||
#-----------------------------------------------------------------------------
|
||||
if(NOT LZ4_BUNDLED_MODE AND NOT CPack_CMake_INCLUDED)
|
||||
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "LZ4 compression library")
|
||||
set(CPACK_PACKAGE_DESCRIPTION_FILE "${LZ4_TOP_SOURCE_DIR}/README.md")
|
||||
set(CPACK_RESOURCE_FILE_LICENSE "${LZ4_TOP_SOURCE_DIR}/LICENSE")
|
||||
set(CPACK_PACKAGE_VERSION_MAJOR ${LZ4_VERSION_MAJOR})
|
||||
set(CPACK_PACKAGE_VERSION_MINOR ${LZ4_VERSION_MINOR})
|
||||
set(CPACK_PACKAGE_VERSION_PATCH ${LZ4_VERSION_RELEASE})
|
||||
include(CPack)
|
||||
endif(NOT LZ4_BUNDLED_MODE AND NOT CPack_CMake_INCLUDED)
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# LIBRARY TYPE CONFIGURATION - Static vs Shared libraries
|
||||
#-----------------------------------------------------------------------------
|
||||
# Allow people to choose whether to build shared or static libraries
|
||||
# via the BUILD_SHARED_LIBS option unless we are in bundled mode, in
|
||||
# which case we always use static libraries.
|
||||
include(CMakeDependentOption)
|
||||
CMAKE_DEPENDENT_OPTION(BUILD_SHARED_LIBS "Build shared libraries" ON "NOT LZ4_BUNDLED_MODE" OFF)
|
||||
CMAKE_DEPENDENT_OPTION(BUILD_STATIC_LIBS "Build static libraries" OFF "BUILD_SHARED_LIBS" ON)
|
||||
|
||||
if(NOT BUILD_SHARED_LIBS AND NOT BUILD_STATIC_LIBS)
|
||||
message(FATAL_ERROR "Both BUILD_SHARED_LIBS and BUILD_STATIC_LIBS have been disabled")
|
||||
endif(NOT BUILD_SHARED_LIBS AND NOT BUILD_STATIC_LIBS)
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# SOURCE FILES & DIRECTORIES - Path setup and source file collection
|
||||
#-----------------------------------------------------------------------------
|
||||
set(LZ4_LIB_SOURCE_DIR "${LZ4_TOP_SOURCE_DIR}/lib")
|
||||
set(LZ4_PROG_SOURCE_DIR "${LZ4_TOP_SOURCE_DIR}/programs")
|
||||
|
||||
include_directories("${LZ4_LIB_SOURCE_DIR}")
|
||||
|
||||
# CLI sources
|
||||
file(GLOB LZ4_SOURCES
|
||||
"${LZ4_LIB_SOURCE_DIR}/*.c")
|
||||
file(GLOB LZ4_CLI_SOURCES
|
||||
"${LZ4_PROG_SOURCE_DIR}/*.c")
|
||||
list(APPEND LZ4_CLI_SOURCES ${LZ4_SOURCES}) # LZ4_CLI always use liblz4 sources directly.
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# POSITION INDEPENDENT CODE - PIC settings for static libraries
|
||||
#-----------------------------------------------------------------------------
|
||||
# Whether to use position independent code for the static library. If
|
||||
# we're building a shared library this is ignored and PIC is always
|
||||
# used.
|
||||
if(NOT DEFINED CMAKE_POSITION_INDEPENDENT_CODE OR CMAKE_POSITION_INDEPENDENT_CODE)
|
||||
set(LZ4_POSITION_INDEPENDENT_LIB_DEFAULT ON)
|
||||
else()
|
||||
set(LZ4_POSITION_INDEPENDENT_LIB_DEFAULT OFF)
|
||||
endif(NOT DEFINED CMAKE_POSITION_INDEPENDENT_CODE OR CMAKE_POSITION_INDEPENDENT_CODE)
|
||||
|
||||
option(LZ4_POSITION_INDEPENDENT_LIB "Use position independent code for static library (if applicable)" ${LZ4_POSITION_INDEPENDENT_LIB_DEFAULT})
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# TARGETS - Library and executable targets
|
||||
#-----------------------------------------------------------------------------
|
||||
# liblz4
|
||||
include(GNUInstallDirs)
|
||||
set(LZ4_LIBRARIES_BUILT)
|
||||
if(BUILD_SHARED_LIBS)
|
||||
add_library(lz4_shared SHARED ${LZ4_SOURCES})
|
||||
target_include_directories(lz4_shared
|
||||
PUBLIC $<BUILD_INTERFACE:${LZ4_LIB_SOURCE_DIR}>
|
||||
INTERFACE $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
|
||||
set_target_properties(lz4_shared PROPERTIES
|
||||
OUTPUT_NAME lz4
|
||||
SOVERSION "${LZ4_VERSION_MAJOR}"
|
||||
VERSION "${LZ4_VERSION_STRING}")
|
||||
if(MSVC)
|
||||
target_compile_definitions(lz4_shared PRIVATE
|
||||
LZ4_DLL_EXPORT=1)
|
||||
endif(MSVC)
|
||||
list(APPEND LZ4_LIBRARIES_BUILT lz4_shared)
|
||||
endif()
|
||||
if(BUILD_STATIC_LIBS)
|
||||
set(STATIC_LIB_NAME lz4)
|
||||
if(MSVC AND BUILD_SHARED_LIBS)
|
||||
set(STATIC_LIB_NAME lz4_static)
|
||||
endif(MSVC AND BUILD_SHARED_LIBS)
|
||||
add_library(lz4_static STATIC ${LZ4_SOURCES})
|
||||
target_include_directories(lz4_static
|
||||
PUBLIC $<BUILD_INTERFACE:${LZ4_LIB_SOURCE_DIR}>
|
||||
INTERFACE $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
|
||||
set_target_properties(lz4_static PROPERTIES
|
||||
OUTPUT_NAME ${STATIC_LIB_NAME}
|
||||
POSITION_INDEPENDENT_CODE ${LZ4_POSITION_INDEPENDENT_LIB})
|
||||
list(APPEND LZ4_LIBRARIES_BUILT lz4_static)
|
||||
endif()
|
||||
# Add unified target.
|
||||
add_library(lz4 INTERFACE)
|
||||
list(APPEND LZ4_LIBRARIES_BUILT lz4)
|
||||
if(BUILD_SHARED_LIBS)
|
||||
target_link_libraries(lz4 INTERFACE lz4_shared)
|
||||
else()
|
||||
target_link_libraries(lz4 INTERFACE lz4_static)
|
||||
endif(BUILD_SHARED_LIBS)
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# DEBUG CONFIGURATION - Configurable LZ4_DEBUG level
|
||||
#-----------------------------------------------------------------------------
|
||||
# LZ4_DEBUG levels:
|
||||
# 0 - Disable everything (default for Release)
|
||||
# 1 - Enable assert() statements
|
||||
# 2-8 - Enable debug traces with increasing verbosity
|
||||
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||
set(LZ4_DEBUG_LEVEL_DEFAULT 1)
|
||||
else()
|
||||
set(LZ4_DEBUG_LEVEL_DEFAULT 0)
|
||||
endif()
|
||||
|
||||
set(LZ4_DEBUG_LEVEL ${LZ4_DEBUG_LEVEL_DEFAULT} CACHE STRING
|
||||
"LZ4 debug level: 0=disabled, 1=assert(), 2-8=debug traces with increasing verbosity")
|
||||
set_property(CACHE LZ4_DEBUG_LEVEL PROPERTY STRINGS "0" "1" "2" "3" "4" "5" "6" "7" "8")
|
||||
|
||||
# Apply LZ4_DEBUG configuration if level > 0
|
||||
if(LZ4_DEBUG_LEVEL GREATER 0)
|
||||
if(MSVC)
|
||||
add_definitions(/DLZ4_DEBUG=${LZ4_DEBUG_LEVEL})
|
||||
else()
|
||||
add_definitions(-DLZ4_DEBUG=${LZ4_DEBUG_LEVEL})
|
||||
endif()
|
||||
endif()
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# NAMESPACE CONFIGURATION - xxHash namespace settings
|
||||
#-----------------------------------------------------------------------------
|
||||
# xxhash namespace
|
||||
if(BUILD_SHARED_LIBS)
|
||||
target_compile_definitions(lz4_shared PRIVATE
|
||||
XXH_NAMESPACE=LZ4_)
|
||||
endif(BUILD_SHARED_LIBS)
|
||||
if(BUILD_STATIC_LIBS)
|
||||
target_compile_definitions(lz4_static PRIVATE
|
||||
XXH_NAMESPACE=LZ4_)
|
||||
endif(BUILD_STATIC_LIBS)
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# CLI EXECUTABLES - Configuring command-line programs
|
||||
#-----------------------------------------------------------------------------
|
||||
# lz4
|
||||
if(LZ4_BUILD_CLI)
|
||||
set(LZ4_PROGRAMS_BUILT lz4cli)
|
||||
add_executable(lz4cli ${LZ4_CLI_SOURCES})
|
||||
set_target_properties(lz4cli PROPERTIES OUTPUT_NAME lz4)
|
||||
endif(LZ4_BUILD_CLI)
|
||||
|
||||
# lz4c
|
||||
if(LZ4_BUILD_LEGACY_LZ4C)
|
||||
list(APPEND LZ4_PROGRAMS_BUILT lz4c)
|
||||
add_executable(lz4c ${LZ4_CLI_SOURCES})
|
||||
set_target_properties(lz4c PROPERTIES COMPILE_DEFINITIONS "ENABLE_LZ4C_LEGACY_OPTIONS")
|
||||
endif(LZ4_BUILD_LEGACY_LZ4C)
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# COMPILER FLAGS - Configure warning flags and compiler-specific options
|
||||
#-----------------------------------------------------------------------------
|
||||
# Extra warning flags
|
||||
if(MSVC)
|
||||
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /W4")
|
||||
else()
|
||||
include(CheckCCompilerFlag)
|
||||
foreach(flag
|
||||
# GCC-style
|
||||
-pedantic-errors
|
||||
-Wall
|
||||
-Wextra
|
||||
-Wundef
|
||||
-Wcast-qual
|
||||
-Wcast-align
|
||||
-Wshadow
|
||||
-Wswitch-enum
|
||||
-Wdeclaration-after-statement
|
||||
-Wstrict-prototypes
|
||||
-Wpointer-arith)
|
||||
|
||||
# Because https://gcc.gnu.org/wiki/FAQ#wnowarning
|
||||
string(REGEX REPLACE "\\-Wno\\-(.+)" "-W\\1" flag_to_test "${flag}")
|
||||
string(REGEX REPLACE "[^a-zA-Z0-9]+" "_" test_name "CFLAG_${flag_to_test}")
|
||||
|
||||
check_c_compiler_flag("${ADD_COMPILER_FLAGS_PREPEND} ${flag_to_test}" ${test_name})
|
||||
|
||||
if(${test_name})
|
||||
set(CMAKE_C_FLAGS_DEBUG "${flag} ${CMAKE_C_FLAGS_DEBUG}")
|
||||
endif()
|
||||
|
||||
unset(test_name)
|
||||
unset(flag_to_test)
|
||||
endforeach(flag)
|
||||
endif(MSVC)
|
||||
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# INSTALLATION - Install targets, headers, and documentation
|
||||
#-----------------------------------------------------------------------------
|
||||
if(NOT LZ4_BUNDLED_MODE)
|
||||
install(TARGETS ${LZ4_PROGRAMS_BUILT}
|
||||
BUNDLE DESTINATION "${CMAKE_INSTALL_BINDIR}"
|
||||
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}")
|
||||
install(TARGETS ${LZ4_LIBRARIES_BUILT}
|
||||
EXPORT lz4Targets
|
||||
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
|
||||
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
|
||||
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}")
|
||||
install(FILES
|
||||
"${LZ4_LIB_SOURCE_DIR}/lz4.h"
|
||||
"${LZ4_LIB_SOURCE_DIR}/lz4hc.h"
|
||||
"${LZ4_LIB_SOURCE_DIR}/lz4frame.h"
|
||||
"${LZ4_LIB_SOURCE_DIR}/lz4file.h"
|
||||
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}")
|
||||
install(FILES "${LZ4_PROG_SOURCE_DIR}/lz4.1"
|
||||
DESTINATION "${CMAKE_INSTALL_MANDIR}/man1")
|
||||
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/liblz4.pc"
|
||||
DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# CMAKE PACKAGE CONFIG - Configure CMake package for find_package support
|
||||
#-----------------------------------------------------------------------------
|
||||
include(CMakePackageConfigHelpers)
|
||||
write_basic_package_version_file(
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/lz4ConfigVersion.cmake"
|
||||
VERSION ${LZ4_VERSION_STRING}
|
||||
COMPATIBILITY SameMajorVersion)
|
||||
|
||||
set(LZ4_PKG_INSTALLDIR "${CMAKE_INSTALL_LIBDIR}/cmake/lz4")
|
||||
configure_package_config_file(
|
||||
"${CMAKE_CURRENT_LIST_DIR}/lz4Config.cmake.in"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/lz4Config.cmake"
|
||||
INSTALL_DESTINATION ${LZ4_PKG_INSTALLDIR})
|
||||
export(EXPORT lz4Targets
|
||||
FILE ${CMAKE_CURRENT_BINARY_DIR}/lz4Targets.cmake
|
||||
NAMESPACE LZ4::)
|
||||
|
||||
install(EXPORT lz4Targets
|
||||
FILE lz4Targets.cmake
|
||||
NAMESPACE LZ4::
|
||||
DESTINATION ${LZ4_PKG_INSTALLDIR})
|
||||
install(FILES
|
||||
${CMAKE_CURRENT_BINARY_DIR}/lz4Config.cmake
|
||||
${CMAKE_CURRENT_BINARY_DIR}/lz4ConfigVersion.cmake
|
||||
DESTINATION ${LZ4_PKG_INSTALLDIR})
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# SYMLINKS - Create and install Unix symlinks and manpage aliases
|
||||
#-----------------------------------------------------------------------------
|
||||
# Install lz4cat and unlz4 symlinks on Unix systems
|
||||
if(UNIX AND LZ4_BUILD_CLI)
|
||||
foreach(cli_tool IN ITEMS lz4cat unlz4)
|
||||
# Create a custom target for the symlink creation
|
||||
add_custom_target("create_${cli_tool}_symlink" ALL
|
||||
COMMAND ${CMAKE_COMMAND} -E create_symlink
|
||||
$<TARGET_FILE_NAME:lz4cli> ${cli_tool}
|
||||
DEPENDS lz4cli
|
||||
COMMENT "Creating symlink for ${cli_tool}"
|
||||
VERBATIM)
|
||||
|
||||
# Install the symlink into the binary installation directory
|
||||
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${cli_tool}"
|
||||
DESTINATION ${CMAKE_INSTALL_BINDIR}
|
||||
RENAME ${cli_tool})
|
||||
endforeach()
|
||||
|
||||
# create manpage aliases
|
||||
foreach(f lz4cat unlz4)
|
||||
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/${f}.1" ".so man1/lz4.1\n")
|
||||
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${f}.1"
|
||||
DESTINATION "${CMAKE_INSTALL_MANDIR}/man1")
|
||||
endforeach()
|
||||
endif(UNIX AND LZ4_BUILD_CLI)
|
||||
endif(NOT LZ4_BUNDLED_MODE)
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# PKG-CONFIG - Generate and install pkg-config file
|
||||
#-----------------------------------------------------------------------------
|
||||
# pkg-config
|
||||
set(PREFIX "${CMAKE_INSTALL_PREFIX}")
|
||||
|
||||
if("${CMAKE_INSTALL_FULL_LIBDIR}" STREQUAL "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}")
|
||||
set(LIBDIR "\${prefix}/${CMAKE_INSTALL_LIBDIR}")
|
||||
else()
|
||||
set(LIBDIR "${CMAKE_INSTALL_FULL_LIBDIR}")
|
||||
endif("${CMAKE_INSTALL_FULL_LIBDIR}" STREQUAL "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}")
|
||||
|
||||
if("${CMAKE_INSTALL_FULL_INCLUDEDIR}" STREQUAL "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR}")
|
||||
set(INCLUDEDIR "\${prefix}/${CMAKE_INSTALL_INCLUDEDIR}")
|
||||
else()
|
||||
set(INCLUDEDIR "${CMAKE_INSTALL_FULL_INCLUDEDIR}")
|
||||
endif("${CMAKE_INSTALL_FULL_INCLUDEDIR}" STREQUAL "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR}")
|
||||
|
||||
# for liblz4.pc substitution
|
||||
set(VERSION ${LZ4_VERSION_STRING})
|
||||
configure_file(${LZ4_LIB_SOURCE_DIR}/liblz4.pc.in liblz4.pc @ONLY)
|
||||
10
expkg/vendor/lz4/build/cmake/lz4Config.cmake.in
vendored
Normal file
10
expkg/vendor/lz4/build/cmake/lz4Config.cmake.in
vendored
Normal file
@ -0,0 +1,10 @@
|
||||
@PACKAGE_INIT@
|
||||
include( "${CMAKE_CURRENT_LIST_DIR}/lz4Targets.cmake" )
|
||||
if(NOT TARGET lz4::lz4)
|
||||
add_library(lz4::lz4 INTERFACE IMPORTED)
|
||||
if("@BUILD_SHARED_LIBS@")
|
||||
set_target_properties(lz4::lz4 PROPERTIES INTERFACE_LINK_LIBRARIES LZ4::lz4_shared)
|
||||
else()
|
||||
set_target_properties(lz4::lz4 PROPERTIES INTERFACE_LINK_LIBRARIES LZ4::lz4_static)
|
||||
endif()
|
||||
endif()
|
||||
69
expkg/vendor/lz4/build/make/README.md
vendored
Normal file
69
expkg/vendor/lz4/build/make/README.md
vendored
Normal file
@ -0,0 +1,69 @@
|
||||
# multiconf.make
|
||||
|
||||
**multiconf.make** is a self-contained Makefile include that lets you build the **same targets under many different flag sets**—debug vs release, ASan vs UBSan, GCC vs Clang, etc.—without the usual “object-file soup.”
|
||||
It hashes every combination of `CC/CXX`, `CFLAGS/CXXFLAGS`, `CPPFLAGS`, `LDFLAGS` and `LDLIBS` into a **dedicated cache directory**, so objects compiled with one configuration are never reused by another. Swap flags, rebuild, swap back—previous objects are still there and never collide.
|
||||
|
||||
---
|
||||
|
||||
## Key Benefits
|
||||
|
||||
| Why it matters | What multiconf.make does |
|
||||
| --- | --- |
|
||||
| **Isolated configs** | Stores objects into `cachedObjs/<hash>/`, one directory per unique flag set. |
|
||||
| **Fast switching** | Reusing an old config is instant—link only, no recompilation. |
|
||||
| **Header deps** | Edits to headers trigger only needed rebuilds. |
|
||||
| **One-liner targets** | Macros (`c_program`, `cxx_program`, …) hide all rule boilerplate. |
|
||||
| **Parallel-ready** | Safe with `make -j`, no duplicate compiles of shared sources. |
|
||||
|
||||
---
|
||||
|
||||
## Quick Start
|
||||
|
||||
### 1 · List your sources
|
||||
|
||||
```make
|
||||
C_SRCDIRS := src src/cdeps # all .c are in these directories
|
||||
CXX_SRCDIRS := src src/cxxdeps # all .cpp are in these directories
|
||||
```
|
||||
|
||||
### 2 · Add and include
|
||||
|
||||
```make
|
||||
# root/Makefile
|
||||
include multiconf.make
|
||||
```
|
||||
|
||||
### 3 · Declare targets
|
||||
|
||||
```make
|
||||
app:
|
||||
$(eval $(call c_program,app,app.o obj1.o obj2.o))
|
||||
test:
|
||||
$(eval $(call cxx_program,test, test.o objcxx1.o objcxx2.o))
|
||||
```
|
||||
|
||||
### 4 · Build any config you like
|
||||
|
||||
```sh
|
||||
# Release with GCC
|
||||
make CFLAGS="-O3"
|
||||
|
||||
# Debug with Clang + AddressSanitizer (new cache dir)
|
||||
make CC=clang CFLAGS="-g -O0 -fsanitize=address"
|
||||
|
||||
# Switch back to GCC release (objects still valid, relink only)
|
||||
make CFLAGS="-O3"
|
||||
```
|
||||
|
||||
Objects for each command live in different sub-folders; nothing overlaps.
|
||||
|
||||
---
|
||||
|
||||
## Additional capabilities
|
||||
|
||||
| Command | Description |
|
||||
| --- | --- |
|
||||
| `make clean_cache` | Wipe **all** cached objects & deps (full rebuild next time) |
|
||||
| `V=1` | Show full compile/link commands |
|
||||
|
||||
---
|
||||
115
expkg/vendor/lz4/build/make/lz4defs.make
vendored
Normal file
115
expkg/vendor/lz4/build/make/lz4defs.make
vendored
Normal file
@ -0,0 +1,115 @@
|
||||
# ################################################################
|
||||
# LZ4 - Makefile common definitions
|
||||
# Copyright (C) Yann Collet 2020
|
||||
# All rights reserved.
|
||||
#
|
||||
# BSD license
|
||||
# Redistribution and use in source and binary forms, with or without modification,
|
||||
# are permitted provided that the following conditions are met:
|
||||
#
|
||||
# * Redistributions of source code must retain the above copyright notice, this
|
||||
# list of conditions and the following disclaimer.
|
||||
#
|
||||
# * Redistributions in binary form must reproduce the above copyright notice, this
|
||||
# list of conditions and the following disclaimer in the documentation and/or
|
||||
# other materials provided with the distribution.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||
# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
#
|
||||
# You can contact the author at :
|
||||
# - LZ4 source repository : https://github.com/lz4/lz4
|
||||
# - LZ4 forum froup : https://groups.google.com/forum/#!forum/lz4c
|
||||
# ################################################################
|
||||
|
||||
UNAME ?= uname
|
||||
|
||||
TARGET_OS ?= $(shell $(UNAME))
|
||||
ifeq ($(TARGET_OS),)
|
||||
TARGET_OS ?= $(OS)
|
||||
endif
|
||||
|
||||
ifneq (,$(filter Windows%,$(TARGET_OS)))
|
||||
LIBLZ4_NAME = liblz4-$(LIBVER_MAJOR)
|
||||
LIBLZ4_EXP = liblz4.lib
|
||||
WINBASED = yes
|
||||
else
|
||||
LIBLZ4_EXP = liblz4.dll.a
|
||||
ifneq (,$(filter MINGW%,$(TARGET_OS)))
|
||||
LIBLZ4_NAME = liblz4
|
||||
WINBASED = yes
|
||||
else
|
||||
ifneq (,$(filter MSYS%,$(TARGET_OS)))
|
||||
LIBLZ4_NAME = msys-lz4-$(LIBVER_MAJOR)
|
||||
WINBASED = yes
|
||||
else
|
||||
ifneq (,$(filter CYGWIN%,$(TARGET_OS)))
|
||||
LIBLZ4_NAME = cyglz4-$(LIBVER_MAJOR)
|
||||
WINBASED = yes
|
||||
else
|
||||
LIBLZ4_NAME = liblz4
|
||||
WINBASED = no
|
||||
EXT =
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(WINBASED),yes)
|
||||
EXT = .exe
|
||||
WINDRES ?= windres
|
||||
LDFLAGS += -Wl,--force-exe-suffix
|
||||
endif
|
||||
|
||||
LIBLZ4 = $(LIBLZ4_NAME).$(SHARED_EXT_VER)
|
||||
|
||||
#determine if dev/nul based on host environment
|
||||
ifneq (,$(filter MINGW% MSYS% CYGWIN%,$(shell $(UNAME))))
|
||||
VOID := /dev/null
|
||||
else
|
||||
ifneq (,$(filter Windows%,$(OS)))
|
||||
VOID := nul
|
||||
else
|
||||
VOID := /dev/null
|
||||
endif
|
||||
endif
|
||||
|
||||
ifneq (,$(filter Linux Darwin GNU/kFreeBSD GNU OpenBSD FreeBSD NetBSD DragonFly SunOS Haiku MidnightBSD MINGW% CYGWIN% MSYS% AIX,$(shell $(UNAME))))
|
||||
POSIX_ENV = Yes
|
||||
else
|
||||
POSIX_ENV = No
|
||||
endif
|
||||
|
||||
# Avoid symlinks when targeting Windows or building on a Windows host
|
||||
ifeq ($(WINBASED),yes)
|
||||
LN_SF = cp -p
|
||||
else
|
||||
ifneq (,$(filter MINGW% MSYS% CYGWIN%,$(shell $(UNAME))))
|
||||
LN_SF = cp -p
|
||||
else
|
||||
ifneq (,$(filter Windows%,$(OS)))
|
||||
LN_SF = cp -p
|
||||
else
|
||||
LN_SF = ln -sf
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
ifneq (,$(filter $(shell $(UNAME)),SunOS))
|
||||
INSTALL ?= ginstall
|
||||
else
|
||||
INSTALL ?= install
|
||||
endif
|
||||
|
||||
INSTALL_PROGRAM ?= $(INSTALL) -m 755
|
||||
INSTALL_DATA ?= $(INSTALL) -m 644
|
||||
MAKE_DIR ?= $(INSTALL) -d -m 755
|
||||
|
||||
258
expkg/vendor/lz4/build/make/multiconf.make
vendored
Normal file
258
expkg/vendor/lz4/build/make/multiconf.make
vendored
Normal file
@ -0,0 +1,258 @@
|
||||
# ##########################################################################
|
||||
# multiconf.make
|
||||
# Copyright (C) Yann Collet
|
||||
#
|
||||
# GPL v2 License
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License along
|
||||
# with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
#
|
||||
# ##########################################################################
|
||||
|
||||
|
||||
# Provides c_program(_shared_o) and cxx_program(_shared_o) target generation macros
|
||||
# Provides static_library and c_dynamic_library target generation macros
|
||||
# Support recompilation of only impacted units when an associated *.h is updated.
|
||||
# Provides V=1 / VERBOSE=1 support. V=2 is used for debugging purposes.
|
||||
# Complement target clean: delete objects and binaries created by this script
|
||||
|
||||
# Requires:
|
||||
# - C_SRCDIRS, CXX_SRCDIRS, ASM_SRCDIRS defined
|
||||
# OR
|
||||
# C_SRCS, CXX_SRCS and ASM_SRCS variables defined
|
||||
# *and* vpath set to find all source files
|
||||
# OR
|
||||
# C_OBJS, CXX_OBJS and ASM_OBJS variables defined
|
||||
# *and* vpath set to find all source files
|
||||
# - directory `cachedObjs/` available to cache object files.
|
||||
# alternatively: set CACHE_ROOT to some different value.
|
||||
# Optional:
|
||||
# - HASH can be set to a different custom hash program.
|
||||
|
||||
# *_program*: generates a recipe for a target that will be built in a cache directory.
|
||||
# The cache directory is automatically derived from CACHE_ROOT and list of flags and compilers.
|
||||
# *_shared_o* variants are optional optimization variants, that share the same objects across multiple targets.
|
||||
# However, as a consequence, all these objects must have exactly the same list of flags,
|
||||
# which in practice means that there must be no target-level modification (like: target: CFLAGS += someFlag).
|
||||
# If unsure, only use the standard variants, c_program and cxx_program.
|
||||
|
||||
# All *_program* macro functions take up to 4 argument:
|
||||
# - The name of the target
|
||||
# - The list of object files to build in the cache directory
|
||||
# - An optional list of dependencies for linking, that will not be built
|
||||
# - An optional complementary recipe code, that will run after compilation and link
|
||||
|
||||
|
||||
# Silent mode is default; use V = 1 or VERBOSE = 1 to see compilation lines
|
||||
VERBOSE ?= $(V)
|
||||
$(VERBOSE).SILENT:
|
||||
|
||||
# Directory where object files will be built
|
||||
CACHE_ROOT ?= cachedObjs
|
||||
|
||||
# --------------------------------------------------------------------------------------------
|
||||
|
||||
# Dependency management
|
||||
DEPFLAGS = -MT $@ -MMD -MP -MF
|
||||
|
||||
# Include dependency files
|
||||
include $(wildcard $(CACHE_ROOT)/**/*.d)
|
||||
include $(wildcard $(CACHE_ROOT)/generic/*/*.d)
|
||||
|
||||
# --------------------------------------------------------------------------------------------
|
||||
|
||||
# Automatic determination of build artifacts cache directory, keyed on build
|
||||
# flags, so that we can do incremental, parallel builds of different binaries
|
||||
# with different build flags without collisions.
|
||||
|
||||
UNAME ?= $(shell uname)
|
||||
ifeq ($(UNAME), Darwin)
|
||||
HASH ?= md5
|
||||
else ifeq ($(UNAME), FreeBSD)
|
||||
HASH ?= gmd5sum
|
||||
else ifeq ($(UNAME), OpenBSD)
|
||||
HASH ?= md5
|
||||
endif
|
||||
HASH ?= md5sum
|
||||
|
||||
HAVE_HASH := $(shell echo 1 | $(HASH) > /dev/null && echo 1 || echo 0)
|
||||
ifeq ($(HAVE_HASH),0)
|
||||
$(info warning : could not find HASH ($(HASH)), required to differentiate builds using different flags)
|
||||
HASH_FUNC = generic/$(1)
|
||||
else
|
||||
HASH_FUNC = $(firstword $(shell echo $(2) | $(HASH) ))
|
||||
endif
|
||||
|
||||
|
||||
MKDIR ?= mkdir
|
||||
LN ?= ln
|
||||
|
||||
# --------------------------------------------------------------------------------------------
|
||||
# The following macros are used to create object files in the cache directory.
|
||||
# The object files are named after the source file, but with a different path.
|
||||
|
||||
# Create build directories on-demand.
|
||||
#
|
||||
# For some reason, make treats the directory as an intermediate file and tries
|
||||
# to delete it. So we work around that by marking it "precious". Solution found
|
||||
# here:
|
||||
# http://ismail.badawi.io/blog/2017/03/28/automatic-directory-creation-in-make/
|
||||
.PRECIOUS: $(CACHE_ROOT)/%/.
|
||||
$(CACHE_ROOT)/%/. :
|
||||
$(MKDIR) -p $@
|
||||
|
||||
|
||||
define addTargetAsmObject # targetName, addlDeps
|
||||
$$(if $$(filter 2,$$(V)),$$(info $$(call $(0),$(1),$(2))))
|
||||
|
||||
.PRECIOUS: $$(CACHE_ROOT)/%/$(1)
|
||||
$$(CACHE_ROOT)/%/$(1) : $(1:.o=.S) $(2) | $$(CACHE_ROOT)/%/.
|
||||
@echo AS $$@
|
||||
$$(CC) $$(CPPFLAGS) $$(CXXFLAGS) $$(DEPFLAGS) $$(CACHE_ROOT)/$$*/$(1:.o=.d) -c $$< -o $$@
|
||||
|
||||
endef # addTargetAsmObject
|
||||
|
||||
define addTargetCObject # targetName, addlDeps
|
||||
$$(if $$(filter 2,$$(V)),$$(info $$(call $(0),$(1),$(2)))) #debug print
|
||||
|
||||
.PRECIOUS: $$(CACHE_ROOT)/%/$(1)
|
||||
$$(CACHE_ROOT)/%/$(1) : $(1:.o=.c) $(2) | $$(CACHE_ROOT)/%/.
|
||||
@echo CC $$@
|
||||
$$(CC) $$(CPPFLAGS) $$(CFLAGS) $$(DEPFLAGS) $$(CACHE_ROOT)/$$*/$(1:.o=.d) -c $$< -o $$@
|
||||
|
||||
endef # addTargetCObject
|
||||
|
||||
define addTargetCxxObject # targetName, suffix, addlDeps
|
||||
$$(if $$(filter 2,$$(V)),$$(info $$(call $(0),$(1),$(2),$(3))))
|
||||
|
||||
.PRECIOUS: $$(CACHE_ROOT)/%/$(1)
|
||||
$$(CACHE_ROOT)/%/$(1) : $(1:.o=.$(2)) $(3) | $$(CACHE_ROOT)/%/.
|
||||
@echo CXX $$@
|
||||
$$(CXX) $$(CPPFLAGS) $$(CXXFLAGS) $$(DEPFLAGS) $$(CACHE_ROOT)/$$*/$(1:.o=.d) -c $$< -o $$@
|
||||
|
||||
endef # addTargetCxxObject
|
||||
|
||||
# Create targets for individual object files
|
||||
C_SRCDIRS += .
|
||||
vpath %.c $(C_SRCDIRS)
|
||||
CXX_SRCDIRS += .
|
||||
vpath %.cpp $(CXX_SRCDIRS)
|
||||
vpath %.cc $(CXX_SRCDIRS)
|
||||
ASM_SRCDIRS += .
|
||||
vpath %.S $(ASM_SRCDIRS)
|
||||
|
||||
# If C_SRCDIRS, CXX_SRCDIRS and ASM_SRCDIRS are not defined, use C_SRCS, CXX_SRCS and ASM_SRCS
|
||||
C_SRCS ?= $(notdir $(foreach dir,$(C_SRCDIRS),$(wildcard $(dir)/*.c)))
|
||||
CPP_SRCS ?= $(notdir $(foreach dir,$(CXX_SRCDIRS),$(wildcard $(dir)/*.cpp)))
|
||||
CC_SRCS ?= $(notdir $(foreach dir,$(CXX_SRCDIRS),$(wildcard $(dir)/*.cc)))
|
||||
CXX_SRCS ?= $(CPP_SRCS) $(CC_SRCS)
|
||||
ASM_SRCS ?= $(notdir $(foreach dir,$(ASM_SRCDIRS),$(wildcard $(dir)/*.S)))
|
||||
|
||||
# If C_SRCS, CXX_SRCS and ASM_SRCS are not defined, use C_OBJS, CXX_OBJS and ASM_OBJS
|
||||
C_OBJS ?= $(patsubst %.c,%.o,$(C_SRCS))
|
||||
CPP_OBJS ?= $(patsubst %.cpp,%.o,$(CPP_SRCS))
|
||||
CC_OBJS ?= $(patsubst %.cc,%.o,$(CC_SRCS))
|
||||
CXX_OBJS ?= $(CPP_OBJS) $(CC_OBJS) # Note: not used
|
||||
ASM_OBJS ?= $(patsubst %.S,%.o,$(ASM_SRCS))
|
||||
|
||||
$(foreach OBJ,$(C_OBJS),$(eval $(call addTargetCObject,$(OBJ))))
|
||||
$(foreach OBJ,$(CPP_OBJS),$(eval $(call addTargetCxxObject,$(OBJ),cpp)))
|
||||
$(foreach OBJ,$(CC_OBJS),$(eval $(call addTargetCxxObject,$(OBJ),cc)))
|
||||
$(foreach OBJ,$(ASM_OBJS),$(eval $(call addTargetAsmObject,$(OBJ))))
|
||||
|
||||
# --------------------------------------------------------------------------------------------
|
||||
# The following macros are used to create targets in the user Makefile.
|
||||
# Binaries are built in the cache directory, and then symlinked to the current directory.
|
||||
# The cache directory is automatically derived from CACHE_ROOT and list of flags and compilers.
|
||||
|
||||
define static_library # targetName, targetDeps, addlDeps, addRecipe, hashComplement
|
||||
|
||||
$$(if $$(filter 2,$$(V)),$$(info $$(call $(0),$(1),$(2),$(3),$(4),$(5))))
|
||||
MCM_ALL_BINS += $(1)
|
||||
|
||||
$$(CACHE_ROOT)/%/$(1) : $$(addprefix $$(CACHE_ROOT)/%/,$(2)) $(3)
|
||||
@echo AR $$@
|
||||
$$(AR) $$(ARFLAGS) $$@ $$^
|
||||
$(4)
|
||||
|
||||
.PHONY: $(1)
|
||||
$(1) : ARFLAGS = rcs
|
||||
$(1) : $$(CACHE_ROOT)/$$(call HASH_FUNC,$(1),$(2) $$(CPPFLAGS) $$(CC) $$(CFLAGS) $$(CXX) $$(CXXFLAGS) $$(AR) $$(ARFLAGS) $(5))/$(1)
|
||||
$$(LN) -sf $$< $$@
|
||||
|
||||
endef # static_library
|
||||
|
||||
|
||||
define c_dynamic_library # targetName, targetDeps, addlDeps, addRecipe, hashComplement
|
||||
|
||||
$$(if $$(filter 2,$$(V)),$$(info $$(call $(0),$(1),$(2),$(3),$(4),$(5))))
|
||||
MCM_ALL_BINS += $(1)
|
||||
|
||||
$$(CACHE_ROOT)/%/$(1) : $$(addprefix $$(CACHE_ROOT)/%/,$(2)) $(3)
|
||||
@echo LD $$@
|
||||
$$(CC) $$(CPPFLAGS) $$(CFLAGS) $$(LDFLAGS) -shared -o $$@ $$^ $$(LDLIBS)
|
||||
$(4)
|
||||
|
||||
.PHONY: $(1)
|
||||
$(1) : CFLAGS += -fPIC
|
||||
$(1) : $$(CACHE_ROOT)/$$(call HASH_FUNC,$(1),$(2) $$(CPPFLAGS) $$(CC) $$(CFLAGS) $$(LDFLAGS) $$(LDLIBS) $(5))/$(1)
|
||||
$$(LN) -sf $$< $$@
|
||||
|
||||
endef # c_dynamic_library
|
||||
|
||||
|
||||
define program_base # targetName, targetDeps, addlDeps, addRecipe, hashComplement, compiler, flags
|
||||
|
||||
$$(if $$(filter 2,$$(V)),$$(info $$(call $(0),$(1),$(2),$(3),$(4),$(5),$(6),$(7))))
|
||||
MCM_ALL_BINS += $(1)
|
||||
|
||||
$$(CACHE_ROOT)/%/$(1) : $$(addprefix $$(CACHE_ROOT)/%/,$(2)) $(3)
|
||||
@echo LD $$@
|
||||
$$($(6)) $$(CPPFLAGS) $$($(7)) $$^ -o $$@ $$(LDFLAGS) $$(LDLIBS)
|
||||
$(4)
|
||||
|
||||
.PHONY: $(1)
|
||||
$(1) : $$(CACHE_ROOT)/$$(call HASH_FUNC,$(1),$$($(6)) $$(CPPFLAGS) $$($(7)) $$(LDFLAGS) $$(LDLIBS) $(5))/$(1)
|
||||
$$(LN) -sf $$< $$@$(EXT)
|
||||
|
||||
endef # program_base
|
||||
# Note: $(EXT) must be set to .exe for Windows
|
||||
|
||||
define c_program # targetName, targetDeps, addlDeps, addRecipe
|
||||
$$(eval $$(call program_base,$(1),$(2),$(3),$(4),$(1)$(2),CC,CFLAGS))
|
||||
endef # c_program
|
||||
|
||||
define c_program_shared_o # targetName, targetDeps, addlDeps, addRecipe
|
||||
$$(eval $$(call program_base,$(1),$(2),$(3),$(4),,CC,CFLAGS))
|
||||
endef # c_program_shared_o
|
||||
|
||||
define cxx_program # targetName, targetDeps, addlDeps, addRecipe
|
||||
$$(eval $$(call program_base,$(1),$(2),$(3),$(4),$(1)$(2),CXX,CXXFLAGS))
|
||||
endef # cxx_program
|
||||
|
||||
define cxx_program_shared_o # targetName, targetDeps, addlDeps, addRecipe
|
||||
$$(eval $$(call program_base,$(1),$(2),$(3),$(4),,CXX,CXXFLAGS))
|
||||
endef # cxx_program_shared_o
|
||||
|
||||
# --------------------------------------------------------------------------------------------
|
||||
|
||||
# Cleaning: delete all objects and binaries created with this script
|
||||
.PHONY: clean_cache
|
||||
clean_cache:
|
||||
$(RM) -rf $(CACHE_ROOT)
|
||||
$(RM) $(MCM_ALL_BINS)
|
||||
|
||||
# automatically attach to standard clean target
|
||||
.PHONY: clean
|
||||
clean: clean_cache
|
||||
39
expkg/vendor/lz4/build/meson/GetLz4LibraryVersion.py
vendored
Normal file
39
expkg/vendor/lz4/build/meson/GetLz4LibraryVersion.py
vendored
Normal file
@ -0,0 +1,39 @@
|
||||
#!/usr/bin/env python3
|
||||
# #############################################################################
|
||||
# Copyright (c) 2018-present lzutao <taolzu(at)gmail.com>
|
||||
# All rights reserved.
|
||||
#
|
||||
# This source code is licensed under both the BSD-style license (found in the
|
||||
# LICENSE file in the root directory of this source tree) and the GPLv2 (found
|
||||
# in the COPYING file in the root directory of this source tree).
|
||||
# #############################################################################
|
||||
import re
|
||||
|
||||
|
||||
def find_version_tuple(filepath):
|
||||
version_file_data = None
|
||||
with open(filepath) as fd:
|
||||
version_file_data = fd.read()
|
||||
|
||||
patterns = r"""\s*#\s*define\s+LZ4_VERSION_MAJOR\s+([0-9]+).*$
|
||||
\s*#\s*define\s+LZ4_VERSION_MINOR\s+([0-9]+).*$
|
||||
\s*#\s*define\s+LZ4_VERSION_RELEASE\s+([0-9]+).*$
|
||||
"""
|
||||
regex = re.compile(patterns, re.MULTILINE)
|
||||
version_match = regex.search(version_file_data)
|
||||
if version_match:
|
||||
return version_match.groups()
|
||||
raise Exception("Unable to find version string.")
|
||||
|
||||
|
||||
def main():
|
||||
import argparse
|
||||
parser = argparse.ArgumentParser(description='Print lz4 version from lib/lz4.h')
|
||||
parser.add_argument('file', help='path to lib/lz4.h')
|
||||
args = parser.parse_args()
|
||||
version_tuple = find_version_tuple(args.file)
|
||||
print('.'.join(version_tuple))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
34
expkg/vendor/lz4/build/meson/README.md
vendored
Normal file
34
expkg/vendor/lz4/build/meson/README.md
vendored
Normal file
@ -0,0 +1,34 @@
|
||||
Meson build system for lz4
|
||||
==========================
|
||||
|
||||
Meson is a build system designed to optimize programmer productivity.
|
||||
It aims to do this by providing simple, out-of-the-box support for
|
||||
modern software development tools and practices, such as unit tests,
|
||||
coverage reports, Valgrind, CCache and the like.
|
||||
|
||||
This Meson build system is provided with no guarantee.
|
||||
|
||||
## How to build
|
||||
|
||||
`cd` to this meson directory (`build/meson`)
|
||||
|
||||
```sh
|
||||
meson setup --buildtype=release -Ddefault_library=shared -Dprograms=true builddir
|
||||
cd builddir
|
||||
ninja # to build
|
||||
ninja install # to install
|
||||
```
|
||||
|
||||
You might want to install it in staging directory:
|
||||
|
||||
```sh
|
||||
DESTDIR=./staging ninja install
|
||||
```
|
||||
|
||||
To configure build options, use:
|
||||
|
||||
```sh
|
||||
meson configure
|
||||
```
|
||||
|
||||
See [man meson(1)](https://manpages.debian.org/testing/meson/meson.1.en.html).
|
||||
30
expkg/vendor/lz4/build/meson/meson.build
vendored
Normal file
30
expkg/vendor/lz4/build/meson/meson.build
vendored
Normal file
@ -0,0 +1,30 @@
|
||||
# #############################################################################
|
||||
# Copyright (c) 2018-present lzutao <taolzu(at)gmail.com>
|
||||
# All rights reserved.
|
||||
#
|
||||
# This source code is licensed under both the BSD-style license (found in the
|
||||
# LICENSE file in the root directory of this source tree) and the GPLv2 (found
|
||||
# in the COPYING file in the root directory of this source tree).
|
||||
# #############################################################################
|
||||
|
||||
# This is a dummy meson file.
|
||||
# The intention is that it can be easily moved to the root of the project
|
||||
# (together with meson_options.txt) and packaged for wrapdb.
|
||||
|
||||
project(
|
||||
'lz4',
|
||||
'c',
|
||||
license: 'BSD-2-Clause-Patent AND GPL-2.0-or-later',
|
||||
default_options: [
|
||||
'buildtype=release',
|
||||
'warning_level=3'
|
||||
],
|
||||
version: run_command(
|
||||
find_program('GetLz4LibraryVersion.py'),
|
||||
'../../lib/lz4.h',
|
||||
check: true
|
||||
).stdout().strip(),
|
||||
meson_version: '>=0.58.0'
|
||||
)
|
||||
|
||||
subdir('meson')
|
||||
42
expkg/vendor/lz4/build/meson/meson/contrib/gen_manual/meson.build
vendored
Normal file
42
expkg/vendor/lz4/build/meson/meson/contrib/gen_manual/meson.build
vendored
Normal file
@ -0,0 +1,42 @@
|
||||
# #############################################################################
|
||||
# Copyright (c) 2018-present lzutao <taolzu(at)gmail.com>
|
||||
# Copyright (c) 2022-present Tristan Partin <tristan(at)partin.io>
|
||||
# All rights reserved.
|
||||
#
|
||||
# This source code is licensed under both the BSD-style license (found in the
|
||||
# LICENSE file in the root directory of this source tree) and the GPLv2 (found
|
||||
# in the COPYING file in the root directory of this source tree).
|
||||
# #############################################################################
|
||||
|
||||
lz4_source_root = '../../../../..'
|
||||
|
||||
add_languages('cpp', native: true)
|
||||
|
||||
sources = files(
|
||||
lz4_source_root / 'contrib/gen_manual/gen_manual.cpp'
|
||||
)
|
||||
|
||||
gen_manual = executable(
|
||||
'gen_manual',
|
||||
sources,
|
||||
native: true,
|
||||
install: false
|
||||
)
|
||||
|
||||
manual_pages = ['lz4', 'lz4frame']
|
||||
|
||||
foreach mp : manual_pages
|
||||
custom_target(
|
||||
'@0@_manual.html'.format(mp),
|
||||
build_by_default: true,
|
||||
input: lz4_source_root / 'lib/@0@.h'.format(mp),
|
||||
output: '@0@_manual.html'.format(mp),
|
||||
command: [
|
||||
gen_manual,
|
||||
meson.project_version(),
|
||||
'@INPUT@',
|
||||
'@OUTPUT@',
|
||||
],
|
||||
install: false
|
||||
)
|
||||
endforeach
|
||||
11
expkg/vendor/lz4/build/meson/meson/contrib/meson.build
vendored
Normal file
11
expkg/vendor/lz4/build/meson/meson/contrib/meson.build
vendored
Normal file
@ -0,0 +1,11 @@
|
||||
# #############################################################################
|
||||
# Copyright (c) 2018-present lzutao <taolzu(at)gmail.com>
|
||||
# Copyright (c) 2022-present Tristan Partin <tristan(at)partin.io>
|
||||
# All rights reserved.
|
||||
#
|
||||
# This source code is licensed under both the BSD-style license (found in the
|
||||
# LICENSE file in the root directory of this source tree) and the GPLv2 (found
|
||||
# in the COPYING file in the root directory of this source tree).
|
||||
# #############################################################################
|
||||
|
||||
subdir('gen_manual')
|
||||
32
expkg/vendor/lz4/build/meson/meson/examples/meson.build
vendored
Normal file
32
expkg/vendor/lz4/build/meson/meson/examples/meson.build
vendored
Normal file
@ -0,0 +1,32 @@
|
||||
# #############################################################################
|
||||
# Copyright (c) 2018-present lzutao <taolzu(at)gmail.com>
|
||||
# Copyright (c) 2022-present Tristan Partin <tristan(at)partin.io>
|
||||
# All rights reserved.
|
||||
#
|
||||
# This source code is licensed under both the BSD-style license (found in the
|
||||
# LICENSE file in the root directory of this source tree) and the GPLv2 (found
|
||||
# in the COPYING file in the root directory of this source tree).
|
||||
# #############################################################################
|
||||
|
||||
lz4_source_root = '../../../..'
|
||||
|
||||
examples = {
|
||||
'print_version': 'print_version.c',
|
||||
'blockStreaming_doubleBuffer': 'blockStreaming_doubleBuffer.c',
|
||||
'dictionaryRandomAccess': 'dictionaryRandomAccess.c',
|
||||
'blockStreaming_ringBuffer': 'blockStreaming_ringBuffer.c',
|
||||
'streamingHC_ringBuffer': 'streamingHC_ringBuffer.c',
|
||||
'blockStreaming_lineByLine': 'blockStreaming_lineByLine.c',
|
||||
'frameCompress': 'frameCompress.c',
|
||||
'bench_functions': 'bench_functions.c',
|
||||
'simple_buffer': 'simple_buffer.c',
|
||||
}
|
||||
|
||||
foreach e, src : examples
|
||||
executable(
|
||||
e,
|
||||
lz4_source_root / 'examples' / src,
|
||||
dependencies: [liblz4_internal_dep],
|
||||
install: false
|
||||
)
|
||||
endforeach
|
||||
87
expkg/vendor/lz4/build/meson/meson/lib/meson.build
vendored
Normal file
87
expkg/vendor/lz4/build/meson/meson/lib/meson.build
vendored
Normal file
@ -0,0 +1,87 @@
|
||||
# #############################################################################
|
||||
# Copyright (c) 2018-present lzutao <taolzu(at)gmail.com>
|
||||
# Copyright (c) 2022-present Tristan Partin <tristan(at)partin.io>
|
||||
# All rights reserved.
|
||||
#
|
||||
# This source code is licensed under both the BSD-style license (found in the
|
||||
# LICENSE file in the root directory of this source tree) and the GPLv2 (found
|
||||
# in the COPYING file in the root directory of this source tree).
|
||||
# #############################################################################
|
||||
|
||||
lz4_source_root = '../../../..'
|
||||
|
||||
sources = files(
|
||||
lz4_source_root / 'lib/lz4.c',
|
||||
lz4_source_root / 'lib/lz4frame.c',
|
||||
lz4_source_root / 'lib/lz4hc.c',
|
||||
lz4_source_root / 'lib/xxhash.c'
|
||||
)
|
||||
|
||||
if get_option('unstable')
|
||||
sources += files(lz4_source_root / 'lib/lz4file.c')
|
||||
endif
|
||||
|
||||
c_args = []
|
||||
|
||||
if host_machine.system() == 'windows' and get_option('default_library') != 'static'
|
||||
c_args += '-DLZ4_DLL_EXPORT=1'
|
||||
endif
|
||||
|
||||
liblz4 = library(
|
||||
'lz4',
|
||||
sources,
|
||||
c_args: c_args,
|
||||
install: true,
|
||||
version: meson.project_version(),
|
||||
gnu_symbol_visibility: 'hidden'
|
||||
)
|
||||
|
||||
liblz4_dep = declare_dependency(
|
||||
link_with: liblz4,
|
||||
compile_args: compile_args,
|
||||
include_directories: include_directories(lz4_source_root / 'lib')
|
||||
)
|
||||
|
||||
meson.override_dependency('liblz4', liblz4_dep)
|
||||
|
||||
if get_option('tests') or get_option('programs') or get_option('examples') or get_option('ossfuzz')
|
||||
if get_option('default_library') == 'shared'
|
||||
liblz4_internal = static_library(
|
||||
'lz4-internal',
|
||||
objects: liblz4.extract_all_objects(recursive: true),
|
||||
gnu_symbol_visibility: 'hidden'
|
||||
)
|
||||
elif get_option('default_library') == 'static'
|
||||
liblz4_internal = liblz4
|
||||
elif get_option('default_library') == 'both'
|
||||
liblz4_internal = liblz4.get_static_lib()
|
||||
endif
|
||||
|
||||
liblz4_internal_dep = declare_dependency(
|
||||
link_with: liblz4_internal,
|
||||
compile_args: compile_args,
|
||||
include_directories: include_directories(lz4_source_root / 'lib')
|
||||
)
|
||||
endif
|
||||
|
||||
pkgconfig.generate(
|
||||
liblz4,
|
||||
name: 'lz4',
|
||||
filebase: 'liblz4',
|
||||
description: 'extremely fast lossless compression algorithm library',
|
||||
version: meson.project_version(),
|
||||
url: 'http://www.lz4.org/'
|
||||
)
|
||||
|
||||
install_headers(
|
||||
lz4_source_root / 'lib/lz4.h',
|
||||
lz4_source_root / 'lib/lz4hc.h',
|
||||
lz4_source_root / 'lib/lz4frame.h'
|
||||
)
|
||||
|
||||
if get_option('default_library') != 'shared'
|
||||
install_headers(lz4_source_root / 'lib/lz4frame_static.h')
|
||||
if get_option('unstable')
|
||||
install_headers(lz4_source_root / 'lib/lz4file.h')
|
||||
endif
|
||||
endif
|
||||
135
expkg/vendor/lz4/build/meson/meson/meson.build
vendored
Normal file
135
expkg/vendor/lz4/build/meson/meson/meson.build
vendored
Normal file
@ -0,0 +1,135 @@
|
||||
# #############################################################################
|
||||
# Copyright (c) 2018-present lzutao <taolzu(at)gmail.com>
|
||||
# Copyright (c) 2022-present Tristan Partin <tristan(at)partin.io>
|
||||
# All rights reserved.
|
||||
#
|
||||
# This source code is licensed under both the BSD-style license (found in the
|
||||
# LICENSE file in the root directory of this source tree) and the GPLv2 (found
|
||||
# in the COPYING file in the root directory of this source tree).
|
||||
# #############################################################################
|
||||
|
||||
cc = meson.get_compiler('c')
|
||||
|
||||
fs = import('fs')
|
||||
pkgconfig = import('pkgconfig')
|
||||
|
||||
lz4_source_root = '../../..'
|
||||
|
||||
add_project_arguments('-DXXH_NAMESPACE=LZ4_', language: 'c')
|
||||
|
||||
if get_option('debug')
|
||||
add_project_arguments(cc.get_supported_arguments(
|
||||
'-Wcast-qual',
|
||||
'-Wcast-align',
|
||||
'-Wshadow',
|
||||
'-Wswitch-enum',
|
||||
'-Wdeclaration-after-statement',
|
||||
'-Wstrict-prototypes',
|
||||
'-Wundef',
|
||||
'-Wpointer-arith',
|
||||
'-Wstrict-aliasing=1',
|
||||
'-DLZ4_DEBUG=@0@'.format(get_option('debug-level'))
|
||||
),
|
||||
language: 'c'
|
||||
)
|
||||
endif
|
||||
|
||||
compile_args = []
|
||||
|
||||
if not get_option('align-test')
|
||||
add_project_arguments('-DLZ4_ALIGN_TEST=0', language: 'c')
|
||||
endif
|
||||
|
||||
if get_option('disable-memory-allocation')
|
||||
if get_option('default_library') != 'static'
|
||||
error('Memory allocation can only be disabled in static builds')
|
||||
endif
|
||||
|
||||
add_project_arguments('-DLZ4_STATIC_LINKING_ONLY_DISABLE_MEMORY_ALLOCATION')
|
||||
compile_args += '-DLZ4_STATIC_LINKING_ONLY_DISABLE_MEMORY_ALLOCATION'
|
||||
endif
|
||||
|
||||
add_project_arguments(
|
||||
'-DLZ4_DISTANCE_MAX=@0@'.format(get_option('distance-max')),
|
||||
language: 'c'
|
||||
)
|
||||
compile_args += '-DLZ4_DISTANCE_MAX=@0@'.format(get_option('distance-max'))
|
||||
|
||||
if not get_option('fast-dec-loop').auto()
|
||||
add_project_arguments(
|
||||
'-DLZ4_FAST_DEC_LOOP=@0@'.format(
|
||||
get_option('fast-dec-loop').enabled() ? 1 : 0
|
||||
),
|
||||
language: 'c'
|
||||
)
|
||||
endif
|
||||
|
||||
if get_option('force-sw-bitcount')
|
||||
add_project_arguments('-DLZ4_FORCE_SW_BITCOUNT', language: 'c')
|
||||
endif
|
||||
|
||||
if get_option('freestanding')
|
||||
add_project_arguments('-DLZ4_FREESTANDING=1', language: 'c')
|
||||
compile_args += '-DLZ4_FREESTANDING=1'
|
||||
endif
|
||||
|
||||
if get_option('memory-usage') > 0
|
||||
add_project_arguments(
|
||||
'-DLZ4_MEMORY_USAGE=@0@'.format(get_option('memory-usage')),
|
||||
language: 'c'
|
||||
)
|
||||
compile_args += '-DLZ4_MEMORY_USAGE=@0@'.format(get_option('memory-usage'))
|
||||
endif
|
||||
|
||||
if get_option('endianness-independent-output')
|
||||
if get_option('default_library') != 'static'
|
||||
error('Endianness-independent output can only be enabled in static builds')
|
||||
endif
|
||||
|
||||
add_project_arguments('-DLZ4_STATIC_LINKING_ONLY_ENDIANNESS_INDEPENDENT_OUTPUT')
|
||||
compile_args += '-DLZ4_STATIC_LINKING_ONLY_ENDIANNESS_INDEPENDENT_OUTPUT'
|
||||
endif
|
||||
|
||||
if get_option('unstable')
|
||||
add_project_arguments('-DLZ4_STATIC_LINKING_ONLY', language: 'c')
|
||||
compile_args += '-DLZ4_STATIC_LINKING_ONLY'
|
||||
if get_option('default_library') != 'static'
|
||||
add_project_arguments('-DLZ4_PUBLISH_STATIC_FUNCTIONS', language: 'c')
|
||||
compile_args += '-DLZ4_PUBLISH_STATIC_FUNCTIONS'
|
||||
|
||||
add_project_arguments('-DLZ4F_PUBLISH_STATIC_FUNCTIONS', language: 'c')
|
||||
compile_args += '-DLZ4F_PUBLISH_STATIC_FUNCTIONS'
|
||||
endif
|
||||
endif
|
||||
|
||||
if get_option('user-memory-functions')
|
||||
add_project_arguments('-DLZ4_USER_MEMORY_FUNCTIONS', language: 'c')
|
||||
endif
|
||||
|
||||
run_env = environment()
|
||||
|
||||
subdir('lib')
|
||||
|
||||
if get_option('programs')
|
||||
subdir('programs')
|
||||
else
|
||||
lz4 = disabler()
|
||||
lz4cat = disabler()
|
||||
unlz4 = disabler()
|
||||
endif
|
||||
|
||||
if get_option('tests')
|
||||
subdir('tests')
|
||||
endif
|
||||
|
||||
if get_option('contrib')
|
||||
subdir('contrib')
|
||||
endif
|
||||
|
||||
if get_option('examples')
|
||||
subdir('examples')
|
||||
endif
|
||||
|
||||
if get_option('ossfuzz')
|
||||
subdir('ossfuzz')
|
||||
endif
|
||||
37
expkg/vendor/lz4/build/meson/meson/ossfuzz/meson.build
vendored
Normal file
37
expkg/vendor/lz4/build/meson/meson/ossfuzz/meson.build
vendored
Normal file
@ -0,0 +1,37 @@
|
||||
lz4_source_root = '../../../..'
|
||||
|
||||
fuzzers = [
|
||||
'compress_frame_fuzzer',
|
||||
'compress_fuzzer',
|
||||
'compress_hc_fuzzer',
|
||||
'decompress_frame_fuzzer',
|
||||
'decompress_fuzzer',
|
||||
'round_trip_frame_uncompressed_fuzzer',
|
||||
'round_trip_fuzzer',
|
||||
'round_trip_hc_fuzzer',
|
||||
'round_trip_stream_fuzzer'
|
||||
]
|
||||
|
||||
c_args = cc.get_supported_arguments(
|
||||
'-Wno-unused-function',
|
||||
'-Wno-sign-compare',
|
||||
'-Wno-declaration-after-statement'
|
||||
)
|
||||
|
||||
foreach f : fuzzers
|
||||
lib = static_library(
|
||||
f,
|
||||
lz4_source_root / 'ossfuzz/@0@.c'.format(f),
|
||||
lz4_source_root / 'ossfuzz/lz4_helpers.c',
|
||||
lz4_source_root / 'ossfuzz/fuzz_data_producer.c',
|
||||
c_args: c_args,
|
||||
dependencies: [liblz4_internal_dep]
|
||||
)
|
||||
|
||||
executable(
|
||||
f,
|
||||
lz4_source_root / 'ossfuzz/standaloneengine.c',
|
||||
link_with: lib,
|
||||
dependencies: [liblz4_internal_dep]
|
||||
)
|
||||
endforeach
|
||||
91
expkg/vendor/lz4/build/meson/meson/programs/meson.build
vendored
Normal file
91
expkg/vendor/lz4/build/meson/meson/programs/meson.build
vendored
Normal file
@ -0,0 +1,91 @@
|
||||
# #############################################################################
|
||||
# Copyright (c) 2018-present lzutao <taolzu(at)gmail.com>
|
||||
# Copyright (c) 2022-present Tristan Partin <tristan(at)partin.io>
|
||||
# All rights reserved.
|
||||
#
|
||||
# This source code is licensed under both the BSD-style license (found in the
|
||||
# LICENSE file in the root directory of this source tree) and the GPLv2 (found
|
||||
# in the COPYING file in the root directory of this source tree).
|
||||
# #############################################################################
|
||||
|
||||
lz4_source_root = '../../../..'
|
||||
|
||||
# note:
|
||||
# it would be preferable to use some kind of glob or wildcard expansion here...
|
||||
sources = files(
|
||||
lz4_source_root / 'programs/bench.c',
|
||||
lz4_source_root / 'programs/lorem.c',
|
||||
lz4_source_root / 'programs/lz4cli.c',
|
||||
lz4_source_root / 'programs/lz4io.c',
|
||||
lz4_source_root / 'programs/util.c',
|
||||
lz4_source_root / 'programs/threadpool.c',
|
||||
lz4_source_root / 'programs/timefn.c',
|
||||
)
|
||||
|
||||
# Initialize an empty list for extra dependencies
|
||||
extra_deps = []
|
||||
|
||||
if get_option('enable_multithread')
|
||||
pthread_dep = dependency('threads', required : true)
|
||||
extra_deps += [pthread_dep]
|
||||
multithread_args = ['-DLZ4IO_MULTITHREAD']
|
||||
else
|
||||
multithread_args = []
|
||||
endif
|
||||
|
||||
lz4 = executable(
|
||||
'lz4',
|
||||
sources,
|
||||
include_directories: include_directories(lz4_source_root / 'programs'),
|
||||
dependencies: [liblz4_internal_dep] + extra_deps,
|
||||
c_args: multithread_args,
|
||||
export_dynamic: get_option('debug') and host_machine.system() == 'windows',
|
||||
install: true
|
||||
)
|
||||
|
||||
lz4cat = custom_target(
|
||||
'lz4cat',
|
||||
input: lz4,
|
||||
output: 'lz4cat',
|
||||
command: [
|
||||
'ln',
|
||||
'-s',
|
||||
'-f',
|
||||
fs.name(lz4.full_path()),
|
||||
'@OUTPUT@'
|
||||
]
|
||||
)
|
||||
|
||||
unlz4 = custom_target(
|
||||
'unlz4',
|
||||
input: lz4,
|
||||
output: 'unlz4',
|
||||
command: [
|
||||
'ln',
|
||||
'-s',
|
||||
'-f',
|
||||
fs.name(lz4.full_path()),
|
||||
'@OUTPUT@'
|
||||
]
|
||||
)
|
||||
|
||||
meson.override_find_program('lz4', lz4)
|
||||
|
||||
run_env.prepend('PATH', meson.current_build_dir())
|
||||
|
||||
install_man(lz4_source_root / 'programs/lz4.1')
|
||||
|
||||
if meson.version().version_compare('>=0.61.0')
|
||||
foreach alias : ['lz4c', 'lz4cat', 'unlz4']
|
||||
install_symlink(
|
||||
alias,
|
||||
install_dir: get_option('bindir'),
|
||||
pointing_to: 'lz4'
|
||||
)
|
||||
install_symlink(
|
||||
'@0@.1'.format(alias),
|
||||
install_dir: get_option('mandir') / 'man1',
|
||||
pointing_to: 'lz4.1'
|
||||
)
|
||||
endforeach
|
||||
endif
|
||||
162
expkg/vendor/lz4/build/meson/meson/tests/meson.build
vendored
Normal file
162
expkg/vendor/lz4/build/meson/meson/tests/meson.build
vendored
Normal file
@ -0,0 +1,162 @@
|
||||
# #############################################################################
|
||||
# Copyright (c) 2018-present lzutao <taolzu(at)gmail.com>
|
||||
# Copyright (c) 2022-present Tristan Partin <tristan(at)partin.io>
|
||||
# All rights reserved.
|
||||
#
|
||||
# This source code is licensed under both the BSD-style license (found in the
|
||||
# LICENSE file in the root directory of this source tree) and the GPLv2 (found
|
||||
# in the COPYING file in the root directory of this source tree).
|
||||
# #############################################################################
|
||||
|
||||
lz4_source_root = '../../../..'
|
||||
|
||||
fuzzer_time = 90
|
||||
test_exes = {
|
||||
'abiTest': {
|
||||
'sources': files(lz4_source_root / 'tests/abiTest.c'),
|
||||
'test': false,
|
||||
},
|
||||
'checkFrame': {
|
||||
'sources': files(lz4_source_root / 'tests/checkFrame.c'),
|
||||
'include_directories': include_directories(lz4_source_root / 'programs'),
|
||||
},
|
||||
'checkTag': {
|
||||
'sources': files(lz4_source_root / 'tests/checkTag.c'),
|
||||
'test': false,
|
||||
},
|
||||
'datagen': {
|
||||
'sources': files(
|
||||
lz4_source_root / 'programs/lorem.c',
|
||||
lz4_source_root / 'tests/datagencli.c',
|
||||
lz4_source_root / 'tests/datagen.c',
|
||||
lz4_source_root / 'tests/loremOut.c',
|
||||
),
|
||||
'include_directories': include_directories(lz4_source_root / 'programs'),
|
||||
},
|
||||
'decompress-partial-usingDict.c': {
|
||||
'sources': files(lz4_source_root / 'tests/decompress-partial-usingDict.c'),
|
||||
},
|
||||
'decompress-partial.c': {
|
||||
'sources': files(lz4_source_root / 'tests/decompress-partial.c'),
|
||||
},
|
||||
'frametest': {
|
||||
'sources': files(lz4_source_root / 'tests/frametest.c'),
|
||||
'include_directories': include_directories(lz4_source_root / 'programs'),
|
||||
'args': ['-v', '-T@0@s'.format(fuzzer_time)],
|
||||
'test': false,
|
||||
},
|
||||
'freestanding': {
|
||||
'sources': files(lz4_source_root / 'tests/freestanding.c'),
|
||||
'c_args': ['-ffreestanding', '-fno-stack-protector', '-Wno-unused-parameter', '-Wno-declaration-after-statement', '-DLZ4_DEBUG=0'],
|
||||
'link_args': ['-nostdlib'],
|
||||
'build': cc.get_id() in ['gcc', 'clang'] and
|
||||
host_machine.system() == 'linux' and host_machine.cpu_family() == 'x86_64',
|
||||
'override_options': ['optimization=1'],
|
||||
},
|
||||
'fullbench': {
|
||||
'sources': files(lz4_source_root / 'tests/fullbench.c'),
|
||||
'include_directories': include_directories(lz4_source_root / 'programs'),
|
||||
'args': ['--no-prompt', '-i1', files(lz4_source_root / 'tests/COPYING')],
|
||||
'test': false,
|
||||
},
|
||||
'fuzzer': {
|
||||
'sources': files(lz4_source_root / 'tests/fuzzer.c'),
|
||||
'include_directories': include_directories(lz4_source_root / 'programs'),
|
||||
'args': ['-T@0@s'.format(fuzzer_time)],
|
||||
'test': false,
|
||||
},
|
||||
'roundTripTest': {
|
||||
'sources': files(lz4_source_root / 'tests/roundTripTest.c'),
|
||||
'test': false,
|
||||
},
|
||||
}
|
||||
|
||||
targets = {}
|
||||
|
||||
foreach e, attrs : test_exes
|
||||
if not attrs.get('build', true)
|
||||
targets += {e: disabler()}
|
||||
continue
|
||||
endif
|
||||
|
||||
t = executable(
|
||||
e,
|
||||
attrs.get('sources'),
|
||||
c_args: attrs.get('c_args', []),
|
||||
link_args: attrs.get('link_args', []),
|
||||
objects: attrs.get('objects', []),
|
||||
dependencies: [liblz4_internal_dep],
|
||||
include_directories: attrs.get('include_directories', []),
|
||||
install: false,
|
||||
override_options: attrs.get('override_options', [])
|
||||
)
|
||||
|
||||
targets += {e: t}
|
||||
|
||||
if not attrs.get('test', true)
|
||||
continue
|
||||
endif
|
||||
|
||||
test(
|
||||
e,
|
||||
t,
|
||||
args: attrs.get('params', []),
|
||||
timeout: 120
|
||||
)
|
||||
endforeach
|
||||
|
||||
fs = import('fs')
|
||||
|
||||
run_env.prepend('PATH', meson.current_build_dir())
|
||||
|
||||
test_scripts = {
|
||||
'lz4-basic': {
|
||||
'depends': [lz4, lz4cat, unlz4, targets['datagen']],
|
||||
},
|
||||
'lz4-dict': {
|
||||
'depends': [lz4, targets['datagen']],
|
||||
},
|
||||
'lz4-contentSize': {
|
||||
'depends': [lz4, targets['datagen']],
|
||||
},
|
||||
'lz4-fast-hugefile': {
|
||||
'depends': [lz4, targets['datagen']],
|
||||
},
|
||||
'lz4-frame-concatenation': {
|
||||
'depends': [lz4, targets['datagen']],
|
||||
},
|
||||
'lz4-multiple': {
|
||||
'depends': [lz4, targets['datagen']],
|
||||
},
|
||||
'lz4-multiple-legacy': {
|
||||
'depends': [lz4, targets['datagen']],
|
||||
},
|
||||
'lz4-opt-parser': {
|
||||
'depends': [lz4, targets['datagen']],
|
||||
},
|
||||
'lz4-skippable': {
|
||||
'depends': [lz4],
|
||||
},
|
||||
'lz4-sparse': {
|
||||
'depends': [lz4, targets['datagen']],
|
||||
},
|
||||
'lz4-testmode': {
|
||||
'depends': [lz4, targets['datagen']],
|
||||
},
|
||||
'lz4hc-hugefile': {
|
||||
'depends': [lz4, targets['datagen']],
|
||||
},
|
||||
}
|
||||
|
||||
foreach s, attrs : test_scripts
|
||||
script = find_program(lz4_source_root / 'tests/test-@0@.sh'.format(s))
|
||||
|
||||
test(
|
||||
'@0@'.format(s),
|
||||
script,
|
||||
depends: attrs.get('depends', []),
|
||||
workdir: fs.parent(script.full_path()),
|
||||
env: run_env,
|
||||
timeout: 360
|
||||
)
|
||||
endforeach
|
||||
44
expkg/vendor/lz4/build/meson/meson_options.txt
vendored
Normal file
44
expkg/vendor/lz4/build/meson/meson_options.txt
vendored
Normal file
@ -0,0 +1,44 @@
|
||||
# #############################################################################
|
||||
# Copyright (c) 2018-present lzutao <taolzu(at)gmail.com>
|
||||
# Copyright (c) 2022-present Tristan Partin <tristan(at)partin.io>
|
||||
# All rights reserved.
|
||||
#
|
||||
# This source code is licensed under both the BSD-style license (found in the
|
||||
# LICENSE file in the root directory of this source tree) and the GPLv2 (found
|
||||
# in the COPYING file in the root directory of this source tree).
|
||||
# #############################################################################
|
||||
|
||||
option('enable_multithread', type: 'boolean', value: true,
|
||||
description: 'Enable multi-threading support')
|
||||
option('align-test', type: 'boolean', value: true,
|
||||
description: 'See LZ4_ALIGN_TEST')
|
||||
option('contrib', type: 'boolean', value: false,
|
||||
description: 'Enable contrib')
|
||||
option('debug-level', type: 'integer', min: 0, max: 7, value: 1,
|
||||
description: 'Enable run-time debug. See lib/lz4hc.c')
|
||||
option('disable-memory-allocation', type: 'boolean', value: false,
|
||||
description: 'See LZ4_STATIC_LINKING_ONLY_DISABLE_MEMORY_ALLOCATION. Static builds only')
|
||||
option('distance-max', type: 'integer', min: 0, max: 65535, value: 65535,
|
||||
description: 'See LZ4_DISTANCE_MAX')
|
||||
option('endianness-independent-output', type: 'boolean', value: false,
|
||||
description: 'See LZ4_STATIC_LINKING_ONLY_ENDIANNESS_INDEPENDENT_OUTPUT. Static builds only')
|
||||
option('examples', type: 'boolean', value: false,
|
||||
description: 'Enable examples')
|
||||
option('fast-dec-loop', type: 'feature', value: 'auto',
|
||||
description: 'See LZ4_FAST_DEC_LOOP')
|
||||
option('force-sw-bitcount', type: 'boolean', value: false,
|
||||
description: 'See LZ4_FORCE_SW_BITCOUNT')
|
||||
option('freestanding', type: 'boolean', value: false,
|
||||
description: 'See LZ4_FREESTANDING')
|
||||
option('memory-usage', type: 'integer', min: 0, max: 20, value: 0,
|
||||
description: 'See LZ4_MEMORY_USAGE. 0 means use the LZ4 default')
|
||||
option('ossfuzz', type: 'boolean', value: true,
|
||||
description: 'Enable ossfuzz')
|
||||
option('programs', type: 'boolean', value: false,
|
||||
description: 'Enable programs')
|
||||
option('tests', type: 'boolean', value: false,
|
||||
description: 'Enable tests')
|
||||
option('unstable', type: 'boolean', value: false,
|
||||
description: 'Expose unstable interfaces')
|
||||
option('user-memory-functions', type: 'boolean', value: false,
|
||||
description: 'See LZ4_USER_MEMORY_FUNCTIONS')
|
||||
5
expkg/vendor/lz4/build/visual/README.md
vendored
Normal file
5
expkg/vendor/lz4/build/visual/README.md
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
These scripts will generate Visual Studio Solutions for a selected set of supported versions of MS Visual.
|
||||
|
||||
For these scripts to work, both `cmake` and the relevant Visual Studio version must be locally installed on the system where the script is run.
|
||||
|
||||
If `cmake` is installed into a non-standard directory, or user wants to test a specific version of `cmake`, the target `cmake` directory can be provided via the environment variable `CMAKE_PATH`.
|
||||
55
expkg/vendor/lz4/build/visual/generate_solution.cmd
vendored
Normal file
55
expkg/vendor/lz4/build/visual/generate_solution.cmd
vendored
Normal file
@ -0,0 +1,55 @@
|
||||
:: Requires 1 parameter == GENERATOR
|
||||
@echo off
|
||||
setlocal
|
||||
|
||||
:: Set path
|
||||
set "BUILD_BASE_DIR=%~dp0" :: Use the directory where the script is located
|
||||
set "CMAKELIST_DIR=..\..\cmake"
|
||||
|
||||
if "%~1"=="" (
|
||||
echo No generator specified as first parameter
|
||||
exit /b 1
|
||||
)
|
||||
set "GENERATOR=%~1"
|
||||
|
||||
:: Check if a user-defined CMAKE_PATH is set and prioritize it
|
||||
if defined CMAKE_PATH (
|
||||
set "CMAKE_EXECUTABLE=%CMAKE_PATH%\cmake.exe"
|
||||
echo Using user-defined cmake at %CMAKE_PATH%
|
||||
) else (
|
||||
:: Attempt to find cmake in the system PATH
|
||||
where cmake >nul 2>&1
|
||||
if %ERRORLEVEL% neq 0 (
|
||||
:: Use the default standard cmake installation directory if not found in PATH
|
||||
set "CMAKE_PATH=C:\Program Files\CMake\bin"
|
||||
echo CMake not in system PATH => using default CMAKE_PATH=%CMAKE_PATH%
|
||||
set "CMAKE_EXECUTABLE=%CMAKE_PATH%\cmake.exe"
|
||||
) else (
|
||||
set "CMAKE_EXECUTABLE=cmake"
|
||||
echo CMake found in system PATH.
|
||||
)
|
||||
)
|
||||
|
||||
:: Set the build directory to a subdirectory named after the generator
|
||||
set "BUILD_DIR=%BUILD_BASE_DIR%\%GENERATOR%"
|
||||
|
||||
:: Create the build directory if it doesn't exist
|
||||
if not exist "%BUILD_DIR%" mkdir "%BUILD_DIR%"
|
||||
|
||||
:: Run CMake to configure the project and generate the solution
|
||||
pushd "%BUILD_DIR%"
|
||||
"%CMAKE_EXECUTABLE%" -G "%GENERATOR%" "%CMAKELIST_DIR%"
|
||||
if %ERRORLEVEL% neq 0 goto :error
|
||||
|
||||
:: If successful, end script
|
||||
echo Build configuration successful for %GENERATOR%.
|
||||
goto :end
|
||||
|
||||
:error
|
||||
echo Failed to configure build for %GENERATOR%.
|
||||
exit /b 1
|
||||
|
||||
:end
|
||||
popd
|
||||
endlocal
|
||||
@echo on
|
||||
3
expkg/vendor/lz4/build/visual/generate_vs2015.cmd
vendored
Normal file
3
expkg/vendor/lz4/build/visual/generate_vs2015.cmd
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
@echo off
|
||||
:: Call the central script with the specific generator for VS2015
|
||||
call generate_solution.cmd "Visual Studio 14 2015"
|
||||
3
expkg/vendor/lz4/build/visual/generate_vs2017.cmd
vendored
Normal file
3
expkg/vendor/lz4/build/visual/generate_vs2017.cmd
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
@echo off
|
||||
:: Call the central script with the specific generator for VS2017
|
||||
call generate_solution.cmd "Visual Studio 15 2017"
|
||||
3
expkg/vendor/lz4/build/visual/generate_vs2019.cmd
vendored
Normal file
3
expkg/vendor/lz4/build/visual/generate_vs2019.cmd
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
@echo off
|
||||
:: Call the central script with the specific generator for VS2019
|
||||
call generate_solution.cmd "Visual Studio 16 2019"
|
||||
3
expkg/vendor/lz4/build/visual/generate_vs2022.cmd
vendored
Normal file
3
expkg/vendor/lz4/build/visual/generate_vs2022.cmd
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
@echo off
|
||||
:: Call the central script with the specific generator for VS2022
|
||||
call generate_solution.cmd "Visual Studio 17 2022"
|
||||
10
expkg/vendor/lz4/contrib/debian/changelog
vendored
Normal file
10
expkg/vendor/lz4/contrib/debian/changelog
vendored
Normal file
@ -0,0 +1,10 @@
|
||||
liblz4 (1.7.2) unstable; urgency=low
|
||||
|
||||
* Changed : moved to versioning; package, cli and library have same version number
|
||||
* Improved: Small decompression speed boost (+4%)
|
||||
* Improved: Performance on ARMv6 and ARMv7
|
||||
* Added : Debianization, by Evgeniy Polyakov
|
||||
* Makefile: Generates object files (*.o) for faster (re)compilation on low power systems
|
||||
* Fix : cli : crash on some invalid inputs
|
||||
|
||||
-- Yann Collet <Cyan4973@github.com> Sun, 28 Jun 2015 01:00:00 +0000
|
||||
1
expkg/vendor/lz4/contrib/debian/compat
vendored
Normal file
1
expkg/vendor/lz4/contrib/debian/compat
vendored
Normal file
@ -0,0 +1 @@
|
||||
7
|
||||
23
expkg/vendor/lz4/contrib/debian/control
vendored
Normal file
23
expkg/vendor/lz4/contrib/debian/control
vendored
Normal file
@ -0,0 +1,23 @@
|
||||
Source: liblz4
|
||||
Section: devel
|
||||
Priority: optional
|
||||
Maintainer: Evgeniy Polyakov <zbr@ioremap.net>
|
||||
Build-Depends:
|
||||
cmake (>= 2.6),
|
||||
debhelper (>= 7.0.50~),
|
||||
cdbs
|
||||
Standards-Version: 3.8.0
|
||||
Homepage: http://www.lz4.org/
|
||||
Vcs-Git: git://github.com/lz4/lz4.git
|
||||
Vcs-Browser: https://github.com/lz4/lz4
|
||||
|
||||
Package: liblz4
|
||||
Architecture: any
|
||||
Depends: ${shlibs:Depends}, ${misc:Depends}
|
||||
Description: Extremely Fast Compression algorithm http://www.lz4.org
|
||||
|
||||
Package: liblz4-dev
|
||||
Architecture: any
|
||||
Depends: ${shlibs:Depends}, ${misc:Depends}
|
||||
Description: Extremely Fast Compression algorithm http://www.lz4.org
|
||||
Development files.
|
||||
9
expkg/vendor/lz4/contrib/debian/copyright
vendored
Normal file
9
expkg/vendor/lz4/contrib/debian/copyright
vendored
Normal file
@ -0,0 +1,9 @@
|
||||
Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
|
||||
Upstream-Name: liblz4
|
||||
Upstream-Contact: Yann Collet <Cyan4973@github.com>
|
||||
Source: https://github.com/lz4/lz4
|
||||
|
||||
Files: *
|
||||
Copyright: (C) 2011-2020 Yann Collet
|
||||
License: GPL-2+
|
||||
The full text of license: https://github.com/lz4/lz4/blob/dev/lib/LICENSE
|
||||
1
expkg/vendor/lz4/contrib/debian/dirs
vendored
Normal file
1
expkg/vendor/lz4/contrib/debian/dirs
vendored
Normal file
@ -0,0 +1 @@
|
||||
usr/bin
|
||||
0
expkg/vendor/lz4/contrib/debian/docs
vendored
Normal file
0
expkg/vendor/lz4/contrib/debian/docs
vendored
Normal file
2
expkg/vendor/lz4/contrib/debian/liblz4-dev.install
vendored
Normal file
2
expkg/vendor/lz4/contrib/debian/liblz4-dev.install
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
usr/include/lz4*
|
||||
usr/lib/liblz4.so
|
||||
2
expkg/vendor/lz4/contrib/debian/liblz4.install
vendored
Normal file
2
expkg/vendor/lz4/contrib/debian/liblz4.install
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
usr/lib/liblz4.so.*
|
||||
usr/bin/*
|
||||
7
expkg/vendor/lz4/contrib/debian/rules
vendored
Normal file
7
expkg/vendor/lz4/contrib/debian/rules
vendored
Normal file
@ -0,0 +1,7 @@
|
||||
#!/usr/bin/make -f
|
||||
|
||||
include /usr/share/cdbs/1/rules/debhelper.mk
|
||||
include /usr/share/cdbs/1/class/cmake.mk
|
||||
|
||||
|
||||
DEB_CMAKE_EXTRA_FLAGS := -DCMAKE_BUILD_TYPE=RelWithDebInfo ../../build/cmake
|
||||
24
expkg/vendor/lz4/contrib/djgpp/LICENSE
vendored
Normal file
24
expkg/vendor/lz4/contrib/djgpp/LICENSE
vendored
Normal file
@ -0,0 +1,24 @@
|
||||
Copyright (c) 2014, lpsantil
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice, this
|
||||
list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
130
expkg/vendor/lz4/contrib/djgpp/Makefile
vendored
Normal file
130
expkg/vendor/lz4/contrib/djgpp/Makefile
vendored
Normal file
@ -0,0 +1,130 @@
|
||||
# Copyright (c) 2015, Louis P. Santillan <lpsantil@gmail.com>
|
||||
# All rights reserved.
|
||||
# See LICENSE for licensing details.
|
||||
DESTDIR ?= /opt/local
|
||||
|
||||
# Pulled the code below from lib/Makefile. Might be nicer to derive this somehow without sed
|
||||
# Version numbers
|
||||
VERSION ?= 129
|
||||
RELEASE ?= r$(VERSION)
|
||||
LIBVER_MAJOR=$(shell sed -n '/define[[:blank:]][[:blank:]]*LZ4_VERSION_MAJOR/s/.*[[:blank:]]\([0-9][0-9]*\).*/\1/p' < lib/lz4.h)
|
||||
LIBVER_MINOR=$(shell sed -n '/define[[:blank:]][[:blank:]]*LZ4_VERSION_MINOR/s/.*[[:blank:]]\([0-9][0-9]*\).*/\1/p' < lib/lz4.h)
|
||||
LIBVER_PATCH=$(shell sed -n '/define[[:blank:]][[:blank:]]*LZ4_VERSION_RELEASE/s/.*[[:blank:]]\([0-9][0-9]*\).*/\1/p' < lib/lz4.h)
|
||||
LIBVER=$(LIBVER_MAJOR).$(LIBVER_MINOR).$(LIBVER_PATCH)
|
||||
|
||||
######################################################################
|
||||
|
||||
CROSS ?= i586-pc-msdosdjgpp
|
||||
CC = $(CROSS)-gcc
|
||||
AR = $(CROSS)-ar
|
||||
LD = $(CROSS)-gcc
|
||||
|
||||
CFLAGS ?= -O3 -std=gnu99 -Wall -Wextra -Wundef -Wshadow -Wcast-qual -Wcast-align -Wstrict-prototypes -Wpedantic -DLZ4_VERSION=\"$(RELEASE)\"
|
||||
LDFLAGS ?= -s
|
||||
SRC = programs/bench.c programs/lz4io.c programs/lz4cli.c
|
||||
OBJ = $(SRC:.c=.o)
|
||||
SDEPS = $(SRC:.c=.d)
|
||||
IDIR = lib
|
||||
EDIR = .
|
||||
EXE = lz4.exe
|
||||
LNK = lz4
|
||||
LDIR = lib
|
||||
LSRC = lib/lz4.c lib/lz4hc.c lib/lz4frame.c lib/xxhash.c
|
||||
INC = $(LSRC:.c=.h)
|
||||
LOBJ = $(LSRC:.c=.o)
|
||||
LSDEPS = $(LSRC:.c=.d)
|
||||
LIB = $(LDIR)/lib$(LNK).a
|
||||
|
||||
# Since LDFLAGS defaults to "-s", probably better to override unless
|
||||
# you have a default you would like to maintain
|
||||
ifeq ($(WITH_DEBUG), 1)
|
||||
CFLAGS += -g
|
||||
LDFLAGS += -g
|
||||
endif
|
||||
|
||||
# Since LDFLAGS defaults to "-s", probably better to override unless
|
||||
# you have a default you would like to maintain
|
||||
ifeq ($(WITH_PROFILING), 1)
|
||||
CFLAGS += -pg
|
||||
LDFLAGS += -pg
|
||||
endif
|
||||
|
||||
%.o: %.c $(INC) Makefile
|
||||
$(CC) $(CFLAGS) -MMD -MP -I$(IDIR) -c $< -o $@
|
||||
|
||||
%.exe: %.o $(LIB) Makefile
|
||||
$(LD) $< -L$(LDIR) -l$(LNK) $(LDFLAGS) $(LIBDEP) -o $@
|
||||
|
||||
######################################################################
|
||||
######################## DO NOT MODIFY BELOW #########################
|
||||
######################################################################
|
||||
|
||||
.PHONY: all install uninstall showconfig gstat gpush
|
||||
|
||||
all: $(LIB) $(EXE)
|
||||
|
||||
$(LIB): $(LOBJ)
|
||||
$(AR) -rcs $@ $^
|
||||
|
||||
$(EXE): $(LOBJ) $(OBJ)
|
||||
$(LD) $(LDFLAGS) $(LOBJ) $(OBJ) -o $(EDIR)/$@
|
||||
|
||||
clean:
|
||||
rm -f $(OBJ) $(EXE) $(LOBJ) $(LIB) *.tmp $(SDEPS) $(LSDEPS) $(TSDEPS)
|
||||
|
||||
install: $(INC) $(LIB) $(EXE)
|
||||
mkdir -p $(DESTDIR)/bin $(DESTDIR)/include $(DESTDIR)/lib
|
||||
rm -f .footprint
|
||||
echo $(DESTDIR)/bin/$(EXE) >> .footprint
|
||||
cp -v $(EXE) $(DESTDIR)/bin/
|
||||
@for T in $(LIB); \
|
||||
do ( \
|
||||
echo $(DESTDIR)/$$T >> .footprint; \
|
||||
cp -v --parents $$T $(DESTDIR) \
|
||||
); done
|
||||
@for T in $(INC); \
|
||||
do ( \
|
||||
echo $(DESTDIR)/include/`basename -a $$T` >> .footprint; \
|
||||
cp -v $$T $(DESTDIR)/include/ \
|
||||
); done
|
||||
|
||||
uninstall: .footprint
|
||||
@for T in $(shell cat .footprint); do rm -v $$T; done
|
||||
|
||||
-include $(SDEPS) $(LSDEPS)
|
||||
|
||||
showconfig:
|
||||
@echo "PWD="$(PWD)
|
||||
@echo "VERSION="$(VERSION)
|
||||
@echo "RELEASE="$(RELEASE)
|
||||
@echo "LIBVER_MAJOR="$(LIBVER_MAJOR)
|
||||
@echo "LIBVER_MINOR="$(LIBVER_MINOR)
|
||||
@echo "LIBVER_PATCH="$(LIBVER_PATCH)
|
||||
@echo "LIBVER="$(LIBVER)
|
||||
@echo "CROSS="$(CROSS)
|
||||
@echo "CC="$(CC)
|
||||
@echo "AR="$(AR)
|
||||
@echo "LD="$(LD)
|
||||
@echo "DESTDIR="$(DESTDIR)
|
||||
@echo "CFLAGS="$(CFLAGS)
|
||||
@echo "LDFLAGS="$(LDFLAGS)
|
||||
@echo "SRC="$(SRC)
|
||||
@echo "OBJ="$(OBJ)
|
||||
@echo "IDIR="$(IDIR)
|
||||
@echo "INC="$(INC)
|
||||
@echo "EDIR="$(EDIR)
|
||||
@echo "EXE="$(EXE)
|
||||
@echo "LDIR="$(LDIR)
|
||||
@echo "LSRC="$(LSRC)
|
||||
@echo "LOBJ="$(LOBJ)
|
||||
@echo "LNK="$(LNK)
|
||||
@echo "LIB="$(LIB)
|
||||
@echo "SDEPS="$(SDEPS)
|
||||
@echo "LSDEPS="$(LSDEPS)
|
||||
|
||||
gstat:
|
||||
git status
|
||||
|
||||
gpush:
|
||||
git commit
|
||||
git push
|
||||
21
expkg/vendor/lz4/contrib/djgpp/README.MD
vendored
Normal file
21
expkg/vendor/lz4/contrib/djgpp/README.MD
vendored
Normal file
@ -0,0 +1,21 @@
|
||||
# lz4 for DOS/djgpp
|
||||
This file details on how to compile lz4.exe, and liblz4.a for use on DOS/djgpp using
|
||||
Andrew Wu's build-djgpp cross compilers ([GH][0], [Binaries][1]) on OSX, Linux.
|
||||
|
||||
## Setup
|
||||
* Download a djgpp tarball [binaries][1] for your platform.
|
||||
* Extract and install it (`tar jxvf djgpp-linux64-gcc492.tar.bz2`). Note the path. We'll assume `/home/user/djgpp`.
|
||||
* Add the `bin` folder to your `PATH`. In bash, do `export PATH=/home/user/djgpp/bin:$PATH`.
|
||||
* The `Makefile` in `contrib/djgpp/` sets up `CC`, `AR`, `LD` for you. So, `CC=i586-pc-msdosdjgpp-gcc`, `AR=i586-pc-msdosdjgpp-ar`, `LD=i586-pc-msdosdjgpp-gcc`.
|
||||
|
||||
## Building LZ4 for DOS
|
||||
In the base dir of lz4 and with `contrib/djgpp/Makefile`, try:
|
||||
Try:
|
||||
* `make -f contrib/djgpp/Makefile`
|
||||
* `make -f contrib/djgpp/Makefile liblz4.a`
|
||||
* `make -f contrib/djgpp/Makefile lz4.exe`
|
||||
* `make -f contrib/djgpp/Makefile DESTDIR=/home/user/dos install`, however it doesn't make much sense on a \*nix.
|
||||
* You can also do `make -f contrib/djgpp/Makefile uninstall`
|
||||
|
||||
[0]: https://github.com/andrewwutw/build-djgpp
|
||||
[1]: https://github.com/andrewwutw/build-djgpp/releases
|
||||
2
expkg/vendor/lz4/contrib/gen_manual/.gitignore
vendored
Normal file
2
expkg/vendor/lz4/contrib/gen_manual/.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
# build artefact
|
||||
gen_manual
|
||||
76
expkg/vendor/lz4/contrib/gen_manual/Makefile
vendored
Normal file
76
expkg/vendor/lz4/contrib/gen_manual/Makefile
vendored
Normal file
@ -0,0 +1,76 @@
|
||||
# ################################################################
|
||||
# Copyright (C) Przemyslaw Skibinski 2016-present
|
||||
# All rights reserved.
|
||||
#
|
||||
# BSD license
|
||||
# Redistribution and use in source and binary forms, with or without modification,
|
||||
# are permitted provided that the following conditions are met:
|
||||
#
|
||||
# * Redistributions of source code must retain the above copyright notice, this
|
||||
# list of conditions and the following disclaimer.
|
||||
#
|
||||
# * Redistributions in binary form must reproduce the above copyright notice, this
|
||||
# list of conditions and the following disclaimer in the documentation and/or
|
||||
# other materials provided with the distribution.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||
# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
#
|
||||
# You can contact the author at :
|
||||
# - LZ4 source repository : https://github.com/Cyan4973/lz4
|
||||
# - LZ4 forum froup : https://groups.google.com/forum/#!forum/lz4c
|
||||
# ################################################################
|
||||
|
||||
|
||||
CXXFLAGS ?= -O2
|
||||
CXXFLAGS += -Wall -Wextra -Wcast-qual -Wcast-align -Wshadow -Wstrict-aliasing=1 -Wswitch-enum -Wno-comment
|
||||
CPPFLAGS += $(MOREFLAGS)
|
||||
FLAGS = $(CXXFLAGS) $(CPPFLAGS) $(LDFLAGS)
|
||||
|
||||
LZ4API = ../../lib/lz4.h
|
||||
LZ4MANUAL = ../../doc/lz4_manual.html
|
||||
LZ4FAPI = ../../lib/lz4frame.h
|
||||
LZ4FMANUAL = ../../doc/lz4frame_manual.html
|
||||
LIBVER_MAJOR_SCRIPT:=`sed -n '/define[[:blank:]][[:blank:]]*LZ4_VERSION_MAJOR/s/.*[[:blank:]]\([0-9][0-9]*\).*/\1/p' < $(LZ4API)`
|
||||
LIBVER_MINOR_SCRIPT:=`sed -n '/define[[:blank:]][[:blank:]]*LZ4_VERSION_MINOR/s/.*[[:blank:]]\([0-9][0-9]*\).*/\1/p' < $(LZ4API)`
|
||||
LIBVER_PATCH_SCRIPT:=`sed -n '/define[[:blank:]][[:blank:]]*LZ4_VERSION_RELEASE/s/.*[[:blank:]]\([0-9][0-9]*\).*/\1/p' < $(LZ4API)`
|
||||
LIBVER_SCRIPT:= $(LIBVER_MAJOR_SCRIPT).$(LIBVER_MINOR_SCRIPT).$(LIBVER_PATCH_SCRIPT)
|
||||
LZ4VER := $(shell echo $(LIBVER_SCRIPT))
|
||||
|
||||
# Define *.exe as extension for Windows systems
|
||||
ifneq (,$(filter Windows%,$(OS)))
|
||||
EXT =.exe
|
||||
else
|
||||
EXT =
|
||||
endif
|
||||
|
||||
|
||||
.PHONY: default
|
||||
default: gen_manual
|
||||
|
||||
gen_manual: gen_manual.cpp
|
||||
$(CXX) $(FLAGS) $^ -o $@$(EXT)
|
||||
|
||||
$(LZ4MANUAL) : gen_manual $(LZ4API)
|
||||
echo "Update lz4 manual in /doc"
|
||||
./gen_manual $(LZ4VER) $(LZ4API) $@
|
||||
|
||||
$(LZ4FMANUAL) : gen_manual $(LZ4FAPI)
|
||||
echo "Update lz4frame manual in /doc"
|
||||
./gen_manual $(LZ4VER) $(LZ4FAPI) $@
|
||||
|
||||
.PHONY: manuals
|
||||
manuals: $(LZ4MANUAL) $(LZ4FMANUAL)
|
||||
|
||||
.PHONY: clean
|
||||
clean:
|
||||
@$(RM) gen_manual$(EXT)
|
||||
@echo Cleaning completed
|
||||
31
expkg/vendor/lz4/contrib/gen_manual/README.md
vendored
Normal file
31
expkg/vendor/lz4/contrib/gen_manual/README.md
vendored
Normal file
@ -0,0 +1,31 @@
|
||||
gen_manual - a program for automatic generation of manual from source code
|
||||
==========================================================================
|
||||
|
||||
#### Introduction
|
||||
|
||||
This simple C++ program generates a single-page HTML manual from `lz4.h`.
|
||||
|
||||
The format of recognized comment blocks is following:
|
||||
- comments of type `/*!` mean: this is a function declaration; switch comments with declarations
|
||||
- comments of type `/**` and `/*-` mean: this is a comment; use a `<H2>` header for the first line
|
||||
- comments of type `/*=` and `/**=` mean: use a `<H3>` header and show also all functions until first empty line
|
||||
- comments of type `/*X` where `X` is different from above-mentioned are ignored
|
||||
|
||||
Moreover:
|
||||
- `LZ4LIB_API` is removed to improve readability
|
||||
- `typedef` are detected and included even if uncommented
|
||||
- comments of type `/**<` and `/*!<` are detected and only function declaration is highlighted (bold)
|
||||
|
||||
|
||||
#### Usage
|
||||
|
||||
The program requires 3 parameters:
|
||||
```
|
||||
gen_manual [lz4_version] [input_file] [output_html]
|
||||
```
|
||||
|
||||
To compile program and generate lz4 manual we have used:
|
||||
```
|
||||
make
|
||||
./gen_manual.exe 1.7.3 ../../lib/lz4.h lz4_manual.html
|
||||
```
|
||||
10
expkg/vendor/lz4/contrib/gen_manual/gen-lz4-manual.sh
vendored
Normal file
10
expkg/vendor/lz4/contrib/gen_manual/gen-lz4-manual.sh
vendored
Normal file
@ -0,0 +1,10 @@
|
||||
#!/bin/sh
|
||||
|
||||
LIBVER_MAJOR_SCRIPT=`sed -n '/define[[:blank:]][[:blank:]]*LZ4_VERSION_MAJOR/s/.*[[:blank:]]\([0-9][0-9]*\).*/\1/p' < ../../lib/lz4.h`
|
||||
LIBVER_MINOR_SCRIPT=`sed -n '/define[[:blank:]][[:blank:]]*LZ4_VERSION_MINOR/s/.*[[:blank:]]\([0-9][0-9]*\).*/\1/p' < ../../lib/lz4.h`
|
||||
LIBVER_PATCH_SCRIPT=`sed -n '/define[[:blank:]][[:blank:]]*LZ4_VERSION_RELEASE/s/.*[[:blank:]]\([0-9][0-9]*\).*/\1/p' < ../../lib/lz4.h`
|
||||
LIBVER_SCRIPT=$LIBVER_MAJOR_SCRIPT.$LIBVER_MINOR_SCRIPT.$LIBVER_PATCH_SCRIPT
|
||||
|
||||
echo LZ4_VERSION=$LIBVER_SCRIPT
|
||||
./gen_manual "lz4 $LIBVER_SCRIPT" ../../lib/lz4.h ./lz4_manual.html
|
||||
./gen_manual "lz4frame $LIBVER_SCRIPT" ../../lib/lz4frame.h ./lz4frame_manual.html
|
||||
248
expkg/vendor/lz4/contrib/gen_manual/gen_manual.cpp
vendored
Normal file
248
expkg/vendor/lz4/contrib/gen_manual/gen_manual.cpp
vendored
Normal file
@ -0,0 +1,248 @@
|
||||
/*
|
||||
Copyright (c) 2016-present, Przemyslaw Skibinski
|
||||
All rights reserved.
|
||||
|
||||
BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php)
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are
|
||||
met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
* Redistributions in binary form must reproduce the above
|
||||
copyright notice, this list of conditions and the following disclaimer
|
||||
in the documentation and/or other materials provided with the
|
||||
distribution.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
You can contact the author at :
|
||||
- LZ4 homepage : http://www.lz4.org
|
||||
- LZ4 source repository : https://github.com/lz4/lz4
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <sstream>
|
||||
#include <vector>
|
||||
using namespace std;
|
||||
|
||||
|
||||
/* trim string at the beginning and at the end */
|
||||
void trim(string& s, string characters)
|
||||
{
|
||||
size_t p = s.find_first_not_of(characters);
|
||||
s.erase(0, p);
|
||||
|
||||
p = s.find_last_not_of(characters);
|
||||
if (string::npos != p)
|
||||
s.erase(p+1);
|
||||
}
|
||||
|
||||
|
||||
/* trim C++ style comments */
|
||||
void trim_comments(string &s)
|
||||
{
|
||||
size_t spos, epos;
|
||||
|
||||
spos = s.find("/*");
|
||||
epos = s.find("*/");
|
||||
s = s.substr(spos+3, epos-(spos+3));
|
||||
}
|
||||
|
||||
|
||||
/* get lines until a given terminator */
|
||||
vector<string> get_lines(vector<string>& input, int& linenum, string terminator)
|
||||
{
|
||||
vector<string> out;
|
||||
string line;
|
||||
|
||||
while ((size_t)linenum < input.size()) {
|
||||
line = input[linenum];
|
||||
|
||||
if (terminator.empty() && line.empty()) { linenum--; break; }
|
||||
|
||||
size_t const epos = line.find(terminator);
|
||||
if (!terminator.empty() && epos!=string::npos) {
|
||||
out.push_back(line);
|
||||
break;
|
||||
}
|
||||
out.push_back(line);
|
||||
linenum++;
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
|
||||
/* print line with LZ4LIB_API removed and C++ comments not bold */
|
||||
void print_line(stringstream &sout, string line)
|
||||
{
|
||||
size_t spos, epos;
|
||||
|
||||
if (line.substr(0,11) == "LZ4LIB_API ") line = line.substr(11);
|
||||
if (line.substr(0,12) == "LZ4FLIB_API ") line = line.substr(12);
|
||||
spos = line.find("/*");
|
||||
epos = line.find("*/");
|
||||
if (spos!=string::npos && epos!=string::npos) {
|
||||
sout << line.substr(0, spos);
|
||||
sout << "</b>" << line.substr(spos) << "<b>" << '\n';
|
||||
} else {
|
||||
sout << line << '\n';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
char exclam;
|
||||
int linenum, chapter = 1;
|
||||
vector<string> input, lines, comments, chapters;
|
||||
string line, version;
|
||||
size_t spos, l;
|
||||
stringstream sout;
|
||||
ifstream istream;
|
||||
ofstream ostream;
|
||||
|
||||
if (argc < 4) {
|
||||
cout << "usage: " << argv[0] << " [lz4_version] [input_file] [output_html]" << endl;
|
||||
return 1;
|
||||
}
|
||||
|
||||
version = string(argv[1]) + " Manual";
|
||||
|
||||
istream.open(argv[2], ifstream::in);
|
||||
if (!istream.is_open()) {
|
||||
cout << "Error opening file " << argv[2] << endl;
|
||||
return 1;
|
||||
}
|
||||
|
||||
ostream.open(argv[3], ifstream::out);
|
||||
if (!ostream.is_open()) {
|
||||
cout << "Error opening file " << argv[3] << endl;
|
||||
return 1;
|
||||
}
|
||||
|
||||
while (getline(istream, line)) {
|
||||
input.push_back(line);
|
||||
}
|
||||
|
||||
for (linenum=0; (size_t)linenum < input.size(); linenum++) {
|
||||
line = input[linenum];
|
||||
|
||||
/* typedefs are detected and included even if uncommented */
|
||||
if (line.substr(0,7) == "typedef" && line.find("{")!=string::npos) {
|
||||
lines = get_lines(input, linenum, "}");
|
||||
sout << "<pre><b>";
|
||||
for (l=0; l<lines.size(); l++) {
|
||||
print_line(sout, lines[l]);
|
||||
}
|
||||
sout << "</b></pre><BR>" << endl;
|
||||
continue;
|
||||
}
|
||||
|
||||
/* comments of type / * * < and / * ! < are detected, and only function declaration is highlighted (bold) */
|
||||
if ((line.find("/**<")!=string::npos || line.find("/*!<")!=string::npos)
|
||||
&& line.find("*/")!=string::npos) {
|
||||
sout << "<pre><b>";
|
||||
print_line(sout, line);
|
||||
sout << "</b></pre><BR>" << endl;
|
||||
continue;
|
||||
}
|
||||
|
||||
spos = line.find("/**=");
|
||||
if (spos==string::npos) {
|
||||
spos = line.find("/*!");
|
||||
if (spos==string::npos)
|
||||
spos = line.find("/**");
|
||||
if (spos==string::npos)
|
||||
spos = line.find("/*-");
|
||||
if (spos==string::npos)
|
||||
spos = line.find("/*=");
|
||||
if (spos==string::npos)
|
||||
continue;
|
||||
exclam = line[spos+2];
|
||||
}
|
||||
else exclam = '=';
|
||||
|
||||
comments = get_lines(input, linenum, "*/");
|
||||
if (!comments.empty()) comments[0] = line.substr(spos+3);
|
||||
if (!comments.empty())
|
||||
comments[comments.size()-1] = comments[comments.size()-1].substr(0, comments[comments.size()-1].find("*/"));
|
||||
for (l=0; l<comments.size(); l++) {
|
||||
if (comments[l].compare(0, 2, " *") == 0)
|
||||
comments[l] = comments[l].substr(2);
|
||||
else if (comments[l].compare(0, 3, " *") == 0)
|
||||
comments[l] = comments[l].substr(3);
|
||||
trim(comments[l], "*-=");
|
||||
}
|
||||
while (!comments.empty() && comments[comments.size()-1].empty()) comments.pop_back(); // remove empty line at the end
|
||||
while (!comments.empty() && comments[0].empty()) comments.erase(comments.begin()); // remove empty line at the start
|
||||
|
||||
/* comments of type / * ! mean: this is a function declaration; switch comments with declarations */
|
||||
if (exclam == '!') {
|
||||
if (!comments.empty()) comments.erase(comments.begin()); /* remove first line like "LZ4_XXX() :" */
|
||||
linenum++;
|
||||
lines = get_lines(input, linenum, "");
|
||||
|
||||
sout << "<pre><b>";
|
||||
for (l=0; l<lines.size(); l++) {
|
||||
print_line(sout, lines[l]);
|
||||
}
|
||||
sout << "</b><p>";
|
||||
for (l=0; l<comments.size(); l++) {
|
||||
print_line(sout, comments[l]);
|
||||
}
|
||||
sout << "</p></pre><BR>" << endl << endl;
|
||||
} else if (exclam == '=') { /* comments of type / * = and / * * = mean: use a <H3> header and show also all functions until first empty line */
|
||||
trim(comments[0], " ");
|
||||
sout << "<h3>" << comments[0] << "</h3><pre>";
|
||||
for (l=1; l<comments.size(); l++) {
|
||||
print_line(sout, comments[l]);
|
||||
}
|
||||
sout << "</pre><b><pre>";
|
||||
lines = get_lines(input, ++linenum, "");
|
||||
for (l=0; l<lines.size(); l++) {
|
||||
print_line(sout, lines[l]);
|
||||
}
|
||||
sout << "</pre></b><BR>" << endl;
|
||||
} else { /* comments of type / * * and / * - mean: this is a comment; use a <H2> header for the first line */
|
||||
if (comments.empty()) continue;
|
||||
|
||||
trim(comments[0], " ");
|
||||
sout << "<a name=\"Chapter" << chapter << "\"></a><h2>" << comments[0] << "</h2><pre>";
|
||||
chapters.push_back(comments[0]);
|
||||
chapter++;
|
||||
|
||||
for (l=1; l<comments.size(); l++) {
|
||||
print_line(sout, comments[l]);
|
||||
}
|
||||
if (comments.size() > 1)
|
||||
sout << "<BR></pre>" << endl << endl;
|
||||
else
|
||||
sout << "</pre>" << endl << endl;
|
||||
}
|
||||
}
|
||||
|
||||
ostream << "<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=ISO-8859-1\">\n<title>" << version << "</title>\n</head>\n<body>" << endl;
|
||||
ostream << "<h1>" << version << "</h1>\n";
|
||||
|
||||
ostream << "<hr>\n<a name=\"Contents\"></a><h2>Contents</h2>\n<ol>\n";
|
||||
for (size_t i=0; i<chapters.size(); i++)
|
||||
ostream << "<li><a href=\"#Chapter" << i+1 << "\">" << chapters[i].c_str() << "</a></li>\n";
|
||||
ostream << "</ol>\n<hr>\n";
|
||||
|
||||
ostream << sout.str();
|
||||
ostream << "</html>" << endl << "</body>" << endl;
|
||||
|
||||
return 0;
|
||||
}
|
||||
29
expkg/vendor/lz4/contrib/snap/README.md
vendored
Normal file
29
expkg/vendor/lz4/contrib/snap/README.md
vendored
Normal file
@ -0,0 +1,29 @@
|
||||
Snap Packaging
|
||||
--------------
|
||||
|
||||
This directory contains the config required to generate a snap package
|
||||
of lz4. Snaps are universal Linux packages that allow you to easily
|
||||
build your application from any source and ship it to any Linux
|
||||
distribution by publishing it to https://snapcraft.io/. A key attribute
|
||||
of a snap package is that it is (ideally) confined such that it
|
||||
executes within a controlled environment with all its dependencies
|
||||
bundled with it and does not share dependencies with of from any other
|
||||
package on the system (with a couple of minor exceptions).
|
||||
|
||||
The basic anatomy and workflow is:
|
||||
|
||||
* ensure snap.snapcraft.yaml is up-to-date e.g. with version info
|
||||
|
||||
* build the snap by installing the snapcraft package and running it
|
||||
|
||||
* push snap/* changes to the repo (excluding any crud generated by a build of course)
|
||||
|
||||
* register yourself as owner of lz4 name in snapstore
|
||||
|
||||
* publish new snap to the snap store
|
||||
|
||||
* install snap by doing 'snap install lz4' on any Linux distro
|
||||
|
||||
* all installed copies of lz4 will be automatically updated to your new version
|
||||
|
||||
For more information on Snaps see https://docs.snapcraft.io and https://forum.snapcraft.io/
|
||||
32
expkg/vendor/lz4/contrib/snap/snapcraft.yaml
vendored
Normal file
32
expkg/vendor/lz4/contrib/snap/snapcraft.yaml
vendored
Normal file
@ -0,0 +1,32 @@
|
||||
name: lz4
|
||||
version: 1.9.4
|
||||
summary: Extremely Fast Compression algorithm
|
||||
description: >
|
||||
LZ4 is lossless compression algorithm, providing compression
|
||||
speed > 500 MB/s per core, scalable with multi-cores CPU. It features an
|
||||
extremely fast decoder, with speed in multiple GB/s per core, typically
|
||||
reaching RAM speed limits on multi-core systems.
|
||||
.
|
||||
Speed can be tuned dynamically, selecting an "acceleration" factor which
|
||||
trades compression ratio for faster speed. On the other end, a high
|
||||
compression derivative, LZ4_HC, is also provided, trading CPU time for
|
||||
improved compression ratio. All versions feature the same decompression
|
||||
speed.
|
||||
.
|
||||
LZ4 is also compatible with dictionary compression, and can ingest any
|
||||
input file as dictionary, including those created by Zstandard Dictionary
|
||||
Builder. (note: only the final 64KB are used).
|
||||
.
|
||||
LZ4 library is provided as open-source software using BSD 2-Clause license.
|
||||
confinement: strict
|
||||
grade: stable
|
||||
base: core20
|
||||
|
||||
apps:
|
||||
lz4:
|
||||
command: usr/local/bin/lz4
|
||||
plugs: [home]
|
||||
parts:
|
||||
lz4:
|
||||
source: ../
|
||||
plugin: make
|
||||
244
expkg/vendor/lz4/doc/lz4_Block_format.md
vendored
Normal file
244
expkg/vendor/lz4/doc/lz4_Block_format.md
vendored
Normal file
@ -0,0 +1,244 @@
|
||||
LZ4 Block Format Description
|
||||
============================
|
||||
Last revised: 2022-07-31 .
|
||||
Author : Yann Collet
|
||||
|
||||
|
||||
This specification is intended for developers willing to
|
||||
produce or read LZ4 compressed data blocks
|
||||
using any programming language of their choice.
|
||||
|
||||
LZ4 is an LZ77-type compressor with a fixed byte-oriented encoding format.
|
||||
There is no entropy encoder back-end nor framing layer.
|
||||
The latter is assumed to be handled by other parts of the system
|
||||
(see [LZ4 Frame format]).
|
||||
This design is assumed to favor simplicity and speed.
|
||||
|
||||
This document describes only the Block Format,
|
||||
not how the compressor nor decompressor actually work.
|
||||
For more details on such topics, see later section "Implementation Notes".
|
||||
|
||||
[LZ4 Frame format]: lz4_Frame_format.md
|
||||
|
||||
|
||||
|
||||
Compressed block format
|
||||
-----------------------
|
||||
An LZ4 compressed block is composed of sequences.
|
||||
A sequence is a suite of literals (not-compressed bytes),
|
||||
followed by a match copy operation.
|
||||
|
||||
Each sequence starts with a `token`.
|
||||
The `token` is a one byte value, separated into two 4-bits fields.
|
||||
Therefore each field ranges from 0 to 15.
|
||||
|
||||
|
||||
The first field uses the 4 high-bits of the token.
|
||||
It provides the length of literals to follow.
|
||||
|
||||
If the field value is smaller than 15,
|
||||
then it represents the total nb of literals present in the sequence,
|
||||
including 0, in which case there is no literal.
|
||||
|
||||
The value 15 is a special case: more bytes are required to indicate the full length.
|
||||
Each additional byte then represents a value from 0 to 255,
|
||||
which is added to the previous value to produce a total length.
|
||||
When the byte value is 255, another byte must be read and added, and so on.
|
||||
There can be any number of bytes of value `255` following `token`.
|
||||
The Block Format does not define any "size limit",
|
||||
though real implementations may feature some practical limits
|
||||
(see more details in later chapter "Implementation Notes").
|
||||
|
||||
Note : this format explains why a non-compressible input block is expanded by 0.4%.
|
||||
|
||||
Example 1 : A literal length of 48 will be represented as :
|
||||
|
||||
- 15 : value for the 4-bits High field
|
||||
- 33 : (=48-15) remaining length to reach 48
|
||||
|
||||
Example 2 : A literal length of 280 will be represented as :
|
||||
|
||||
- 15 : value for the 4-bits High field
|
||||
- 255 : following byte is maxed, since 280-15 >= 255
|
||||
- 10 : (=280 - 15 - 255) remaining length to reach 280
|
||||
|
||||
Example 3 : A literal length of 15 will be represented as :
|
||||
|
||||
- 15 : value for the 4-bits High field
|
||||
- 0 : (=15-15) yes, the zero must be output
|
||||
|
||||
Following `token` and optional length bytes, are the literals themselves.
|
||||
They are exactly as numerous as just decoded (length of literals).
|
||||
Reminder: it's possible that there are zero literals.
|
||||
|
||||
|
||||
Following the literals is the match copy operation.
|
||||
|
||||
It starts by the `offset` value.
|
||||
This is a 2 bytes value, in little endian format
|
||||
(the 1st byte is the "low" byte, the 2nd one is the "high" byte).
|
||||
|
||||
The `offset` represents the position of the match to be copied from the past.
|
||||
For example, 1 means "current position - 1 byte".
|
||||
The maximum `offset` value is 65535. 65536 and beyond cannot be coded.
|
||||
Note that 0 is an invalid `offset` value.
|
||||
The presence of a 0 `offset` value denotes an invalid (corrupted) block.
|
||||
|
||||
Then the `matchlength` can be extracted.
|
||||
For this, we use the second `token` field, the low 4-bits.
|
||||
Such a value, obviously, ranges from 0 to 15.
|
||||
However here, 0 means that the copy operation is minimal.
|
||||
The minimum length of a match, called `minmatch`, is 4.
|
||||
As a consequence, a 0 value means 4 bytes.
|
||||
Similarly to literal length, any value smaller than 15 represents a length,
|
||||
to which 4 (`minmatch`) must be added, thus ranging from 4 to 18.
|
||||
A value of 15 is special, meaning 19+ bytes,
|
||||
to which one must read additional bytes, one at a time,
|
||||
with each byte value ranging from 0 to 255.
|
||||
They are added to total to provide the final match length.
|
||||
A 255 value means there is another byte to read and add.
|
||||
There is no limit to the number of optional `255` bytes that can be present,
|
||||
and therefore no limit to representable match length,
|
||||
though real-life implementations are likely going to enforce limits for practical reasons (see more details in "Implementation Notes" section below).
|
||||
|
||||
Note: this format has a maximum achievable compression ratio of about ~250.
|
||||
|
||||
Decoding the `matchlength` reaches the end of current sequence.
|
||||
Next byte will be the start of another sequence, and therefore a new `token`.
|
||||
|
||||
|
||||
End of block conditions
|
||||
-------------------------
|
||||
There are specific restrictions required to terminate an LZ4 block.
|
||||
|
||||
1. The last sequence contains only literals.
|
||||
The block ends right after the literals (no `offset` field).
|
||||
2. The last 5 bytes of input are always literals.
|
||||
Therefore, the last sequence contains at least 5 bytes.
|
||||
- Special : if input is smaller than 5 bytes,
|
||||
there is only one sequence, it contains the whole input as literals.
|
||||
Even empty input can be represented, using a zero byte,
|
||||
interpreted as a final token without literal and without a match.
|
||||
3. The last match must start at least 12 bytes before the end of block.
|
||||
The last match is part of the _penultimate_ sequence.
|
||||
It is followed by the last sequence, which contains _only_ literals.
|
||||
- Note that, as a consequence,
|
||||
blocks < 12 bytes cannot be compressed.
|
||||
And as an extension, _independent_ blocks < 13 bytes cannot be compressed,
|
||||
because they must start by at least one literal,
|
||||
that the match can then copy afterwards.
|
||||
|
||||
When a block does not respect these end conditions,
|
||||
a conformant decoder is allowed to reject the block as incorrect.
|
||||
|
||||
These rules are in place to ensure compatibility with
|
||||
a wide range of historical decoders
|
||||
which rely on these conditions for their speed-oriented design.
|
||||
|
||||
Implementation notes
|
||||
-----------------------
|
||||
The LZ4 Block Format only defines the compressed format,
|
||||
it does not tell how to create a decoder or an encoder,
|
||||
which design is left free to the imagination of the implementer.
|
||||
|
||||
However, thanks to experience, there are a number of typical topics that
|
||||
most implementations will have to consider.
|
||||
This section tries to provide a few guidelines.
|
||||
|
||||
#### Metadata
|
||||
|
||||
An LZ4-compressed Block requires additional metadata for proper decoding.
|
||||
Typically, a decoder will require the compressed block's size,
|
||||
and an upper bound of decompressed size.
|
||||
Other variants exist, such as knowing the decompressed size,
|
||||
and having an upper bound of the input size.
|
||||
The Block Format does not specify how to transmit such information,
|
||||
which is considered an out-of-band information channel.
|
||||
That's because in many cases, the information is present in the environment.
|
||||
For example, databases must store the size of their compressed block for indexing,
|
||||
and know that their decompressed block can't be larger than a certain threshold.
|
||||
|
||||
If you need a format which is "self-contained",
|
||||
and also transports the necessary metadata for proper decoding on any platform,
|
||||
consider employing the [LZ4 Frame format] instead.
|
||||
|
||||
#### Large lengths
|
||||
|
||||
While the Block Format does not define any maximum value for length fields,
|
||||
in practice, most implementations will feature some form of limit,
|
||||
since it's expected for such values to be stored into registers of fixed bit width.
|
||||
|
||||
If length fields use 64-bit registers,
|
||||
then it can be assumed that there is no practical limit,
|
||||
as it would require a single continuous block of multiple petabytes to reach it,
|
||||
which is unreasonable by today's standard.
|
||||
|
||||
If length fields use 32-bit registers, then it can be overflowed,
|
||||
but requires a compressed block of size > 16 MB.
|
||||
Therefore, implementations that do not deal with compressed blocks > 16 MB are safe.
|
||||
However, if such a case is allowed,
|
||||
then it's recommended to check that no large length overflows the register.
|
||||
|
||||
If length fields use 16-bit registers,
|
||||
then it's definitely possible to overflow such register,
|
||||
with less than < 300 bytes of compressed data.
|
||||
|
||||
A conformant decoder should be able to detect length overflows when it's possible,
|
||||
and simply error out when that happens.
|
||||
The input block might not be invalid,
|
||||
it's just not decodable by the local decoder implementation.
|
||||
|
||||
Note that, in order to be compatible with the larger LZ4 ecosystem,
|
||||
it's recommended to be able to read and represent lengths of up to 4 MB,
|
||||
and to accept blocks of size up to 4 MB.
|
||||
Such limits are compatible with 32-bit length registers,
|
||||
and prevent overflow of 32-bit registers.
|
||||
|
||||
#### Safe decoding
|
||||
|
||||
If a decoder receives compressed data from any external source,
|
||||
it is recommended to ensure that the decoder is resilient to corrupted input,
|
||||
and made safe from buffer overflow manipulations.
|
||||
Always ensure that read and write operations
|
||||
remain within the limits of provided buffers.
|
||||
|
||||
Of particular importance, ensure that the nb of bytes instructed to copy
|
||||
does not overflow neither the input nor the output buffers.
|
||||
Ensure also, when reading an offset value, that the resulting position to copy
|
||||
does not reach beyond the beginning of the buffer.
|
||||
Such a situation can happen during the first 64 KB of decoded data.
|
||||
|
||||
For more safety, test the decoder with fuzzers
|
||||
to ensure it's resilient to improbable sequences of conditions.
|
||||
Combine them with sanitizers, in order to catch overflows (asan)
|
||||
or initialization issues (msan).
|
||||
|
||||
Pay some attention to offset 0 scenario, which is invalid,
|
||||
and therefore must not be blindly decoded:
|
||||
a naive implementation could preserve destination buffer content,
|
||||
which could then result in information disclosure
|
||||
if such buffer was uninitialized and still containing private data.
|
||||
For reference, in such a scenario, the reference LZ4 decoder
|
||||
clears the match segment with `0` bytes,
|
||||
though other solutions are certainly possible.
|
||||
|
||||
Finally, pay attention to the "overlap match" scenario,
|
||||
when `matchlength` is larger than `offset`.
|
||||
In which case, since `match_pos + matchlength > current_pos`,
|
||||
some of the later bytes to copy do not exist yet,
|
||||
and will be generated during the early stage of match copy operation.
|
||||
Such scenario must be handled with special care.
|
||||
A common case is an offset of 1,
|
||||
meaning the last byte is repeated `matchlength` times.
|
||||
|
||||
#### Compression techniques
|
||||
|
||||
The core of a LZ4 compressor is to detect duplicated data across past 64 KB.
|
||||
The format makes no assumption nor limits to the way a compressor
|
||||
searches and selects matches within the source data block.
|
||||
For example, an upper compression limit can be reached,
|
||||
using a technique called "full optimal parsing", at high cpu and memory cost.
|
||||
But multiple other techniques can be considered,
|
||||
featuring distinct time / performance trade-offs.
|
||||
As long as the specified format is respected,
|
||||
the result will be compatible with and decodable by any compliant decoder.
|
||||
438
expkg/vendor/lz4/doc/lz4_Frame_format.md
vendored
Normal file
438
expkg/vendor/lz4/doc/lz4_Frame_format.md
vendored
Normal file
@ -0,0 +1,438 @@
|
||||
LZ4 Frame Format Description
|
||||
============================
|
||||
|
||||
### Notices
|
||||
|
||||
Copyright (c) 2013-2020 Yann Collet
|
||||
|
||||
Permission is granted to copy and distribute this document
|
||||
for any purpose and without charge,
|
||||
including translations into other languages
|
||||
and incorporation into compilations,
|
||||
provided that the copyright notice and this notice are preserved,
|
||||
and that any substantive changes or deletions from the original
|
||||
are clearly marked.
|
||||
Distribution of this document is unlimited.
|
||||
|
||||
### Version
|
||||
|
||||
1.6.4 (28/12/2023)
|
||||
|
||||
|
||||
Introduction
|
||||
------------
|
||||
|
||||
The purpose of this document is to define a lossless compressed data format,
|
||||
that is independent of CPU type, operating system,
|
||||
file system and character set, suitable for
|
||||
File compression, Pipe and streaming compression
|
||||
using the [LZ4 algorithm](http://www.lz4.org).
|
||||
|
||||
The data can be produced or consumed,
|
||||
even for an arbitrarily long sequentially presented input data stream,
|
||||
using only an a priori bounded amount of intermediate storage,
|
||||
and hence can be used in data communications.
|
||||
The format uses the LZ4 compression method,
|
||||
and optional [xxHash-32 checksum method](https://github.com/Cyan4973/xxHash),
|
||||
for detection of data corruption.
|
||||
|
||||
The data format defined by this specification
|
||||
does not attempt to allow random access to compressed data.
|
||||
|
||||
This specification is intended for use by implementers of software
|
||||
to compress data into LZ4 format and/or decompress data from LZ4 format.
|
||||
The text of the specification assumes a basic background in programming
|
||||
at the level of bits and other primitive data representations.
|
||||
|
||||
Unless otherwise indicated below,
|
||||
a compliant compressor must produce data sets
|
||||
that conform to the specifications presented here.
|
||||
It doesn't need to support all options though.
|
||||
|
||||
A compliant decompressor must be able to decompress
|
||||
at least one working set of parameters
|
||||
that conforms to the specifications presented here.
|
||||
It may also ignore checksums.
|
||||
Whenever it does not support a specific parameter within the compressed stream,
|
||||
it must produce a non-ambiguous error code
|
||||
and associated error message explaining which parameter is unsupported.
|
||||
|
||||
|
||||
General Structure of LZ4 Frame format
|
||||
-------------------------------------
|
||||
|
||||
| MagicNb | F. Descriptor | Data Block | (...) | EndMark | C. Checksum |
|
||||
|:-------:|:-------------:| ---------- | ----- | ------- | ----------- |
|
||||
| 4 bytes | 3-15 bytes | | | 4 bytes | 0-4 bytes |
|
||||
|
||||
__Magic Number__
|
||||
|
||||
4 Bytes, Little endian format.
|
||||
Value : 0x184D2204
|
||||
|
||||
__Frame Descriptor__
|
||||
|
||||
3 to 15 Bytes, to be detailed in its own paragraph,
|
||||
as it is the most important part of the spec.
|
||||
|
||||
The combined _Magic_Number_ and _Frame_Descriptor_ fields are sometimes
|
||||
called ___LZ4 Frame Header___. Its size varies between 7 and 19 bytes.
|
||||
|
||||
__Data Blocks__
|
||||
|
||||
To be detailed in its own paragraph.
|
||||
That’s where compressed data is stored.
|
||||
|
||||
__EndMark__
|
||||
|
||||
The flow of blocks ends when the last data block is followed by
|
||||
the 32-bit value `0x00000000`.
|
||||
|
||||
__Content Checksum__
|
||||
|
||||
_Content_Checksum_ verify that the full content has been decoded correctly.
|
||||
The content checksum is the result of [xxHash-32 algorithm]
|
||||
digesting the original (decoded) data as input, and a seed of zero.
|
||||
Content checksum is only present when its associated flag
|
||||
is set in the frame descriptor.
|
||||
Content Checksum validates the result,
|
||||
that all blocks were fully transmitted in the correct order and without error,
|
||||
and also that the encoding/decoding process itself generated no distortion.
|
||||
Its usage is recommended.
|
||||
|
||||
The combined _EndMark_ and _Content_Checksum_ fields might sometimes be
|
||||
referred to as ___LZ4 Frame Footer___. Its size varies between 4 and 8 bytes.
|
||||
|
||||
__Frame Concatenation__
|
||||
|
||||
In some circumstances, it may be preferable to append multiple frames,
|
||||
for example in order to add new data to an existing compressed file
|
||||
without re-framing it.
|
||||
|
||||
In such case, each frame has its own set of descriptor flags.
|
||||
Each frame is considered independent.
|
||||
The only relation between frames is their sequential order.
|
||||
|
||||
The ability to decode multiple concatenated frames
|
||||
within a single stream or file
|
||||
is left outside of this specification.
|
||||
As an example, the reference lz4 command line utility behavior is
|
||||
to decode all concatenated frames in their sequential order.
|
||||
|
||||
|
||||
Frame Descriptor
|
||||
----------------
|
||||
|
||||
| FLG | BD | (Content Size) | (Dictionary ID) | HC |
|
||||
| ------- | ------- |:--------------:|:---------------:| ------- |
|
||||
| 1 byte | 1 byte | 0 - 8 bytes | 0 - 4 bytes | 1 byte |
|
||||
|
||||
The descriptor uses a minimum of 3 bytes,
|
||||
and up to 15 bytes depending on optional parameters.
|
||||
|
||||
__FLG byte__
|
||||
|
||||
| BitNb | 7-6 | 5 | 4 | 3 | 2 | 1 | 0 |
|
||||
| ------- |-------|-------|----------|------|----------|----------|------|
|
||||
|FieldName|Version|B.Indep|B.Checksum|C.Size|C.Checksum|*Reserved*|DictID|
|
||||
|
||||
|
||||
__BD byte__
|
||||
|
||||
| BitNb | 7 | 6-5-4 | 3-2-1-0 |
|
||||
| ------- | -------- | ------------- | -------- |
|
||||
|FieldName|*Reserved*| Block MaxSize |*Reserved*|
|
||||
|
||||
In the tables, bit 7 is highest bit, while bit 0 is lowest.
|
||||
|
||||
__Version Number__
|
||||
|
||||
2-bits field, must be set to `01`.
|
||||
Any other value cannot be decoded by this version of the specification.
|
||||
Other version numbers will use different flag layouts.
|
||||
|
||||
__Block Independence flag__
|
||||
|
||||
If this flag is set to “1”, blocks are independent.
|
||||
If this flag is set to “0”, each block depends on previous ones
|
||||
(up to LZ4 window size, which is 64 KB).
|
||||
In such case, it’s necessary to decode all blocks in sequence.
|
||||
|
||||
Block dependency improves compression ratio, especially for small blocks.
|
||||
On the other hand, it makes random access or multi-threaded decoding impossible.
|
||||
|
||||
__Block checksum flag__
|
||||
|
||||
If this flag is set, each data block will be followed by a 4-bytes checksum,
|
||||
calculated by using the xxHash-32 algorithm on the raw (compressed) data block.
|
||||
The intention is to detect data corruption (storage or transmission errors)
|
||||
immediately, before decoding.
|
||||
Block checksum usage is optional.
|
||||
|
||||
__Content Size flag__
|
||||
|
||||
If this flag is set, the uncompressed size of data included within the frame
|
||||
will be present as an 8 bytes unsigned little endian value, after the flags.
|
||||
Content Size usage is optional.
|
||||
|
||||
__Content checksum flag__
|
||||
|
||||
If this flag is set, a 32-bits content checksum will be appended
|
||||
after the EndMark.
|
||||
|
||||
__Dictionary ID flag__
|
||||
|
||||
If this flag is set, a 4-bytes Dict-ID field will be present,
|
||||
after the descriptor flags and the Content Size.
|
||||
|
||||
__Block Maximum Size__
|
||||
|
||||
This information is useful to help the decoder allocate memory.
|
||||
Size here refers to the original (uncompressed) data size.
|
||||
Block Maximum Size is one value among the following table :
|
||||
|
||||
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
|
||||
| --- | --- | --- | --- | ----- | ------ | ---- | ---- |
|
||||
| N/A | N/A | N/A | N/A | 64 KB | 256 KB | 1 MB | 4 MB |
|
||||
|
||||
The decoder may refuse to allocate block sizes above any system-specific size.
|
||||
Unused values may be used in a future revision of the spec.
|
||||
A decoder conformant with the current version of the spec
|
||||
is only able to decode block sizes defined in this spec.
|
||||
|
||||
__Reserved bits__
|
||||
|
||||
Value of reserved bits **must** be 0 (zero).
|
||||
Reserved bit might be used in a future version of the specification,
|
||||
typically enabling new optional features.
|
||||
When this happens, a decoder respecting the current specification version
|
||||
shall not be able to decode such a frame.
|
||||
|
||||
__Content Size__
|
||||
|
||||
This is the original (uncompressed) size.
|
||||
This information is optional, and only present if the associated flag is set.
|
||||
Content size is provided using unsigned 8 Bytes, for a maximum of 16 Exabytes.
|
||||
Format is Little endian.
|
||||
This value is informational, typically for display or memory allocation.
|
||||
It can be skipped by a decoder, or used to validate content correctness.
|
||||
|
||||
__Dictionary ID__
|
||||
|
||||
A dictionary is useful to compress short input sequences.
|
||||
When present, the compressor can take advantage of dictionary's content
|
||||
as a kind of “known prefix” to encode the input in a more compact manner.
|
||||
|
||||
When the frame descriptor defines independent blocks,
|
||||
every block is initialized with the same dictionary.
|
||||
If the frame descriptor defines linked blocks,
|
||||
the dictionary is only used once, at the beginning of the frame.
|
||||
|
||||
The compressor and the decompressor must employ exactly the same dictionary for the data to be decodable.
|
||||
|
||||
The Dict-ID field is offered as a way to help the decoder determine
|
||||
which dictionary must be used to correctly decode the compressed frame.
|
||||
Dict-ID is only present if the associated flag is set.
|
||||
It's an unsigned 32-bits value, stored using little-endian convention.
|
||||
Within a single frame, only a single Dict-ID field can be defined.
|
||||
|
||||
Note that the Dict-ID field is optional.
|
||||
Knowledge of which dictionary to employ can also be passed off-band,
|
||||
for example, it could be implied by the context of the application.
|
||||
|
||||
__Header Checksum__
|
||||
|
||||
One-byte checksum of combined descriptor fields, including optional ones.
|
||||
The value is the second byte of `xxh32()` : ` (xxh32()>>8) & 0xFF `
|
||||
using zero as a seed, and the full Frame Descriptor as an input
|
||||
(including optional fields when they are present).
|
||||
A wrong checksum indicates that the descriptor is erroneous.
|
||||
|
||||
|
||||
Data Blocks
|
||||
-----------
|
||||
|
||||
| Block Size | data | (Block Checksum) |
|
||||
|:----------:| ------ |:----------------:|
|
||||
| 4 bytes | | 0 - 4 bytes |
|
||||
|
||||
|
||||
__Block Size__
|
||||
|
||||
This field uses 4-bytes, format is little-endian.
|
||||
|
||||
If the highest bit is set (`1`), the block is uncompressed.
|
||||
|
||||
If the highest bit is not set (`0`), the block is LZ4-compressed,
|
||||
using the [LZ4 block format specification](https://github.com/lz4/lz4/blob/dev/doc/lz4_Block_format.md).
|
||||
|
||||
All other bits give the size, in bytes, of the data section.
|
||||
The size does not include the block checksum if present.
|
||||
|
||||
_Block_Size_ shall never be larger than _Block_Maximum_Size_.
|
||||
Such an outcome could potentially happen for non-compressible sources.
|
||||
In such a case, such data block **must** be passed using uncompressed format.
|
||||
|
||||
A value of `0x00000000` is invalid, and signifies an _EndMark_ instead.
|
||||
Note that this is different from a value of `0x80000000` (highest bit set),
|
||||
which is an uncompressed block of size 0 (empty),
|
||||
which is valid, and therefore doesn't end a frame.
|
||||
Note that, if _Block_checksum_ is enabled,
|
||||
even an empty block must be followed by a 32-bit block checksum.
|
||||
|
||||
__Data__
|
||||
|
||||
Where the actual data to decode stands.
|
||||
It might be compressed or not, depending on previous field indications.
|
||||
|
||||
When compressed, the data must respect the [LZ4 block format specification](https://github.com/lz4/lz4/blob/dev/doc/lz4_Block_format.md).
|
||||
|
||||
Note that a block is not necessarily full.
|
||||
Uncompressed size of data can be any size __up to__ _Block_Maximum_Size_,
|
||||
so it may contain less data than the maximum block size.
|
||||
|
||||
__Block checksum__
|
||||
|
||||
Only present if the associated flag is set.
|
||||
This is a 4-bytes checksum value, in little endian format,
|
||||
calculated by using the [xxHash-32 algorithm] on the __raw__ (undecoded) data block,
|
||||
and a seed of zero.
|
||||
The intention is to detect data corruption (storage or transmission errors)
|
||||
before decoding.
|
||||
|
||||
_Block_checksum_ can be cumulative with _Content_checksum_.
|
||||
|
||||
[xxHash-32 algorithm]: https://github.com/Cyan4973/xxHash/blob/release/doc/xxhash_spec.md
|
||||
|
||||
|
||||
Skippable Frames
|
||||
----------------
|
||||
|
||||
| Magic Number | Frame Size | User Data |
|
||||
|:------------:|:----------:| --------- |
|
||||
| 4 bytes | 4 bytes | |
|
||||
|
||||
Skippable frames allow the integration of user-defined data
|
||||
into a flow of concatenated frames.
|
||||
Its design is pretty straightforward,
|
||||
with the sole objective to allow the decoder to quickly skip
|
||||
over user-defined data and continue decoding.
|
||||
|
||||
For the purpose of facilitating identification,
|
||||
it is discouraged to start a flow of concatenated frames with a skippable frame.
|
||||
If there is a need to start such a flow with some user data
|
||||
encapsulated into a skippable frame,
|
||||
it’s recommended to start with a zero-byte LZ4 frame
|
||||
followed by a skippable frame.
|
||||
This will make it easier for file type identifiers.
|
||||
|
||||
|
||||
__Magic Number__
|
||||
|
||||
4 Bytes, Little endian format.
|
||||
Value : 0x184D2A5X, which means any value from 0x184D2A50 to 0x184D2A5F.
|
||||
All 16 values are valid to identify a skippable frame.
|
||||
|
||||
__Frame Size__
|
||||
|
||||
This is the size, in bytes, of the following User Data
|
||||
(without including the magic number nor the size field itself).
|
||||
4 Bytes, Little endian format, unsigned 32-bits.
|
||||
This means User Data can’t be bigger than (2^32-1) Bytes.
|
||||
|
||||
__User Data__
|
||||
|
||||
User Data can be anything. Data will just be skipped by the decoder.
|
||||
|
||||
|
||||
Legacy frame
|
||||
------------
|
||||
|
||||
The Legacy frame format was defined into the initial versions of “LZ4Demo”.
|
||||
Newer compressors should not use this format anymore, as it is too restrictive.
|
||||
|
||||
Main characteristics of the legacy format :
|
||||
|
||||
- Fixed block size : 8 MB.
|
||||
- All blocks must be completely filled, except the last one.
|
||||
- All blocks are always compressed, even when compression is detrimental.
|
||||
- The last block is detected either because
|
||||
it is followed by the “EOF” (End of File) mark,
|
||||
or because it is followed by a known Frame Magic Number.
|
||||
- No checksum
|
||||
- Convention is Little endian
|
||||
|
||||
| MagicNb | B.CSize | CData | B.CSize | CData | (...) | EndMark |
|
||||
| ------- | ------- | ----- | ------- | ----- | ------- | ------- |
|
||||
| 4 bytes | 4 bytes | CSize | 4 bytes | CSize | x times | EOF |
|
||||
|
||||
|
||||
__Magic Number__
|
||||
|
||||
4 Bytes, Little endian format.
|
||||
Value : 0x184C2102
|
||||
|
||||
__Block Compressed Size__
|
||||
|
||||
This is the size, in bytes, of the following compressed data block.
|
||||
4 Bytes, Little endian format.
|
||||
|
||||
__Data__
|
||||
|
||||
Where the actual compressed data stands.
|
||||
Data is always compressed, even when compression is detrimental.
|
||||
|
||||
__EndMark__
|
||||
|
||||
End of legacy frame is implicit only.
|
||||
It must be followed by a standard EOF (End Of File) signal,
|
||||
whether it is a file or a stream.
|
||||
|
||||
Alternatively, if the frame is followed by a valid Frame Magic Number,
|
||||
it is considered completed.
|
||||
This policy makes it possible to concatenate legacy frames.
|
||||
|
||||
Any other value will be interpreted as a block size,
|
||||
and trigger an error if it does not fit within acceptable range.
|
||||
|
||||
|
||||
Version changes
|
||||
---------------
|
||||
|
||||
1.6.4 : minor clarifications for Dictionaries
|
||||
|
||||
1.6.3 : minor : clarify Data Block
|
||||
|
||||
1.6.2 : clarifies specification of _EndMark_
|
||||
|
||||
1.6.1 : introduced terms "LZ4 Frame Header" and "LZ4 Frame Footer"
|
||||
|
||||
1.6.0 : restored Dictionary ID field in Frame header
|
||||
|
||||
1.5.1 : changed document format to MarkDown
|
||||
|
||||
1.5 : removed Dictionary ID from specification
|
||||
|
||||
1.4.1 : changed wording from “stream” to “frame”
|
||||
|
||||
1.4 : added skippable streams, re-added stream checksum
|
||||
|
||||
1.3 : modified header checksum
|
||||
|
||||
1.2 : reduced choice of “block size”, to postpone decision on “dynamic size of BlockSize Field”.
|
||||
|
||||
1.1 : optional fields are now part of the descriptor
|
||||
|
||||
1.0 : changed “block size” specification, adding a compressed/uncompressed flag
|
||||
|
||||
0.9 : reduced scale of “block maximum size” table
|
||||
|
||||
0.8 : removed : high compression flag
|
||||
|
||||
0.7 : removed : stream checksum
|
||||
|
||||
0.6 : settled : stream size uses 8 bytes, endian convention is little endian
|
||||
|
||||
0.5 : added copyright notice
|
||||
|
||||
0.4 : changed format to Google Doc compatible OpenDocument
|
||||
685
expkg/vendor/lz4/doc/lz4_manual.html
vendored
Normal file
685
expkg/vendor/lz4/doc/lz4_manual.html
vendored
Normal file
@ -0,0 +1,685 @@
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
|
||||
<title>1.10.0 Manual</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>1.10.0 Manual</h1>
|
||||
<hr>
|
||||
<a name="Contents"></a><h2>Contents</h2>
|
||||
<ol>
|
||||
<li><a href="#Chapter1">Introduction</a></li>
|
||||
<li><a href="#Chapter2">Version</a></li>
|
||||
<li><a href="#Chapter3">Tuning memory usage</a></li>
|
||||
<li><a href="#Chapter4">Simple Functions</a></li>
|
||||
<li><a href="#Chapter5">Advanced Functions</a></li>
|
||||
<li><a href="#Chapter6">Streaming Compression Functions</a></li>
|
||||
<li><a href="#Chapter7">Streaming Decompression Functions</a></li>
|
||||
<li><a href="#Chapter8">Experimental section</a></li>
|
||||
<li><a href="#Chapter9">Private Definitions</a></li>
|
||||
<li><a href="#Chapter10">Obsolete Functions</a></li>
|
||||
</ol>
|
||||
<hr>
|
||||
<a name="Chapter1"></a><h2>Introduction</h2><pre>
|
||||
LZ4 is lossless compression algorithm, providing compression speed >500 MB/s per core,
|
||||
scalable with multi-cores CPU. It features an extremely fast decoder, with speed in
|
||||
multiple GB/s per core, typically reaching RAM speed limits on multi-core systems.
|
||||
|
||||
The LZ4 compression library provides in-memory compression and decompression functions.
|
||||
It gives full buffer control to user.
|
||||
Compression can be done in:
|
||||
- a single step (described as Simple Functions)
|
||||
- a single step, reusing a context (described in Advanced Functions)
|
||||
- unbounded multiple steps (described as Streaming compression)
|
||||
|
||||
lz4.h generates and decodes LZ4-compressed blocks (doc/lz4_Block_format.md).
|
||||
Decompressing such a compressed block requires additional metadata.
|
||||
Exact metadata depends on exact decompression function.
|
||||
For the typical case of LZ4_decompress_safe(),
|
||||
metadata includes block's compressed size, and maximum bound of decompressed size.
|
||||
Each application is free to encode and pass such metadata in whichever way it wants.
|
||||
|
||||
lz4.h only handle blocks, it can not generate Frames.
|
||||
|
||||
Blocks are different from Frames (doc/lz4_Frame_format.md).
|
||||
Frames bundle both blocks and metadata in a specified manner.
|
||||
Embedding metadata is required for compressed data to be self-contained and portable.
|
||||
Frame format is delivered through a companion API, declared in lz4frame.h.
|
||||
The `lz4` CLI can only manage frames.
|
||||
<BR></pre>
|
||||
|
||||
<pre><b>#if defined(LZ4_FREESTANDING) && (LZ4_FREESTANDING == 1)
|
||||
# define LZ4_HEAPMODE 0
|
||||
# define LZ4HC_HEAPMODE 0
|
||||
# define LZ4_STATIC_LINKING_ONLY_DISABLE_MEMORY_ALLOCATION 1
|
||||
# if !defined(LZ4_memcpy)
|
||||
# error "LZ4_FREESTANDING requires macro 'LZ4_memcpy'."
|
||||
# endif
|
||||
# if !defined(LZ4_memset)
|
||||
# error "LZ4_FREESTANDING requires macro 'LZ4_memset'."
|
||||
# endif
|
||||
# if !defined(LZ4_memmove)
|
||||
# error "LZ4_FREESTANDING requires macro 'LZ4_memmove'."
|
||||
# endif
|
||||
#elif ! defined(LZ4_FREESTANDING)
|
||||
# define LZ4_FREESTANDING 0
|
||||
#endif
|
||||
</b><p> When this macro is set to 1, it enables "freestanding mode" that is
|
||||
suitable for typical freestanding environment which doesn't support
|
||||
standard C library.
|
||||
|
||||
- LZ4_FREESTANDING is a compile-time switch.
|
||||
- It requires the following macros to be defined:
|
||||
LZ4_memcpy, LZ4_memmove, LZ4_memset.
|
||||
- It only enables LZ4/HC functions which don't use heap.
|
||||
All LZ4F_* functions are not supported.
|
||||
- See tests/freestanding.c to check its basic setup.
|
||||
|
||||
</p></pre><BR>
|
||||
|
||||
<a name="Chapter2"></a><h2>Version</h2><pre></pre>
|
||||
|
||||
<pre><b>int LZ4_versionNumber (void); </b>/**< library version number; useful to check dll version; requires v1.3.0+ */<b>
|
||||
</b></pre><BR>
|
||||
<pre><b>const char* LZ4_versionString (void); </b>/**< library version string; useful to check dll version; requires v1.7.5+ */<b>
|
||||
</b></pre><BR>
|
||||
<a name="Chapter3"></a><h2>Tuning memory usage</h2><pre></pre>
|
||||
|
||||
<pre><b>#ifndef LZ4_MEMORY_USAGE
|
||||
# define LZ4_MEMORY_USAGE LZ4_MEMORY_USAGE_DEFAULT
|
||||
#endif
|
||||
</b><p> Can be selected at compile time, by setting LZ4_MEMORY_USAGE.
|
||||
Memory usage formula : N->2^N Bytes (examples : 10 -> 1KB; 12 -> 4KB ; 16 -> 64KB; 20 -> 1MB)
|
||||
Increasing memory usage improves compression ratio, generally at the cost of speed.
|
||||
Reduced memory usage may improve speed at the cost of ratio, thanks to better cache locality.
|
||||
Default value is 14, for 16KB, which nicely fits into most L1 caches.
|
||||
|
||||
</p></pre><BR>
|
||||
|
||||
<a name="Chapter4"></a><h2>Simple Functions</h2><pre></pre>
|
||||
|
||||
<pre><b>int LZ4_compress_default(const char* src, char* dst, int srcSize, int dstCapacity);
|
||||
</b><p> Compresses 'srcSize' bytes from buffer 'src'
|
||||
into already allocated 'dst' buffer of size 'dstCapacity'.
|
||||
Compression is guaranteed to succeed if 'dstCapacity' >= LZ4_compressBound(srcSize).
|
||||
It also runs faster, so it's a recommended setting.
|
||||
If the function cannot compress 'src' into a more limited 'dst' budget,
|
||||
compression stops *immediately*, and the function result is zero.
|
||||
In which case, 'dst' content is undefined (invalid).
|
||||
srcSize : max supported value is LZ4_MAX_INPUT_SIZE.
|
||||
dstCapacity : size of buffer 'dst' (which must be already allocated)
|
||||
@return : the number of bytes written into buffer 'dst' (necessarily <= dstCapacity)
|
||||
or 0 if compression fails
|
||||
Note : This function is protected against buffer overflow scenarios (never writes outside 'dst' buffer, nor read outside 'source' buffer).
|
||||
|
||||
</p></pre><BR>
|
||||
|
||||
<pre><b>int LZ4_decompress_safe (const char* src, char* dst, int compressedSize, int dstCapacity);
|
||||
</b><p> @compressedSize : is the exact complete size of the compressed block.
|
||||
@dstCapacity : is the size of destination buffer (which must be already allocated),
|
||||
presumed an upper bound of decompressed size.
|
||||
@return : the number of bytes decompressed into destination buffer (necessarily <= dstCapacity)
|
||||
If destination buffer is not large enough, decoding will stop and output an error code (negative value).
|
||||
If the source stream is detected malformed, the function will stop decoding and return a negative result.
|
||||
Note 1 : This function is protected against malicious data packets :
|
||||
it will never writes outside 'dst' buffer, nor read outside 'source' buffer,
|
||||
even if the compressed block is maliciously modified to order the decoder to do these actions.
|
||||
In such case, the decoder stops immediately, and considers the compressed block malformed.
|
||||
Note 2 : compressedSize and dstCapacity must be provided to the function, the compressed block does not contain them.
|
||||
The implementation is free to send / store / derive this information in whichever way is most beneficial.
|
||||
If there is a need for a different format which bundles together both compressed data and its metadata, consider looking at lz4frame.h instead.
|
||||
|
||||
</p></pre><BR>
|
||||
|
||||
<a name="Chapter5"></a><h2>Advanced Functions</h2><pre></pre>
|
||||
|
||||
<pre><b>int LZ4_compressBound(int inputSize);
|
||||
</b><p> Provides the maximum size that LZ4 compression may output in a "worst case" scenario (input data not compressible)
|
||||
This function is primarily useful for memory allocation purposes (destination buffer size).
|
||||
Macro LZ4_COMPRESSBOUND() is also provided for compilation-time evaluation (stack memory allocation for example).
|
||||
Note that LZ4_compress_default() compresses faster when dstCapacity is >= LZ4_compressBound(srcSize)
|
||||
inputSize : max supported value is LZ4_MAX_INPUT_SIZE
|
||||
return : maximum output size in a "worst case" scenario
|
||||
or 0, if input size is incorrect (too large or negative)
|
||||
</p></pre><BR>
|
||||
|
||||
<pre><b>int LZ4_compress_fast (const char* src, char* dst, int srcSize, int dstCapacity, int acceleration);
|
||||
</b><p> Same as LZ4_compress_default(), but allows selection of "acceleration" factor.
|
||||
The larger the acceleration value, the faster the algorithm, but also the lesser the compression.
|
||||
It's a trade-off. It can be fine tuned, with each successive value providing roughly +~3% to speed.
|
||||
An acceleration value of "1" is the same as regular LZ4_compress_default()
|
||||
Values <= 0 will be replaced by LZ4_ACCELERATION_DEFAULT (currently == 1, see lz4.c).
|
||||
Values > LZ4_ACCELERATION_MAX will be replaced by LZ4_ACCELERATION_MAX (currently == 65537, see lz4.c).
|
||||
</p></pre><BR>
|
||||
|
||||
<pre><b>int LZ4_sizeofState(void);
|
||||
int LZ4_compress_fast_extState (void* state, const char* src, char* dst, int srcSize, int dstCapacity, int acceleration);
|
||||
</b><p> Same as LZ4_compress_fast(), using an externally allocated memory space for its state.
|
||||
Use LZ4_sizeofState() to know how much memory must be allocated,
|
||||
and allocate it on 8-bytes boundaries (using `malloc()` typically).
|
||||
Then, provide this buffer as `void* state` to compression function.
|
||||
|
||||
</p></pre><BR>
|
||||
|
||||
<pre><b>int LZ4_compress_destSize(const char* src, char* dst, int* srcSizePtr, int targetDstSize);
|
||||
</b><p> Reverse the logic : compresses as much data as possible from 'src' buffer
|
||||
into already allocated buffer 'dst', of size >= 'dstCapacity'.
|
||||
This function either compresses the entire 'src' content into 'dst' if it's large enough,
|
||||
or fill 'dst' buffer completely with as much data as possible from 'src'.
|
||||
note: acceleration parameter is fixed to "default".
|
||||
|
||||
*srcSizePtr : in+out parameter. Initially contains size of input.
|
||||
Will be modified to indicate how many bytes where read from 'src' to fill 'dst'.
|
||||
New value is necessarily <= input value.
|
||||
@return : Nb bytes written into 'dst' (necessarily <= dstCapacity)
|
||||
or 0 if compression fails.
|
||||
|
||||
Note : 'targetDstSize' must be >= 1, because it's the smallest valid lz4 payload.
|
||||
|
||||
Note 2:from v1.8.2 to v1.9.1, this function had a bug (fixed in v1.9.2+):
|
||||
the produced compressed content could, in rare circumstances,
|
||||
require to be decompressed into a destination buffer
|
||||
larger by at least 1 byte than decompressesSize.
|
||||
If an application uses `LZ4_compress_destSize()`,
|
||||
it's highly recommended to update liblz4 to v1.9.2 or better.
|
||||
If this can't be done or ensured,
|
||||
the receiving decompression function should provide
|
||||
a dstCapacity which is > decompressedSize, by at least 1 byte.
|
||||
See https://github.com/lz4/lz4/issues/859 for details
|
||||
|
||||
</p></pre><BR>
|
||||
|
||||
<pre><b>int LZ4_decompress_safe_partial (const char* src, char* dst, int srcSize, int targetOutputSize, int dstCapacity);
|
||||
</b><p> Decompress an LZ4 compressed block, of size 'srcSize' at position 'src',
|
||||
into destination buffer 'dst' of size 'dstCapacity'.
|
||||
Up to 'targetOutputSize' bytes will be decoded.
|
||||
The function stops decoding on reaching this objective.
|
||||
This can be useful to boost performance
|
||||
whenever only the beginning of a block is required.
|
||||
|
||||
@return : the number of bytes decoded in `dst` (necessarily <= targetOutputSize)
|
||||
If source stream is detected malformed, function returns a negative result.
|
||||
|
||||
Note 1 : @return can be < targetOutputSize, if compressed block contains less data.
|
||||
|
||||
Note 2 : targetOutputSize must be <= dstCapacity
|
||||
|
||||
Note 3 : this function effectively stops decoding on reaching targetOutputSize,
|
||||
so dstCapacity is kind of redundant.
|
||||
This is because in older versions of this function,
|
||||
decoding operation would still write complete sequences.
|
||||
Therefore, there was no guarantee that it would stop writing at exactly targetOutputSize,
|
||||
it could write more bytes, though only up to dstCapacity.
|
||||
Some "margin" used to be required for this operation to work properly.
|
||||
Thankfully, this is no longer necessary.
|
||||
The function nonetheless keeps the same signature, in an effort to preserve API compatibility.
|
||||
|
||||
Note 4 : If srcSize is the exact size of the block,
|
||||
then targetOutputSize can be any value,
|
||||
including larger than the block's decompressed size.
|
||||
The function will, at most, generate block's decompressed size.
|
||||
|
||||
Note 5 : If srcSize is _larger_ than block's compressed size,
|
||||
then targetOutputSize **MUST** be <= block's decompressed size.
|
||||
Otherwise, *silent corruption will occur*.
|
||||
|
||||
</p></pre><BR>
|
||||
|
||||
<a name="Chapter6"></a><h2>Streaming Compression Functions</h2><pre></pre>
|
||||
|
||||
<pre><b>#if !defined(RC_INVOKED) </b>/* https://docs.microsoft.com/en-us/windows/win32/menurc/predefined-macros */<b>
|
||||
#if !defined(LZ4_STATIC_LINKING_ONLY_DISABLE_MEMORY_ALLOCATION)
|
||||
LZ4_stream_t* LZ4_createStream(void);
|
||||
int LZ4_freeStream (LZ4_stream_t* streamPtr);
|
||||
#endif </b>/* !defined(LZ4_STATIC_LINKING_ONLY_DISABLE_MEMORY_ALLOCATION) */<b>
|
||||
#endif
|
||||
</b><p>
|
||||
- RC_INVOKED is predefined symbol of rc.exe (the resource compiler which is part of MSVC/Visual Studio).
|
||||
https://docs.microsoft.com/en-us/windows/win32/menurc/predefined-macros
|
||||
|
||||
- Since rc.exe is a legacy compiler, it truncates long symbol (> 30 chars)
|
||||
and reports warning "RC4011: identifier truncated".
|
||||
|
||||
- To eliminate the warning, we surround long preprocessor symbol with
|
||||
"#if !defined(RC_INVOKED) ... #endif" block that means
|
||||
"skip this block when rc.exe is trying to read it".
|
||||
</p></pre><BR>
|
||||
|
||||
<pre><b>void LZ4_resetStream_fast (LZ4_stream_t* streamPtr);
|
||||
</b><p> Use this to prepare an LZ4_stream_t for a new chain of dependent blocks
|
||||
(e.g., LZ4_compress_fast_continue()).
|
||||
|
||||
An LZ4_stream_t must be initialized once before usage.
|
||||
This is automatically done when created by LZ4_createStream().
|
||||
However, should the LZ4_stream_t be simply declared on stack (for example),
|
||||
it's necessary to initialize it first, using LZ4_initStream().
|
||||
|
||||
After init, start any new stream with LZ4_resetStream_fast().
|
||||
A same LZ4_stream_t can be re-used multiple times consecutively
|
||||
and compress multiple streams,
|
||||
provided that it starts each new stream with LZ4_resetStream_fast().
|
||||
|
||||
LZ4_resetStream_fast() is much faster than LZ4_initStream(),
|
||||
but is not compatible with memory regions containing garbage data.
|
||||
|
||||
Note: it's only useful to call LZ4_resetStream_fast()
|
||||
in the context of streaming compression.
|
||||
The *extState* functions perform their own resets.
|
||||
Invoking LZ4_resetStream_fast() before is redundant, and even counterproductive.
|
||||
|
||||
</p></pre><BR>
|
||||
|
||||
<pre><b>int LZ4_loadDict (LZ4_stream_t* streamPtr, const char* dictionary, int dictSize);
|
||||
</b><p> Use this function to reference a static dictionary into LZ4_stream_t.
|
||||
The dictionary must remain available during compression.
|
||||
LZ4_loadDict() triggers a reset, so any previous data will be forgotten.
|
||||
The same dictionary will have to be loaded on decompression side for successful decoding.
|
||||
Dictionary are useful for better compression of small data (KB range).
|
||||
While LZ4 itself accepts any input as dictionary, dictionary efficiency is also a topic.
|
||||
When in doubt, employ the Zstandard's Dictionary Builder.
|
||||
Loading a size of 0 is allowed, and is the same as reset.
|
||||
@return : loaded dictionary size, in bytes (note: only the last 64 KB are loaded)
|
||||
|
||||
</p></pre><BR>
|
||||
|
||||
<pre><b>int LZ4_loadDictSlow(LZ4_stream_t* streamPtr, const char* dictionary, int dictSize);
|
||||
</b><p> Same as LZ4_loadDict(),
|
||||
but uses a bit more cpu to reference the dictionary content more thoroughly.
|
||||
This is expected to slightly improve compression ratio.
|
||||
The extra-cpu cost is likely worth it if the dictionary is re-used across multiple sessions.
|
||||
@return : loaded dictionary size, in bytes (note: only the last 64 KB are loaded)
|
||||
|
||||
</p></pre><BR>
|
||||
|
||||
<pre><b>void
|
||||
LZ4_attach_dictionary(LZ4_stream_t* workingStream,
|
||||
const LZ4_stream_t* dictionaryStream);
|
||||
</b><p>
|
||||
This allows efficient re-use of a static dictionary multiple times.
|
||||
|
||||
Rather than re-loading the dictionary buffer into a working context before
|
||||
each compression, or copying a pre-loaded dictionary's LZ4_stream_t into a
|
||||
working LZ4_stream_t, this function introduces a no-copy setup mechanism,
|
||||
in which the working stream references @dictionaryStream in-place.
|
||||
|
||||
Several assumptions are made about the state of @dictionaryStream.
|
||||
Currently, only states which have been prepared by LZ4_loadDict() or
|
||||
LZ4_loadDictSlow() should be expected to work.
|
||||
|
||||
Alternatively, the provided @dictionaryStream may be NULL,
|
||||
in which case any existing dictionary stream is unset.
|
||||
|
||||
If a dictionary is provided, it replaces any pre-existing stream history.
|
||||
The dictionary contents are the only history that can be referenced and
|
||||
logically immediately precede the data compressed in the first subsequent
|
||||
compression call.
|
||||
|
||||
The dictionary will only remain attached to the working stream through the
|
||||
first compression call, at the end of which it is cleared.
|
||||
@dictionaryStream stream (and source buffer) must remain in-place / accessible / unchanged
|
||||
through the completion of the compression session.
|
||||
|
||||
Note: there is no equivalent LZ4_attach_*() method on the decompression side
|
||||
because there is no initialization cost, hence no need to share the cost across multiple sessions.
|
||||
To decompress LZ4 blocks using dictionary, attached or not,
|
||||
just employ the regular LZ4_setStreamDecode() for streaming,
|
||||
or the stateless LZ4_decompress_safe_usingDict() for one-shot decompression.
|
||||
|
||||
</p></pre><BR>
|
||||
|
||||
<pre><b>int LZ4_compress_fast_continue (LZ4_stream_t* streamPtr, const char* src, char* dst, int srcSize, int dstCapacity, int acceleration);
|
||||
</b><p> Compress 'src' content using data from previously compressed blocks, for better compression ratio.
|
||||
'dst' buffer must be already allocated.
|
||||
If dstCapacity >= LZ4_compressBound(srcSize), compression is guaranteed to succeed, and runs faster.
|
||||
|
||||
@return : size of compressed block
|
||||
or 0 if there is an error (typically, cannot fit into 'dst').
|
||||
|
||||
Note 1 : Each invocation to LZ4_compress_fast_continue() generates a new block.
|
||||
Each block has precise boundaries.
|
||||
Each block must be decompressed separately, calling LZ4_decompress_*() with relevant metadata.
|
||||
It's not possible to append blocks together and expect a single invocation of LZ4_decompress_*() to decompress them together.
|
||||
|
||||
Note 2 : The previous 64KB of source data is __assumed__ to remain present, unmodified, at same address in memory !
|
||||
|
||||
Note 3 : When input is structured as a double-buffer, each buffer can have any size, including < 64 KB.
|
||||
Make sure that buffers are separated, by at least one byte.
|
||||
This construction ensures that each block only depends on previous block.
|
||||
|
||||
Note 4 : If input buffer is a ring-buffer, it can have any size, including < 64 KB.
|
||||
|
||||
Note 5 : After an error, the stream status is undefined (invalid), it can only be reset or freed.
|
||||
|
||||
</p></pre><BR>
|
||||
|
||||
<pre><b>int LZ4_saveDict (LZ4_stream_t* streamPtr, char* safeBuffer, int maxDictSize);
|
||||
</b><p> If last 64KB data cannot be guaranteed to remain available at its current memory location,
|
||||
save it into a safer place (char* safeBuffer).
|
||||
This is schematically equivalent to a memcpy() followed by LZ4_loadDict(),
|
||||
but is much faster, because LZ4_saveDict() doesn't need to rebuild tables.
|
||||
@return : saved dictionary size in bytes (necessarily <= maxDictSize), or 0 if error.
|
||||
|
||||
</p></pre><BR>
|
||||
|
||||
<a name="Chapter7"></a><h2>Streaming Decompression Functions</h2><pre> Bufferless synchronous API
|
||||
<BR></pre>
|
||||
|
||||
<pre><b>#if !defined(RC_INVOKED) </b>/* https://docs.microsoft.com/en-us/windows/win32/menurc/predefined-macros */<b>
|
||||
#if !defined(LZ4_STATIC_LINKING_ONLY_DISABLE_MEMORY_ALLOCATION)
|
||||
LZ4_streamDecode_t* LZ4_createStreamDecode(void);
|
||||
int LZ4_freeStreamDecode (LZ4_streamDecode_t* LZ4_stream);
|
||||
#endif </b>/* !defined(LZ4_STATIC_LINKING_ONLY_DISABLE_MEMORY_ALLOCATION) */<b>
|
||||
#endif
|
||||
</b><p> creation / destruction of streaming decompression tracking context.
|
||||
A tracking context can be re-used multiple times.
|
||||
|
||||
</p></pre><BR>
|
||||
|
||||
<pre><b>int LZ4_setStreamDecode (LZ4_streamDecode_t* LZ4_streamDecode, const char* dictionary, int dictSize);
|
||||
</b><p> An LZ4_streamDecode_t context can be allocated once and re-used multiple times.
|
||||
Use this function to start decompression of a new stream of blocks.
|
||||
A dictionary can optionally be set. Use NULL or size 0 for a reset order.
|
||||
Dictionary is presumed stable : it must remain accessible and unmodified during next decompression.
|
||||
@return : 1 if OK, 0 if error
|
||||
|
||||
</p></pre><BR>
|
||||
|
||||
<pre><b>int LZ4_decoderRingBufferSize(int maxBlockSize);
|
||||
#define LZ4_DECODER_RING_BUFFER_SIZE(maxBlockSize) (65536 + 14 + (maxBlockSize)) </b>/* for static allocation; maxBlockSize presumed valid */<b>
|
||||
</b><p> Note : in a ring buffer scenario (optional),
|
||||
blocks are presumed decompressed next to each other
|
||||
up to the moment there is not enough remaining space for next block (remainingSize < maxBlockSize),
|
||||
at which stage it resumes from beginning of ring buffer.
|
||||
When setting such a ring buffer for streaming decompression,
|
||||
provides the minimum size of this ring buffer
|
||||
to be compatible with any source respecting maxBlockSize condition.
|
||||
@return : minimum ring buffer size,
|
||||
or 0 if there is an error (invalid maxBlockSize).
|
||||
|
||||
</p></pre><BR>
|
||||
|
||||
<pre><b>int
|
||||
LZ4_decompress_safe_continue (LZ4_streamDecode_t* LZ4_streamDecode,
|
||||
const char* src, char* dst,
|
||||
int srcSize, int dstCapacity);
|
||||
</b><p> This decoding function allows decompression of consecutive blocks in "streaming" mode.
|
||||
The difference with the usual independent blocks is that
|
||||
new blocks are allowed to find references into former blocks.
|
||||
A block is an unsplittable entity, and must be presented entirely to the decompression function.
|
||||
LZ4_decompress_safe_continue() only accepts one block at a time.
|
||||
It's modeled after `LZ4_decompress_safe()` and behaves similarly.
|
||||
|
||||
@LZ4_streamDecode : decompression state, tracking the position in memory of past data
|
||||
@compressedSize : exact complete size of one compressed block.
|
||||
@dstCapacity : size of destination buffer (which must be already allocated),
|
||||
must be an upper bound of decompressed size.
|
||||
@return : number of bytes decompressed into destination buffer (necessarily <= dstCapacity)
|
||||
If destination buffer is not large enough, decoding will stop and output an error code (negative value).
|
||||
If the source stream is detected malformed, the function will stop decoding and return a negative result.
|
||||
|
||||
The last 64KB of previously decoded data *must* remain available and unmodified
|
||||
at the memory position where they were previously decoded.
|
||||
If less than 64KB of data has been decoded, all the data must be present.
|
||||
|
||||
Special : if decompression side sets a ring buffer, it must respect one of the following conditions :
|
||||
- Decompression buffer size is _at least_ LZ4_decoderRingBufferSize(maxBlockSize).
|
||||
maxBlockSize is the maximum size of any single block. It can have any value > 16 bytes.
|
||||
In which case, encoding and decoding buffers do not need to be synchronized.
|
||||
Actually, data can be produced by any source compliant with LZ4 format specification, and respecting maxBlockSize.
|
||||
- Synchronized mode :
|
||||
Decompression buffer size is _exactly_ the same as compression buffer size,
|
||||
and follows exactly same update rule (block boundaries at same positions),
|
||||
and decoding function is provided with exact decompressed size of each block (exception for last block of the stream),
|
||||
_then_ decoding & encoding ring buffer can have any size, including small ones ( < 64 KB).
|
||||
- Decompression buffer is larger than encoding buffer, by a minimum of maxBlockSize more bytes.
|
||||
In which case, encoding and decoding buffers do not need to be synchronized,
|
||||
and encoding ring buffer can have any size, including small ones ( < 64 KB).
|
||||
|
||||
Whenever these conditions are not possible,
|
||||
save the last 64KB of decoded data into a safe buffer where it can't be modified during decompression,
|
||||
then indicate where this data is saved using LZ4_setStreamDecode(), before decompressing next block.
|
||||
</p></pre><BR>
|
||||
|
||||
<pre><b>int
|
||||
LZ4_decompress_safe_usingDict(const char* src, char* dst,
|
||||
int srcSize, int dstCapacity,
|
||||
const char* dictStart, int dictSize);
|
||||
</b><p> Works the same as
|
||||
a combination of LZ4_setStreamDecode() followed by LZ4_decompress_safe_continue()
|
||||
However, it's stateless: it doesn't need any LZ4_streamDecode_t state.
|
||||
Dictionary is presumed stable : it must remain accessible and unmodified during decompression.
|
||||
Performance tip : Decompression speed can be substantially increased
|
||||
when dst == dictStart + dictSize.
|
||||
|
||||
</p></pre><BR>
|
||||
|
||||
<pre><b>int
|
||||
LZ4_decompress_safe_partial_usingDict(const char* src, char* dst,
|
||||
int compressedSize,
|
||||
int targetOutputSize, int maxOutputSize,
|
||||
const char* dictStart, int dictSize);
|
||||
</b><p> Behaves the same as LZ4_decompress_safe_partial()
|
||||
with the added ability to specify a memory segment for past data.
|
||||
Performance tip : Decompression speed can be substantially increased
|
||||
when dst == dictStart + dictSize.
|
||||
|
||||
</p></pre><BR>
|
||||
|
||||
<a name="Chapter8"></a><h2>Experimental section</h2><pre>
|
||||
Symbols declared in this section must be considered unstable. Their
|
||||
signatures or semantics may change, or they may be removed altogether in the
|
||||
future. They are therefore only safe to depend on when the caller is
|
||||
statically linked against the library.
|
||||
|
||||
To protect against unsafe usage, not only are the declarations guarded,
|
||||
the definitions are hidden by default
|
||||
when building LZ4 as a shared/dynamic library.
|
||||
|
||||
In order to access these declarations,
|
||||
define LZ4_STATIC_LINKING_ONLY in your application
|
||||
before including LZ4's headers.
|
||||
|
||||
In order to make their implementations accessible dynamically, you must
|
||||
define LZ4_PUBLISH_STATIC_FUNCTIONS when building the LZ4 library.
|
||||
<BR></pre>
|
||||
|
||||
<pre><b>LZ4LIB_STATIC_API int LZ4_compress_fast_extState_fastReset (void* state, const char* src, char* dst, int srcSize, int dstCapacity, int acceleration);
|
||||
</b><p> A variant of LZ4_compress_fast_extState().
|
||||
|
||||
Using this variant avoids an expensive initialization step.
|
||||
It is only safe to call if the state buffer is known to be correctly initialized already
|
||||
(see above comment on LZ4_resetStream_fast() for a definition of "correctly initialized").
|
||||
From a high level, the difference is that
|
||||
this function initializes the provided state with a call to something like LZ4_resetStream_fast()
|
||||
while LZ4_compress_fast_extState() starts with a call to LZ4_resetStream().
|
||||
|
||||
</p></pre><BR>
|
||||
|
||||
<pre><b>int LZ4_compress_destSize_extState(void* state, const char* src, char* dst, int* srcSizePtr, int targetDstSize, int acceleration);
|
||||
</b><p> Same as LZ4_compress_destSize(), but using an externally allocated state.
|
||||
Also: exposes @acceleration
|
||||
|
||||
</p></pre><BR>
|
||||
|
||||
<pre><b></b><p>
|
||||
It's possible to have input and output sharing the same buffer,
|
||||
for highly constrained memory environments.
|
||||
In both cases, it requires input to lay at the end of the buffer,
|
||||
and decompression to start at beginning of the buffer.
|
||||
Buffer size must feature some margin, hence be larger than final size.
|
||||
|
||||
|<------------------------buffer--------------------------------->|
|
||||
|<-----------compressed data--------->|
|
||||
|<-----------decompressed size------------------>|
|
||||
|<----margin---->|
|
||||
|
||||
This technique is more useful for decompression,
|
||||
since decompressed size is typically larger,
|
||||
and margin is short.
|
||||
|
||||
In-place decompression will work inside any buffer
|
||||
which size is >= LZ4_DECOMPRESS_INPLACE_BUFFER_SIZE(decompressedSize).
|
||||
This presumes that decompressedSize > compressedSize.
|
||||
Otherwise, it means compression actually expanded data,
|
||||
and it would be more efficient to store such data with a flag indicating it's not compressed.
|
||||
This can happen when data is not compressible (already compressed, or encrypted).
|
||||
|
||||
For in-place compression, margin is larger, as it must be able to cope with both
|
||||
history preservation, requiring input data to remain unmodified up to LZ4_DISTANCE_MAX,
|
||||
and data expansion, which can happen when input is not compressible.
|
||||
As a consequence, buffer size requirements are much higher,
|
||||
and memory savings offered by in-place compression are more limited.
|
||||
|
||||
There are ways to limit this cost for compression :
|
||||
- Reduce history size, by modifying LZ4_DISTANCE_MAX.
|
||||
Note that it is a compile-time constant, so all compressions will apply this limit.
|
||||
Lower values will reduce compression ratio, except when input_size < LZ4_DISTANCE_MAX,
|
||||
so it's a reasonable trick when inputs are known to be small.
|
||||
- Require the compressor to deliver a "maximum compressed size".
|
||||
This is the `dstCapacity` parameter in `LZ4_compress*()`.
|
||||
When this size is < LZ4_COMPRESSBOUND(inputSize), then compression can fail,
|
||||
in which case, the return code will be 0 (zero).
|
||||
The caller must be ready for these cases to happen,
|
||||
and typically design a backup scheme to send data uncompressed.
|
||||
The combination of both techniques can significantly reduce
|
||||
the amount of margin required for in-place compression.
|
||||
|
||||
In-place compression can work in any buffer
|
||||
which size is >= (maxCompressedSize)
|
||||
with maxCompressedSize == LZ4_COMPRESSBOUND(srcSize) for guaranteed compression success.
|
||||
LZ4_COMPRESS_INPLACE_BUFFER_SIZE() depends on both maxCompressedSize and LZ4_DISTANCE_MAX,
|
||||
so it's possible to reduce memory requirements by playing with them.
|
||||
|
||||
</p></pre><BR>
|
||||
|
||||
<pre><b>#define LZ4_DECOMPRESS_INPLACE_BUFFER_SIZE(decompressedSize) ((decompressedSize) + LZ4_DECOMPRESS_INPLACE_MARGIN(decompressedSize)) </b>/**< note: presumes that compressedSize < decompressedSize. note2: margin is overestimated a bit, since it could use compressedSize instead */<b>
|
||||
</b></pre><BR>
|
||||
<pre><b>#define LZ4_COMPRESS_INPLACE_BUFFER_SIZE(maxCompressedSize) ((maxCompressedSize) + LZ4_COMPRESS_INPLACE_MARGIN) </b>/**< maxCompressedSize is generally LZ4_COMPRESSBOUND(inputSize), but can be set to any lower value, with the risk that compression can fail (return code 0(zero)) */<b>
|
||||
</b></pre><BR>
|
||||
<a name="Chapter9"></a><h2>Private Definitions</h2><pre>
|
||||
Do not use these definitions directly.
|
||||
They are only exposed to allow static allocation of `LZ4_stream_t` and `LZ4_streamDecode_t`.
|
||||
Accessing members will expose user code to API and/or ABI break in future versions of the library.
|
||||
<BR></pre>
|
||||
|
||||
<pre><b></b><p> Never ever use below internal definitions directly !
|
||||
These definitions are not API/ABI safe, and may change in future versions.
|
||||
If you need static allocation, declare or allocate an LZ4_stream_t object.
|
||||
</p></pre><BR>
|
||||
|
||||
<pre><b>LZ4_stream_t* LZ4_initStream (void* stateBuffer, size_t size);
|
||||
</b><p> An LZ4_stream_t structure must be initialized at least once.
|
||||
This is automatically done when invoking LZ4_createStream(),
|
||||
but it's not when the structure is simply declared on stack (for example).
|
||||
|
||||
Use LZ4_initStream() to properly initialize a newly declared LZ4_stream_t.
|
||||
It can also initialize any arbitrary buffer of sufficient size,
|
||||
and will @return a pointer of proper type upon initialization.
|
||||
|
||||
Note : initialization fails if size and alignment conditions are not respected.
|
||||
In which case, the function will @return NULL.
|
||||
Note2: An LZ4_stream_t structure guarantees correct alignment and size.
|
||||
Note3: Before v1.9.0, use LZ4_resetStream() instead
|
||||
</p></pre><BR>
|
||||
|
||||
<pre><b>typedef struct {
|
||||
const LZ4_byte* externalDict;
|
||||
const LZ4_byte* prefixEnd;
|
||||
size_t extDictSize;
|
||||
size_t prefixSize;
|
||||
} LZ4_streamDecode_t_internal;
|
||||
</b><p> Never ever use below internal definitions directly !
|
||||
These definitions are not API/ABI safe, and may change in future versions.
|
||||
If you need static allocation, declare or allocate an LZ4_streamDecode_t object.
|
||||
</p></pre><BR>
|
||||
|
||||
<a name="Chapter10"></a><h2>Obsolete Functions</h2><pre></pre>
|
||||
|
||||
<pre><b>#ifdef LZ4_DISABLE_DEPRECATE_WARNINGS
|
||||
# define LZ4_DEPRECATED(message) </b>/* disable deprecation warnings */<b>
|
||||
#else
|
||||
# if defined (__cplusplus) && (__cplusplus >= 201402) </b>/* C++14 or greater */<b>
|
||||
# define LZ4_DEPRECATED(message) [[deprecated(message)]]
|
||||
# elif defined(_MSC_VER)
|
||||
# define LZ4_DEPRECATED(message) __declspec(deprecated(message))
|
||||
# elif defined(__clang__) || (defined(__GNUC__) && (__GNUC__ * 10 + __GNUC_MINOR__ >= 45))
|
||||
# define LZ4_DEPRECATED(message) __attribute__((deprecated(message)))
|
||||
# elif defined(__GNUC__) && (__GNUC__ * 10 + __GNUC_MINOR__ >= 31)
|
||||
# define LZ4_DEPRECATED(message) __attribute__((deprecated))
|
||||
# else
|
||||
# pragma message("WARNING: LZ4_DEPRECATED needs custom implementation for this compiler")
|
||||
# define LZ4_DEPRECATED(message) </b>/* disabled */<b>
|
||||
# endif
|
||||
#endif </b>/* LZ4_DISABLE_DEPRECATE_WARNINGS */<b>
|
||||
</b><p>
|
||||
Deprecated functions make the compiler generate a warning when invoked.
|
||||
This is meant to invite users to update their source code.
|
||||
Should deprecation warnings be a problem, it is generally possible to disable them,
|
||||
typically with -Wno-deprecated-declarations for gcc
|
||||
or _CRT_SECURE_NO_WARNINGS in Visual.
|
||||
|
||||
Another method is to define LZ4_DISABLE_DEPRECATE_WARNINGS
|
||||
before including the header file.
|
||||
|
||||
</p></pre><BR>
|
||||
|
||||
<pre><b>LZ4_DEPRECATED("use LZ4_compress_default() instead") LZ4LIB_API int LZ4_compress (const char* src, char* dest, int srcSize);
|
||||
LZ4_DEPRECATED("use LZ4_compress_default() instead") LZ4LIB_API int LZ4_compress_limitedOutput (const char* src, char* dest, int srcSize, int maxOutputSize);
|
||||
LZ4_DEPRECATED("use LZ4_compress_fast_extState() instead") LZ4LIB_API int LZ4_compress_withState (void* state, const char* source, char* dest, int inputSize);
|
||||
LZ4_DEPRECATED("use LZ4_compress_fast_extState() instead") LZ4LIB_API int LZ4_compress_limitedOutput_withState (void* state, const char* source, char* dest, int inputSize, int maxOutputSize);
|
||||
LZ4_DEPRECATED("use LZ4_compress_fast_continue() instead") LZ4LIB_API int LZ4_compress_continue (LZ4_stream_t* LZ4_streamPtr, const char* source, char* dest, int inputSize);
|
||||
LZ4_DEPRECATED("use LZ4_compress_fast_continue() instead") LZ4LIB_API int LZ4_compress_limitedOutput_continue (LZ4_stream_t* LZ4_streamPtr, const char* source, char* dest, int inputSize, int maxOutputSize);
|
||||
</b><p></p></pre><BR>
|
||||
|
||||
<pre><b>LZ4_DEPRECATED("use LZ4_decompress_fast() instead") LZ4LIB_API int LZ4_uncompress (const char* source, char* dest, int outputSize);
|
||||
LZ4_DEPRECATED("use LZ4_decompress_safe() instead") LZ4LIB_API int LZ4_uncompress_unknownOutputSize (const char* source, char* dest, int isize, int maxOutputSize);
|
||||
</b><p></p></pre><BR>
|
||||
|
||||
<pre><b>LZ4_DEPRECATED("use LZ4_decompress_safe_usingDict() instead") LZ4LIB_API int LZ4_decompress_safe_withPrefix64k (const char* src, char* dst, int compressedSize, int maxDstSize);
|
||||
LZ4_DEPRECATED("use LZ4_decompress_fast_usingDict() instead") LZ4LIB_API int LZ4_decompress_fast_withPrefix64k (const char* src, char* dst, int originalSize);
|
||||
</b><p></p></pre><BR>
|
||||
|
||||
<pre><b>LZ4_DEPRECATED("This function is deprecated and unsafe. Consider using LZ4_decompress_safe_partial() instead")
|
||||
int LZ4_decompress_fast (const char* src, char* dst, int originalSize);
|
||||
LZ4_DEPRECATED("This function is deprecated and unsafe. Consider migrating towards LZ4_decompress_safe_continue() instead. "
|
||||
"Note that the contract will change (requires block's compressed size, instead of decompressed size)")
|
||||
int LZ4_decompress_fast_continue (LZ4_streamDecode_t* LZ4_streamDecode, const char* src, char* dst, int originalSize);
|
||||
LZ4_DEPRECATED("This function is deprecated and unsafe. Consider using LZ4_decompress_safe_partial_usingDict() instead")
|
||||
int LZ4_decompress_fast_usingDict (const char* src, char* dst, int originalSize, const char* dictStart, int dictSize);
|
||||
</b><p> These functions used to be faster than LZ4_decompress_safe(),
|
||||
but this is no longer the case. They are now slower.
|
||||
This is because LZ4_decompress_fast() doesn't know the input size,
|
||||
and therefore must progress more cautiously into the input buffer to not read beyond the end of block.
|
||||
On top of that `LZ4_decompress_fast()` is not protected vs malformed or malicious inputs, making it a security liability.
|
||||
As a consequence, LZ4_decompress_fast() is strongly discouraged, and deprecated.
|
||||
|
||||
The last remaining LZ4_decompress_fast() specificity is that
|
||||
it can decompress a block without knowing its compressed size.
|
||||
Such functionality can be achieved in a more secure manner
|
||||
by employing LZ4_decompress_safe_partial().
|
||||
|
||||
Parameters:
|
||||
originalSize : is the uncompressed size to regenerate.
|
||||
`dst` must be already allocated, its size must be >= 'originalSize' bytes.
|
||||
@return : number of bytes read from source buffer (== compressed size).
|
||||
The function expects to finish at block's end exactly.
|
||||
If the source stream is detected malformed, the function stops decoding and returns a negative result.
|
||||
note : LZ4_decompress_fast*() requires originalSize. Thanks to this information, it never writes past the output buffer.
|
||||
However, since it doesn't know its 'src' size, it may read an unknown amount of input, past input buffer bounds.
|
||||
Also, since match offsets are not validated, match reads from 'src' may underflow too.
|
||||
These issues never happen if input (compressed) data is correct.
|
||||
But they may happen if input data is invalid (error or intentional tampering).
|
||||
As a consequence, use these functions in trusted environments with trusted data **only**.
|
||||
|
||||
</p></pre><BR>
|
||||
|
||||
<pre><b>void LZ4_resetStream (LZ4_stream_t* streamPtr);
|
||||
</b><p> An LZ4_stream_t structure must be initialized at least once.
|
||||
This is done with LZ4_initStream(), or LZ4_resetStream().
|
||||
Consider switching to LZ4_initStream(),
|
||||
invoking LZ4_resetStream() will trigger deprecation warnings in the future.
|
||||
|
||||
</p></pre><BR>
|
||||
|
||||
</html>
|
||||
</body>
|
||||
514
expkg/vendor/lz4/doc/lz4frame_manual.html
vendored
Normal file
514
expkg/vendor/lz4/doc/lz4frame_manual.html
vendored
Normal file
@ -0,0 +1,514 @@
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
|
||||
<title>1.10.0 Manual</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>1.10.0 Manual</h1>
|
||||
<hr>
|
||||
<a name="Contents"></a><h2>Contents</h2>
|
||||
<ol>
|
||||
<li><a href="#Chapter1">Introduction</a></li>
|
||||
<li><a href="#Chapter2">Compiler specifics</a></li>
|
||||
<li><a href="#Chapter3">Error management</a></li>
|
||||
<li><a href="#Chapter4">Frame compression types</a></li>
|
||||
<li><a href="#Chapter5">Simple compression function</a></li>
|
||||
<li><a href="#Chapter6">Advanced compression functions</a></li>
|
||||
<li><a href="#Chapter7">Resource Management</a></li>
|
||||
<li><a href="#Chapter8">Compression</a></li>
|
||||
<li><a href="#Chapter9">Decompression functions</a></li>
|
||||
<li><a href="#Chapter10">Streaming decompression functions</a></li>
|
||||
<li><a href="#Chapter11">Dictionary compression API</a></li>
|
||||
<li><a href="#Chapter12">Bulk processing dictionary compression</a></li>
|
||||
<li><a href="#Chapter13">Advanced compression operations</a></li>
|
||||
<li><a href="#Chapter14">Custom memory allocation</a></li>
|
||||
</ol>
|
||||
<hr>
|
||||
<a name="Chapter1"></a><h2>Introduction</h2><pre>
|
||||
lz4frame.h implements LZ4 frame specification: see doc/lz4_Frame_format.md .
|
||||
LZ4 Frames are compatible with `lz4` CLI,
|
||||
and designed to be interoperable with any system.
|
||||
<BR></pre>
|
||||
|
||||
<a name="Chapter2"></a><h2>Compiler specifics</h2><pre></pre>
|
||||
|
||||
<a name="Chapter3"></a><h2>Error management</h2><pre></pre>
|
||||
|
||||
<pre><b>unsigned LZ4F_isError(LZ4F_errorCode_t code); </b>/**< tells when a function result is an error code */<b>
|
||||
</b></pre><BR>
|
||||
<pre><b>const char* LZ4F_getErrorName(LZ4F_errorCode_t code); </b>/**< return error code string; for debugging */<b>
|
||||
</b></pre><BR>
|
||||
<a name="Chapter4"></a><h2>Frame compression types</h2><pre>
|
||||
<BR></pre>
|
||||
|
||||
<pre><b>typedef enum {
|
||||
LZ4F_default=0,
|
||||
LZ4F_max64KB=4,
|
||||
LZ4F_max256KB=5,
|
||||
LZ4F_max1MB=6,
|
||||
LZ4F_max4MB=7
|
||||
LZ4F_OBSOLETE_ENUM(max64KB)
|
||||
LZ4F_OBSOLETE_ENUM(max256KB)
|
||||
LZ4F_OBSOLETE_ENUM(max1MB)
|
||||
LZ4F_OBSOLETE_ENUM(max4MB)
|
||||
} LZ4F_blockSizeID_t;
|
||||
</b></pre><BR>
|
||||
<pre><b>typedef enum {
|
||||
LZ4F_blockLinked=0,
|
||||
LZ4F_blockIndependent
|
||||
LZ4F_OBSOLETE_ENUM(blockLinked)
|
||||
LZ4F_OBSOLETE_ENUM(blockIndependent)
|
||||
} LZ4F_blockMode_t;
|
||||
</b></pre><BR>
|
||||
<pre><b>typedef enum {
|
||||
LZ4F_noContentChecksum=0,
|
||||
LZ4F_contentChecksumEnabled
|
||||
LZ4F_OBSOLETE_ENUM(noContentChecksum)
|
||||
LZ4F_OBSOLETE_ENUM(contentChecksumEnabled)
|
||||
} LZ4F_contentChecksum_t;
|
||||
</b></pre><BR>
|
||||
<pre><b>typedef enum {
|
||||
LZ4F_noBlockChecksum=0,
|
||||
LZ4F_blockChecksumEnabled
|
||||
} LZ4F_blockChecksum_t;
|
||||
</b></pre><BR>
|
||||
<pre><b>typedef enum {
|
||||
LZ4F_frame=0,
|
||||
LZ4F_skippableFrame
|
||||
LZ4F_OBSOLETE_ENUM(skippableFrame)
|
||||
} LZ4F_frameType_t;
|
||||
</b></pre><BR>
|
||||
<pre><b>typedef struct {
|
||||
LZ4F_blockSizeID_t blockSizeID; </b>/* max64KB, max256KB, max1MB, max4MB; 0 == default (LZ4F_max64KB) */<b>
|
||||
LZ4F_blockMode_t blockMode; </b>/* LZ4F_blockLinked, LZ4F_blockIndependent; 0 == default (LZ4F_blockLinked) */<b>
|
||||
LZ4F_contentChecksum_t contentChecksumFlag; </b>/* 1: add a 32-bit checksum of frame's decompressed data; 0 == default (disabled) */<b>
|
||||
LZ4F_frameType_t frameType; </b>/* read-only field : LZ4F_frame or LZ4F_skippableFrame */<b>
|
||||
unsigned long long contentSize; </b>/* Size of uncompressed content ; 0 == unknown */<b>
|
||||
unsigned dictID; </b>/* Dictionary ID, sent by compressor to help decoder select correct dictionary; 0 == no dictID provided */<b>
|
||||
LZ4F_blockChecksum_t blockChecksumFlag; </b>/* 1: each block followed by a checksum of block's compressed data; 0 == default (disabled) */<b>
|
||||
} LZ4F_frameInfo_t;
|
||||
</b><p> makes it possible to set or read frame parameters.
|
||||
Structure must be first init to 0, using memset() or LZ4F_INIT_FRAMEINFO,
|
||||
setting all parameters to default.
|
||||
It's then possible to update selectively some parameters
|
||||
</p></pre><BR>
|
||||
|
||||
<pre><b>typedef struct {
|
||||
LZ4F_frameInfo_t frameInfo;
|
||||
int compressionLevel; </b>/* 0: default (fast mode); values > LZ4HC_CLEVEL_MAX count as LZ4HC_CLEVEL_MAX; values < 0 trigger "fast acceleration" */<b>
|
||||
unsigned autoFlush; </b>/* 1: always flush; reduces usage of internal buffers */<b>
|
||||
unsigned favorDecSpeed; </b>/* 1: parser favors decompression speed vs compression ratio. Only works for high compression modes (>= LZ4HC_CLEVEL_OPT_MIN) */ /* v1.8.2+ */<b>
|
||||
unsigned reserved[3]; </b>/* must be zero for forward compatibility */<b>
|
||||
} LZ4F_preferences_t;
|
||||
</b><p> makes it possible to supply advanced compression instructions to streaming interface.
|
||||
Structure must be first init to 0, using memset() or LZ4F_INIT_PREFERENCES,
|
||||
setting all parameters to default.
|
||||
All reserved fields must be set to zero.
|
||||
</p></pre><BR>
|
||||
|
||||
<a name="Chapter5"></a><h2>Simple compression function</h2><pre></pre>
|
||||
|
||||
<pre><b>size_t LZ4F_compressFrame(void* dstBuffer, size_t dstCapacity,
|
||||
const void* srcBuffer, size_t srcSize,
|
||||
const LZ4F_preferences_t* preferencesPtr);
|
||||
</b><p> Compress srcBuffer content into an LZ4-compressed frame.
|
||||
It's a one shot operation, all input content is consumed, and all output is generated.
|
||||
|
||||
Note : it's a stateless operation (no LZ4F_cctx state needed).
|
||||
In order to reduce load on the allocator, LZ4F_compressFrame(), by default,
|
||||
uses the stack to allocate space for the compression state and some table.
|
||||
If this usage of the stack is too much for your application,
|
||||
consider compiling `lz4frame.c` with compile-time macro LZ4F_HEAPMODE set to 1 instead.
|
||||
All state allocations will use the Heap.
|
||||
It also means each invocation of LZ4F_compressFrame() will trigger several internal alloc/free invocations.
|
||||
|
||||
@dstCapacity MUST be >= LZ4F_compressFrameBound(srcSize, preferencesPtr).
|
||||
@preferencesPtr is optional : one can provide NULL, in which case all preferences are set to default.
|
||||
@return : number of bytes written into dstBuffer.
|
||||
or an error code if it fails (can be tested using LZ4F_isError())
|
||||
|
||||
</p></pre><BR>
|
||||
|
||||
<pre><b>size_t LZ4F_compressFrameBound(size_t srcSize, const LZ4F_preferences_t* preferencesPtr);
|
||||
</b><p> Returns the maximum possible compressed size with LZ4F_compressFrame() given srcSize and preferences.
|
||||
`preferencesPtr` is optional. It can be replaced by NULL, in which case, the function will assume default preferences.
|
||||
Note : this result is only usable with LZ4F_compressFrame().
|
||||
It may also be relevant to LZ4F_compressUpdate() _only if_ no flush() operation is ever performed.
|
||||
|
||||
</p></pre><BR>
|
||||
|
||||
<pre><b>int LZ4F_compressionLevel_max(void); </b>/* v1.8.0+ */<b>
|
||||
</b><p> @return maximum allowed compression level (currently: 12)
|
||||
|
||||
</p></pre><BR>
|
||||
|
||||
<a name="Chapter6"></a><h2>Advanced compression functions</h2><pre></pre>
|
||||
|
||||
<pre><b>typedef struct {
|
||||
unsigned stableSrc; </b>/* 1 == src content will remain present on future calls to LZ4F_compress(); skip copying src content within tmp buffer */<b>
|
||||
unsigned reserved[3];
|
||||
} LZ4F_compressOptions_t;
|
||||
</b></pre><BR>
|
||||
<a name="Chapter7"></a><h2>Resource Management</h2><pre></pre>
|
||||
|
||||
<pre><b>LZ4F_errorCode_t LZ4F_createCompressionContext(LZ4F_cctx** cctxPtr, unsigned version);
|
||||
LZ4F_errorCode_t LZ4F_freeCompressionContext(LZ4F_cctx* cctx);
|
||||
</b><p> The first thing to do is to create a compressionContext object,
|
||||
which will keep track of operation state during streaming compression.
|
||||
This is achieved using LZ4F_createCompressionContext(), which takes as argument a version,
|
||||
and a pointer to LZ4F_cctx*, to write the resulting pointer into.
|
||||
@version provided MUST be LZ4F_VERSION. It is intended to track potential version mismatch, notably when using DLL.
|
||||
The function provides a pointer to a fully allocated LZ4F_cctx object.
|
||||
@cctxPtr MUST be != NULL.
|
||||
If @return != zero, context creation failed.
|
||||
A created compression context can be employed multiple times for consecutive streaming operations.
|
||||
Once all streaming compression jobs are completed,
|
||||
the state object can be released using LZ4F_freeCompressionContext().
|
||||
Note1 : LZ4F_freeCompressionContext() is always successful. Its return value can be ignored.
|
||||
Note2 : LZ4F_freeCompressionContext() works fine with NULL input pointers (do nothing).
|
||||
</p></pre><BR>
|
||||
|
||||
<a name="Chapter8"></a><h2>Compression</h2><pre></pre>
|
||||
|
||||
<pre><b>size_t LZ4F_compressBegin(LZ4F_cctx* cctx,
|
||||
void* dstBuffer, size_t dstCapacity,
|
||||
const LZ4F_preferences_t* prefsPtr);
|
||||
</b><p> will write the frame header into dstBuffer.
|
||||
dstCapacity must be >= LZ4F_HEADER_SIZE_MAX bytes.
|
||||
`prefsPtr` is optional : NULL can be provided to set all preferences to default.
|
||||
@return : number of bytes written into dstBuffer for the header
|
||||
or an error code (which can be tested using LZ4F_isError())
|
||||
|
||||
</p></pre><BR>
|
||||
|
||||
<pre><b>size_t LZ4F_compressBound(size_t srcSize, const LZ4F_preferences_t* prefsPtr);
|
||||
</b><p> Provides minimum dstCapacity required to guarantee success of
|
||||
LZ4F_compressUpdate(), given a srcSize and preferences, for a worst case scenario.
|
||||
When srcSize==0, LZ4F_compressBound() provides an upper bound for LZ4F_flush() and LZ4F_compressEnd() instead.
|
||||
Note that the result is only valid for a single invocation of LZ4F_compressUpdate().
|
||||
When invoking LZ4F_compressUpdate() multiple times,
|
||||
if the output buffer is gradually filled up instead of emptied and re-used from its start,
|
||||
one must check if there is enough remaining capacity before each invocation, using LZ4F_compressBound().
|
||||
@return is always the same for a srcSize and prefsPtr.
|
||||
prefsPtr is optional : when NULL is provided, preferences will be set to cover worst case scenario.
|
||||
tech details :
|
||||
@return if automatic flushing is not enabled, includes the possibility that internal buffer might already be filled by up to (blockSize-1) bytes.
|
||||
It also includes frame footer (ending + checksum), since it might be generated by LZ4F_compressEnd().
|
||||
@return doesn't include frame header, as it was already generated by LZ4F_compressBegin().
|
||||
|
||||
</p></pre><BR>
|
||||
|
||||
<pre><b>size_t LZ4F_compressUpdate(LZ4F_cctx* cctx,
|
||||
void* dstBuffer, size_t dstCapacity,
|
||||
const void* srcBuffer, size_t srcSize,
|
||||
const LZ4F_compressOptions_t* cOptPtr);
|
||||
</b><p> LZ4F_compressUpdate() can be called repetitively to compress as much data as necessary.
|
||||
Important rule: dstCapacity MUST be large enough to ensure operation success even in worst case situations.
|
||||
This value is provided by LZ4F_compressBound().
|
||||
If this condition is not respected, LZ4F_compress() will fail (result is an errorCode).
|
||||
After an error, the state is left in a UB state, and must be re-initialized or freed.
|
||||
If previously an uncompressed block was written, buffered data is flushed
|
||||
before appending compressed data is continued.
|
||||
`cOptPtr` is optional : NULL can be provided, in which case all options are set to default.
|
||||
@return : number of bytes written into `dstBuffer` (it can be zero, meaning input data was just buffered).
|
||||
or an error code if it fails (which can be tested using LZ4F_isError())
|
||||
|
||||
</p></pre><BR>
|
||||
|
||||
<pre><b>size_t LZ4F_flush(LZ4F_cctx* cctx,
|
||||
void* dstBuffer, size_t dstCapacity,
|
||||
const LZ4F_compressOptions_t* cOptPtr);
|
||||
</b><p> When data must be generated and sent immediately, without waiting for a block to be completely filled,
|
||||
it's possible to call LZ4_flush(). It will immediately compress any data buffered within cctx.
|
||||
`dstCapacity` must be large enough to ensure the operation will be successful.
|
||||
`cOptPtr` is optional : it's possible to provide NULL, all options will be set to default.
|
||||
@return : nb of bytes written into dstBuffer (can be zero, when there is no data stored within cctx)
|
||||
or an error code if it fails (which can be tested using LZ4F_isError())
|
||||
Note : LZ4F_flush() is guaranteed to be successful when dstCapacity >= LZ4F_compressBound(0, prefsPtr).
|
||||
|
||||
</p></pre><BR>
|
||||
|
||||
<pre><b>size_t LZ4F_compressEnd(LZ4F_cctx* cctx,
|
||||
void* dstBuffer, size_t dstCapacity,
|
||||
const LZ4F_compressOptions_t* cOptPtr);
|
||||
</b><p> To properly finish an LZ4 frame, invoke LZ4F_compressEnd().
|
||||
It will flush whatever data remained within `cctx` (like LZ4_flush())
|
||||
and properly finalize the frame, with an endMark and a checksum.
|
||||
`cOptPtr` is optional : NULL can be provided, in which case all options will be set to default.
|
||||
@return : nb of bytes written into dstBuffer, necessarily >= 4 (endMark),
|
||||
or an error code if it fails (which can be tested using LZ4F_isError())
|
||||
Note : LZ4F_compressEnd() is guaranteed to be successful when dstCapacity >= LZ4F_compressBound(0, prefsPtr).
|
||||
A successful call to LZ4F_compressEnd() makes `cctx` available again for another compression task.
|
||||
|
||||
</p></pre><BR>
|
||||
|
||||
<a name="Chapter9"></a><h2>Decompression functions</h2><pre></pre>
|
||||
|
||||
<pre><b>typedef struct {
|
||||
unsigned stableDst; /* pledges that last 64KB decompressed data is present right before @dstBuffer pointer.
|
||||
* This optimization skips internal storage operations.
|
||||
* Once set, this pledge must remain valid up to the end of current frame. */
|
||||
unsigned skipChecksums; /* disable checksum calculation and verification, even when one is present in frame, to save CPU time.
|
||||
* Setting this option to 1 once disables all checksums for the rest of the frame. */
|
||||
unsigned reserved1; </b>/* must be set to zero for forward compatibility */<b>
|
||||
unsigned reserved0; </b>/* idem */<b>
|
||||
} LZ4F_decompressOptions_t;
|
||||
</b></pre><BR>
|
||||
<pre><b>LZ4F_errorCode_t LZ4F_createDecompressionContext(LZ4F_dctx** dctxPtr, unsigned version);
|
||||
LZ4F_errorCode_t LZ4F_freeDecompressionContext(LZ4F_dctx* dctx);
|
||||
</b><p> Create an LZ4F_dctx object, to track all decompression operations.
|
||||
@version provided MUST be LZ4F_VERSION.
|
||||
@dctxPtr MUST be valid.
|
||||
The function fills @dctxPtr with the value of a pointer to an allocated and initialized LZ4F_dctx object.
|
||||
The @return is an errorCode, which can be tested using LZ4F_isError().
|
||||
dctx memory can be released using LZ4F_freeDecompressionContext();
|
||||
Result of LZ4F_freeDecompressionContext() indicates current state of decompressionContext when being released.
|
||||
That is, it should be == 0 if decompression has been completed fully and correctly.
|
||||
|
||||
</p></pre><BR>
|
||||
|
||||
<a name="Chapter10"></a><h2>Streaming decompression functions</h2><pre></pre>
|
||||
|
||||
<pre><b>size_t LZ4F_headerSize(const void* src, size_t srcSize);
|
||||
</b><p> Provide the header size of a frame starting at `src`.
|
||||
`srcSize` must be >= LZ4F_MIN_SIZE_TO_KNOW_HEADER_LENGTH,
|
||||
which is enough to decode the header length.
|
||||
@return : size of frame header
|
||||
or an error code, which can be tested using LZ4F_isError()
|
||||
note : Frame header size is variable, but is guaranteed to be
|
||||
>= LZ4F_HEADER_SIZE_MIN bytes, and <= LZ4F_HEADER_SIZE_MAX bytes.
|
||||
|
||||
</p></pre><BR>
|
||||
|
||||
<pre><b>size_t
|
||||
LZ4F_getFrameInfo(LZ4F_dctx* dctx,
|
||||
LZ4F_frameInfo_t* frameInfoPtr,
|
||||
const void* srcBuffer, size_t* srcSizePtr);
|
||||
</b><p> This function extracts frame parameters (max blockSize, dictID, etc.).
|
||||
Its usage is optional: user can also invoke LZ4F_decompress() directly.
|
||||
|
||||
Extracted information will fill an existing LZ4F_frameInfo_t structure.
|
||||
This can be useful for allocation and dictionary identification purposes.
|
||||
|
||||
LZ4F_getFrameInfo() can work in the following situations :
|
||||
|
||||
1) At the beginning of a new frame, before any invocation of LZ4F_decompress().
|
||||
It will decode header from `srcBuffer`,
|
||||
consuming the header and starting the decoding process.
|
||||
|
||||
Input size must be large enough to contain the full frame header.
|
||||
Frame header size can be known beforehand by LZ4F_headerSize().
|
||||
Frame header size is variable, but is guaranteed to be >= LZ4F_HEADER_SIZE_MIN bytes,
|
||||
and not more than <= LZ4F_HEADER_SIZE_MAX bytes.
|
||||
Hence, blindly providing LZ4F_HEADER_SIZE_MAX bytes or more will always work.
|
||||
It's allowed to provide more input data than the header size,
|
||||
LZ4F_getFrameInfo() will only consume the header.
|
||||
|
||||
If input size is not large enough,
|
||||
aka if it's smaller than header size,
|
||||
function will fail and return an error code.
|
||||
|
||||
2) After decoding has been started,
|
||||
it's possible to invoke LZ4F_getFrameInfo() anytime
|
||||
to extract already decoded frame parameters stored within dctx.
|
||||
|
||||
Note that, if decoding has barely started,
|
||||
and not yet read enough information to decode the header,
|
||||
LZ4F_getFrameInfo() will fail.
|
||||
|
||||
The number of bytes consumed from srcBuffer will be updated in *srcSizePtr (necessarily <= original value).
|
||||
LZ4F_getFrameInfo() only consumes bytes when decoding has not yet started,
|
||||
and when decoding the header has been successful.
|
||||
Decompression must then resume from (srcBuffer + *srcSizePtr).
|
||||
|
||||
@return : a hint about how many srcSize bytes LZ4F_decompress() expects for next call,
|
||||
or an error code which can be tested using LZ4F_isError().
|
||||
note 1 : in case of error, dctx is not modified. Decoding operation can resume from beginning safely.
|
||||
note 2 : frame parameters are *copied into* an already allocated LZ4F_frameInfo_t structure.
|
||||
|
||||
</p></pre><BR>
|
||||
|
||||
<pre><b>size_t
|
||||
LZ4F_decompress(LZ4F_dctx* dctx,
|
||||
void* dstBuffer, size_t* dstSizePtr,
|
||||
const void* srcBuffer, size_t* srcSizePtr,
|
||||
const LZ4F_decompressOptions_t* dOptPtr);
|
||||
</b><p> Call this function repetitively to regenerate data compressed in `srcBuffer`.
|
||||
|
||||
The function requires a valid dctx state.
|
||||
It will read up to *srcSizePtr bytes from srcBuffer,
|
||||
and decompress data into dstBuffer, of capacity *dstSizePtr.
|
||||
|
||||
The nb of bytes consumed from srcBuffer will be written into *srcSizePtr (necessarily <= original value).
|
||||
The nb of bytes decompressed into dstBuffer will be written into *dstSizePtr (necessarily <= original value).
|
||||
|
||||
The function does not necessarily read all input bytes, so always check value in *srcSizePtr.
|
||||
Unconsumed source data must be presented again in subsequent invocations.
|
||||
|
||||
`dstBuffer` can freely change between each consecutive function invocation.
|
||||
`dstBuffer` content will be overwritten.
|
||||
|
||||
Note: if `LZ4F_getFrameInfo()` is called before `LZ4F_decompress()`, srcBuffer must be updated to reflect
|
||||
the number of bytes consumed after reading the frame header. Failure to update srcBuffer before calling
|
||||
`LZ4F_decompress()` will cause decompression failure or, even worse, successful but incorrect decompression.
|
||||
See the `LZ4F_getFrameInfo()` docs for details.
|
||||
|
||||
@return : an hint of how many `srcSize` bytes LZ4F_decompress() expects for next call.
|
||||
Schematically, it's the size of the current (or remaining) compressed block + header of next block.
|
||||
Respecting the hint provides some small speed benefit, because it skips intermediate buffers.
|
||||
This is just a hint though, it's always possible to provide any srcSize.
|
||||
|
||||
When a frame is fully decoded, @return will be 0 (no more data expected).
|
||||
When provided with more bytes than necessary to decode a frame,
|
||||
LZ4F_decompress() will stop reading exactly at end of current frame, and @return 0.
|
||||
|
||||
If decompression failed, @return is an error code, which can be tested using LZ4F_isError().
|
||||
After a decompression error, the `dctx` context is not resumable.
|
||||
Use LZ4F_resetDecompressionContext() to return to clean state.
|
||||
|
||||
After a frame is fully decoded, dctx can be used again to decompress another frame.
|
||||
|
||||
</p></pre><BR>
|
||||
|
||||
<pre><b>void LZ4F_resetDecompressionContext(LZ4F_dctx* dctx); </b>/* always successful */<b>
|
||||
</b><p> In case of an error, the context is left in "undefined" state.
|
||||
In which case, it's necessary to reset it, before re-using it.
|
||||
This method can also be used to abruptly stop any unfinished decompression,
|
||||
and start a new one using same context resources.
|
||||
</p></pre><BR>
|
||||
|
||||
<a name="Chapter11"></a><h2>Dictionary compression API</h2><pre></pre>
|
||||
|
||||
<pre><b>size_t
|
||||
LZ4F_compressBegin_usingDict(LZ4F_cctx* cctx,
|
||||
void* dstBuffer, size_t dstCapacity,
|
||||
const void* dictBuffer, size_t dictSize,
|
||||
const LZ4F_preferences_t* prefsPtr);
|
||||
</b><p> Inits dictionary compression streaming, and writes the frame header into dstBuffer.
|
||||
@dstCapacity must be >= LZ4F_HEADER_SIZE_MAX bytes.
|
||||
@prefsPtr is optional : one may provide NULL as argument,
|
||||
however, it's the only way to provide dictID in the frame header.
|
||||
@dictBuffer must outlive the compression session.
|
||||
@return : number of bytes written into dstBuffer for the header,
|
||||
or an error code (which can be tested using LZ4F_isError())
|
||||
NOTE: The LZ4Frame spec allows each independent block to be compressed with the dictionary,
|
||||
but this entry supports a more limited scenario, where only the first block uses the dictionary.
|
||||
This is still useful for small data, which only need one block anyway.
|
||||
For larger inputs, one may be more interested in LZ4F_compressFrame_usingCDict() below.
|
||||
|
||||
</p></pre><BR>
|
||||
|
||||
<pre><b>size_t
|
||||
LZ4F_decompress_usingDict(LZ4F_dctx* dctxPtr,
|
||||
void* dstBuffer, size_t* dstSizePtr,
|
||||
const void* srcBuffer, size_t* srcSizePtr,
|
||||
const void* dict, size_t dictSize,
|
||||
const LZ4F_decompressOptions_t* decompressOptionsPtr);
|
||||
</b><p> Same as LZ4F_decompress(), using a predefined dictionary.
|
||||
Dictionary is used "in place", without any preprocessing.
|
||||
It must remain accessible throughout the entire frame decoding.
|
||||
</p></pre><BR>
|
||||
|
||||
<a name="Chapter12"></a><h2>Bulk processing dictionary compression</h2><pre></pre>
|
||||
|
||||
<pre><b>LZ4F_CDict* LZ4F_createCDict(const void* dictBuffer, size_t dictSize);
|
||||
void LZ4F_freeCDict(LZ4F_CDict* CDict);
|
||||
</b><p> When compressing multiple messages / blocks using the same dictionary, it's recommended to initialize it just once.
|
||||
LZ4_createCDict() will create a digested dictionary, ready to start future compression operations without startup delay.
|
||||
LZ4_CDict can be created once and shared by multiple threads concurrently, since its usage is read-only.
|
||||
@dictBuffer can be released after LZ4_CDict creation, since its content is copied within CDict.
|
||||
</p></pre><BR>
|
||||
|
||||
<pre><b>size_t
|
||||
LZ4F_compressFrame_usingCDict(LZ4F_cctx* cctx,
|
||||
void* dst, size_t dstCapacity,
|
||||
const void* src, size_t srcSize,
|
||||
const LZ4F_CDict* cdict,
|
||||
const LZ4F_preferences_t* preferencesPtr);
|
||||
</b><p> Compress an entire srcBuffer into a valid LZ4 frame using a digested Dictionary.
|
||||
@cctx must point to a context created by LZ4F_createCompressionContext().
|
||||
If @cdict==NULL, compress without a dictionary.
|
||||
@dstBuffer MUST be >= LZ4F_compressFrameBound(srcSize, preferencesPtr).
|
||||
If this condition is not respected, function will fail (@return an errorCode).
|
||||
The LZ4F_preferences_t structure is optional : one may provide NULL as argument,
|
||||
but it's not recommended, as it's the only way to provide @dictID in the frame header.
|
||||
@return : number of bytes written into dstBuffer.
|
||||
or an error code if it fails (can be tested using LZ4F_isError())
|
||||
Note: for larger inputs generating multiple independent blocks,
|
||||
this entry point uses the dictionary for each block.
|
||||
</p></pre><BR>
|
||||
|
||||
<pre><b>size_t
|
||||
LZ4F_compressBegin_usingCDict(LZ4F_cctx* cctx,
|
||||
void* dstBuffer, size_t dstCapacity,
|
||||
const LZ4F_CDict* cdict,
|
||||
const LZ4F_preferences_t* prefsPtr);
|
||||
</b><p> Inits streaming dictionary compression, and writes the frame header into dstBuffer.
|
||||
@dstCapacity must be >= LZ4F_HEADER_SIZE_MAX bytes.
|
||||
@prefsPtr is optional : one may provide NULL as argument,
|
||||
note however that it's the only way to insert a @dictID in the frame header.
|
||||
@cdict must outlive the compression session.
|
||||
@return : number of bytes written into dstBuffer for the header,
|
||||
or an error code, which can be tested using LZ4F_isError().
|
||||
</p></pre><BR>
|
||||
|
||||
<pre><b>typedef enum { LZ4F_LIST_ERRORS(LZ4F_GENERATE_ENUM)
|
||||
_LZ4F_dummy_error_enum_for_c89_never_used } LZ4F_errorCodes;
|
||||
</b></pre><BR>
|
||||
<a name="Chapter13"></a><h2>Advanced compression operations</h2><pre></pre>
|
||||
|
||||
<pre><b>LZ4FLIB_STATIC_API size_t LZ4F_getBlockSize(LZ4F_blockSizeID_t blockSizeID);
|
||||
</b><p> @return, in scalar format (size_t),
|
||||
the maximum block size associated with @blockSizeID,
|
||||
or an error code (can be tested using LZ4F_isError()) if @blockSizeID is invalid.
|
||||
</p></pre><BR>
|
||||
|
||||
<pre><b>LZ4FLIB_STATIC_API size_t
|
||||
LZ4F_uncompressedUpdate(LZ4F_cctx* cctx,
|
||||
void* dstBuffer, size_t dstCapacity,
|
||||
const void* srcBuffer, size_t srcSize,
|
||||
const LZ4F_compressOptions_t* cOptPtr);
|
||||
</b><p> LZ4F_uncompressedUpdate() can be called repetitively to add data stored as uncompressed blocks.
|
||||
Important rule: dstCapacity MUST be large enough to store the entire source buffer as
|
||||
no compression is done for this operation
|
||||
If this condition is not respected, LZ4F_uncompressedUpdate() will fail (result is an errorCode).
|
||||
After an error, the state is left in a UB state, and must be re-initialized or freed.
|
||||
If previously a compressed block was written, buffered data is flushed first,
|
||||
before appending uncompressed data is continued.
|
||||
This operation is only supported when LZ4F_blockIndependent is used.
|
||||
`cOptPtr` is optional : NULL can be provided, in which case all options are set to default.
|
||||
@return : number of bytes written into `dstBuffer` (it can be zero, meaning input data was just buffered).
|
||||
or an error code if it fails (which can be tested using LZ4F_isError())
|
||||
|
||||
</p></pre><BR>
|
||||
|
||||
<a name="Chapter14"></a><h2>Custom memory allocation</h2><pre></pre>
|
||||
|
||||
<pre><b>typedef void* (*LZ4F_AllocFunction) (void* opaqueState, size_t size);
|
||||
typedef void* (*LZ4F_CallocFunction) (void* opaqueState, size_t size);
|
||||
typedef void (*LZ4F_FreeFunction) (void* opaqueState, void* address);
|
||||
typedef struct {
|
||||
LZ4F_AllocFunction customAlloc;
|
||||
LZ4F_CallocFunction customCalloc; </b>/* optional; when not defined, uses customAlloc + memset */<b>
|
||||
LZ4F_FreeFunction customFree;
|
||||
void* opaqueState;
|
||||
} LZ4F_CustomMem;
|
||||
static
|
||||
#ifdef __GNUC__
|
||||
__attribute__((__unused__))
|
||||
#endif
|
||||
LZ4F_CustomMem const LZ4F_defaultCMem = { NULL, NULL, NULL, NULL }; </b>/**< this constant defers to stdlib's functions */<b>
|
||||
</b><p> These prototypes make it possible to pass custom allocation/free functions.
|
||||
LZ4F_customMem is provided at state creation time, using LZ4F_create*_advanced() listed below.
|
||||
All allocation/free operations will be completed using these custom variants instead of regular <stdlib.h> ones.
|
||||
|
||||
</p></pre><BR>
|
||||
|
||||
<pre><b>LZ4FLIB_STATIC_API size_t LZ4F_cctx_size(const LZ4F_cctx* cctx);
|
||||
LZ4FLIB_STATIC_API size_t LZ4F_dctx_size(const LZ4F_dctx* dctx);
|
||||
</b><p> These functions return the total memory footprint of the provided context.
|
||||
|
||||
</p></pre><BR>
|
||||
|
||||
</html>
|
||||
</body>
|
||||
13
expkg/vendor/lz4/examples/.gitignore
vendored
Normal file
13
expkg/vendor/lz4/examples/.gitignore
vendored
Normal file
@ -0,0 +1,13 @@
|
||||
/Makefile.lz4*
|
||||
/print_version
|
||||
/simple_buffer
|
||||
/frameCompress
|
||||
/fileCompress
|
||||
/blockStreaming_doubleBuffer
|
||||
/blockStreaming_ringBuffer
|
||||
/streamingHC_ringBuffer
|
||||
/blockStreaming_lineByLine
|
||||
/dictionaryRandomAccess
|
||||
/bench_functions
|
||||
/*.exe
|
||||
/*.lz4s*
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user