//===-- WindowsResource.h ---------------------------------------*- C++-*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===---------------------------------------------------------------------===// // // This file declares the .res file class. .res files are intermediate // products of the typical resource-compilation process on Windows. This // process is as follows: // // .rc file(s) ---(rc.exe)---> .res file(s) ---(cvtres.exe)---> COFF file // // .rc files are human-readable scripts that list all resources a program uses. // // They are compiled into .res files, which are a list of the resources in // binary form. // // Finally the data stored in the .res is compiled into a COFF file, where it // is organized in a directory tree structure for optimized access by the // program during runtime. // // Ref: msdn.microsoft.com/en-us/library/windows/desktop/ms648007(v=vs.85).aspx // //===---------------------------------------------------------------------===// #ifndef LLVM_OBJECT_WINDOWSRESOURCE_H #define LLVM_OBJECT_WINDOWSRESOURCE_H #include "llvm/ADT/ArrayRef.h" #include "llvm/BinaryFormat/COFF.h" #include "llvm/Object/Binary.h" #include "llvm/Object/Error.h" #include "llvm/Support/BinaryByteStream.h" #include "llvm/Support/BinaryStreamReader.h" #include "llvm/Support/ConvertUTF.h" #include "llvm/Support/Endian.h" #include "llvm/Support/Error.h" #include <map> namespace llvm { class raw_ostream; class ScopedPrinter; namespace object { class WindowsResource; class ResourceSectionRef; struct coff_resource_dir_table; const size_t WIN_RES_MAGIC_SIZE = …; const size_t WIN_RES_NULL_ENTRY_SIZE = …; const uint32_t WIN_RES_HEADER_ALIGNMENT = …; const uint32_t WIN_RES_DATA_ALIGNMENT = …; const uint16_t WIN_RES_PURE_MOVEABLE = …; struct WinResHeaderPrefix { … }; // Type and Name may each either be an integer ID or a string. This struct is // only used in the case where they are both IDs. struct WinResIDs { … }; struct WinResHeaderSuffix { … }; class EmptyResError : public GenericBinaryError { … }; class ResourceEntryRef { … }; class WindowsResource : public Binary { … }; class WindowsResourceParser { … }; Expected<std::unique_ptr<MemoryBuffer>> writeWindowsResourceCOFF(llvm::COFF::MachineTypes MachineType, const WindowsResourceParser &Parser, uint32_t TimeDateStamp); void printResourceTypeName(uint16_t TypeID, raw_ostream &OS); } // namespace object } // namespace llvm #endif