1$FreeBSD$
2
3Notes for people hacking on dtc
4===============================
5
6This file contains some notes for people wishing to hack on dtc.
7
8Upstreaming
9-----------
10
11This code is developed in the FreeBSD svn repository:
12
13https://svn.freebsd.org/base/head/usr.bin/dtc
14
15If you got the source from anywhere else and wish to make changes, please
16ensure that you are working against the latest version, or you may end up
17fixing bugs that are already fixed upstream.  Although the license makes no
18requirement that you share any improvements that you make, patches are very
19welcome.
20
21C++11
22-----
23
24This project currently aims to compile with g++ 4.2.1 and so doesn't make any
25use of C++11 features.  It would be a good idea to relax this restriction once
26clang is the default compiler for ARM, MIPS and PowerPC.
27
28This code makes use of a lot of iterator loops, which would be cleaner using
29the new syntax in C++11.  It also explicitly deletes a lot of objects held in
30collections in destructors that have these collections as their members.  This
31could be simplified by using `shared_ptr`.
32
33The code does make use of `static_assert()`, but uses a macro in utility.hh to
34remove these if they are not supported.  The FreeBSD standard headers also
35define a compatibility macro the implements static asserts in terms of an array
36with 1 element on success and -1 elements on failure.
37
38Adding New Checks
39-----------------
40
41Currently, the biggest weakness of this version of the tool is that it lacks
42most of the semantic checkers that can be implemented by simply reading the
43ePAPR spec.  The `checker` class provides a simple superclass for implementing
44these quite easily.  There are also helper methods on `device_tree` for finding
45specific nodes, for checks that require some understanding of the structure of
46the tree.
47
48We should probably add a parent pointer to the `node` class for easily walking
49up the tree.
50
51Adding Direct C Output
52----------------------
53
54The FreeBSD build system currently uses dtc to generate a blob and then
55converts this to C source code.  A new `output_writer` subclass could easily
56generate the C directly.
57
58Parser Improvements
59-------------------
60
61There are a few FIXME lines in the parser for some corner cases that are not
62currently used by FreeBSD.  These are mainly related to labels in the middle of
63values.  These can be fixed by creating a new `property_value` with the
64specified label, starting at the location of the label.  Don't forget to remove
65the associated comments from the BUGS section of the man page if you fix this.
66