Subversion Repositories Kolibri OS

Rev

Rev 5098 | Rev 5568 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 5098 Rev 5176
1
Most programs in the repository are regularly and automatically compiled
1
Most programs in the repository are regularly and automatically compiled
2
by the autobuild server, compiled binaries are available at
2
by the autobuild server, compiled binaries are available at
3
http://builds.kolibrios.org. The autobuild server uses the build system Tup,
3
http://builds.kolibrios.org. The autobuild server uses the build system Tup,
4
data for it are located in files named Tupfile.lua over the repository.
4
data for it are located in files named Tupfile.lua over the repository.
5
 
5
 
6
-------------------------------------------------------------------------------
6
-------------------------------------------------------------------------------
7
 
7
 
8
Q1. I want to build one program and I don't want to know anything about Tup.
8
Q1. I want to build one program and I don't want to know anything about Tup.
9
Q2. I want to build one program using Tup.
9
Q2. I want to build one program using Tup.
10
Q3. I want to add a program to the autobuild.
10
Q3. I want to add a program to the autobuild.
11
Q4. I want to build the entire system.
11
Q4. I want to build the entire system.
12
Q5. I'm sure that I want to build the entire system.
12
Q5. I'm sure that I want to build the entire system.
13
    The autobuild server does this, after all.
13
    The autobuild server does this, after all.
14
Q6. I don't want to keep a zoo of compilers and tools required for Q5,
14
Q6. I don't want to keep a zoo of compilers and tools required for Q5,
15
    but I still want to build as many programs as possible with what I have.
15
    but I still want to build as many programs as possible with what I have.
16
 
16
 
17
-------------------------------------------------------------------------------
17
-------------------------------------------------------------------------------
18
 
18
 
19
Q1. I want to build one program and I don't want to know anything about Tup.
19
Q1. I want to build one program and I don't want to know anything about Tup.
20
A1. Fine. You will need a corresponding compiler, obviously.
20
A1. Fine. You will need a corresponding compiler, obviously.
21
 
21
 
22
  * For a FASM program, get FASM at http://flatassembler.net/download.php.
22
  * For a FASM program, get FASM at http://flatassembler.net/download.php.
23
    To compile, find the main .asm file of the program and run
23
    To compile, find the main .asm file of the program and run
24
        path/to/fasm 
24
        path/to/fasm 
25
    The compiler will automatically select the name for output, using
25
    The compiler will automatically select the name for output, using
26
    base name of input and extension based on file format. Though, you can
26
    base name of input and extension based on file format. Though, you can
27
    give also output name explicitly, as the second argument.
27
    give also output name explicitly, as the second argument.
28
 
28
 
29
    If the compiler produces an error "file not found" regarding 'lang.inc',
29
    If the compiler produces an error "file not found" regarding 'lang.inc',
30
    the program can be compiled using different languages of interface.
30
    the program can be compiled using different languages of interface.
31
    Create a file 'lang.inc' in the same folder as  like follows:
31
    Create a file 'lang.inc' in the same folder as  like follows:
32
        lang fix en
32
        lang fix en
33
    Here the last word selects the language. Valid languages are
33
    Here the last word selects the language. Valid languages are
34
    en, ru, et, it, sp. Not all programs provide all translations,
34
    en, ru, et, it, sp. Not all programs provide all translations,
35
    en should always be available, ru is the most frequent after en.
35
    en should always be available, ru is the most frequent after en.
36
 
36
 
37
  * For a NASM program, get NASM at http://www.nasm.us/.
37
  * For a NASM program, get NASM at http://www.nasm.us/.
38
    To compile, find the main .asm file of the program and run
38
    To compile, find the main .asm file of the program and run
39
        path/to/nasm -f bin -o  
39
        path/to/nasm -f bin -o  
40
    Multi-language is rarely supported in this category, but you could still
40
    Multi-language is rarely supported in this category, but you could still
41
    see sometimes an error "file not found" regarding 'lang_nasm.inc'. If so,
41
    see sometimes an error "file not found" regarding 'lang_nasm.inc'. If so,
42
    create a file 'lang_nasm.inc' in the same folder as  like follows:
42
    create a file 'lang_nasm.inc' in the same folder as  like follows:
43
        %define lang 'en'
43
        %define lang 'en'
44
    Read the entry about fasm for description of valid languages.
44
    Read the entry about fasm for description of valid languages.
45
 
45
 
46
  * For a c-- program, try to avoid compiling it and instead rewrite the code
46
  * For a c-- program, try to avoid compiling it and instead rewrite the code
47
    in a normal language like assembler or C. If you absolutely need
47
    in a normal language like assembler or C. If you absolutely need
48
    to compile, note that the compiler has been abandoned long ago, so
48
    to compile, note that the compiler has been abandoned long ago, so
49
    don't look for an official site. It is possible to find the compiler
49
    don't look for an official site. It is possible to find the compiler
50
    somewhere on http://board.kolibrios.org, but be prepared to several tries
50
    somewhere on http://board.kolibrios.org, but be prepared to several tries
51
    because there are several slightly different compiler versions, not all of
51
    because there are several slightly different compiler versions, not all of
52
    which are able to build all programs.
52
    which are able to build all programs.
53
    There is no Linux version, but Windows version runs fine under Wine.
53
    There is no Linux version, but Windows version runs fine under Wine.
54
 
54
 
55
  * For a GCC program, get the toolchain at
55
  * For a GCC program, get the toolchain at
56
    http://ftp.kolibrios.org/users/Serge/new/Toolchain/.
56
    http://ftp.kolibrios.org/users/Serge/new/Toolchain/.
57
 
57
 
58
    Under Windows, you need the package with "msys" in name and MinGW;
58
    Under Windows, you need the package with "msys" in name and MinGW;
59
    after installing MinGW, unpack the package to
59
    after installing MinGW, unpack the package to
60
    \MinGW\msys\1.0\home\autobuild\tools\win32, the package assumes
60
    \MinGW\msys\1.0\home\autobuild\tools\win32, the package assumes
61
    exactly this path. Run MinGW shell.
61
    exactly this path. Run MinGW shell.
62
 
62
 
63
    Under Linux, you need the package with "linux" in name
63
    Under Linux, you need the package with "linux" in name
64
    and runtime library cloog; e.g. for Debian-based distributives
64
    and runtime library cloog; e.g. for Debian-based distributives
65
    use apt-get install libcloog-isl4. Unpack the package to
65
    use apt-get install libcloog-isl4. Unpack the package to
66
    /home/autobuild/tools/win32, the package assumes exactly this path.
66
    /home/autobuild/tools/win32, the package assumes exactly this path.
67
 
67
 
68
    In both MinGW and Linux, make sure that the command
68
    In both MinGW and Linux, make sure that the command
69
        /home/autobuild/tools/win32/bin/kos32-gcc
69
        /home/autobuild/tools/win32/bin/kos32-gcc
70
    invokes the compiler.
70
    invokes the compiler.
71
 
71
 
72
    If the program uses libraries, you will also need to either compile
72
    If the program uses libraries, you will also need to either compile
73
    them separately or download SDK, if they are included to SDK.
73
    them separately or download SDK, if they are included to SDK.
74
    Compiling is ultimately a sequence of calls to kos32-gcc and kos32-ld,
74
    Compiling is ultimately a sequence of calls to kos32-gcc and kos32-ld,
75
    but filling exact parameters can be tricky, so maybe you want to
75
    but filling exact parameters can be tricky, so maybe you want to
76
    use Tup - proceed to Q2/A2 - or Make, if a maintainer has provided
76
    use Tup - proceed to Q2/A2 - or Make, if a maintainer has provided
77
    Makefile.
77
    Makefile.
78
 
78
 
79
  * For a MSVC program, get the compiler as a part of Visual Studio,
79
  * For a MSVC program, get the compiler as a part of Visual Studio,
80
    Express Edition is fine, or as a part of Windows SDK.
80
    Express Edition is fine, or as a part of Windows SDK.
81
    For obvious reasons, there is no Linux version, but the compiler runs file
81
    For obvious reasons, there is no Linux version, but the compiler runs fine
82
    under Wine.
82
    under Wine.
83
 
83
 
84
    If the program uses libraries, you will also need to either compile
84
    If the program uses libraries, you will also need to either compile
85
    them separately or download SDK, if they are included to SDK.
85
    them separately or download SDK, if they are included to SDK.
86
    Compiling is ultimately a sequence of calls to cl.exe and link.exe,
86
    Compiling is ultimately a sequence of calls to cl.exe and link.exe,
87
    but filling exact parameters can be tricky, so maybe you want to
87
    but filling exact parameters can be tricky, so maybe you want to
88
    use Tup - proceed to Q2/A2 - or Make, if a maintainer has provided
88
    use Tup - proceed to Q2/A2 - or Make, if a maintainer has provided
89
    Makefile.
89
    Makefile.
90
 
90
 
91
  * For any language, if the program is KolibriOS binary, the compiled binary
91
  * For any language, if the program is KolibriOS binary, the compiled binary
92
    can optionally be compiled with kpack. Windows version of kpack
92
    can optionally be compiled with kpack. Windows version of kpack
93
    can be downloaded at http://diamond.kolibrios.org/prg/kpack.exe,
93
    can be downloaded at http://diamond.kolibrios.org/prg/kpack.exe,
94
    Linux version can be compiled from sources at
94
    Linux version can be compiled from sources at
95
    (repository)/programs/other/kpack/linux.
95
    (repository)/programs/other/kpack/linux.
96
 
96
 
97
  * The kernel can optionally be compiled with kerpack.
97
  * The kernel can optionally be compiled with kerpack.
98
    Linux version can be compiled from sources at
98
    Linux version can be compiled from sources at
99
    (repository)/programs/other/kpack/kerpack_linux.
99
    (repository)/programs/other/kpack/kerpack_linux.
100
    There is no Windows version.
100
    There is no Windows version.
101
 
101
 
102
Q2. I want to build one program using Tup.
102
Q2. I want to build one program using Tup.
103
A2. You will still need the corresponding compiler as described in Q1/A1.
103
A2. You will still need the corresponding compiler as described in Q1/A1.
104
    You will also need Tup, get it at http://gittup.org/tup/index.html.
104
    You will also need Tup, get it at http://gittup.org/tup/index.html.
105
    Make sure that the corresponding compiler is somewhere in PATH
105
    Make sure that the corresponding compiler is somewhere in PATH
106
    and can be invoked without explicit path. For Linux, note that
106
    and can be invoked without explicit path. For Linux, note that
107
    all programs are invoked without extension, like
107
    all programs are invoked without extension, like
108
        fasm
108
        fasm
109
    or
109
    or
110
        kos32-gcc
110
        kos32-gcc
111
    with one exception: MSVC linker is invoked as link.exe to avoid conflict
111
    with one exception: MSVC linker is invoked as link.exe to avoid conflict
112
    with link from coreutils. Under Linux, c--, cl, link.exe should be scripts
112
    with link from coreutils. Under Linux, c--, cl, link.exe should be scripts
113
    invoking Wine with the corresponding binary. The interaction tup+wine
113
    invoking Wine with the corresponding binary. The interaction tup+wine
114
    does not work by default; ultimately, invoking scripts should be like:
114
    does not work by default; ultimately, invoking scripts should be like:
115
        c--: WINEDEBUG=-all LD_PRELOAD=/path/to/nosetsid.so /path/to/wine /path/to/C--.exe $*
115
        c--: WINEDEBUG=-all LD_PRELOAD=/path/to/nosetsid.so /path/to/wine /path/to/C--.exe $*
116
        cl: WINEDEBUG=-all LD_PRELOAD=/path/to/nosetsid.so /path/to/wine /path/to/cl.exe -I/path/to/cl/include $*
116
        cl: WINEDEBUG=-all LD_PRELOAD=/path/to/nosetsid.so /path/to/wine /path/to/cl.exe -I/path/to/cl/include $*
117
        link.exe: WINEDEBUG=-all LD_PRELOAD=/path/to/nosetsid.so /path/to/wine /path/to/link.exe $*
117
        link.exe: WINEDEBUG=-all LD_PRELOAD=/path/to/nosetsid.so /path/to/wine /path/to/link.exe $*
118
    where nosetsid.so is compiled as a 32-bit shared library
118
    where nosetsid.so is compiled as a 32-bit shared library
119
    from C file with one line "int setsid() { return -1; }".
119
    from C file with one line "int setsid() { return -1; }".
120
 
120
 
121
    If the program does not use any libraries, run
121
    If the program does not use any libraries, run
122
        tup init
122
        tup init
123
    in the directory with the program. Then,
123
    in the directory with the program. Then,
124
        tup
124
        tup
125
    without arguments will build the program with default settings.
125
    without arguments will build the program with default settings.
126
    Subsequent runs will not do anything unless any file that was used
126
    Subsequent runs will not do anything unless any file that was used
127
    during the compilation - not necessarily the main file - is changed;
127
    during the compilation - not necessarily the main file - is changed;
128
    after that, the program will be recompiled.
128
    after that, the program will be recompiled.
129
    By default, tup will not track files outside the directory with "tup init";
129
    By default, tup will not track files outside the directory with "tup init";
130
    if tracking files in program directory is not sufficient for you,
130
    if tracking files in program directory is not sufficient for you,
131
    consider adding updater.full_deps=1 to tup config - see tup manual
131
    consider adding updater.full_deps=1 to tup config - see tup manual
132
    for details, for Linux it requires setting tup as suid root - or extending
132
    for details, for Linux it requires setting tup as suid root - or extending
133
    tup data to the entire repository as described in Q6/A6. 
133
    tup data to the entire repository as described in Q6/A6. 
134
 
134
 
135
    Settings can be configured using the file tup.config. Look to
135
    Settings can be configured using the file tup.config. Look to
136
    tup.config.template in the repository root for complete list;
136
    tup.config.template in the repository root for complete list;
137
    for most programs, only CONFIG_LANG and CONFIG_KPACK_CMD have effect.
137
    for most programs, only CONFIG_LANG and CONFIG_KPACK_CMD have effect.
138
 
138
 
139
    If the program uses libraries or helper files for gcc/msvc and you don't
139
    If the program uses libraries or helper files for gcc/msvc and you don't
140
    want to build everything at once like Q6/A6, set
140
    want to build everything at once like Q6/A6, set
141
        CONFIG_HELPERDIR=.
141
        CONFIG_HELPERDIR=.
142
    in tup.config, copy programs/use_gcc.lua or programs/use_msvc.lua
142
    in tup.config, copy programs/use_gcc.lua or programs/use_msvc.lua
143
    and helpers for used libraries, if any, to the directory of the program.
143
    and helpers for used libraries, if any, to the directory of the program.
144
    use_gcc.lua and use_msvc.lua do not require additional configuration;
144
    use_gcc.lua and use_msvc.lua do not require additional configuration;
145
    in helpers for used libraries, set path to library in the first line.
145
    in helpers for used libraries, set path to library in the first line.
146
    Since copied helpers are local files not for the repository, you may use
146
    Since copied helpers are local files not for the repository, you may use
147
    absolute pathes specific for your machine.
147
    absolute pathes specific for your machine.
148
    This was designed so that no repository files need to be modified:
148
    This was designed so that no repository files need to be modified:
149
    Tupfile.lua for the program is able to use either local helpers when
149
    Tupfile.lua for the program is able to use either local helpers when
150
    CONFIG_HELPERDIR is set, or repository helpers when the entire repository
150
    CONFIG_HELPERDIR is set, or repository helpers when the entire repository
151
    is built.
151
    is built.
152
    You will also need compiled libraries. If they are included in SDK, use them.
152
    You will also need compiled libraries. If they are included in SDK, use them.
153
    Otherwise, compile them using the same process. Note that for a library,
153
    Otherwise, compile them using the same process. Note that for a library,
154
    "tup init" needs to be called in the library directory with include/ and lib/,
154
    "tup init" needs to be called in the library directory with include/ and lib/,
155
    even if Tupfile.lua is present only in src/; libraries will be put in lib/.
155
    even if Tupfile.lua is present only in src/; libraries will be put in lib/.
156
 
156
 
157
Q3. I want to add a program to the autobuild.
157
Q3. I want to add a program to the autobuild.
158
A3. Select a program from repository which uses same language and libraries.
158
A3. Select a program from repository which uses same language and libraries.
159
    Copy Tupfile.lua from that program to your program.
159
    Copy Tupfile.lua from that program to your program.
160
    Change names of source and binary files accordingly.
160
    Change names of source and binary files accordingly.
161
    If external files are referenced, correct relative pathes accordingly:
161
    If external files are referenced, correct relative pathes accordingly:
162
    e.g. when programs/develop/libraries/menuetlibc_example/Tupfile.lua
162
    e.g. when programs/develop/libraries/menuetlibc_example/Tupfile.lua
163
    references ../../../use_menuetlibc.lua, it resolves to
163
    references ../../../use_menuetlibc.lua, it resolves to
164
    programs/use_menuetlibc.lua, if your program is built by
164
    programs/use_menuetlibc.lua, if your program is built by
165
    programs/other/super_program/Tupfile.lua, the path should be
165
    programs/other/super_program/Tupfile.lua, the path should be
166
    ../../use_menuetlibc.lua. Commit.
166
    ../../use_menuetlibc.lua. Commit.
167
 
167
 
168
    After that, the program will be built regularly.
168
    After that, the program will be built regularly.
169
    To include the binary in kolibri.img or kolibri.iso, add it to one of
169
    To include the binary in kolibri.img or kolibri.iso, add it to one of
170
    lists in data/Tupfile.lua. Select the section corresponding to the used
170
    lists in data/Tupfile.lua. Select the section corresponding to the used
171
    language so that people who build images without your compiler would still
171
    language so that people who build images without your compiler would still
172
    be able to do so.
172
    be able to do so.
173
 
173
 
174
Q4. I want to build the entire system.
174
Q4. I want to build the entire system.
175
A4. Why? Even the person who has configured the autobuild server does not build
175
A4. Why? Even the person who has configured the autobuild server does not build
176
    everything on her computer.
176
    everything on her computer.
177
 
177
 
178
    If you want to create your own image of the system, it is much simpler to
178
    If you want to create your own image of the system, it is much simpler to
179
    start from existing one and modify it, building only what is necessary.
179
    start from existing one and modify it, building only what is necessary.
180
    If you don't know how to modify an image, don't expect that the build
180
    If you don't know how to modify an image, don't expect that the build
181
    system will magically do it for you. The build system uses mtools for
181
    system will magically do it for you. The build system uses mtools for
182
    image manipulation; if you have configured mtools, you can just use them
182
    image manipulation; if you have configured mtools, you can just use them
183
    directly. There are also other ways of image manipulation, which would
183
    directly. There are also other ways of image manipulation, which would
184
    be closed for you once you decide to become attached to the build system.
184
    be closed for you once you decide to become attached to the build system.
185
 
185
 
186
    If you want to verify or debug your changes in Q3/A3, it is normally
186
    If you want to verify or debug your changes in Q3/A3, it is normally
187
    sufficient to build just what you have changed as in Q2/A2.
187
    sufficient to build just what you have changed as in Q2/A2.
188
    To be extra sure, you can build from the repository root as in Q6/A6
188
    To be extra sure, you can build from the repository root as in Q6/A6
189
    limiting to your compiler and FASM for some helper tasks;
189
    limiting to your compiler and FASM for some helper tasks;
190
    any possible differences between this mode and actions of the autobuild
190
    any possible differences between this mode and actions of the autobuild
191
    server are due to environment issues, like Windows vs Linux,
191
    server are due to environment issues, like Windows vs Linux,
192
    and would not be resolved anyway.
192
    and would not be resolved anyway.
193
 
193
 
194
    If you just want it, note that the full build requires all compilers
194
    If you just want it, note that the full build requires all compilers
195
    listed in Q1/A1 and Linux. MinGW and Cygwin will not help you.
195
    listed in Q1/A1 and Linux. MinGW and Cygwin will not help you.
196
 
196
 
197
Q5. I'm sure that I want to build the entire system.
197
Q5. I'm sure that I want to build the entire system.
198
    The autobuild server does this, after all.
198
    The autobuild server does this, after all.
199
A5. The autobuild server has one concrete configuration with 64-bit Linux.
199
A5. The autobuild server has one concrete configuration with 64-bit Linux.
200
    The developers are slightly interested in compiling programs in different
200
    The developers are slightly interested in compiling programs in different
201
    systems, but nobody needs portability of actions that only one server
201
    systems, but nobody needs portability of actions that only one server
202
    does anyway.
202
    does anyway.
203
 
203
 
204
    So, don't expect support from developers. Though, here goes the instruction
204
    So, don't expect support from developers. Though, here goes the instruction
205
    in interest of completeness.
205
    in interest of completeness.
206
 
206
 
207
  * Configure all compilers as described in Q2/A2.
207
  * Configure all compilers as described in Q2/A2.
208
  * Configure kpack and kerpack as described in Q2/A2.
208
  * Configure kpack and kerpack as described in Q2/A2.
209
    They are optional for Q2/A2, but required here,
209
    They are optional for Q2/A2, but required here,
210
    the image just could not contain all programs in unpacked form.
210
    the image just could not contain all programs in unpacked form.
211
  * Configure mtools, so that mformat, mmd and mcopy are somewhere in PATH.
211
  * Configure mtools, so that mformat, mmd and mcopy are somewhere in PATH.
212
  * Configure mkisofs.
212
  * Configure mkisofs.
213
  * For full duplication of the autobuild server configure build variants:
213
  * For full duplication of the autobuild server configure build variants:
214
    create directories build-eng, build-rus, ... in the root of repository for
214
    create directories build-eng, build-rus, ... in the root of repository for
215
    every subdirectory in data/ except data/common. Create files
215
    every subdirectory in data/ except data/common. Create files
216
    build-eng/tup.config, build-rus/tup.config, ... with
216
    build-eng/tup.config, build-rus/tup.config, ... with
217
    CONFIG_BUILD_TYPE=eng, rus, ... correspondingly. This will switch
217
    CONFIG_BUILD_TYPE=eng, rus, ... correspondingly. This will switch
218
    to out-of-tree builds for every variant. If one build type is sufficient
218
    to out-of-tree builds for every variant. If one build type is sufficient
219
    for you, you may skip this step.
219
    for you, you may skip this step.
220
  * Run
220
  * Run
221
        tup init
221
        tup init
222
    in the root of repository.
222
    in the root of repository.
223
  * Run
223
  * Run
224
        tup
224
        tup
225
    anywhere inside repository.
225
    anywhere inside repository.
226
  * If everything went good, there should be files kolibri.img and kolibri.iso
226
  * If everything went good, there should be files kolibri.img and kolibri.iso
227
    in every build-* directory. When you want to update,
227
    in every build-* directory. When you want to update,
228
    rerun tup without arguments.
228
    rerun tup without arguments.
229
 
229
 
230
Q6. I don't want to keep a zoo of compilers and tools required for Q5,
230
Q6. I don't want to keep a zoo of compilers and tools required for Q5,
231
    but I still want to build as many programs as possible with what I have.
231
    but I still want to build as many programs as possible with what I have.
232
A6.
232
A6.
233
  * Configure all compilers you want to use as described in Q2/A2.
233
  * Configure all compilers you want to use as described in Q2/A2.
234
  * Create tup.config in the root of repository. Disable all compilers you
234
  * Create tup.config in the root of repository. Disable all compilers you
235
    don't want to use there; comments in tup.config.template should help you.
235
    don't want to use there; comments in tup.config.template should help you.
236
  * Optionally, configure kpack and kerpack as described in Q2/A2.
236
  * Optionally, configure kpack and kerpack as described in Q2/A2.
237
  * Run
237
  * Run
238
        tup init
238
        tup init
239
    in the root of repository.
239
    in the root of repository.
240
  * Run
240
  * Run
241
        tup
241
        tup
242
    anywhere inside repository.
242
    anywhere inside repository.