1 #
2 # CDDL HEADER START
3 #
4 # The contents of this file are subject to the terms of the
5 # Common Development and Distribution License, Version 1.0 only
6 # (the "License"). You may not use this file except in compliance
7 # with the License.
8 #
9 # You can obtain a copy of the license at COPYING
10 # See the License for the specific language governing permissions
11 # and limitations under the License.
12 #
13 # When distributing Covered Code, include this CDDL HEADER in each
14 # file and include the License file at COPYING.
15 # If applicable, add the following below this CDDL HEADER, with the
16 # fields enclosed by brackets "[]" replaced with your own identifying
17 # information: Portions Copyright [yyyy] [name of copyright owner]
18 #
19 # CDDL HEADER END
20 #
21 # Copyright (c) 2014, Joyent, Inc.
22 #
23 # To build everything just run 'gmake' in this directory.
24 #
25
26 BASE = $(PWD)
27 DESTDIR = $(BASE)/proto
28
29 ifeq ($(STRAP),strap)
30 STRAPPROTO = $(DESTDIR)
31 else
32 STRAPPROTO = $(DESTDIR:proto=proto.strap)
33 endif
34
35 PATH = $(STRAPPROTO)/usr/bin:/usr/bin:/usr/sbin:/sbin:/opt/local/bin
36 SUBDIRS = \
37 bash \
38 bind \
39 bzip2 \
40 coreutils \
41 cpp \
42 curl \
43 dialog \
44 g11n \
45 gnupg \
46 gtar \
47 gzip \
48 ipmitool \
49 less \
50 libexpat \
51 libidn \
52 libm \
53 libxml \
54 libz \
55 make \
56 ncurses \
57 node.js \
58 nss-nspr \
59 ntp \
60 openldap \
61 openlldp \
62 openssl \
63 openssl1x \
64 pbzip2 \
65 perl \
66 rsync \
67 rsyslog \
68 screen \
69 socat \
70 tun \
71 uuid \
72 vim \
73 wget
74
75 STRAP_SUBDIRS = \
76 cpp \
77 bzip2 \
78 libexpat \
79 libidn \
80 libm \
81 libxml \
82 libz \
83 make \
84 node.js \
85 nss-nspr \
86 openssl1x \
87 perl
88
89 NAME = illumos-extra
90
91 AWK = $(shell (which gawk 2>/dev/null | grep -v "^no ") || which awk)
92 BRANCH = $(shell git symbolic-ref HEAD | $(AWK) -F/ '{print $$3}')
93
94 ifeq ($(TIMESTAMP),)
95 TIMESTAMP = $(shell date -u "+%Y%m%dT%H%M%SZ")
96 endif
97
98 GITDESCRIBE = \
99 g$(shell git describe --all --long | $(AWK) -F'-g' '{print $$NF}')
100
101 TARBALL = $(NAME)-$(BRANCH)-$(TIMESTAMP)-$(GITDESCRIBE).tgz
102
103 all: $(SUBDIRS)
104
105 strap: $(STRAP_SUBDIRS)
106
107 curl: libz openssl1x libidn
108 gzip: libz
109 node.js: openssl1x libm
110 ncurses: libm
111 dialog: ncurses
112 socat: openssl1x
113 wget: openssl1x libidn
114 openldap: openssl1x
115 libm: make
116 g11n: make
117 perl: libm
118 ntp: perl openssl1x
119
120 #
121 # pkg-config may be installed. This will actually only hurt us rather than help
122 # us. pkg-config is based as a part of the pkgsrc packages and will pull in
123 # versions of libraries that we have in /opt/local rather than using the ones in
124 # /usr that we want. PKG_CONFIG_LIBDIR controls the actual path. This
125 # environment variable nulls out the search path. Other vars just control what
126 # gets appended.
127 #
128
129 $(DESTDIR)/usr/gnu/bin/gas: FRC
130 (cd binutils && \
131 PKG_CONFIG_LIBDIR="" \
132 STRAP=$(STRAP) \
133 $(MAKE) DESTDIR=$(DESTDIR) install)
134
135
136 $(DESTDIR)/usr/bin/gcc: $(DESTDIR)/usr/gnu/bin/gas
137 (cd gcc4 && \
138 PKG_CONFIG_LIBDIR="" \
139 STRAP=$(STRAP) \
140 $(MAKE) DESTDIR=$(DESTDIR) install strapfix)
141
142 $(SUBDIRS): $(DESTDIR)/usr/bin/gcc
143 (cd $@ && \
144 PKG_CONFIG_LIBDIR="" \
145 STRAP=$(STRAP) \
146 CTFMERGE=$(CTFMERGE) \
147 CTFCONVERT=$(CTFCONVERT) \
148 $(MAKE) DESTDIR=$(DESTDIR) install)
149
150 install: $(SUBDIRS) gcc4 binutils
151
152 install_strap: $(STRAP_SUBDIRS) gcc4 binutils
153
154 clean:
155 -for dir in $(SUBDIRS) gcc4 binutils; \
156 do (cd $$dir; $(MAKE) DESTDIR=$(DESTDIR) clean); done
157 -rm -rf proto
158
159 manifest:
160 cp manifest $(DESTDIR)/$(DESTNAME)
161
162 tarball:
163 tar -zcf $(TARBALL) manifest proto
164
165 FRC:
166
167 .PHONY: manifest