7 # Copyright (c) 2005-2008 knut st. osmundsen <bird-kBuild-spam@anduin.net>
9 # This file is part of kBuild.
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.
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.
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
27 # Enable automatic installation of what's built.
28 KBUILD_DO_AUTO_INSTALL
:= 1
34 KBUILD_VERSION_MAJOR
= 0
35 KBUILD_VERSION_MINOR
= 1
36 KBUILD_VERSION_PATCH
= 4
37 KBUILD_VERSION
= 0.1.4
39 KBUILD_VERSION_MAJOR
=$(KBUILD_VERSION_MAJOR
) \
40 KBUILD_VERSION_MINOR
=$(KBUILD_VERSION_MINOR
) \
41 KBUILD_VERSION_PATCH
=$(KBUILD_VERSION_PATCH
)
44 # Get the svn version.
45 # This is shipped with the tarballs in a SvnInfo.kmk in the root.
47 ifneq ($(wildcard $(PATH_ROOT
)/SvnInfo.kmk
),)
49 KBUILD_SVN_INFO_KMK
:= $(PATH_ROOT
)/SvnInfo.kmk
50 KBUILD_SVN_INFO_DEP
:= $(KBUILD_SVN_INFO_KMK
)
52 else ifneq ($(wildcard $(PATH_ROOT
)/.svn
/entries
),)
53 # Generate from svn info
54 KBUILD_SVN_INFO_KMK
:= $(PATH_OBJ
)/SvnInfo.kmk
55 KBUILD_SVN_INFO_DEP
:= $(KBUILD_SVN_INFO_KMK
)
57 $(PATH_OBJ
)/SvnInfo.ts
+|
$(KBUILD_SVN_INFO_KMK
): $(wildcard $(PATH_ROOT
)/.svn
$(PATH_ROOT
)/.svn
/entries
$(PATH_ROOT
)/.svn
/all-wcprops
$(PATH_ROOT
)/.svn
/format
$(PATH_ROOT
)/.svn
/props
$(PATH_ROOT
)/.svn
/prop-base
)
58 $(call MSG_GENERATE
,,$(KBUILD_SVN_INFO_KMK
))
61 @
$(REDIRECT
) -o
$@.tmp
-E
'LC_ALL=C' -- svn
info $(DEPTH
)
63 -e
's/URL: */KBUILD_SVN_URL := /' \
64 -e
's/Revision: */KBUILD_SVN_REV := /' \
65 -e
'/KBUILD_SVN_/!d' \
69 @
$(CP
) --changed
-fv
$@
$(KBUILD_SVN_INFO_KMK
)
72 OTHER_CLEAN
+= $(KBUILD_SVN_INFO_KMK
) $(PATH_OBJ
)/SvnInfo.ts
76 # Some incomplete source export...
77 KBUILD_SVN_INFO_KMK
:= $(PATH_OBJ
)/SvnInfo.kmk
78 KBUILD_SVN_INFO_DEP
:= $(KBUILD_SVN_INFO_KMK
)
79 $(warning Neither SvnInfo nor .svn
/* was found in the root. Will have to cook up something too keep the build happy.
)
80 $(KBUILD_SVN_INFO_KMK
):
83 $(APPEND
) $@
'KBUILD_SVN_REV := 0'
84 $(APPEND
) $@
'KBUILD_SVN_URL := /dev/null'
87 OTHER_CLEAN
+= $(KBUILD_SVN_INFO_KMK
)
91 include $(KBUILD_SVN_INFO_KMK
)
95 # The OS and Architecture indicators.
97 DEFS.darwin
+= KBUILD_OS_DARWIN
98 DEFS.freebsd
+= KBUILD_OS_FREEBSD
99 DEFS.linux
+= KBUILD_OS_LINUX
100 DEFS.netbsd
+= KBUILD_OS_NETBSD
101 DEFS.openbsd
+= KBUILD_OS_OPENBSD
102 DEFS.os2
+= KBUILD_OS_OS2
103 DEFS.solaris
+= KBUILD_OS_SOLARIS
104 DEFS.win
+= KBUILD_OS_WINDOWS
106 DEFS.x86
+= KBUILD_ARCH_X86
107 DEFS.amd64
+= KBUILD_ARCH_AMD64
111 # Check if we're building a *nix installation.
113 ifdef NIX_INSTALL_DIR
114 NIX_INSTALL_DIR_BIN
:= $(patsubst /%,%,$(NIX_INSTALL_DIR
))/bin
115 NIX_INSTALL_DIR_SHARE
:= $(patsubst /%,%,$(NIX_INSTALL_DIR
))/share
/kBuild
117 KBUILD_PATH
=\"/$(NIX_INSTALL_DIR_SHARE
)\" \
118 KBUILD_BIN_PATH
=\"/$(NIX_INSTALL_DIR_BIN
)\"
122 # Where to fine the GNU Make stuff (for FreeBSD and Windows).
124 PATH_GNUMAKE_SRC ?
= $(PATH_ROOT
)/src
/kmk
128 # Template for building commandline tools.
130 TEMPLATE_BIN
= Commandline binary
132 TEMPLATE_BIN_INCS
= $(PATH_ROOT
)/src
/lib
134 ifeq ($(KBUILD_TARGET
),os2
)
135 TEMPLATE_BIN_TOOL
= GCC3OMF
136 TEMPLATE_BIN_CFLAGS
= -g
137 TEMPLATE_BIN_CFLAGS.profile
= -pg
138 TEMPLATE_BIN_CFLAGS.release
= -O3
139 TEMPLATE_BIN_LDFLAGS
= -Zhigh-mem
-Zstack
=1024 -g
140 ifdef NIX_INSTALL_DIR
141 TEMPLATE_BIN_INST
= $(NIX_INSTALL_DIR_BIN
)/
143 TEMPLATE_BIN_INST
= kBuild
/bin
/os2.x86
/
147 ifeq ($(KBUILD_TARGET
),darwin
)
148 ifndef KBUILD_MACOSX_VERSION
149 export KBUILD_MACOSX_VERSION
:= $(firstword $(subst .
, ,$(shell uname
-r
)))
151 KBUILD_MACOSX_SDK ?
= /Developer
/SDKs
/MacOSX10.4u.sdk
152 TEMPLATE_BIN_TOOL
= GCC4MACHO
153 TEMPLATE_BIN_CFLAGS
= -g
-mmacosx-version-min
=10.4 -isysroot
$(KBUILD_MACOSX_SDK
)
155 TEMPLATE_BIN_CFLAGS
+= -Wall
-Wextra
-pedantic
157 TEMPLATE_BIN_CFLAGS.profile
= -O3
-pg
158 TEMPLATE_BIN_CFLAGS.release
= -O3
159 TEMPLATE_BIN_LDFLAGS
= -g
-mmacosx-version-min
=10.4 -Wl
,-syslibroot
,$(KBUILD_MACOSX_SDK
)
160 ifneq ($(int-ge
$(KBUILD_MACOSX_VERSION
),9),) # >= 10.5
161 TEMPLATE_BIN_LDFLAGS
+= -classic_ld
163 TEMPLATE_BIN_LDFLAGS.profile
= -pg
164 ifdef NIX_INSTALL_DIR
165 TEMPLATE_BIN_INST
= $(NIX_INSTALL_DIR_BIN
)/
167 TEMPLATE_BIN_INST
= kBuild
/bin
/$(KBUILD_TARGET
).
$(KBUILD_TARGET_ARCH
)/
171 ifeq ($(filter-out win nt
,$(KBUILD_TARGET
)),)
172 ifeq ($(KBUILD_TARGET_ARCH
),x86
)
173 include $(KBUILD_PATH
)/tools
/VCC70.kmk
# fixme! template expanding does something bad to _LIBS /me thinks.
174 TEMPLATE_BIN_TOOL
= VCC70
175 TEMPLATE_BIN_DEFS
= WINDOWS32 _CONSOLE __WIN__ WIN32 __WIN32__
176 else ifeq ($(KBUILD_TARGET_ARCH
),amd64
)
177 TEMPLATE_BIN_TOOL
= VCC80AMD64
178 TEMPLATE_BIN_DEFS
= WINDOWS32 _CONSOLE __WIN__ WIN32 __WIN32__ __WIN64__ WIN64 \
179 _CRT_SECURE_NO_DEPRECATE _CRT_NONSTDC_NO_WARNINGS
181 TEMPLATE_BIN_DEFS.profile
= NDEBUG
182 TEMPLATE_BIN_DEFS.release
= NDEBUG
183 TEMPLATE_BIN_CFLAGS
= -W3
-Zi
-Zl
184 TEMPLATE_BIN_CFLAGS.release
= -O2
185 TEMPLATE_BIN_CFLAGS.profile
= -O2
-GH
-Gh
186 TEMPLATE_BIN_INCS
+= \
188 $(PATH_GNUMAKE_SRC
)/w32
/include \
189 $(PATH_GNUMAKE_SRC
)/glob
190 TEMPLATE_BIN_LDFLAGS
= /SUBSYSTEM
:console
/INCREMENTAL
:no
/NOD
/DEBUG
191 ifeq ($(KBUILD_TYPE
),profile
)
192 TEMPLATE_BIN_SDKS
= WINPSDKINCS
193 TEMPLATE_BIN_CFLAGS
+= -MT
194 TEMPLATE_BIN_LIBS
= \
195 D
:/coding
/kStuff
/svn
/trunk
/out
/win.
$(KBUILD_TARGET_ARCH
)/release
/kStuff
/lib
/kPrf2.lib \
196 D
:/coding
/kStuff
/svn
/trunk
/out
/win.
$(KBUILD_TARGET_ARCH
)/release
/kStuff
/lib
/kPrf2WinApiWrappersImp.lib \
197 $(PATH_TOOL_
$(TEMPLATE_BIN_TOOL
)_LIB
)/oldnames.lib \
198 $(PATH_TOOL_
$(TEMPLATE_BIN_TOOL
)_LIB
)/libcmt.lib \
199 $(PATH_TOOL_
$(TEMPLATE_BIN_TOOL
)_LIB
)/libcpmt.lib \
200 D
:/coding
/kStuff
/svn
/trunk
/out
/win.
$(KBUILD_TARGET_ARCH
)/release
/kStuff
/lib
/kPrf2WinApiWrappersImp.lib \
201 $(PATH_SDK_WINPSDKINCS_LIB
)/AdvAPI32.lib \
202 $(PATH_SDK_WINPSDKINCS_LIB
)/User32.lib
204 TEMPLATE_BIN_SDKS
= WINPSDK
205 TEMPLATE_BIN_CFLAGS
+= -MD
206 TEMPLATE_BIN_LIBS
= \
207 $(PATH_TOOL_
$(TEMPLATE_BIN_TOOL
)_LIB
)/oldnames.lib \
208 $(PATH_TOOL_
$(TEMPLATE_BIN_TOOL
)_LIB
)/msvcrt.lib
209 # $(PATH_TOOL_$(TEMPLATE_BIN_TOOL)_LIB)/msvcprt.lib - avoid this to save space!
211 ifdef NIX_INSTALL_DIR
212 TEMPLATE_BIN_INST
= $(NIX_INSTALL_DIR_BIN
)/
214 TEMPLATE_BIN_INST
= kBuild
/bin
/win.
$(KBUILD_TARGET_ARCH
)/
218 ifndef TEMPLATE_BIN_TOOL
219 # Use GCC3 when we're certain that the system is using GNU ld and ar.
220 ifeq ($(filter-out linux freebsd openbsd netbsd
,$(KBUILD_TARGET
)),)
221 TEMPLATE_BIN_TOOL
= GCC3
223 TEMPLATE_BIN_TOOL
= GCC3PLAIN
225 TEMPLATE_BIN_CFLAGS
= -g
227 TEMPLATE_BIN_CFLAGS
+= -Wall
-Wextra
-pedantic
229 TEMPLATE_BIN_LDFLAGS
= -g
230 TEMPLATE_BIN_CFLAGS.release
= -O3
231 ifeq ($(KBUILD_TARGET
),freebsd
)
232 TEMPLATE_BIN_INCS
+= $(PATH_GNUMAKE_SRC
)/glob
/usr
/local
/include
234 ifeq ($(KBUILD_TARGET
),linux
)
235 TEMPLATE_BIN_LIBS
+= rt
237 ifeq ($(KBUILD_TARGET
),solaris
)
238 TEMPLATE_BIN_CFLAGS.x86
+= -m32
239 TEMPLATE_BIN_CFLAGS.amd64
+= -m64
240 TEMPLATE_BIN_CXXFLAGS.x86
+= -m32
241 TEMPLATE_BIN_CXXFLAGS.amd64
+= -m64
242 TEMPLATE_BIN_LDFLAGS.x86
+= -m32
243 TEMPLATE_BIN_LDFLAGS.amd64
+= -m64
244 TEMPLATE_BIN_LIBS
+= rt
245 TEMPLATE_BIN_LDFLAGS
+= -Wl
,-i
247 ifdef NIX_INSTALL_DIR
248 TEMPLATE_BIN_INST
= $(NIX_INSTALL_DIR_BIN
)/
250 TEMPLATE_BIN_INST
= kBuild
/bin
/$(KBUILD_TARGET
).
$(KBUILD_TARGET_ARCH
)/
255 # Template for building libraries for the tools.
257 TEMPLATE_LIB
= Library for Commandline binary
258 TEMPLATE_LIB_EXTENDS
= BIN
259 TEMPLATE_LIB_INST
= lib
/
261 TEMPLATE_LIB_TOOL
= $(TEMPLATE_BIN_TOOL
)
264 LIB_KDEP
= $(PATH_OBJ
)/kDep
/$(TOOL_
$(TEMPLATE_LIB_TOOL
)_ARLIBPREF
)kDep
$(TOOL_
$(TEMPLATE_LIB_TOOL
)_ARLIBSUFF
)
265 LIB_KUTIL
= $(PATH_OBJ
)/kUtil
/$(TOOL_
$(TEMPLATE_LIB_TOOL
)_ARLIBPREF
)kUtil
$(TOOL_
$(TEMPLATE_LIB_TOOL
)_ARLIBSUFF
)