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
= 3
37 KBUILD_VERSION
= 0.1.3
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
-- 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
):
82 $(APPEND
) $@
'KBUILD_SVN_REV := 0'
83 $(APPEND
) $@
'KBUILD_SVN_URL := /dev/null'
86 OTHER_CLEAN
+= $(KBUILD_SVN_INFO_KMK
)
90 include $(KBUILD_SVN_INFO_KMK
)
94 # The OS and Architecture indicators.
96 DEFS.darwin
+= KBUILD_OS_DARWIN
97 DEFS.freebsd
+= KBUILD_OS_FREEBSD
98 DEFS.linux
+= KBUILD_OS_LINUX
99 DEFS.netbsd
+= KBUILD_OS_NETBSD
100 DEFS.openbsd
+= KBUILD_OS_OPENBSD
101 DEFS.os2
+= KBUILD_OS_OS2
102 DEFS.solaris
+= KBUILD_OS_SOLARIS
103 DEFS.win
+= KBUILD_OS_WINDOWS
105 DEFS.x86
+= KBUILD_ARCH_X86
106 DEFS.amd64
+= KBUILD_ARCH_AMD64
110 # Check if we're building a *nix installation.
112 ifdef NIX_INSTALL_DIR
113 NIX_INSTALL_DIR_BIN
:= $(patsubst /%,%,$(NIX_INSTALL_DIR
))/bin
114 NIX_INSTALL_DIR_SHARE
:= $(patsubst /%,%,$(NIX_INSTALL_DIR
))/share
/kBuild
116 KBUILD_PATH
=\"/$(NIX_INSTALL_DIR_SHARE
)\" \
117 KBUILD_BIN_PATH
=\"/$(NIX_INSTALL_DIR_BIN
)\"
121 # Where to fine the GNU Make stuff (for FreeBSD and Windows).
123 PATH_GNUMAKE_SRC ?
= $(PATH_ROOT
)/src
/kmk
127 # Template for building commandline tools.
129 TEMPLATE_BIN
= Commandline binary
131 TEMPLATE_BIN_INCS
= $(PATH_ROOT
)/src
/lib
133 ifeq ($(KBUILD_TARGET
),os2
)
134 TEMPLATE_BIN_TOOL
= GCC3OMF
135 TEMPLATE_BIN_CFLAGS
= -g
136 TEMPLATE_BIN_CFLAGS.profile
= -pg
137 TEMPLATE_BIN_CFLAGS.release
= -O3
138 TEMPLATE_BIN_LDFLAGS
= -Zhigh-mem
-Zstack
=1024 -g
139 ifdef NIX_INSTALL_DIR
140 TEMPLATE_BIN_INST
= $(NIX_INSTALL_DIR_BIN
)/
142 TEMPLATE_BIN_INST
= kBuild
/bin
/os2.x86
/
146 ifeq ($(KBUILD_TARGET
),darwin
)
147 ifndef KBUILD_MACOSX_VERSION
148 export KBUILD_MACOSX_VERSION
:= $(firstword $(subst .
, ,$(shell uname
-r
)))
150 KBUILD_MACOSX_SDK ?
= /Developer
/SDKs
/MacOSX10.4u.sdk
151 TEMPLATE_BIN_TOOL
= GCC4MACHO
152 TEMPLATE_BIN_CFLAGS
= -g
-mmacosx-version-min
=10.4 -isysroot
$(KBUILD_MACOSX_SDK
)
153 TEMPLATE_BIN_CFLAGS.profile
= -O3
-pg
154 TEMPLATE_BIN_CFLAGS.release
= -O3
155 TEMPLATE_BIN_LDFLAGS
= -g
-mmacosx-version-min
=10.4 -Wl
,-syslibroot
,$(KBUILD_MACOSX_SDK
)
156 ifneq ($(int-ge
$(KBUILD_MACOSX_VERSION
),9),) # >= 10.5
157 TEMPLATE_BIN_LDFLAGS
+= -classic_ld
159 TEMPLATE_BIN_LDFLAGS.profile
= -pg
160 ifdef NIX_INSTALL_DIR
161 TEMPLATE_BIN_INST
= $(NIX_INSTALL_DIR_BIN
)/
163 TEMPLATE_BIN_INST
= kBuild
/bin
/$(KBUILD_TARGET
).
$(KBUILD_TARGET_ARCH
)/
167 ifeq ($(filter-out win nt
,$(KBUILD_TARGET
)),)
168 ifeq ($(KBUILD_TARGET_ARCH
),x86
)
169 include $(KBUILD_PATH
)/tools
/VCC70.kmk
# fixme! template expanding does something bad to _LIBS /me thinks.
170 TEMPLATE_BIN_TOOL
= VCC70
171 TEMPLATE_BIN_DEFS
= WINDOWS32 _CONSOLE __WIN__ WIN32 __WIN32__
172 else ifeq ($(KBUILD_TARGET_ARCH
),amd64
)
173 TEMPLATE_BIN_TOOL
= VCC80AMD64
174 TEMPLATE_BIN_DEFS
= WINDOWS32 _CONSOLE __WIN__ WIN32 __WIN32__ __WIN64__ WIN64 \
175 _CRT_SECURE_NO_DEPRECATE _CRT_NONSTDC_NO_WARNINGS
177 TEMPLATE_BIN_DEFS.profile
= NDEBUG
178 TEMPLATE_BIN_DEFS.release
= NDEBUG
179 TEMPLATE_BIN_CFLAGS
= -W3
-Zi
-Zl
180 TEMPLATE_BIN_CFLAGS.release
= -O2
181 TEMPLATE_BIN_CFLAGS.profile
= -O2
-GH
-Gh
182 TEMPLATE_BIN_INCS
+= \
184 $(PATH_GNUMAKE_SRC
)/w32
/include \
185 $(PATH_GNUMAKE_SRC
)/glob
186 TEMPLATE_BIN_LDFLAGS
= /SUBSYSTEM
:console
/INCREMENTAL
:no
/NOD
/DEBUG
187 ifeq ($(KBUILD_TYPE
),profile
)
188 TEMPLATE_BIN_SDKS
= WINPSDKINCS
189 TEMPLATE_BIN_CFLAGS
+= -MT
190 TEMPLATE_BIN_LIBS
= \
191 D
:/coding
/kStuff
/svn
/trunk
/out
/win.
$(KBUILD_TARGET_ARCH
)/release
/kStuff
/lib
/kPrf2.lib \
192 D
:/coding
/kStuff
/svn
/trunk
/out
/win.
$(KBUILD_TARGET_ARCH
)/release
/kStuff
/lib
/kPrf2WinApiWrappersImp.lib \
193 $(PATH_TOOL_
$(TEMPLATE_BIN_TOOL
)_LIB
)/oldnames.lib \
194 $(PATH_TOOL_
$(TEMPLATE_BIN_TOOL
)_LIB
)/libcmt.lib \
195 $(PATH_TOOL_
$(TEMPLATE_BIN_TOOL
)_LIB
)/libcpmt.lib \
196 D
:/coding
/kStuff
/svn
/trunk
/out
/win.
$(KBUILD_TARGET_ARCH
)/release
/kStuff
/lib
/kPrf2WinApiWrappersImp.lib \
197 $(PATH_SDK_WINPSDKINCS_LIB
)/AdvAPI32.lib \
198 $(PATH_SDK_WINPSDKINCS_LIB
)/User32.lib
200 TEMPLATE_BIN_SDKS
= WINPSDK
201 TEMPLATE_BIN_CFLAGS
+= -MD
202 TEMPLATE_BIN_LIBS
= \
203 $(PATH_TOOL_
$(TEMPLATE_BIN_TOOL
)_LIB
)/oldnames.lib \
204 $(PATH_TOOL_
$(TEMPLATE_BIN_TOOL
)_LIB
)/msvcrt.lib
205 # $(PATH_TOOL_$(TEMPLATE_BIN_TOOL)_LIB)/msvcprt.lib - avoid this to save space!
207 ifdef NIX_INSTALL_DIR
208 TEMPLATE_BIN_INST
= $(NIX_INSTALL_DIR_BIN
)/
210 TEMPLATE_BIN_INST
= kBuild
/bin
/win.
$(KBUILD_TARGET_ARCH
)/
214 ifndef TEMPLATE_BIN_TOOL
215 # Use GCC3 when we're certain that the system is using GNU ld and ar.
216 ifeq ($(filter-out linux freebsd openbsd netbsd
,$(KBUILD_TARGET
)),)
217 TEMPLATE_BIN_TOOL
= GCC3
219 TEMPLATE_BIN_TOOL
= GCC3PLAIN
221 TEMPLATE_BIN_CFLAGS
= -g
222 TEMPLATE_BIN_LDFLAGS
= -g
223 TEMPLATE_BIN_CFLAGS.release
= -O3
224 ifeq ($(KBUILD_TARGET
),freebsd
)
225 TEMPLATE_BIN_INCS
+= $(PATH_GNUMAKE_SRC
)/glob
/usr
/local
/include
227 ifeq ($(KBUILD_TARGET
),linux
)
228 TEMPLATE_BIN_LIBS
+= rt
230 ifeq ($(KBUILD_TARGET
),solaris
)
231 TEMPLATE_BIN_CFLAGS.x86
+= -m32
232 TEMPLATE_BIN_CFLAGS.amd64
+= -m64
233 TEMPLATE_BIN_CXXFLAGS.x86
+= -m32
234 TEMPLATE_BIN_CXXFLAGS.amd64
+= -m64
235 TEMPLATE_BIN_LDFLAGS.x86
+= -m32
236 TEMPLATE_BIN_LDFLAGS.amd64
+= -m64
237 TEMPLATE_BIN_LIBS
+= rt
238 TEMPLATE_BIN_LDFLAGS
+= -Wl
,-i
240 ifdef NIX_INSTALL_DIR
241 TEMPLATE_BIN_INST
= $(NIX_INSTALL_DIR_BIN
)/
243 TEMPLATE_BIN_INST
= kBuild
/bin
/$(KBUILD_TARGET
).
$(KBUILD_TARGET_ARCH
)/
248 # Template for building libraries for the tools.
250 TEMPLATE_LIB
= Library for Commandline binary
251 TEMPLATE_LIB_EXTENDS
= BIN
252 TEMPLATE_LIB_INST
= lib
/
254 TEMPLATE_LIB_TOOL
= $(TEMPLATE_BIN_TOOL
)
257 LIB_KDEP
= $(PATH_OBJ
)/src
/lib
/kDep
/$(TOOL_
$(TEMPLATE_LIB_TOOL
)_ARLIBPREF
)kDep
$(TOOL_
$(TEMPLATE_LIB_TOOL
)_ARLIBSUFF
)
258 LIB_KUTIL
= $(PATH_OBJ
)/src
/lib
/kUtil
/$(TOOL_
$(TEMPLATE_LIB_TOOL
)_ARLIBPREF
)kUtil
$(TOOL_
$(TEMPLATE_LIB_TOOL
)_ARLIBSUFF
)