summaryrefslogtreecommitdiffstats
path: root/HACKING
blob: fc7712a080bb482f067629471205f5eedc1494ab (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
Adjusting build flags:
  CFLAGS=-O3 ./configure
  and rebuild.

Test-driven development:
  Set your build command to
    ./ninja ninja_test && ./ninja_test --gtest_filter=MyTest.Name
  now you can repeatedly run that while developing until the tests pass.
  Remember to build "all" before committing to verify the other source
  still works!

Coding guidelines:
- Function name are camelcase.
- Member methods are camelcase, expect for trivial getters which are
  underscore separated.
- Local variables are underscore separated.
- Member variables are underscore separated and suffixed by an extra underscore.
- Two spaces indentation.
- Opening braces is at the end of line.
- Lines are 80 columns maximum.
- All source files should have the Google Inc. license header.
- Also follow this style:
  http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml

Documentation guidelines:
- Use /// for doxygen.
- Use \a to refer to arguments.
- It's not necessary to document each argument, especially when they're
  relatively self-evident (e.g. in CanonicalizePath(string* path, string* err),
  the arguments are hopefully obvious)

Generating the manual:
  sudo apt-get install asciidoc --no-install-recommends
  ./ninja manual

Windows development on Linux (this is kind of hacky right now):
- sudo apt-get install gcc-mingw32 wine
- export CC=i586-mingw32msvc-cc CXX=i586-mingw32msvc-c++ AR=i586-mingw32msvc-ar
- ./configure.py --platform=mingw
- Build gtest:
  - unpack it into your source dir
  - ./configure
  - to work around missing _TlsAlloc I had to hack the libtool script to
    append -lmingw32 -lkernel32 at the *end* of the link line
- Build ninja: /path/to/linux/ninja ninja
- Run: ./ninja  (implicitly runs through wine(!))

Windows development on Windows:
- install mingw, msys, and python
- in the mingw shell, put Python in your path, and: sh bootstrap.sh
- to reconfigure, run 'python configure.py'
- remember to strip the resulting executable if size matters to you
- you'll need to rename ninja.exe into my-ninja.exe during development,
  otherwise ninja won't be able to overwrite itself when building

Using clang:
- Enable colors manually:
  CXX='/path/to/llvm/Release+Asserts/bin/clang++ -fcolor-diagnostics' ./configure.py