xref: /haiku/build/jam/BuildFeatures (revision 225b6382637a7346d5378ee45a6581b4e2616055)
1# This file contains setup for build features that require external packages. It
2# is included once for each configured packaging architecture (with
3# TARGET_PACKAGING_ARCH set accordingly).
4
5
6local architecture = $(TARGET_PACKAGING_ARCH) ;
7local secondaryArchSubDir = [ MultiArchIfPrimary "" : /$(architecture) ] ;
8local developLibDir = develop/lib$(secondaryArchSubDir) ;
9local developHeadersDir = develop/headers$(secondaryArchSubDir) ;
10
11
12# SSL
13
14# Automatically enable the SSL feature, when the OpenSSL package is enabled.
15if [ IsHaikuImagePackageAdded openssl ] {
16	HAIKU_BUILD_FEATURE_SSL = 1 ;
17}
18
19if $(HAIKU_BUILD_FEATURE_SSL) {
20	if [ IsPackageAvailable openssl_devel ] {
21		ExtractBuildFeatureArchives openssl :
22			file: base openssl
23				runtime: lib
24			file: devel openssl_devel
25				depends: base
26				libraries:
27					$(developLibDir)/libcrypto.so
28					$(developLibDir)/libssl.so
29				headers: $(developHeadersDir)
30			;
31
32		EnableBuildFeatures openssl ;
33	} else {
34		Echo "SSL build feature not available for $(TARGET_ARCH)" ;
35	}
36}
37
38
39# ICU
40
41# Note ICU isn't actually optional, but is still an external package
42if [ IsPackageAvailable icu_devel ] {
43	ExtractBuildFeatureArchives icu :
44		file: base icu
45			runtime: lib
46		file: devel icu_devel
47			depends: base
48			libraries:
49				$(developLibDir)/libicudata.so
50				$(developLibDir)/libicui18n.so
51				$(developLibDir)/libicuio.so
52				$(developLibDir)/libicule.so
53				$(developLibDir)/libiculx.so
54				$(developLibDir)/libicutu.so
55				$(developLibDir)/libicuuc.so
56			headers: $(developHeadersDir)
57		;
58
59	EnableBuildFeatures icu ;
60} else  {
61	Echo "ICU not available for $(TARGET_ARCH)" ;
62}
63
64
65# CLucene
66
67# TODO: Update to packages!
68if ! 1 {
69
70# Automatically install the CLucene feature, when the CLucene package is
71# enabled.
72if [ IsHaikuImagePackageAdded clucene ] {
73	HAIKU_BUILD_FEATURE_CLUCENE = 1 ;
74}
75
76
77HAIKU_CLUCENE_PACKAGE = clucene-0.9.21-x86-gcc4-haiku-2009-08-11.zip ;
78HAIKU_CLUCENE_URL = $(baseURL)/$(HAIKU_CLUCENE_PACKAGE) ;
79
80if $(HAIKU_BUILD_FEATURE_CLUCENE) {
81	if $(TARGET_ARCH) != x86 {
82		Echo "CLucene build feature not available for $(TARGET_ARCH)" ;
83	} else {
84		# Download the zip archive.
85		local zipFile = [ DownloadFile $(HAIKU_CLUCENE_PACKAGE)
86			: $(HAIKU_CLUCENE_URL) ] ;
87
88		# zip file and output directory
89		HAIKU_CLUCENE_ZIP_FILE = $(zipFile) ;
90		HAIKU_CLUCENE_DIR = [ FDirName $(HAIKU_OPTIONAL_BUILD_PACKAGES_DIR)
91			$(HAIKU_CLUCENE_PACKAGE:B) ] ;
92
93		# extract headers and libraries
94		HAIKU_CLUCENE_HEADERS_DEPENDENCY = [ ExtractArchive $(HAIKU_CLUCENE_DIR)
95			: common/include/ : $(zipFile) : extracted-clucene
96		] ;
97
98		HAIKU_CLUCENE_LIBS = [ ExtractArchive $(HAIKU_CLUCENE_DIR)
99			:
100			common/lib/libclucene.a
101			: $(zipFile)
102			 : extracted-clucene
103		] ;
104
105		HAIKU_CLUCENE_HEADERS
106			= [ FDirName $(HAIKU_CLUCENE_DIR) common include ] ;
107
108		EnableBuildFeatures clucene ;
109	}
110}
111
112} # ! 1
113
114
115# TODO: Update to packages!
116if ! 1 {
117
118# LLVM
119if $(TARGET_ARCH) = x86 {
120	if $(TARGET_GCC_VERSION_$(architecture)[1]) >= 4 {
121		HAIKU_LLVM_FILE = llvm-3.2-x86-gcc4-2012-12-21.zip ;
122		local zipFile = [ DownloadFile $(HAIKU_LLVM_FILE)
123			: $(baseURL)/$(HAIKU_LLVM_FILE) ] ;
124
125		HAIKU_LLVM_DIR = [ FDirName $(HAIKU_OPTIONAL_BUILD_PACKAGES_DIR)
126			$(HAIKU_LLVM_FILE:B) ] ;
127
128		HAIKU_LLVM_HEADERS_DEPENDENCY = [ ExtractArchive $(HAIKU_LLVM_DIR)
129			: common/include/ : $(zipFile) : extracted-llvm ] ;
130		HAIKU_LLVM_HEADERS = [ FDirName $(HAIKU_LLVM_DIR) common include ] ;
131
132		# We can't Glob these because they aren't extracted yet.
133		HAIKU_LLVM_LIBS = [ ExtractArchive $(HAIKU_LLVM_DIR)
134			:
135			common/lib/libLLVMAsmParser.a
136			common/lib/libLLVMInstrumentation.a
137			common/lib/libLLVMLinker.a
138			common/lib/libLLVMArchive.a
139			common/lib/libLLVMBitReader.a
140			common/lib/libLLVMDebugInfo.a
141			common/lib/libLLVMJIT.a
142			common/lib/libLLVMipo.a
143			common/lib/libLLVMVectorize.a
144			common/lib/libLLVMBitWriter.a
145			common/lib/libLLVMTableGen.a
146			#common/lib/libLLVMHexagonCodeGen.a
147			#common/lib/libLLVMHexagonAsmPrinter.a
148			#common/lib/libLLVMHexagonDesc.a
149			#common/lib/libLLVMHexagonInfo.a
150			#common/lib/libLLVMNVPTXCodeGen.a
151			#common/lib/libLLVMNVPTXDesc.a
152			#common/lib/libLLVMNVPTXInfo.a
153			#common/lib/libLLVMNVPTXAsmPrinter.a
154			#common/lib/libLLVMMBlazeCodeGen.a
155			#common/lib/libLLVMMBlazeAsmParser.a
156			#common/lib/libLLVMMBlazeDisassembler.a
157			#common/lib/libLLVMMBlazeDesc.a
158			#common/lib/libLLVMMBlazeInfo.a
159			#common/lib/libLLVMMBlazeAsmPrinter.a
160			common/lib/libLLVMCppBackendCodeGen.a
161			common/lib/libLLVMCppBackendInfo.a
162			#common/lib/libLLVMMSP430CodeGen.a
163			#common/lib/libLLVMMSP430Desc.a
164			#common/lib/libLLVMMSP430AsmPrinter.a
165			#common/lib/libLLVMMSP430Info.a
166			#common/lib/libLLVMXCoreCodeGen.a
167			#common/lib/libLLVMXCoreDesc.a
168			#common/lib/libLLVMXCoreInfo.a
169			#common/lib/libLLVMCellSPUCodeGen.a
170			#common/lib/libLLVMCellSPUDesc.a
171			#common/lib/libLLVMCellSPUInfo.a
172			#common/lib/libLLVMMipsAsmParser.a
173			#common/lib/libLLVMMipsCodeGen.a
174			#common/lib/libLLVMMipsDesc.a
175			#common/lib/libLLVMMipsAsmPrinter.a
176			#common/lib/libLLVMMipsDisassembler.a
177			#common/lib/libLLVMMipsInfo.a
178			#common/lib/libLLVMARMAsmParser.a
179			#common/lib/libLLVMARMCodeGen.a
180			#common/lib/libLLVMARMDisassembler.a
181			#common/lib/libLLVMARMDesc.a
182			#common/lib/libLLVMARMInfo.a
183			#common/lib/libLLVMARMAsmPrinter.a
184			#common/lib/libLLVMPowerPCCodeGen.a
185			#common/lib/libLLVMPowerPCDesc.a
186			#common/lib/libLLVMPowerPCInfo.a
187			#common/lib/libLLVMPowerPCAsmPrinter.a
188			#common/lib/libLLVMSparcCodeGen.a
189			#common/lib/libLLVMSparcDesc.a
190			#common/lib/libLLVMSparcInfo.a
191			common/lib/libLLVMX86AsmParser.a
192			common/lib/libLLVMX86CodeGen.a
193			common/lib/libLLVMSelectionDAG.a
194			common/lib/libLLVMAsmPrinter.a
195			common/lib/libLLVMX86Disassembler.a
196			common/lib/libLLVMX86Desc.a
197			common/lib/libLLVMX86Info.a
198			common/lib/libLLVMX86AsmPrinter.a
199			common/lib/libLLVMX86Utils.a
200			common/lib/libLLVMMCDisassembler.a
201			common/lib/libLLVMMCParser.a
202			common/lib/libLLVMInterpreter.a
203			common/lib/libLLVMCodeGen.a
204			common/lib/libLLVMScalarOpts.a
205			common/lib/libLLVMInstCombine.a
206			common/lib/libLLVMTransformUtils.a
207			common/lib/libLLVMipa.a
208			common/lib/libLLVMAnalysis.a
209			common/lib/libLLVMMCJIT.a
210			common/lib/libLLVMRuntimeDyld.a
211			common/lib/libLLVMExecutionEngine.a
212			common/lib/libLLVMTarget.a
213			common/lib/libLLVMMC.a
214			common/lib/libLLVMObject.a
215			common/lib/libLLVMCore.a
216			common/lib/libLLVMSupport.a
217			: $(zipFile) : extracted-llvm ]
218		;
219
220		EnableBuildFeatures llvm ;
221	} else {
222		# Nor will it ever be
223		Echo "LLVM not available on GCC2" ;
224	}
225} else {
226	Echo "LLVM not yet available on $(TARGET_ARCH)" ;
227}
228
229} # ! 1
230
231
232# GLU (GL Utilities)
233if [ IsPackageAvailable glu_devel ] {
234	ExtractBuildFeatureArchives glu :
235		file: base glu
236			runtime: lib
237		file: devel glu_devel
238			depends: base
239			library: $(developLibDir)/libGLU.so
240			headers: $(developHeadersDir)
241		;
242
243	EnableBuildFeatures glu ;
244} else {
245	Echo "GLU not yet available on $(TARGET_ARCH)" ;
246}
247
248
249# Mesa
250if [ IsPackageAvailable mesa_devel ] {
251	ExtractBuildFeatureArchives mesa : [ FFilterByBuildFeatures
252		file: devel mesa_devel
253			mesaLibrary: $(developLibDir)/libmesa.a
254			glapiLibrary: $(developLibDir)/libglapi.a
255			headers: $(developHeadersDir)
256			privateHeaders: $(developHeadersDir)/mesa_private
257
258			!gcc2 @{
259				glslLibrary: $(developLibDir)/libglsl.a
260				galliumLibrary: $(developLibDir)/libgallium.a
261				llvm @{
262					galliumLlvmpipeLibrary: $(developLibDir)/libllvmpipe.a
263				}@
264				!llvm @{
265					galliumSoftpipeLibrary: $(developLibDir)/libsoftpipe.a
266				}@
267			}@ # !gcc2
268		] ;
269
270	Depends [ BuildFeatureAttribute mesa : galliumLlvmpipeLibrary ]
271		: $(HAIKU_LLVM_LIBS) ;
272
273	EnableBuildFeatures mesa ;
274} else {
275	Echo "Mesa 3D rendering support not available on $(TARGET_ARCH)" ;
276}
277
278
279# FFmpeg
280if [ IsPackageAvailable ffmpeg_devel ] {
281	local ffmpegLibs = libavformat.so libavcodec.so libavdevice.so
282		libavfilter.so libswscale.so libavutil.so ;
283	local speexLibs = libspeex.so ;
284	local libtheoraLibs = libtheora.so libtheoradec.so libtheoraenc.so ;
285	local libvorbisLibs = libvorbis.so libvorbisenc.so ;
286	local liboggLibs = libogg.so ;
287	local libvpxLibs = libvpx.so ;
288
289	local feature ;
290	for feature in ffmpeg speex libtheora libvorbis libogg libvpx {
291		ExtractBuildFeatureArchives $(feature) :
292			file: base $(feature)
293				runtime: lib
294			file: devel $(feature)_devel
295				depends: base
296				libraries: $(developLibDir)/$($(feature)Libs)
297				headers: $(developHeadersDir)
298			;
299
300		EnableBuildFeatures $(feature) ;
301	}
302} else {
303	Echo "FFMpeg support not available on $(TARGET_ARCH)" ;
304}
305
306
307# Freetype
308if [ IsPackageAvailable freetype_devel ] {
309	ExtractBuildFeatureArchives freetype :
310		file: base freetype
311			runtime: lib
312		file: devel freetype_devel
313			depends: base
314			library: $(developLibDir)/libfreetype.so
315			headers: $(developHeadersDir) $(developHeadersDir)/freetype2
316		;
317
318	EnableBuildFeatures freetype ;
319} else {
320	Echo "Freetype support not available on $(TARGET_ARCH)" ;
321}
322
323
324# TagLib
325
326# TODO: Update to packages!
327if ! 1 {
328
329# Automatically install the TagLib feature, when the optional TagLib optional
330# package is enabled.
331if [ IsHaikuImagePackageAdded taglib ] {
332	HAIKU_BUILD_FEATURE_TAGLIB = 1 ;
333}
334
335HAIKU_TAGLIB_PACKAGE = taglib-1.6.3-r1a4-x86-gcc2-2012-09-03.zip ;
336HAIKU_TAGLIB_URL = $(baseURL)/$(HAIKU_TAGLIB_PACKAGE) ;
337
338if $(HAIKU_BUILD_FEATURE_TAGLIB) {
339	if $(TARGET_ARCH) != x86 {
340		Echo "TagLib build feature not available for $(TARGET_ARCH)" ;
341	} else {
342		# Download the zip archive.
343		local zipFile = [ DownloadFile $(HAIKU_TAGLIB_PACKAGE)
344			: $(HAIKU_TAGLIB_URL) ] ;
345
346		# zip file and output directory
347		HAIKU_TAGLIB_ZIP_FILE = $(zipFile) ;
348		HAIKU_TAGLIB_DIR = [ FDirName $(HAIKU_OPTIONAL_BUILD_PACKAGES_DIR)
349			$(HAIKU_TAGLIB_PACKAGE:B) ] ;
350
351		# extract headers and libraries
352		HAIKU_TAGLIB_HEADERS_DEPENDENCY = [ ExtractArchive $(HAIKU_TAGLIB_DIR)
353			: common/include/ : $(zipFile) : extracted-taglib
354		] ;
355
356		HAIKU_TAGLIB_LIBS = [ ExtractArchive $(HAIKU_TAGLIB_DIR)
357			:
358			common/lib/libtag.so
359			common/lib/libtag_c.so
360			: $(zipFile)
361			: extracted-taglib
362		] ;
363
364		HAIKU_TAGLIB_HEADERS
365			= [ FDirName $(HAIKU_TAGLIB_DIR) common include taglib ] ;
366
367		EnableBuildFeatures taglib ;
368	}
369}
370
371} # ! 1
372
373
374# WebKit
375
376# TODO: Update to packages!
377if ! 1 {
378
379# Automatically install the WebKit feature, when the optional WebPositive
380# optional package is enabled.
381if [ IsOptionalHaikuImagePackageAdded WebPositive ] {
382	HAIKU_BUILD_FEATURE_WEBKIT = 1 ;
383}
384
385if $(TARGET_ARCH) = x86 {
386	HAIKU_WEBKIT_FILE = haikuwebkit-1.1.3-x86-gcc4-2012-08-31a.zip ;
387} else if $(TARGET_ARCH) = x86_64 {
388	HAIKU_WEBKIT_FILE = haikuwebkit-1.1.3-x86_64-gcc4-2012-12-22.zip ;
389}
390if $(HAIKU_BUILD_FEATURE_WEBKIT) {
391	if $(TARGET_ARCH) != x86 && $(TARGET_ARCH) != x86_64 {
392		Echo "WebKit support not available on $(TARGET_ARCH)" ;
393	} else if $(TARGET_GCC_VERSION_$(architecture)[1]) < 4 {
394		if ! $(isHybridBuild) {
395			Echo "WebKit support not available on gcc"
396				"$(TARGET_GCC_VERSION_$(architecture)[1])" ;
397		} else {
398			Echo "WebKit to be utilized by gcc4 inside"
399				"$(HAIKU_ALTERNATIVE_GCC_OUTPUT_DIR)" ;
400		}
401	} else {
402		local zipFile = [ DownloadFile $(HAIKU_WEBKIT_FILE)
403			: $(baseURL)/$(HAIKU_WEBKIT_FILE) ] ;
404
405		HAIKU_WEBKIT_DIR = [ FDirName $(HAIKU_OPTIONAL_BUILD_PACKAGES_DIR)
406			$(HAIKU_WEBKIT_FILE:B) ] ;
407
408		HAIKU_WEBKIT_HEADERS_DEPENDENCY = [ ExtractArchive $(HAIKU_WEBKIT_DIR)
409			: include/ : $(zipFile) : extracted-webkit ] ;
410
411		HAIKU_WEBKIT_LIBS = [ ExtractArchive $(HAIKU_WEBKIT_DIR)
412			:
413			lib/libwtf.so
414			lib/libjavascriptcore.so
415			lib/libwebcore.so
416			lib/libwebkit.so
417			: $(zipFile)
418			: extracted-webkit
419		] ;
420
421		HAIKU_WEBKIT_HEADERS = [ FDirName $(HAIKU_WEBKIT_DIR) include ] ;
422
423		EnableBuildFeatures webkit ;
424	}
425}
426
427} # ! 1
428
429
430# libpng
431if [ IsPackageAvailable libpng_devel ] {
432	ExtractBuildFeatureArchives libpng :
433		file: base libpng
434			runtime: lib
435		file: devel libpng_devel
436			depends: base
437			library: $(developLibDir)/libpng.so
438			headers: $(developHeadersDir)
439		;
440
441	EnableBuildFeatures libpng ;
442} else {
443	Echo "libpng support not available on $(TARGET_ARCH)" ;
444}
445
446
447# jpeg
448if [ IsPackageAvailable jpeg_devel ] {
449	ExtractBuildFeatureArchives jpeg :
450		file: base jpeg
451			runtime: lib
452		file: devel jpeg_devel
453			depends: base
454			library: $(developLibDir)/libjpeg.so
455			headers: $(developHeadersDir)
456		;
457
458	EnableBuildFeatures jpeg ;
459} else {
460	Echo "jpeg support not available on $(TARGET_ARCH)" ;
461}
462
463
464# zlib
465if [ IsPackageAvailable zlib_devel ] {
466	ExtractBuildFeatureArchives zlib :
467		file: base zlib
468			runtime: lib
469		file: devel zlib_devel
470			depends: base
471			library: $(developLibDir)/libz.so
472			headers: $(developHeadersDir)
473		# sources are required for the primary architecture only
474		primary @{
475			file: source zlib_source
476				sources: develop/sources/%portRevisionedName%/source
477		}@
478		;
479
480	EnableBuildFeatures zlib ;
481} else {
482	Echo "zlib support not available on $(TARGET_ARCH)" ;
483}
484
485
486# libsolv
487if [ IsPackageAvailable libsolv_devel ] {
488	ExtractBuildFeatureArchives libsolv :
489		file: base libsolv
490			runtime: lib
491		file: devel libsolv_devel
492			depends: base
493			libraries:
494				$(developLibDir)/libsolv.so
495				$(developLibDir)/libsolvext.so
496			headers: $(developHeadersDir)
497		# sources are required for the primary architecture only
498		primary @{
499			file: source libsolv_source
500				sources: develop/sources/%portRevisionedName%/source
501		}@
502		;
503
504	EnableBuildFeatures libsolv ;
505} else {
506	Echo "libsolv package not available for $(TARGET_ARCH)" ;
507}
508
509
510# GPL add-ons
511if $(HAIKU_INCLUDE_GPL_ADDONS) = 1 {
512	EnableBuildFeatures gpl ;
513}
514
515
516# ATA vs. IDE
517#HACK: remove when old ide code is removed!
518if $(HAIKU_ATA_STACK) = 1 {
519	EnableBuildFeatures ata ;
520} else {
521	EnableBuildFeatures ide ;
522}
523