forked from Stichting-MINIX-Research-Foundation/minix
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile.gnuhost
More file actions
166 lines (141 loc) · 5.49 KB
/
Copy pathMakefile.gnuhost
File metadata and controls
166 lines (141 loc) · 5.49 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
# $NetBSD: Makefile.gnuhost,v 1.42 2013/08/13 20:41:25 drochner Exp $
#
# Rules used when building a GNU host package. Expects MODULE to be set.
#
# There's not a lot we can do to build reliably in the face of many
# available configuration options. To be as low-overhead as possible,
# we follow the following scheme:
#
# * Configuration is only re-run when an autoconf source file (such as
# "configure" or "config.sub") is changed.
#
# * "config.status" is run to rebuild Makefiles and .h files if an
# autoconf-parsed file (such as Makefile.in) is changed.
#
# * If MKUPDATE != "no", "make install" is only run if a build has happened
# since the last install in the current directory.
.include <bsd.own.mk>
# Disable use of pre-compiled headers on Darwin.
BUILD_OSTYPE!= uname -s
.if ${BUILD_OSTYPE} == "Darwin"
HOST_CFLAGS+=-O2 -no-cpp-precomp
.endif
MAKE_PROGRAM?= ${MAKE}
GNUHOSTDIST?= ${.CURDIR}/../../gnu/dist/${MODULE}
.if defined(__MINIX)
# AL - MINIX /usr/src does not have the sources for the GNU utilities
# in-tree (they are much bigger than Minix itself!) So to successfully
# use them while cross-compiling, we have to fetch them. The success of
# that operation is indicated by the presence of a .gitignore file in
# the corresponding ${.CURDIR}, which also conveniently hides from git.
.if exists(${GNUHOSTDIST:H}/fetch.sh)
${GNUHOSTDIST:H}/.gitignore: ${GNUHOSTDIST:H}/fetch.sh
SED=${TOOL_SED} ${HOST_SH} ${GNUHOSTDIST:H}/fetch.sh
@test -e ${GNUHOSTDIST}/configure
@echo "${MODULE:U${.CURDIR:T}:C,gcc[0-9]*,gcc,}-*.tar.*z*" >> $@
@echo ${GNUHOSTDIST:T} >> $@
_gnu_get_src=${GNUHOSTDIST:H}/.gitignore
.endif # exists(GNUHOSTDIST:H/fetch.sh) on MINIX
# AL - Special target for MINIX, reset the source tree as pristine
.if ${CLEANFETCHED:Uno} == "yes" && exists(${GNUHOSTDIST:H}/fetch.sh)
cleandir: clean_gnu_src
clean_gnu_src:
-rm -r -f ${GNUHOSTDIST} ${GNUHOSTDIST:H}/.gitignore
# XXX CHECKME: could have used the content of .gitignore as well?
.endif # CLEANFETCHED == yes
.endif # defined(__MINIX)
FIND_ARGS+= \! \( -type d \( \
-name 'CVS' -o \
-name 'config' -o \
-name 'doc' -o \
-name 'po' -o \
-name 'nbsd.mt' -o \
-name 'tests*' \
\) -prune \)
# Do this "find" only if actually building something.
# AL - ... and on MINIX, if the source has already being fetched
.if (${USETOOLS} == "yes") && empty(.MAKEFLAGS:M-V*) && \
(make(all) || make(realall) || (!make(clean) && !make(cleandir) && !make(obj))) && \
!defined(_GNU_CFGSRC) && exists(${GNUHOSTDIST}/configure)
_GNU_CFGSRC!= find ${GNUHOSTDIST} ${FIND_ARGS} \
-type f \( -name 'config*' -o -name '*.in' \) -print
.MAKEOVERRIDES+= _GNU_CFGSRC
.endif
CONFIGURE_ENV+= \
AR=${HOST_AR:Q} \
AWK=${TOOL_AWK:Q} \
CC=${HOST_CC:Q} \
CFLAGS=${HOST_CFLAGS:Q} \
CONFIG_SHELL=${HOST_SH:Q} \
CPPFLAGS=${HOST_CPPFLAGS:Q} \
CXX=${HOST_CXX:Q} \
CXXFLAGS=${HOST_CXXFLAGS:Q} \
INSTALL=${HOST_INSTALL_FILE:Q} \
LDFLAGS=${HOST_LDFLAGS:Q} \
LEX=${LEX:Q} \
M4=${TOOL_M4:Q} \
MAKE=${MAKE_PROGRAM:Q} \
PATH="${TOOLDIR}/bin:$$PATH" \
RANLIB=${HOST_RANLIB:Q} \
YACC=${YACC:Q}
BUILD_ENV+= ${CONFIGURE_ENV}
CONFIGURE_ARGS+=--prefix=${TOOLDIR}
.if ${MKPIC} == "no"
CONFIGURE_ARGS+=--disable-shared
.endif
.if ${MAKE_PROGRAM} == ${MAKE}
.ifndef _NOWRAPPER
# Some systems have a small ARG_MAX. On such systems, prevent Make
# variables set on the command line from being exported in the
# environment (they will still be set in MAKEOVERRIDES).
.if ${BUILD_OSTYPE} == "Darwin" || ${BUILD_OSTYPE} == "FreeBSD"
__noenvexport= -X
.endif
MAKE_ARGS:= ${__noenvexport} -f ${.PARSEDIR}/Makefile.gnuwrap ${MAKE_ARGS}
.else
MAKE_ARGS+= _NOWRAPPER=1
.endif
BUILD_COMMAND= ${BUILD_ENV} ${MAKE} ${MAKE_ARGS}
.else
# gmake version of this puts MAKE_ARGS in the environment to be sure that
# sub-gmake's get them, otherwise tools/gcc tries to build libgcc and
# fails. it also uses "env -i" to entirely clear out MAKEFLAGS.
GMAKE_J_ARGS?= ${MAKEFLAGS:[*]:M*-j*:C/.*(-j ?[0-9]*).*/\1/W}
BUILD_COMMAND= /usr/bin/env -i ${BUILD_ENV} ${MAKE_ARGS} ${TOOL_GMAKE} ${GMAKE_J_ARGS} -e ${MAKE_ARGS}
.endif
MAKE_ARGS+= BISON=true DESTDIR= INSTALL=${HOST_INSTALL_FILE:Q}
ALL_TARGET?= all
INSTALL_TARGET?=install
BUILD_PLATFORM!= uname -srm | tr ' ()' '-'
CONFIGURE_PLATFORM!= if [ -s .configure_done ]; then cat .configure_done; else echo none; fi
.if "${BUILD_PLATFORM}" != "${CONFIGURE_PLATFORM}"
configure_cleanup:
@mkdir build 2>/dev/null || true
@(echo "Cleaning stale cache files ${BUILD_PLATFORM} != ${CONFIGURE_PLATFORM}")
@(cd build && find . -name config.cache | xargs rm -f)
configure_cleanup=configure_cleanup
.endif
# AL For MINIX, fetch the source if not there
.configure_done: ${_gnu_get_src} .WAIT ${_GNU_CFGSRC} ${.CURDIR}/Makefile ${configure_cleanup}
@mkdir build 2>/dev/null || true
@(cd build && ${CONFIGURE_ENV} ${HOST_SH} ${GNUHOSTDIST}/configure ${CONFIGURE_ARGS})
@echo ${BUILD_PLATFORM} > $@
# The .build_done timestamp is only updated if a file actually changes
# in the build tree during "make all". This way, if nothing has changed,
# a "make install MKUPDATE=yes" will do nothing.
.build_done: .configure_done
@(cd build && ${BUILD_COMMAND} ${ALL_TARGET})
@if [ ! -f $@ ] || [ -n "$$(find build -type f -newer .build_done -print)" ]; \
then touch $@; fi
.install_done! ${BUILD:D.build_done}
@(cd ${.OBJDIR}/build && ${BUILD_COMMAND} ${INSTALL_TARGET})
@touch $@
# Mapping to standard targets.
.if ${USETOOLS} == "yes"
realall: .build_done
realinstall: .install_done
.endif
clean: clean.gnu
clean.gnu:
-rm -r -f .*_done build
.include <bsd.hostprog.mk>