lutin/doc/020_Compile_a_module.md

202 lines
4.3 KiB
Markdown
Raw Normal View History

How to compile
==============
2015-10-03 12:32:51 +02:00
Lutin permit simply to compile applications and library.
To simply understand the use, we will use a simple library:
```bash
2015-10-03 12:32:51 +02:00
git clone http://github.con/atria-soft/etk.git
```
2015-10-03 12:32:51 +02:00
compile a module:
-----------------
2015-10-03 12:32:51 +02:00
It is really simple:
```bash
2015-10-03 12:32:51 +02:00
lutin yourModuleName
#example:
lutin etk
```
2015-10-03 12:32:51 +02:00
Option working:
===============
2015-10-03 12:32:51 +02:00
Lutin have a complex option methodologie. We can consider 3 part of the option:
- global option
- target option
- modules
2015-10-03 12:32:51 +02:00
Global options:
---------------
2015-10-03 12:32:51 +02:00
Display help:
*************
2015-10-03 12:32:51 +02:00
Availlable everywhere ...
```bash
2015-10-03 12:32:51 +02:00
lutin -h
lutin --help
```
2015-10-03 12:32:51 +02:00
You can see in this help that it take a litle time to react.
The first time you run lutin, it parse all the file in your sub-directory.
But the system(OS) keep the data in cash, then the next time it is faster.
2015-10-03 12:32:51 +02:00
At the end of the help you an see an help about the etk librery with the associated help.
Build in color:
***************
2015-10-03 12:32:51 +02:00
```bash
2015-10-03 12:32:51 +02:00
lutin -C
lutin --color
```
2015-10-03 12:32:51 +02:00
Display build line in pretty print mode:
****************************************
2015-10-03 12:32:51 +02:00
when an error apear, the gcc or clang compile line can be really unreadable:
```bash
2015-10-03 12:32:51 +02:00
g++ -o /home/heero/dev/plop/out/Linux_x86_64/release/build/gcc/etk/obj/etk/Color.cpp.o -I/home/heero/dev/plop/etk -std=c++11 -D__CPP_VERSION__=2011 -D__TARGET_OS__Linux -D__TARGET_ARCH__x86 -D__TARGET_ADDR__64BITS -D_REENTRANT -DNDEBUG -O3 -fpic -D__STDCPP_GNU__ -Wall -Wsign-compare -Wreturn-type -Wno-write-strings -Woverloaded-virtual -Wnon-virtual-dtor -Wno-unused-variable -DMODE_RELEASE -c -MMD -MP /home/heero/dev/plop/etk/etk/Color.cpp
```
2015-10-03 12:32:51 +02:00
whith this option you can transform this not obvious line in a readable line:
```bash
2015-10-03 12:32:51 +02:00
lutin -P
lutin --pretty
```
2015-10-03 12:32:51 +02:00
result:
```bash
2015-10-03 12:32:51 +02:00
g++ \
-o /home/XXX/dev/out/Linux_x86_64/release/build/gcc/etk/obj/etk/Color.cpp.o \
-I/home/XXX/dev/etk \
-std=c++11 \
-D__CPP_VERSION__=2011 \
-D__TARGET_OS__Linux \
-D__TARGET_ARCH__x86 \
-D__TARGET_ADDR__64BITS \
-D_REENTRANT \
-DNDEBUG \
-O3 \
-fpic \
-D__STDCPP_GNU__ \
-Wall \
-Wsign-compare \
-Wreturn-type \
-Wno-write-strings \
-Woverloaded-virtual \
-Wnon-virtual-dtor \
-Wno-unused-variable \
-DMODE_RELEASE \
-c \
-MMD \
-MP \
/home/XXX/dev/etk/etk/Color.cpp
```
2015-10-03 12:32:51 +02:00
lutin log:
**********
2015-10-03 12:32:51 +02:00
Lutin have an internal log system. To enable or disable it just select your debug level with the option:
```bash
2015-10-03 12:32:51 +02:00
lutin -v4
lutin --verbose 4
```
2015-10-03 12:32:51 +02:00
The level availlables are:
- 0: None
- 1: error
- 2: warning (default)
- 3: info
- 4: debug
- 5: verbose
- 6: extreme_verbose
2015-10-03 12:32:51 +02:00
Select the number of CPU core used:
***********************************
2015-10-03 12:32:51 +02:00
By default lutin manage only 1 CPU core (faster to debug) but for speed requirement you can use use multiple core:
```bash
2015-10-03 12:32:51 +02:00
#for 5 core
lutin -j5
lutin --jobs 5
```
2015-10-03 12:32:51 +02:00
Force rebuild all:
******************
2015-10-03 12:32:51 +02:00
Sometime it is needed to rebuild all the program, just do :
```bash
2015-10-03 12:32:51 +02:00
lutin -B
lutin --force-build
```
2015-10-03 12:32:51 +02:00
Force strip all library and programs:
*************************************
2015-10-03 12:32:51 +02:00
Force strip of output binary (remove symboles)
```bash
2015-10-03 12:32:51 +02:00
lutin -s
lutin --force-strip
```
Manage Cross compilation:
-------------------------
The main objective of lutin is managing the cross compilation to build from linux to other platform:
For android you can use:
```bash
lutin -t Android your-module
lutin -t Windows your-module
```
Build in debug mode:
--------------------
To developp it is fasted with debug tools
```bash
lutin -m debug your-module
lutin -m release your-module
```
You can desire to have compilation optimisation when you build in debug mode:
```bash
lutin -m debug --force-optimisation your-module
```
Execute yout program after building it:
---------------------------------------
You can execute some action in a single line for a module:
```bash
lutin -m debug your-module?clean?build?run:--run-option1:--run-option2
```
Why use ```?run``` istead of direct calling the binary?
This is simple: you does nok knoww where the binary is installed... when you build for linux in debug it will be set in ```out/Linux_x86_64/debug/staging/clang/edn/edn.app/``` for edn application.
Note that the path is distinct for gcc/clang, debug/release, Linux/windows/Android/..., 64/32 bits, and for every applications ...
2015-10-03 12:32:51 +02:00
Then it is really easy to run the wrong binary.
2015-10-03 12:32:51 +02:00
[next doc:Create a new module](030_Create_a_new_module.md)