| 1 | # $Id: programs.kmk 72 2004-05-30 06:16:41Z bird $ | 
|---|
| 2 | ## @file | 
|---|
| 3 | # This file deals with TARGET_PROGRAMS. | 
|---|
| 4 | # It should only be included from rules.kMk. | 
|---|
| 5 | # | 
|---|
| 6 | # Copyright (c) 2003 knut st. osmundsen <bird-srcspam@anduin.net> | 
|---|
| 7 | # | 
|---|
| 8 | # | 
|---|
| 9 | # This file is part of kBuild. | 
|---|
| 10 | # | 
|---|
| 11 | # kBuild is free software; you can redistribute it and/or modify | 
|---|
| 12 | # it under the terms of the GNU General Public License as published by | 
|---|
| 13 | # the Free Software Foundation; either version 2 of the License, or | 
|---|
| 14 | # (at your option) any later version. | 
|---|
| 15 | # | 
|---|
| 16 | # kBuild is distributed in the hope that it will be useful, | 
|---|
| 17 | # but WITHOUT ANY WARRANTY; without even the implied warranty of | 
|---|
| 18 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
|---|
| 19 | # GNU General Public License for more details. | 
|---|
| 20 | # | 
|---|
| 21 | # You should have received a copy of the GNU General Public License | 
|---|
| 22 | # along with kBuild; if not, write to the Free Software | 
|---|
| 23 | # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | 
|---|
| 24 | # | 
|---|
| 25 | # | 
|---|
| 26 |  | 
|---|
| 27 | # Assert correct context | 
|---|
| 28 | .ifndef __RULES_KMK__ | 
|---|
| 29 | .error $(MAKEFILE) can only be included from rules.kMk. | 
|---|
| 30 | .endif | 
|---|
| 31 |  | 
|---|
| 32 |  | 
|---|
| 33 | ## @page Makefile           Makefile | 
|---|
| 34 | # | 
|---|
| 35 | # A makefile defines a context. The context consists of a .CURDIR, .OBJDIR, | 
|---|
| 36 | # and stuff done by the config.kMk. Sources for instance is always relative | 
|---|
| 37 | # to .CURDIR, while objects and other output files are relative to .OBJDIR. | 
|---|
| 38 | # | 
|---|
| 39 | # | 
|---|
| 40 | # @todo move this page | 
|---|
| 41 |  | 
|---|
| 42 |  | 
|---|
| 43 |  | 
|---|
| 44 | ## @page TARGET_PROGRAMS    TARGET_PROGRAMS | 
|---|
| 45 | # | 
|---|
| 46 | # Programs to be made. On platforms which enforces extensions for programs | 
|---|
| 47 | # the default extension is added. | 
|---|
| 48 | # Modules listed in TARGET_PROGRAMS should NOT be listed TARGETS. | 
|---|
| 49 | # | 
|---|
| 50 | # Let's say TARGET_PROGRAMS = foo. Then you can configure the executable foo | 
|---|
| 51 | # using the following macros: | 
|---|
| 52 | # | 
|---|
| 53 | # foo_SOURCES   - The sources files which object files foo is linked to | 
|---|
| 54 | #                 together of. | 
|---|
| 55 | # | 
|---|
| 56 | # foo_TEMPLATE  - Compiler, linker, and more setup. | 
|---|
| 57 | # | 
|---|
| 58 | # | 
|---|
| 59 | # foo_DEFINES   - Defines used by all tools which support it. No -D should be | 
|---|
| 60 | #                 used as this is tool specific. Defines which have a value | 
|---|
| 61 | #                 must use '=' as assignment, foo_DEFINES=VER=1 for instance. | 
|---|
| 62 | # | 
|---|
| 63 | # foo_INCLUDES  - Include directories used by all tools which support it. No -I | 
|---|
| 64 | #                 or similar should be used as this is tool specific. Directories | 
|---|
| 65 | #                 are separated by ';'. | 
|---|
| 66 | # | 
|---|
| 67 | # foo_LIBS      - Libraries to link with. | 
|---|
| 68 | # | 
|---|
| 69 | # | 
|---|
| 70 | # C Compilers: | 
|---|
| 71 | # foo_CTOOL     - The C compiler tool to use. | 
|---|
| 72 | # foo_CDEFS     - C compiler defines. | 
|---|
| 73 | # foo_CINCS     - C compiler include directories. | 
|---|
| 74 | # foo_COPTS     - C compiler options. This is somewhat compiler independant. | 
|---|
| 75 | # foo_CFLAGS    - C compiler flags. Specifying compiler specific flags. | 
|---|
| 76 | # | 
|---|
| 77 | # | 
|---|
| 78 | # C++ Compilers: | 
|---|
| 79 | # foo_CXXTOOL   - The C++ compiler tool to use. | 
|---|
| 80 | # foo_CXXDEFS   - C++ compiler defines. | 
|---|
| 81 | # foo_CXXINCS   - C++ compiler include directories. | 
|---|
| 82 | # foo_CXXOPTS   - C++ compiler options. This is somewhat compiler independant. | 
|---|
| 83 | # foo_CXXFLAGS  - C++ compiler flags. Specifying compiler specific flags. | 
|---|
| 84 | # | 
|---|
| 85 | # | 
|---|
| 86 | # Assemblers: | 
|---|
| 87 | # foo_ASTOOL    - The assembler tool to use. | 
|---|
| 88 | # foo_ASDEFS    - Assembler defines. | 
|---|
| 89 | # foo_ASINCS    - Assembler include directories. | 
|---|
| 90 | # foo_ASOPTS    - Assembler options. This is somewhat assembler independant. | 
|---|
| 91 | # foo_ASFLAGS   - Assembler flags. Specifying compiler specific flags. | 
|---|
| 92 | # | 
|---|
| 93 | # | 
|---|
| 94 | # Resource Compilers: | 
|---|
| 95 | # foo_RCTOOL    - The Resource compiler tool to use. | 
|---|
| 96 | # foo_RCDEFS    - Resource compiler defines. | 
|---|
| 97 | # foo_RCINCS    - Resource compiler include directories. | 
|---|
| 98 | # foo_RCOPTS    - Resource compiler options. This is somewhat compiler independant. | 
|---|
| 99 | # foo_RCFLAGS   - Resource compiler flags. Specifying compiler specific flags. | 
|---|
| 100 | # | 
|---|
| 101 | # | 
|---|
| 102 | # Link Editors: | 
|---|
| 103 | # foo_LDTOOL    - The link editor tool to use. | 
|---|
| 104 | # foo_LDOPTS    - Link editor options. This is somewhat link editor independant. | 
|---|
| 105 | # foo_LDFLAGS   - Link editor flags. Specifying link editor specific flags. | 
|---|
| 106 | # foo_LDDEFFILE - Link editor definition file. (PC thingy) | 
|---|
| 107 | # foo_LDLIBS    - Link editor . (PC thingy) | 
|---|
| 108 | # | 
|---|
| 109 | # | 
|---|
| 110 | # | 
|---|
| 111 |  | 
|---|
| 112 |  | 
|---|
| 113 | # | 
|---|
| 114 | # Generate program rules. | 
|---|
| 115 | # | 
|---|
| 116 | .for trgt in ${TARGET_PROGRAMS} | 
|---|
| 117 |  | 
|---|
| 118 | ${trgt}_int_objects     := | 
|---|
| 119 | TARGETS                 += ${trgt}${SFX_EXE} | 
|---|
| 120 |  | 
|---|
| 121 |  | 
|---|
| 122 | # rules for each of the C source files. | 
|---|
| 123 | .for src in ${${trgt}_SOURCES:M*.c} | 
|---|
| 124 | int_object              := ${src} | 
|---|
| 125 | ${trgt}_int_objects     += ${int_object} | 
|---|
| 126 |  | 
|---|
| 127 | .endfor | 
|---|
| 128 |  | 
|---|
| 129 | #.for csrc in ${${trgt}_SOURCES:M${SFXS_C:S@^@*@}} | 
|---|
| 130 | .for csrc in ${${trgt}_SOURCES:M*.c} | 
|---|
| 131 | ${trgt}__OBJECTS        += ${csrc:S@.${csrc:E}@${SFX_OBJ}@} | 
|---|
| 132 | ${csrc:S@.${csrc:E}@${SFX_OBJ}@}: ${csrc} | 
|---|
| 133 | echo "compiling ${.ALLSRC} -> $@" | 
|---|
| 134 | .endfor | 
|---|
| 135 |  | 
|---|
| 136 |  | 
|---|
| 137 | # linking rule | 
|---|
| 138 | ${trgt}${SFX_EXE}: ${trgt}_int_objects | 
|---|
| 139 | echo "$@" | 
|---|
| 140 |  | 
|---|
| 141 | .endfor | 
|---|
| 142 |  | 
|---|
| 143 | # clean up := variables we've used. | 
|---|
| 144 |  | 
|---|