4241437c83
This is the beginning of a large "move developer docs from the wiki to the tree" operation, which will probably take some time to complete. The general goal is to consolidate all docs that would be used by developers (i.e., anyone working on the Haiku tree) into the tree itself. Docs on getting started contributing, or for translators, designers, etc. will remain on Trac and on the website.
154 lines
9.4 KiB
Markdown
154 lines
9.4 KiB
Markdown
BeIDE .prof project file format - a reverse engineering attempt
|
|
|
|
This is based on Philippe Houdoin's previous work.
|
|
|
|
Hierarchical tags format.
|
|
Tag structure:
|
|
|
|
```
|
|
uint32 tag
|
|
uint32 tag data size
|
|
uint8 data[tag_data_size]
|
|
|
|
(Values are big endian - always?)
|
|
|
|
'MIDE' = Metrowerks IDE top tag
|
|
uint32 = sizeof of tag data
|
|
'DPrf' = Data project file? Define Prefs?
|
|
uint32 = size of tag data
|
|
'PrEn' = Project/prefs encoding?
|
|
uint32 = size of tag data (4)
|
|
uint32 0xffffffff = ???
|
|
'PrVr' = Project/pref Version?
|
|
uint32 = size of tag data (4)
|
|
uint32 0x00000003 = ???
|
|
'Priv' = ???
|
|
uint32 = size of tag data (8)
|
|
uint32 0x00000007 = ???
|
|
uint32 0x00000000 = ???
|
|
'DAcc' = ???
|
|
uint32 = size of tag data (16 = 0x10)
|
|
uint32 0x00000006 = ???
|
|
uint32 0x00000000 = ???
|
|
uint32 0x00000005 = ???
|
|
uint32 0x00000002 = ??? (flags fields)
|
|
'SPth' = Search Paths tag (fixed tag size of 0x0108 = 264 bytes)
|
|
uint32 = size of tag data (264 = 0x108)
|
|
uint32 = Flags field ? (values seen so far: 0, 1 or 3)
|
|
uint8 = boolean ??? (local or system? precompiled/cached?)
|
|
uint8[259] = path string
|
|
'PPth' = Project paths (reuse the same tag format above, see SPth tag)
|
|
'Trgg' = Table of build "Trigger" ? Tag data is n x 140 bytes
|
|
record of bellow format:
|
|
uint32 = size of tag data (n x 140 bytes)
|
|
uint16 = build stage ? (ranging from 0-never, 1-preproc,
|
|
2-compile, 3-link, 4-resource, ?=always)
|
|
uint16 = build flags (0 ou 1 ou 4 + 2 + 1 = ?)
|
|
uint8[8] = file kind extension
|
|
uint8[64] = tool kind (gcc_link, gcc, rsrc ?)
|
|
uint8[64] = file kind mime type
|
|
'GPrf' = Global prefs ?
|
|
uint32 = size of tag data
|
|
'GenB' = Generic block ?
|
|
uint32 = size of tag data
|
|
one single generic_block
|
|
|
|
generic_block has the following structure:
|
|
uint32 = block group ID
|
|
uint32 = value size
|
|
string with zero ending = value name
|
|
uint32 = flags (1 = factory/default value?, 7 = custom ? To investigate)
|
|
uint8[value size - 4] = value
|
|
|
|
List of generic blocks groups and names found so far:
|
|
|
|
'MWPr' = Metrowerks prefs ?
|
|
name = 'AppEditorPrefs', value = binary blob with colors, booleans, flags
|
|
'cccg' = C compiler config
|
|
name = 'gccCompilerOptions', value = gcc options string
|
|
name = 'gccLanguage', value = language number ?
|
|
name = 'gccCommonWarning', value = array of uint8 booleans ?
|
|
name = 'gccWarning', value = array of uint8 booleans ?
|
|
name = 'gccCodeGeneration', value = array of uint8 booleans ?
|
|
'dlcg' = dynamic linker config
|
|
name = 'gccLinkerOptions', value = gcc linker options string
|
|
name = 'AdditionalGCCLinkerOptions', value = additions linker options string
|
|
'GNOL' = ??? (Globally needs object linking ?)
|
|
name = 'UpdateProject, value = uint32 (boolean?)
|
|
'mwcx' = Metrowerks C++ ?
|
|
name = 'ProjectPrefsx86', value = binary blob with:
|
|
uint8[9] of flags & like...
|
|
uint8[64] = output file mime type (for setmime) (usually
|
|
'application/x-vnd.Be-elfexecutable'!)
|
|
uint8[67 (!?)] = output file name
|
|
-> To investigate deeper
|
|
'RsDt' = Resource Data config
|
|
name = 'ResData', value = array of uint8 booleans ?
|
|
'mwcc' = Metrowerks C compiler
|
|
name = 'ProcessorPrefs', value = binary blob/array of booleans
|
|
name = 'XLanguagePrefs', value = binary blob/array of booleans
|
|
name = 'WarningsPrefs', value = binary blob/array of booleans
|
|
name = 'DisassemblerPrefs', value = ???
|
|
name = 'GlobalOpts', value = ???
|
|
'mwld' = Metrowerks linker
|
|
name = 'LinkerPrefs', value = few array of booleans + 3 x
|
|
uint8[64), the symbol names of the
|
|
__start, _term_routine and _init_routine routines.
|
|
name = 'PEFPrefs', value = we don't care about PEF ;-)
|
|
name = 'ProjectNamePrefs', value =
|
|
uint8[64] = Default output name string ('Application')
|
|
SUBTYPE in big endian ('????')
|
|
TYPE 'BAPP' in big endian
|
|
uint8[64] = output mime type string
|
|
(application/x-be-executable)
|
|
'ShDt' = Shell Data
|
|
name = 'ShellData', value = shell string options (usually '-noprofile')
|
|
'msan' = NASM config
|
|
name = 'NASMOptions', value = cryptic binary blob :-(
|
|
|
|
'Sect' = Section (Group section in project list)
|
|
uint32 = size of tag data (always 0x50 bytes long)
|
|
uint32 = nb items ('Link', 'PLnk', 'Fil1' or 'IgFl' tags) in this section
|
|
uint32[2] = flags ?
|
|
uint8 = ??? boolean ???
|
|
uint8[*] = Name of the section
|
|
|
|
'Link' = Link file
|
|
uint32 = size of tag data
|
|
uint32[6] = ???
|
|
One or more file (sub-)tag:
|
|
|
|
List of file sub-tags found so far:
|
|
'Mime' = value = MIME type of the file (one per parent tag)
|
|
uint32 = sizeof tag data
|
|
uint32 = size of value = size of tag data - sizeof(uint32)
|
|
uint8[size of value] = MIME type of the file
|
|
'MSFl' = Master/Main/Module? Source File (one per parent tag)
|
|
(either a library file, or a source file)
|
|
uint32 = sizeof tag data
|
|
uint32[2] = flags (to investigate)
|
|
'Name'
|
|
uint32 = sizeof 'Name' tag
|
|
uint32 = sizeof 'Name' value
|
|
uint8[size of 'Name' value] = File name (no path)
|
|
'SrFl' = Source File dependencies ([0..n] tags after the 'MSFl' tag) (mostly, headers - presents in Fil1 parent tag)
|
|
uint32 = sizeof tag data
|
|
uint32[2] = flags (to investigate)
|
|
'Name'
|
|
uint32 = sizeof 'Name' tag
|
|
uint32 = sizeof 'Name' value
|
|
uint8[size of 'Name' value] = File name (no path)
|
|
|
|
'PLnk' = Post-Link file? (e.g. resource file)
|
|
Same structure as 'Link'
|
|
'Fil1' = One build file
|
|
Same structure as 'Link'
|
|
'IgFl' = Ignored File, for file user has added to project list for easy access but is not build (e.g. local headers)
|
|
Same structure as 'Link'. Note that the next 2 following uint32 (off 6) are then set to 0xFFFF each.
|
|
'Brws' = Source browser info
|
|
uint32 = size of tag
|
|
uint8[*]
|
|
```
|
|
|
|
More info can be found in proj2make source code at https://git.haiku-os.org/haiku/tree/3rdparty/proj2make.
|