1###############################################
2#          Compression build options          #
3###############################################
4#
5#
6############# Building gzip support ###########
7#
8# Gzip support is by default enabled, and the compression type default
9# (COMP_DEFAULT) is gzip.
10#
11# If you don't want/need gzip support then comment out the GZIP SUPPORT line
12# below, and change COMP_DEFAULT to one of the compression types you have
13# selected.
14#
15# Obviously, you must select at least one of the available gzip, lzma, lzo
16# compression types.
17#
18GZIP_SUPPORT = 1
19
20########### Building XZ support #############
21#
22# LZMA2 compression.
23#
24# XZ Utils liblzma (http://tukaani.org/xz/) is supported
25#
26# To build using XZ Utils liblzma - install the library and uncomment
27# the XZ_SUPPORT line below.
28#
29#XZ_SUPPORT = 1
30
31
32############ Building LZO support ##############
33#
34# The LZO library (http://www.oberhumer.com/opensource/lzo/) is supported.
35#
36# To build using the LZO library - install the library and uncomment the
37# LZO_SUPPORT line below. If needed, uncomment and set LZO_DIR to the
38# installation prefix.
39#
40#LZO_SUPPORT = 1
41#LZO_DIR = /usr/local
42
43
44########### Building LZ4 support #############
45#
46# Yann Collet's LZ4 tools are supported
47# LZ4 homepage: http://fastcompression.blogspot.com/p/lz4.html
48# LZ4 source repository: http://code.google.com/p/lz4
49#
50# To build configure the tools using cmake to build shared libraries,
51# install and uncomment
52# the LZ4_SUPPORT line below.
53#
54#LZ4_SUPPORT = 1
55
56
57########### Building LZMA support #############
58#
59# LZMA1 compression.
60#
61# LZMA1 compression is deprecated, and the newer and better XZ (LZMA2)
62# compression should be used in preference.
63#
64# Both XZ Utils liblzma (http://tukaani.org/xz/) and LZMA SDK
65# (http://www.7-zip.org/sdk.html) are supported
66#
67# To build using XZ Utils liblzma - install the library and uncomment
68# the LZMA_XZ_SUPPORT line below.
69#
70# To build using the LZMA SDK (4.65 used in development, other versions may
71# work) - download and unpack it, uncomment and set LZMA_DIR to unpacked source,
72# and uncomment the LZMA_SUPPORT line below.
73#
74#LZMA_XZ_SUPPORT = 1
75#LZMA_SUPPORT = 1
76#LZMA_DIR = ../../../../LZMA/lzma465
77
78######## Specifying default compression ########
79#
80# The next line specifies which compression algorithm is used by default
81# in Mksquashfs.  Obviously the compression algorithm must have been
82# selected to be built
83#
84COMP_DEFAULT = gzip
85
86###############################################
87#  Extended attribute (XATTRs) build options  #
88###############################################
89#
90# Building XATTR support for Mksquashfs and Unsquashfs
91#
92# If your C library or build/target environment doesn't support XATTRs then
93# comment out the next line to build Mksquashfs and Unsquashfs without XATTR
94# support
95XATTR_SUPPORT = 1
96
97# Select whether you wish xattrs to be stored by Mksquashfs and extracted
98# by Unsquashfs by default.  If selected users can disable xattr support by
99# using the -no-xattrs option
100#
101# If unselected, Mksquashfs/Unsquashfs won't store and extract xattrs by
102# default.  Users can enable xattrs by using the -xattrs option.
103XATTR_DEFAULT = 1
104
105
106###############################################
107#        End of BUILD options section         #
108###############################################
109
110INCLUDEDIR = -I.
111INSTALL_DIR = /usr/local/bin
112
113MKSQUASHFS_OBJS = mksquashfs.o read_fs.o action.o swap.o pseudo.o compressor.o \
114	sort.o progressbar.o read_file.o info.o restore.o process_fragments.o \
115	caches-queues-lists.o
116
117UNSQUASHFS_OBJS = unsquashfs.o unsquash-1.o unsquash-2.o unsquash-3.o \
118	unsquash-4.o swap.o compressor.o unsquashfs_info.o
119
120CFLAGS ?= -O2
121CFLAGS += $(EXTRA_CFLAGS) $(INCLUDEDIR) -D_FILE_OFFSET_BITS=64 \
122	-D_LARGEFILE_SOURCE -D_GNU_SOURCE -DCOMP_DEFAULT=\"$(COMP_DEFAULT)\" \
123	-Wall
124
125LIBS = -lpthread -lm
126ifeq ($(GZIP_SUPPORT),1)
127CFLAGS += -DGZIP_SUPPORT
128MKSQUASHFS_OBJS += gzip_wrapper.o
129UNSQUASHFS_OBJS += gzip_wrapper.o
130LIBS += -lz
131COMPRESSORS += gzip
132endif
133
134ifeq ($(LZMA_SUPPORT),1)
135LZMA_OBJS = $(LZMA_DIR)/C/Alloc.o $(LZMA_DIR)/C/LzFind.o \
136	$(LZMA_DIR)/C/LzmaDec.o $(LZMA_DIR)/C/LzmaEnc.o $(LZMA_DIR)/C/LzmaLib.o
137INCLUDEDIR += -I$(LZMA_DIR)/C
138CFLAGS += -DLZMA_SUPPORT
139MKSQUASHFS_OBJS += lzma_wrapper.o $(LZMA_OBJS)
140UNSQUASHFS_OBJS += lzma_wrapper.o $(LZMA_OBJS)
141COMPRESSORS += lzma
142endif
143
144ifeq ($(LZMA_XZ_SUPPORT),1)
145CFLAGS += -DLZMA_SUPPORT
146MKSQUASHFS_OBJS += lzma_xz_wrapper.o
147UNSQUASHFS_OBJS += lzma_xz_wrapper.o
148LIBS += -llzma
149COMPRESSORS += lzma
150endif
151
152ifeq ($(XZ_SUPPORT),1)
153CFLAGS += -DXZ_SUPPORT
154MKSQUASHFS_OBJS += xz_wrapper.o
155UNSQUASHFS_OBJS += xz_wrapper.o
156LIBS += -llzma
157COMPRESSORS += xz
158endif
159
160ifeq ($(LZO_SUPPORT),1)
161CFLAGS += -DLZO_SUPPORT
162ifdef LZO_DIR
163INCLUDEDIR += -I$(LZO_DIR)/include
164LZO_LIBDIR = -L$(LZO_DIR)/lib
165endif
166MKSQUASHFS_OBJS += lzo_wrapper.o
167UNSQUASHFS_OBJS += lzo_wrapper.o
168LIBS += $(LZO_LIBDIR) -llzo2
169COMPRESSORS += lzo
170endif
171
172ifeq ($(LZ4_SUPPORT),1)
173CFLAGS += -DLZ4_SUPPORT
174MKSQUASHFS_OBJS += lz4_wrapper.o
175UNSQUASHFS_OBJS += lz4_wrapper.o
176LIBS += -llz4
177COMPRESSORS += lz4
178endif
179
180ifeq ($(XATTR_SUPPORT),1)
181ifeq ($(XATTR_DEFAULT),1)
182CFLAGS += -DXATTR_SUPPORT -DXATTR_DEFAULT
183else
184CFLAGS += -DXATTR_SUPPORT
185endif
186MKSQUASHFS_OBJS += xattr.o read_xattrs.o
187UNSQUASHFS_OBJS += read_xattrs.o unsquashfs_xattr.o
188endif
189
190#
191# If LZMA_SUPPORT is specified then LZMA_DIR must be specified too
192#
193ifeq ($(LZMA_SUPPORT),1)
194ifndef LZMA_DIR
195$(error "LZMA_SUPPORT requires LZMA_DIR to be also defined")
196endif
197endif
198
199#
200# Both LZMA_XZ_SUPPORT and LZMA_SUPPORT cannot be specified
201#
202ifeq ($(LZMA_XZ_SUPPORT),1)
203ifeq ($(LZMA_SUPPORT),1)
204$(error "Both LZMA_XZ_SUPPORT and LZMA_SUPPORT cannot be specified")
205endif
206endif
207
208#
209# At least one compressor must have been selected
210#
211ifndef COMPRESSORS
212$(error "No compressor selected! Select one or more of GZIP, LZMA, XZ, LZO or \
213	LZ4!")
214endif
215
216#
217# COMP_DEFAULT must be a selected compressor
218#
219ifeq (, $(findstring $(COMP_DEFAULT), $(COMPRESSORS)))
220$(error "COMP_DEFAULT is set to ${COMP_DEFAULT}, which  isn't selected to be \
221	built!")
222endif
223
224.PHONY: all
225all: mksquashfs unsquashfs
226
227mksquashfs: $(MKSQUASHFS_OBJS)
228	$(CC) $(LDFLAGS) $(EXTRA_LDFLAGS) $(MKSQUASHFS_OBJS) $(LIBS) -o $@
229
230mksquashfs.o: Makefile mksquashfs.c squashfs_fs.h squashfs_swap.h mksquashfs.h \
231	sort.h pseudo.h compressor.h xattr.h action.h error.h progressbar.h \
232	info.h caches-queues-lists.h read_fs.h restore.h process_fragments.h
233
234read_fs.o: read_fs.c squashfs_fs.h squashfs_swap.h compressor.h xattr.h \
235	error.h mksquashfs.h
236
237sort.o: sort.c squashfs_fs.h mksquashfs.h sort.h error.h progressbar.h
238
239swap.o: swap.c
240
241pseudo.o: pseudo.c pseudo.h error.h progressbar.h
242
243compressor.o: Makefile compressor.c compressor.h squashfs_fs.h
244
245xattr.o: xattr.c squashfs_fs.h squashfs_swap.h mksquashfs.h xattr.h error.h \
246	progressbar.h
247
248read_xattrs.o: read_xattrs.c squashfs_fs.h squashfs_swap.h xattr.h error.h
249
250action.o: action.c squashfs_fs.h mksquashfs.h action.h error.h
251
252progressbar.o: progressbar.c error.h
253
254read_file.o: read_file.c error.h
255
256info.o: info.c squashfs_fs.h mksquashfs.h error.h progressbar.h \
257	caches-queues-lists.h
258
259restore.o: restore.c caches-queues-lists.h squashfs_fs.h mksquashfs.h error.h \
260	progressbar.h info.h
261
262process_fragments.o: process_fragments.c process_fragments.h
263
264caches-queues-lists.o: caches-queues-lists.c error.h caches-queues-lists.h
265
266gzip_wrapper.o: gzip_wrapper.c squashfs_fs.h gzip_wrapper.h compressor.h
267
268lzma_wrapper.o: lzma_wrapper.c compressor.h squashfs_fs.h
269
270lzma_xz_wrapper.o: lzma_xz_wrapper.c compressor.h squashfs_fs.h
271
272lzo_wrapper.o: lzo_wrapper.c squashfs_fs.h lzo_wrapper.h compressor.h
273
274lz4_wrapper.o: lz4_wrapper.c squashfs_fs.h lz4_wrapper.h compressor.h
275
276xz_wrapper.o: xz_wrapper.c squashfs_fs.h xz_wrapper.h compressor.h
277
278unsquashfs: $(UNSQUASHFS_OBJS)
279	$(CC) $(LDFLAGS) $(EXTRA_LDFLAGS) $(UNSQUASHFS_OBJS) $(LIBS) -o $@
280
281unsquashfs.o: unsquashfs.h unsquashfs.c squashfs_fs.h squashfs_swap.h \
282	squashfs_compat.h xattr.h read_fs.h compressor.h
283
284unsquash-1.o: unsquashfs.h unsquash-1.c squashfs_fs.h squashfs_compat.h
285
286unsquash-2.o: unsquashfs.h unsquash-2.c squashfs_fs.h squashfs_compat.h
287
288unsquash-3.o: unsquashfs.h unsquash-3.c squashfs_fs.h squashfs_compat.h
289
290unsquash-4.o: unsquashfs.h unsquash-4.c squashfs_fs.h squashfs_swap.h \
291	read_fs.h
292
293unsquashfs_xattr.o: unsquashfs_xattr.c unsquashfs.h squashfs_fs.h xattr.h
294
295unsquashfs_info.o: unsquashfs.h squashfs_fs.h
296
297.PHONY: clean
298clean:
299	-rm -f *.o mksquashfs unsquashfs
300
301.PHONY: install
302install: mksquashfs unsquashfs
303	mkdir -p $(INSTALL_DIR)
304	cp mksquashfs $(INSTALL_DIR)
305	cp unsquashfs $(INSTALL_DIR)
306