1
# --------------------------------------------------------------
2
# (C)Copyright 2001,2008,
3
# International Business Machines Corporation,
4
# Sony Computer Entertainment, Incorporated,
8
# --------------------------------------------------------------
11
ifndef __MAKE_FOOTER__
14
ifeq "$(MAKEFILE_LIST)" ""
16
########################################################################
17
# Makefile Version < 3.80
18
########################################################################
20
USR_LOCAL ?= /usr/local
21
MAKE_3_80 ?= $(firstword $(wildcard \
22
$(USR_LOCAL)/sti/bin/make \
23
$(USR_LOCAL)/sti/latest-sdk/bin/make \
24
$(USR_LOCAL)/sti/*/bin/make))
25
_MAKECMDGOALS := $(MAKECMDGOALS)
27
$(warning $(MAKE) (v$(MAKE_VERSION)) is too old -- looking for v3.80)
29
ifeq "$(MAKE_3_80)" ""
30
$(error "make" v3.80 not found)
33
rerun_make $(_MAKECMDGOALS):
34
@echo "Found $(MAKE_3_80)"
36
@echo "Automatically restarting make:"
37
@echo " $(MAKE_3_80) $(MAKECMDGOALS)"
39
@ $(MAKE_3_80) $(MAKECMDGOALS)
44
# At this point, make.footer is always the last one in MAKEFILE_LIST
45
make_footer := $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))
48
CELL_TOP_buildutils = $(dir $(make_footer))
49
export CELL_TOP = $(shell cd $(CELL_TOP_buildutils)/.. && pwd)
52
ifndef __MAKE_HEADER__
53
ifneq "$(MAKEFILE_LIST)" ""
54
include $(CELL_TOP)/buildutils/make.header
58
HOST_PROCESSOR := $(shell uname -m)
60
PPU64_PROCESSOR_TYPE := $(shell grep "^cpu" /proc/cpuinfo | grep "Cell Broadband Engine" > /dev/null; if [ $$? = 0 ]; then echo "Cell"; fi)
63
########################################################################
65
########################################################################
67
all: dirs libraries programs misc_ install
70
########################################################################
71
# Systemsim Hardware Simulator Defines
72
########################################################################
74
# The systemsim hardware simulator can be installed anywhere, but the default
75
# is to expect it with everything else.
78
SYSTEMSIM_TOP = /opt/ibm/systemsim-cell
81
SYSTEMSIM_INCLUDE_spu = $(SYSTEMSIM_TOP)/include/callthru/spu
82
SYSTEMSIM_INCLUDE_ppu = $(SYSTEMSIM_TOP)/include/callthru
83
SYSTEMSIM_INCLUDE_ppu64 = $(SYSTEMSIM_TOP)/include/callthru
84
SYSTEMSIM_INCLUDE = $(SYSTEMSIM_INCLUDE_$(__tp__))
86
SYSTEMSIM_LINUX = $(SYSTEMSIM_TOP)/run/cell/linux
89
########################################################################
90
# Common GNU Defines (Host, PPU32, PPU64, SPU)
91
########################################################################
96
PPU_TOOL_PREFIX = $(PPU_PREFIX)
97
PPU32_TOOL_PREFIX = $(PPU32_PREFIX)
99
ifeq "$(HOST_PROCESSOR)" "ppc64"
102
GNU_PPU_BINDIR = /usr/bin
103
GNU_SPU_BINDIR = /usr/bin
105
GNU_ROOT = /opt/cell/toolchain
106
GNU_SYSROOT = /opt/cell/sysroot
107
GNU_PPU_BINDIR = $(GNU_ROOT)/bin
108
GNU_SPU_BINDIR = $(GNU_ROOT)/bin
111
SPU_TOOL_PREFIX = spu-
113
PPU32_BINDIR = $(GNU_PPU_BINDIR)
114
PPU64_BINDIR = $(GNU_PPU_BINDIR)
115
SPU_BINDIR = $(GNU_SPU_BINDIR)
118
export CCACHE := $(shell which ccache 2>/dev/null)
121
########################################################################
122
# Common Fortran Defines
123
########################################################################
125
FTN_SPU_BINDIR_xlf=/opt/cell/toolchain/bin
126
FTN_PPU_BINDIR_xlf=/opt/cell/toolchain/bin
127
FTN_BINDIR_gfortran=/usr/bin
129
########################################################################
131
########################################################################
133
# Set what to build, and what processor to target
134
# Cross-Compile targets are ppu, ppu64, spu.
135
# Native targets include i686, ppc64.
138
#********************
140
#********************
142
SPU_TARGETS := $(strip $(PROGRAM_spu) \
147
$(SHARED_LIBRARY_embed) \
148
$(SHARED_LIBRARY_embed64))
151
TARGET_PROCESSOR := spu
155
#********************
157
#********************
159
PPU_TARGETS := $(strip $(PROGRAM_ppu) \
162
$(SHARED_LIBRARY_ppu))
165
TARGET_PROCESSOR := ppu
169
#********************
171
#********************
173
PPU64_TARGETS := $(strip $(PROGRAM_ppu64) \
176
$(SHARED_LIBRARY_ppu64))
179
TARGET_PROCESSOR := ppu64
183
#####################
185
#####################
188
ifndef TARGET_PROCESSOR
189
TARGET_PROCESSOR := $(HOST_PROCESSOR)
192
ifeq "$(TARGET_PROCESSOR)" "host"
193
TARGET_PROCESSOR := $(HOST_PROCESSOR)
196
ifeq "$(TARGET_PROCESSOR)" "$(HOST_PROCESSOR)"
201
##########################################################
202
# SPU Programs and Plugins Embedded in 32-bit PPU Objects
203
##########################################################
209
ifdef SHARED_LIBRARY_embed
214
##########################################################
215
# SPU Programs and Plugins Embedded in 64-bit PPU Objects
216
##########################################################
218
ifdef LIBRARY_embed64
222
ifdef SHARED_LIBRARY_embed64
227
#####################
229
#####################
231
__tp__ = $(TARGET_PROCESSOR)
234
# __ppu__ means ppu32 and __ppu64__ means ppu64
235
# we want a generic 'ppu either 32 or 64' since make doesn't do
236
# ifdef __ppu__ or __ppu64__
244
PROGRAM += $(PROGRAM_$(__tp__))
245
PROGRAMS += $(PROGRAMS_$(__tp__))
246
LIBRARY += $(LIBRARY_$(__tp__))
247
SHARED_LIBRARY += $(SHARED_LIBRARY_$(__tp__))
250
#*****************************
251
# Split the target name from
252
# its install directory
253
#*****************************
255
get_dir = $(strip $(subst ./,,$(dir $(1))))
256
get_name = $(notdir $(1))
258
ifneq "$(PROGRAM)" ""
259
_PROGRAM_dir := $(call get_dir, $(PROGRAM))
260
_PROGRAM := $(call get_name,$(PROGRAM))
263
ifneq "$(PROGRAMS)" ""
264
_PROGRAMS_dirs := $(call get_dir, $(PROGRAMS))
265
_PROGRAMS := $(call get_name,$(PROGRAMS))
268
ifneq "$(LIBRARY)" ""
269
_LIBRARY_dir := $(call get_dir, $(LIBRARY))
270
_LIBRARY := $(call get_name,$(LIBRARY))
273
ifneq "$(LIBRARY_embed)" ""
274
_LIBRARY_embed_dir := $(call get_dir, $(LIBRARY_embed))
275
_LIBRARY_embed := $(call get_name,$(LIBRARY_embed))
278
ifneq "$(LIBRARY_embed64)" ""
279
_LIBRARY_embed64_dir := $(call get_dir, $(LIBRARY_embed64))
280
_LIBRARY_embed64 := $(call get_name,$(LIBRARY_embed64))
283
ifneq "$(SHARED_LIBRARY)" ""
284
_SHARED_LIBRARY_dir := $(call get_dir, $(SHARED_LIBRARY))
285
_SHARED_LIBRARY := $(call get_name,$(SHARED_LIBRARY))
288
ifneq "$(SHARED_LIBRARY_embed)" ""
289
_SHARED_LIBRARY_embed_dir := $(call get_dir, $(SHARED_LIBRARY_embed))
290
_SHARED_LIBRARY_embed := $(call get_name,$(SHARED_LIBRARY_embed))
293
ifneq "$(SHARED_LIBRARY_embed64)" ""
294
_SHARED_LIBRARY_embed64_dir := $(call get_dir, $(SHARED_LIBRARY_embed64))
295
_SHARED_LIBRARY_embed64 := $(call get_name,$(SHARED_LIBRARY_embed64))
299
########################################################################
301
########################################################################
303
ROOT_SYSROOT ?= $(GNU_SYSROOT)
305
ifeq "$(abspath $(CELL_TOP))" "/opt/cell/sdk"
306
# if this is the default case - building from/into /opt/cell/sdk
307
# (gotta be root, and not really recommended, since you will be
308
# overwriting files that were actually installed..)
309
CBE_SYSROOT =$(GNU_SYSROOT)
311
# private sandbox build environment
312
# slighty different that the base case -- base/old has sysroot and sdk as
313
# directories at the same level. but that doesn't allow for having multiple
314
# different sandboxes. this does.
315
CBE_SYSROOT ?= $(CELL_TOP)/sysroot
318
OPTDIR = /opt/cell/sdk
319
SDK_OPTDIR = $(CBE_SYSROOT)$(OPTDIR)
321
# used for 'input/import' of the 'public' official stuff - simdmath, numa, etc
322
SDKBIN_spu = $(SDK_OPTDIR)/usr/spu/bin
323
SDKBIN_ppu = $(SDK_OPTDIR)/usr/bin
324
SDKBIN_ppu64 = $(SDK_OPTDIR)/usr/bin
326
SDKINC_spu = $(ROOT_SYSROOT)/usr/spu/include
327
SDKINC_ppu = $(ROOT_SYSROOT)/usr/include
328
SDKINC_ppu64 = $(ROOT_SYSROOT)/usr/include
330
SDKLIB_spu = $(ROOT_SYSROOT)/usr/spu/lib
331
SDKLIB_ppu = $(ROOT_SYSROOT)/usr/lib
332
SDKLIB_ppu64 = $(ROOT_SYSROOT)/usr/lib64
334
SDKBIN_host = $(CELL_TOP)/host/bin
335
SDKINC_host = $(CELL_TOP)/host/include
336
SDKLIB_host = $(CELL_TOP)/host/lib
338
SDKBIN_$(HOST_PROCESSOR) = $(SDKBIN_host)
339
SDKINC_$(HOST_PROCESSOR) = $(SDKINC_host)
340
SDKLIB_$(HOST_PROCESSOR) = $(SDKLIB_host)
342
SDKBIN = $(SDKBIN_$(__tp__))
343
SDKINC = $(SDKINC_$(__tp__))
344
SDKLIB = $(SDKLIB_$(__tp__))
345
SDKRPATH = $(subst $(ROOT_SYSROOT),,$(SDKLIB))
347
# used for 'input/import' of the 'example' stuff - libfft, libgmath, etc
348
SDKEXBIN_spu = $(SDK_OPTDIR)/usr/spu/bin
349
SDKEXBIN_ppu = $(SDK_OPTDIR)/usr/bin
350
SDKEXBIN_ppu64 = $(SDK_OPTDIR)/usr/bin
352
SDKEXINC_spu = $(SDK_OPTDIR)/usr/spu/include
353
SDKEXINC_ppu = $(SDK_OPTDIR)/usr/include
354
SDKEXINC_ppu64 = $(SDK_OPTDIR)/usr/include
356
SDKEXLIB_spu = $(SDK_OPTDIR)/usr/spu/lib
357
SDKEXLIB_ppu = $(SDK_OPTDIR)/usr/lib
358
SDKEXLIB_ppu64 = $(SDK_OPTDIR)/usr/lib64
360
SDKEXBIN_host = $(CELL_TOP)/host/bin
361
SDKEXINC_host = $(CELL_TOP)/host/include
362
SDKEXLIB_host = $(CELL_TOP)/host/lib
363
SDKEXBIN_$(HOST_PROCESSOR) = $(SDKEXBIN_host)
364
SDKEXINC_$(HOST_PROCESSOR) = $(SDKEXINC_host)
365
SDKEXLIB_$(HOST_PROCESSOR) = $(SDKEXLIB_host)
367
SDKEXBIN = $(SDKEXBIN_$(__tp__))
368
SDKEXINC = $(SDKEXINC_$(__tp__))
369
SDKEXLIB = $(SDKEXLIB_$(__tp__))
370
SDKEXRPATH = $(subst $(CBE_SYSROOT),,$(SDKEXLIB))
372
# used for 'input/import' of the 'prototype' stuff
373
PROTDIR = /opt/cell/sdk/prototype
374
SDK_PROTDIR = $(CBE_SYSROOT)$(PROTDIR)
376
SDKPRBIN_spu = $(SDK_PROTDIR)/usr/spu/bin
377
SDKPRBIN_ppu = $(SDK_PROTDIR)/usr/bin
378
SDKPRBIN_ppu64 = $(SDK_PROTDIR)/usr/bin
380
SDKPRINC_spu = $(SDK_PROTDIR)/usr/spu/include
381
SDKPRINC_ppu = $(SDK_PROTDIR)/usr/include
382
SDKPRINC_ppu64 = $(SDK_PROTDIR)/usr/include
384
SDKPRLIB_spu = $(SDK_PROTDIR)/usr/spu/lib
385
SDKPRLIB_ppu = $(SDK_PROTDIR)/usr/lib
386
SDKPRLIB_ppu64 = $(SDK_PROTDIR)/usr/lib64
388
SDKPRBIN_host = $(CELL_TOP)/host/bin
389
SDKPRINC_host = $(CELL_TOP)/host/include
390
SDKPRLIB_host = $(CELL_TOP)/host/lib
391
SDKPRBIN_$(HOST_PROCESSOR) = $(SDKPRBIN_host)
392
SDKPRINC_$(HOST_PROCESSOR) = $(SDKPRINC_host)
393
SDKPRLIB_$(HOST_PROCESSOR) = $(SDKPRLIB_host)
395
SDKPRBIN = $(SDKPRBIN_$(__tp__))
396
SDKPRINC = $(SDKPRINC_$(__tp__))
397
SDKPRLIB = $(SDKPRLIB_$(__tp__))
398
SDKPRRPATH = $(subst $(CBE_SYSROOT),,$(SDKPRLIB))
400
# used for build targets for examples, demos, libs
401
ifeq "$(abspath $(CELL_TOP))" "/opt/cell/sdk"
402
# if this is the default case - building from/into /opt/cell/sdk
403
# (gotta be root, and not really recommended, since you will be
404
# overwriting files that were actually installed..)
405
EXP_SYSROOT ?= $(GNU_SYSROOT)
407
# private sandbox build environment
408
# slighty different that the base case -- base/old has sysroot and sdk as
409
# directories at the same level. but that doesn't allow for having multiple
410
# different sandboxes. this does.
411
EXP_SYSROOT ?= $(CELL_TOP)/sysroot
414
EXP_SDK_OPTDIR = $(EXP_SYSROOT)$(OPTDIR)
416
EXP_SDKBIN_spu = $(EXP_SDK_OPTDIR)/usr/spu/bin
417
EXP_SDKBIN_ppu = $(EXP_SDK_OPTDIR)/usr/bin
418
EXP_SDKBIN_ppu64 = $(EXP_SDK_OPTDIR)/usr/bin
420
EXP_SDKINC_spu = $(EXP_SDK_OPTDIR)/usr/spu/include
421
EXP_SDKINC_ppu = $(EXP_SDK_OPTDIR)/usr/include
422
EXP_SDKINC_ppu64 = $(EXP_SDK_OPTDIR)/usr/include
424
EXP_SDKLIB_spu = $(EXP_SDK_OPTDIR)/usr/spu/lib
425
EXP_SDKLIB_ppu = $(EXP_SDK_OPTDIR)/usr/lib
426
EXP_SDKLIB_ppu64 = $(EXP_SDK_OPTDIR)/usr/lib64
428
EXP_SDKBIN_host = $(EXP_SYSROOT)/host/bin
429
EXP_SDKINC_host = $(EXP_SYSROOT)/host/include
430
EXP_SDKLIB_host = $(EXP_SYSROOT)/host/lib
432
EXP_SDKBIN_$(HOST_PROCESSOR) = $(EXP_SDKBIN_host)
433
EXP_SDKINC_$(HOST_PROCESSOR) = $(EXP_SDKINC_host)
434
EXP_SDKLIB_$(HOST_PROCESSOR) = $(EXP_SDKLIB_host)
436
EXP_SDKBIN = $(EXP_SDKBIN_$(__tp__))
437
EXP_SDKINC = $(EXP_SDKINC_$(__tp__))
438
EXP_SDKLIB = $(EXP_SDKLIB_$(__tp__))
440
# where prototype stuff ships
441
EXP_SDKPRBIN_spu = $(EXP_SDK_OPTDIR)/prototype/usr/spu/bin
442
EXP_SDKPRBIN_ppu = $(EXP_SDK_OPTDIR)/prototype/usr/bin
443
EXP_SDKPRBIN_ppu64 = $(EXP_SDK_OPTDIR)/prototype/usr/bin
445
EXP_SDKPRINC_spu = $(EXP_SDK_OPTDIR)/prototype/usr/spu/include
446
EXP_SDKPRINC_ppu = $(EXP_SDK_OPTDIR)/prototype/usr/include
447
EXP_SDKPRINC_ppu64 = $(EXP_SDK_OPTDIR)/prototype/usr/include
449
EXP_SDKPRLIB_spu = $(EXP_SDK_OPTDIR)/prototype/usr/spu/lib
450
EXP_SDKPRLIB_ppu = $(EXP_SDK_OPTDIR)/prototype/usr/lib
451
EXP_SDKPRLIB_ppu64 = $(EXP_SDK_OPTDIR)/prototype/usr/lib64
453
EXP_SDKPRBIN = $(EXP_SDKPRBIN_$(__tp__))
454
EXP_SDKPRINC = $(EXP_SDKPRINC_$(__tp__))
455
EXP_SDKPRLIB = $(EXP_SDKPRLIB_$(__tp__))
457
########################################################################
459
########################################################################
461
# The absolute base to place built files in
463
BUILD_ROOT ?= $(CELL_TOP)
465
# The directory to create the "export" directory in.
466
# This value defaults to BUILD_ROOT unless overridden by the
469
EXPORT_ROOT ?= $(BUILD_ROOT)
471
# Base directories files are "exported" to:
473
EXPTOP := $(EXPORT_ROOT)/export
474
EXPTOP_spu := $(EXPTOP)/cell/usr/spu
475
EXPTOP_ppu := $(EXPTOP)/cell
476
EXPTOP_ppu64 := $(EXPTOP)/cell
477
EXPTOP_x86_64 := $(EXPTOP)/x86_64
478
EXPTOP_common := $(EXPTOP)/common
480
# Locations of exported libraries:
482
EXPLIB_spu := $(EXPTOP_spu)/lib
483
EXPLIB_ppu := $(EXPTOP_ppu)/usr/lib
484
EXPLIB_ppu64 := $(EXPTOP_ppu64)/usr/lib64
485
EXPLIB_x86_64 := $(EXPTOP_x86_64)/usr/lib64
487
# Locations of exported include files:
489
EXPINC_spu := $(EXPTOP_spu)/include
490
EXPINC_ppu := $(EXPTOP_ppu)/usr/include
491
EXPINC_ppu64 := $(EXPTOP_ppu64)/usr/include
492
EXPINC_x86_64 := $(EXPTOP_x86_64)/usr/include
493
EXPINC_common := $(EXPTOP_common)/usr/include
495
TEST_ROOT := $(EXPORT_ROOT)/tests
497
# Locations of exported executables:
499
EXPBIN_spu := $(EXPTOP_spu)/bin
500
EXPBIN_ppu := $(EXPTOP_ppu)/usr/bin
501
EXPBIN_ppu64 := $(EXPTOP_ppu64)/usr/bin64
502
EXPBIN_x86_64 := $(EXPTOP_x86_64)/usr/bin64
505
########################################################################
507
########################################################################
509
.PHONY: all dirs libraries programs misc_ install clean
511
dirs: $(GNU_DIRS) $(DIRS)
512
programs: $(PROGRAM) $(PROGRAMS)
513
libraries: $(LIBRARY) $(SHARED_LIBRARY) \
514
$(LIBRARY_embed) $(SHARED_LIBRARY_embed) \
515
$(LIBRARY_embed64) $(SHARED_LIBRARY_embed64)
516
misc_: $(OBJS_ONLY) $(HEADERS_ONLY) $(CONFIG_LOG) $(OTHER_TARGETS)
518
TARGETS = $(PROGRAM) $(PROGRAMS) \
519
$(LIBRARY) $(SHARED_LIBRARY) \
520
$(LIBRARY_embed) $(SHARED_LIBRARY_embed) \
521
$(LIBRARY_embed64) $(SHARED_LIBRARY_embed64) \
522
$(OBJS_ONLY) $(HEADERS_ONLY) $(CONFIG_LOG) $(OTHER_TARGETS)
524
LOCAL_TARGETS = $(_PROGRAM) $(_PROGRAMS) \
525
$(_LIBRARY) $(_SHARED_LIBRARY) \
526
$(_LIBRARY_embed) $(_SHARED_LIBRARY_embed) \
527
$(_LIBRARY_embed64) $(_SHARED_LIBRARY_embed64) \
528
$(_SHARED_LIBRARY_SONAME) $(_SHARED_LIBRARY_BASENAME)
531
########################################################################
533
########################################################################
541
ifeq "$(HOST_COMPILER)" "local"
542
TOOL_BINDIR = /usr/bin
546
PATH := $(TOOL_BINDIR):$(SDKBIN_host):$(PATH)
549
CC := $(CCACHE) $(TOOL_BINDIR)/gcc
550
CXX := $(CCACHE) $(TOOL_BINDIR)/g++
560
TOOL_BINDIR = $(SPU_BINDIR)
561
TOOL_PREFIX = $(SPU_TOOL_PREFIX)
562
PATH := $(TOOL_BINDIR):$(PATH)
564
ifeq "$(SPU_COMPILER)" "spuxlc"
568
ifeq "$(SPU_COMPILER)" "xlc"
570
_XLC_VERSIONS := $(XLC_VERSION)
575
CC := $(CCACHE) $(TOOL_BINDIR)/$(TOOL_PREFIX)gcc
576
CXX := $(CCACHE) $(TOOL_BINDIR)/$(TOOL_PREFIX)g++
578
ifeq "$(wildcard $(CC))" ""
579
$(warning $(CC) not found)
594
TOOL_BINDIR = $(PPU32_BINDIR)
595
TOOL_PREFIX = $(PPU32_TOOL_PREFIX)
596
PATH := $(TOOL_BINDIR):$(PATH)
598
ifeq "$(PPU32_COMPILER)" "ppuxlc"
599
PPU32_COMPILER := xlc
602
ifeq "$(PPU32_COMPILER)" "xlc"
603
_XLC_VERSIONS := $(XLC_VERSION)
606
# xlc will get CC and CXX later
608
CC := $(CCACHE) $(TOOL_BINDIR)/$(PPU32_PREFIX)gcc
609
CXX := $(CCACHE) $(TOOL_BINDIR)/$(PPU32_PREFIX)g++
611
ifeq "$(wildcard $(CC))" ""
612
$(warning $(CC) not found)
617
ifeq "$(SYSTEMSIM_STANDALONE)" "1"
618
_INCLUDE += -I $(SYSTEMSIM_TOP)/include
631
TOOL_BINDIR = $(PPU64_BINDIR)
632
TOOL_PREFIX = $(PPU_TOOL_PREFIX)
633
PATH := $(TOOL_BINDIR):$(PATH)
635
ifeq "$(PPU64_COMPILER)" "xlc"
636
_XLC_VERSIONS := $(XLC_VERSION)
640
# xlc will get CC and CXX later
642
CC := $(CCACHE) $(TOOL_BINDIR)/$(PPU_PREFIX)gcc
643
CXX := $(CCACHE) $(TOOL_BINDIR)/$(PPU_PREFIX)g++
645
ifeq "$(wildcard $(CC))" ""
646
$(warning $(CC) not found)
651
PATH := $(TOOL_BINDIR):$(PATH)
662
ifndef XLC_INSTALL_DIR
663
# check for xlc in the order specified
664
find_xlc = $(shell for i in $(1); do if [ -e $$i/bin/$(2)xlc ]; then echo "$$i"; exit; elif [ -e $$i/ship/bin/$(2)xlc ]; then echo "$$i/ship"; exit; fi; done)
666
_XLC_VERSIONS := $(subst xlc/,/opt/ibmcmp/xlc/,$(_XLC_VERSIONS)) \
667
$(subst xlc/,$(USR_LOCAL)/xlc/,$(_XLC_VERSIONS))
669
XLC_INSTALL_DIR := $(call find_xlc,$(_XLC_VERSIONS),$(XLC_PREFIX))
670
export XLC_INSTALL_DIR
673
ifeq "$(XLC_INSTALL_DIR)" ""
674
$(error Error: No $(XLC_PREFIX)xlc found. $(CELL_TOP)/buildutils/make.env specified these choices: $(addsuffix /bin/$(XLC_PREFIX)xlc,$(_XLC_VERSIONS)))
676
CC := $(XLC_INSTALL_DIR)/bin/$(XLC_PREFIX)xlc
677
CXX := $(XLC_INSTALL_DIR)/bin/$(XLC_PREFIX)xlc++
678
PATH := $(XLC_INSTALL_DIR)/bin:$(PATH)
682
#########################
683
# Fortran HOST Compiler
684
#########################
688
ifeq "$(HOST_COMPILER)" "local"
689
FTN_TOOL_BINDIR = $(FTN_BINDIR_gfortran)
690
FORTRAN := $(FTN_TOOL_BINDIR)/gfortran
691
COMMON_FFLAGS += --fixed-line-length-0
692
_FFLAGS = $(COMMON_FFLAGS) $(FFLAGS) $(INCLUDE)
695
PATH := $(FTN_TOOL_BINDIR):$(PATH)
697
#ifeq "$(wildcard $(FORTRAN))" ""
698
# $(warning $(FORTRAN) not found)
702
#########################
703
# Fortran SPU Compiler
704
#########################
708
ifeq "$(FTN_SPU_COMPILER)" "spuxlf"
709
FTN_SPU_COMPILER := xlf
712
ifeq "$(FTN_SPU_COMPILER)" "xlf"
713
FTN_TOOL_BINDIR = $(FTN_SPU_BINDIR_xlf)
714
_XLF_VERSIONS := $(XLF_VERSION)
716
COMMON_FFLAGS += -qextname
717
_FFLAGS = $(COMMON_FFLAGS) $(FFLAGS) $(INCLUDE)
720
ifeq "$(FTN_SPU_COMPILER)" "gfortran"
722
FORTRAN := $(TOOL_BINDIR)/$(SPU_TOOL_PREFIX)gfortran
723
COMMON_FFLAGS += --fixed-line-length-0
724
_FFLAGS = $(COMMON_FFLAGS) $(FFLAGS) $(INCLUDE)
726
#ifeq "$(wildcard $(FORTRAN))" ""
727
# $(warning $(FORTRAN) not found)
732
PATH := $(FTN_TOOL_BINDIR):$(PATH)
737
########################
738
# Fortran PPU Compiler
739
########################
743
PATH := $(FTN_TOOL_BINDIR):$(PATH)
745
ifeq "$(FTN_PPU32_COMPILER)" "ppuxlf"
746
FTN_PPU32_COMPILER := xlf
749
ifeq "$(FTN_PPU32_COMPILER)" "xlf"
750
FTN_TOOL_BINDIR = $(FTN_PPU_BINDIR_xlf)
752
_XLF_VERSIONS := $(XLF_VERSION)
754
COMMON_FFLAGS += -qextname -q32
755
_FFLAGS = $(COMMON_FFLAGS) $(FFLAGS) $(INCLUDE)
757
ifeq "$(FTN_PPU32_COMPILER)" "gfortran"
758
FORTRAN := $(TOOL_BINDIR)/$(PPU_TOOL_PREFIX)gfortran
759
COMMON_FFLAGS += --fixed-line-length-0 -m32
760
_FFLAGS = $(COMMON_FFLAGS) $(FFLAGS) $(INCLUDE)
762
#ifeq "$(wildcard $(FORTRAN))" ""
763
# $(warning $(FORTRAN) not found on this machine)
771
##########################
772
# Fortran PPU64 Compiler
773
##########################
777
PATH := $(FTN_TOOL_BINDIR):$(PATH)
779
ifeq "$(FTN_PPU64_COMPILER)" "ppuxlf"
780
FTN_PPU64_COMPILER := xlf
783
ifeq "$(FTN_PPU64_COMPILER)" "xlf"
784
FTN_TOOL_BINDIR = $(FTN_PPU_BINDIR_xlf)
785
_XLF_VERSIONS := $(XLF_VERSION)
787
COMMON_FFLAGS += -qextname -q64
788
_FFLAGS = $(COMMON_FFLAGS) $(FFLAGS) $(INCLUDE)
790
ifeq "$(FTN_PPU64_COMPILER)" "gfortran"
791
FORTRAN := $(TOOL_BINDIR)/$(PPU_TOOL_PREFIX)gfortran
792
COMMON_FFLAGS += --fixed-line-length-0 -m64
793
_FFLAGS = $(COMMON_FFLAGS) $(FFLAGS) $(INCLUDE)
795
#ifeq "$(wildcard $(FORTRAN))" ""
796
# $(warning $(FORTRAN) not found on this machine)
810
ifndef XLF_INSTALL_DIR
811
# check for xlf in the order specified
812
find_xlf = $(shell for i in $(1); do if [ -e $$i/bin/$(2)xlf ]; then echo "$$i"; exit; elif [ -e $$i/ship/bin/$(2)xlf ]; then echo "$$i/ship"; exit; fi; done)
814
_XLF_VERSIONS := $(subst xlf/,/opt/ibmcmp/xlf/,$(_XLF_VERSIONS)) \
815
$(subst xlf/,$(USR_LOCAL)/xlf/,$(_XLF_VERSIONS))
817
XLF_INSTALL_DIR := $(call find_xlf,$(_XLF_VERSIONS),$(XLF_PREFIX))
818
export XLF_INSTALL_DIR
821
ifeq "$(XLF_INSTALL_DIR)" ""
822
$(error Error: No $(XLF_PREFIX)xlf found. $(CELL_TOP)/buildutils/make.env specified these choices: $(addsuffix /bin/$(XLF_PREFIX)xlf,$(_XLF_VERSIONS)))
824
FORTRAN := $(XLF_INSTALL_DIR)/bin/$(XLF_PREFIX)xlf
825
PATH := $(XLF_INSTALL_DIR)/bin:$(PATH)
829
########################################################################
831
########################################################################
835
AS := $(TOOL_BINDIR)/$(TOOL_PREFIX)as
836
LD := $(TOOL_BINDIR)/$(TOOL_PREFIX)ld
838
SPU_AR := $(GNU_SPU_BINDIR)/$(SPU_TOOL_PREFIX)ar
839
PPU_AR := $(TOOL_BINDIR)/$(PPU_TOOL_PREFIX)ar
840
HOST_AR := $(TOOL_BINDIR)/ar
857
EMBEDSPU32 := $(GNU_PPU_BINDIR)/ppu-embedspu -m32
858
EMBEDSPU64 := $(GNU_PPU_BINDIR)/ppu-embedspu -m64
861
# these is only 1 version of these - ppu (not ppu32 and ppu)
862
OBJCOPY := $(TOOL_BINDIR)/$(PPU_TOOL_PREFIX)objcopy
863
OBJDUMP := $(TOOL_BINDIR)/$(PPU_TOOL_PREFIX)objdump
864
RANLIB := $(TOOL_BINDIR)/$(PPU_TOOL_PREFIX)ranlib
865
READELF := $(TOOL_BINDIR)/$(PPU_TOOL_PREFIX)readelf
867
OBJCOPY := $(TOOL_BINDIR)/$(TOOL_PREFIX)objcopy
868
OBJDUMP := $(TOOL_BINDIR)/$(TOOL_PREFIX)objdump
869
RANLIB := $(TOOL_BINDIR)/$(TOOL_PREFIX)ranlib
870
READELF := $(TOOL_BINDIR)/$(TOOL_PREFIX)readelf
877
INDENT := indent -bad -bap -bbb -bli0 -cli4 -i4 -l80 -nip -pcs -psl -sob
885
TAR_GZIP := $(TAR) -z
886
TAR_BZIP := $(TAR) -j
889
REMOVE_EMPTY_DIRECTORY := rmdir -p --ignore-fail-on-non-empty
892
# Default to allowing a .i file to be compiled (i.e. #line are not added).
893
# If you want to see the files that the code comes from (i.e. add the #line)
894
# then set this value to 0
896
WANT_TO_COMPILE_I_FILE ?= 1
899
########################################################################
901
########################################################################
904
space := $(empty) $(empty)
906
_VPATH := $(subst $(space),:,$(strip $(VPATH)))
910
########################################################################
911
# Include Directories
912
########################################################################
917
_INCLUDE += -I $(subst :, -I ,$(VPATH))
920
_INCLUDE += $(INCLUDE)
923
# Nvidia has updated OpenGL files -- use those if installed
924
NVIDIA_INCLUDE := $(wildcard /usr/share/doc/NVIDIA_GLX-1.0/include)
925
ifneq "$(NVIDIA_INCLUDE)" ""
926
_INCLUDE += -I $(NVIDIA_INCLUDE)
930
# don't include this if its one of the standard locations
931
ifneq "$(ROOT_SYSROOT)" "$(GNU_SYSROOT)"
932
_INCLUDE += -I $(SDKINC)
935
_INCLUDE += -I $(SDKEXINC)
937
PREV_DIR_1 = $(dir $(CURDIR))
938
PREV_DIR_2 = $(dir $(PREV_DIR_1:%/=%))
941
########################################################################
943
########################################################################
944
ifeq "$(SYSTEMSIM_STANDALONE)" "1"
945
TEXT_ADDRESS ?= 0x1000
951
#----------------------------------
952
# XLC-Specific Preprocessor Flags
953
#----------------------------------
954
# CPPFLAGS_xlc - User-defined in Makefile for xlc only
955
# -qcpluscmt - Allow // as a comment
956
# -M - Create a dependency file while compiling
957
# -ma - Generate inline calls to the "alloca" function
959
COMPILER_CPPFLAGS = $(CPPFLAGS_xlc) \
961
C_COMPILER_LDFLAGS = $(LDFLAGS_xlc)
964
VECTOR_FLAG = -qaltivec -qenablevmx
966
ifeq "$(SYSTEMSIM_STANDALONE)" "1"
967
STANDALONE_LDFLAGS += -qnocrt -qstaticlink -Wl,-Ttext=$(TEXT_ADDRESS)
972
C_COMPILER_LDFLAGS += -Wl,-m,elf32ppc
975
C_COMPILER_LDFLAGS += -q64 -Wl,-m,elf64ppc
978
#----------------------------------
979
# GCC-Specific Preprocessor Flags
980
#----------------------------------
981
# CPPFLAGS_gcc - User-defined in Makefile for gcc only
982
# -W - Enable extra warnings
983
# -Wall - Enable all preprocessor warnings
984
# -Winline - Warn when inlined function cannot be inlined
986
COMPILER_CPPFLAGS = $(CPPFLAGS_gcc)
987
C_COMPILER_LDFLAGS = $(LDFLAGS_gcc)
988
WARNING_FLAGS ?= -W -Wall -Winline
991
VECTOR_FLAG = -mabi=altivec -maltivec
993
ifeq "$(SYSTEMSIM_STANDALONE)" "1"
994
C_COMPILER_LDFLAGS += -nostartfiles -static -Wl,-Ttext=$(TEXT_ADDRESS)
998
C_COMPILER_LDFLAGS += -m32 -Wl,-m,elf32ppc
1002
COMMON_CPPFLAGS = $(NO_STDINC) \
1005
$(COMPILER_CPPFLAGS)
1007
_SPPFLAGS = $(CPPFLAGS_$(@:.o=)) \
1008
$(CPPFLAGS_$(@:.s=)) \
1009
$(CPPFLAGS_$(@:.i=)) \
1010
$(CPPFLAGS_$(@:.d=)) \
1012
$(COMMON_CPPFLAGS) \
1015
_CPPFLAGS = $(_SPPFLAGS) \
1018
########################################################################
1020
########################################################################
1024
COMPILER_CFLAGS = $(CFLAGS_xlc)
1026
NOSTARTFILES := -qnocrt
1030
CC_OPT_LEVEL_DEBUG := -g -qnoopt
1033
COMPILER_CFLAGS := $(CFLAGS_gcc)
1035
NOSTARTFILES := -nostartfiles
1036
NOSTDLIB := -nostdlib
1039
ifdef _SHARED_LIBRARY
1040
COMPILER_CFLAGS += $(CFLAGS_so)
1043
ifndef CC_OPT_LEVEL_DEBUG
1044
CC_OPT_LEVEL_DEBUG := -g -O0
1055
COMMON_CFLAGS := $(CC_OPT_LEVEL) $(COMPILER_CFLAGS)
1057
_CFLAGS_ = $(CFLAGS_$(@:.o=)) \
1062
_CFLAGS = $(_CFLAGS_:-fno-inline=-qnoinline)
1064
_CFLAGS = $(_CFLAGS_:-qnoinline=-fno-inline)
1067
COMMON_CXXFLAGS := $(CC_OPT_LEVEL) $(COMPILER_CFLAGS)
1069
_CXXFLAGS_ = $(CXXFLAGS_$(@:.o=)) \
1074
_CXXFLAGS = $(_CXXFLAGS_:-fno-inline=-qnoinline)
1076
_CXXFLAGS = $(_CXXFLAGS_:-qnoinline=-fno-inline)
1081
_CXXFLAGS += -fno-exceptions -fno-rtti
1086
########################################################################
1088
########################################################################
1093
ifeq "$(PPU32_COMPILER)" "cell"
1094
COMMON_ASFLAGS += -a32
1098
_ASFLAGS = $(ASFLAGS_$(@:.o=)) \
1104
########################################################################
1105
# Imported Libraries
1106
########################################################################
1109
_IMPORTS := $(filter-out -l%,$(IMPORTS))
1110
SYS_LIBS += $(filter -l%,$(IMPORTS))
1114
# This is in addition to IMPORTS, which applies to all PROGRAMS
1115
PER_FILE_IMPORTS := $(foreach prog,$(_PROGRAMS),$(IMPORTS_$(prog)))
1116
_PER_FILE_IMPORTS := $(filter-out -l%,$(PER_FILE_IMPORTS))
1117
PER_FILE_SYS_LIBS := $(filter -l%,$(PER_FILE_IMPORTS))
1121
########################################################################
1123
########################################################################
1127
STRIP_FLAG := -Wl,-s
1131
_MAP_FLAG := -Wl,-Map,$(MAPFILE)
1137
FTN_COMPILER_LDFLAGS := -L $(XLF_INSTALL_DIR)/spu/lib/ -R $(XLF_INSTALL_DIR)/spu/lib/
1140
FTN_COMPILER_LDFLAGS := -L $(XLF_INSTALL_DIR)/lib64/ -R $(XLF_INSTALL_DIR)/lib64/
1143
FTN_COMPILER_LDFLAGS := -L $(XLF_INSTALL_DIR)/lib64/ -R $(XLF_INSTALL_DIR)/lib64/
1144
FTN_COMPILER_LDFLAGS += -q64 -Wl,-m,elf64ppc
1146
FTN_COMPILER_LDFLAGS := -L $(XLF_INSTALL_DIR)/lib/ -R $(XLF_INSTALL_DIR)/lib/
1147
FTN_COMPILER_LDFLAGS += -Wl,-m,elf32ppc
1151
FTN_COMPILER_LDFLAGS += -lxlf90
1154
FTN_COMPILER_LDFLAGS += -m32 -Wl,-m,elf32ppc
1158
COMMON_LDFLAGS = $(STRIP_FLAG) $(_MAP_FLAG)
1160
ifneq "$(SYS_LIBS)$(PER_FILE_SYS_LIBS)" ""
1161
# don't include this if its one of the standard locations
1162
ifneq "$(ROOT_SYSROOT)" "$(GNU_SYSROOT)"
1163
COMMON_LDFLAGS += -L$(SDKLIB_$(__tp__))
1165
COMMON_LDFLAGS += -L$(SDKEXLIB_$(__tp__))
1167
ifneq "$(filter -lX%,$(SYS_LIBS))" ""
1168
MULTI_OS_DIR = $(shell $(CC) -print-multi-os-directory 2>/dev/null)
1169
COMMON_LDFLAGS += -L/usr/X11R6/lib/$(MULTI_OS_DIR)
1175
# Until we have an SPU loader capable of performing runtime relocations
1176
# as needed (feature 4758), we will collapse the text and data segments on
1177
# all SPU executables by default.
1178
COMMON_LDFLAGS += -Wl,-N
1182
COMMON_LDFLAGS += $(NOSTARTFILES)
1186
# if defined SHARED_LIBRARY_SONAME and SHARED_LIBRARY_VERSION
1187
# real file is libfoo.so.#.#
1188
# create ln -s libfoo.so libfoo.so.#.#
1189
# create ln -s libfoo.so.# libfoo.so.#.#
1191
# if defined SHARED_LIBRARY_VERSION ONLY
1192
# real file is libfoo.so.#.#
1193
# create ln -s libfoo.so libfoo.so.#.#
1195
# if defined SHARED_LIBRARY_SONAME ONLY
1196
# real file is libfoo.so.#
1197
# create ln -s libfoo.so libfoo.so.#
1199
ifdef SHARED_LIBRARY_VERSION
1200
#define targets for library link
1201
_SHARED_LIBRARY_BASENAME := $(_SHARED_LIBRARY:.so.$(SHARED_LIBRARY_VERSION)=.so)
1203
_SHARED_LIBRARY_VERSION := $(_SHARED_LIBRARY_BASENAME).$(SHARED_LIBRARY_VERSION)
1204
INSTALL_FILES += $(_SHARED_LIBRARY_BASENAME)
1205
$(_SHARED_LIBRARY_BASENAME): $(_SHARED_LIBRARY_SONAME)
1206
ln -s $(_SHARED_LIBRARY_VERSION) $(_SHARED_LIBRARY_BASENAME)
1208
ifdef SHARED_LIBRARY_SONAME
1209
# sanity check - SONAME can't be equal to VERSION
1210
ifeq "$(SHARED_LIBRARY_SONAME)" "$(SHARED_LIBRARY_VERSION)"
1211
$(error SHARED_LIBRARY_SONAME can't be same as SHARED_LIBRARY_VERSION )
1213
#define targets for library link
1214
_SHARED_LIBRARY_SONAME := $(_SHARED_LIBRARY_BASENAME).$(SHARED_LIBRARY_SONAME)
1215
INSTALL_FILES += $(_SHARED_LIBRARY_SONAME)
1216
$(_SHARED_LIBRARY_SONAME): $(_SHARED_LIBRARY_BASENAME)
1217
ln -s $(_SHARED_LIBRARY_VERSION) $(_SHARED_LIBRARY_SONAME)
1220
_SHARED_LIBRARY_SONAME := $(_SHARED_LIBRARY)
1226
ifdef SHARED_LIBRARY_SONAME
1227
#define targets for library link
1228
_SHARED_LIBRARY_BASENAME := $(_SHARED_LIBRARY:.so.$(SHARED_LIBRARY_SONAME)=.so)
1229
_SHARED_LIBRARY_SONAME := $(_SHARED_LIBRARY_BASENAME).$(SHARED_LIBRARY_SONAME)
1230
INSTALL_FILES += $(_SHARED_LIBRARY_BASENAME)
1231
$(_SHARED_LIBRARY_BASENAME): $(_SHARED_LIBRARY_BASENAME)
1232
ln -s $(_SHARED_LIBRARY_SONAME) $(_SHARED_LIBRARY_BASENAME)
1236
_SHARED_LIBRARY_SONAME := $(_SHARED_LIBRARY)
1243
SHARED_LDFLAGS := -shared -soname=$(_SHARED_LIBRARY_embed)
1247
SHARED_LDFLAGS := -shared -soname=$(_SHARED_LIBRARY_SONAME) -m elf32ppc
1248
COMMON_LDFLAGS += -R$(SDKEXRPATH)
1252
SHARED_LDFLAGS := -shared -soname=$(_SHARED_LIBRARY_SONAME) -m elf64ppc
1253
COMMON_LDFLAGS += -R$(SDKEXRPATH)
1257
SHARED_LDFLAGS := -shared -soname=$(_SHARED_LIBRARY_SONAME)
1261
_LDFLAGS = $(LDFLAGS_$@) \
1263
$(STANDALONE_LDFLAGS) \
1267
########################################################################
1269
########################################################################
1271
SRC_BUILT_HERE = $(C_BUILT_HERE) $(S_BUILT_HERE) $(H_BUILT_HERE) $(F_BUILT_HERE) $(CXX_BUILT_HERE)
1274
########################################################################
1276
########################################################################
1278
ifneq "$(PROGRAM)$(LIBRARY)$(_SHARED_LIBRARY)" ""
1285
all_src = $(sort $(notdir $(foreach path,. $(subst :, ,$(VPATH)),$(wildcard $(path)/*.$(1)))))
1287
all_src = $(wildcard *.$(1))
1290
CXX_SRC1 = $(call all_src,C) $(CXX_BUILT_HERE)
1291
CXX_SRC2 = $(call all_src,cpp)
1292
CXX_SRC3 = $(call all_src,cc)
1293
CXX_SRC4 = $(call all_src,cxx)
1294
CXX_OBJS = $(strip $(CXX_SRC1:.C=.o) $(CXX_SRC2:.cpp=.o) \
1295
$(CXX_SRC3:.cc=.o) $(CXX_SRC4:.cxx=.o))
1297
FTN_SRC1 = $(call all_src,f) $(F_BUILT_HERE)
1298
FTN_SRC2 = $(call all_src,f90)
1299
FTN_OBJS = $(strip $(FTN_SRC1:.f=.o) $(FTN_SRC2:.f90=.o))
1302
# if no OBJS specified, assume what they are
1303
# For a single programs, assume all .c .s source files will be used
1305
C_SRC := $(call all_src,c) $(C_BUILT_HERE)
1306
S_SRC := $(call all_src,S) $(S_BUILT_HERE)
1307
AS_SRC := $(call all_src,s)
1309
C_OBJS := $(C_SRC:.c=.o)
1310
S_OBJS := $(S_SRC:.S=.o)
1311
AS_OBJS := $(AS_SRC:.s=.o)
1313
OBJS := $(strip $(C_OBJS) $(S_OBJS) $(AS_OBJS) $(CXX_OBJS) $(FTN_OBJS))
1317
# Objects can be explicitly declared as OBJS_program, where program is
1318
# the name of one of the programs. If no objects are explictly declared,
1319
# then it is assumed that program is created from program.o.
1321
OBJS := $(foreach prog,$(_PROGRAMS),$(if $(OBJS_$(prog)),$(OBJS_$(prog)),$(prog).o))
1325
EMBED_OBJS = $(patsubst %,%-embed.o,$(_PROGRAM) $(_PROGRAMS))
1326
EMBED_OBJS_V = $(filter $(addprefix %/,$(EMBED_OBJS)) $(EMBED_OBJS),$^)
1330
EMBED64_OBJS = $(patsubst %,%-embed64.o,$(_PROGRAM) $(_PROGRAMS))
1331
EMBED64_OBJS_V = $(filter $(addprefix %/,$(EMBED64_OBJS)) $(EMBED64_OBJS),$^)
1335
# This includes the full path of each object (needed for clone trees & VPATH)
1336
OBJS_V = $(filter $(addprefix %/,$(OBJS)) $(OBJS),$^)
1340
START_FILE_V = $(filter $(addprefix %/,$(START_FILE)) $(START_FILE),$^)
1343
########################################################################
1345
########################################################################
1347
#*************************************
1348
# Create Objects (.o)
1349
#*************************************
1355
$(CC) $(_CPPFLAGS) $(_CFLAGS) -c $<
1361
$(CXX) $(_CPPFLAGS) $(_CXXFLAGS) -c $<
1364
$(CXX) $(_CPPFLAGS) $(_CXXFLAGS) -c $<
1367
$(CXX) $(_CPPFLAGS) $(_CXXFLAGS) -c $<
1370
$(CXX) $(_CPPFLAGS) $(_CXXFLAGS) -c $<
1377
$(FORTRAN) $(_FFLAGS) -c $<
1380
$(FORTRAN) $(_FFLAGS) -c $<
1386
$(AS) $(_ASFLAGS) -o $@ $<
1389
$(CPP) $(_SPPFLAGS) $< | $(AS) $(ASFLAGS) -o $@
1391
#*************************************
1392
# Create Assembly Source (.s)
1393
#*************************************
1396
ifeq "$(SPU_TIMING)" "1"
1397
ASM_RULE_2 = ; /opt/cell/sdk/usr/bin/spu_timing -running-count $@
1405
$(CC) $(_CPPFLAGS) $(_CFLAGS) -S $< $(ASM_RULE_2)
1411
$(CXX) $(_CPPFLAGS) $(_CXXFLAGS) -S $< $(ASM_RULE_2)
1414
$(CXX) $(_CPPFLAGS) $(_CXXFLAGS) -S $< $(ASM_RULE_2)
1417
$(CXX) $(_CPPFLAGS) $(_CXXFLAGS) -S $< $(ASM_RULE_2)
1420
$(CXX) $(_CPPFLAGS) $(_CXXFLAGS) -S $< $(ASM_RULE_2)
1426
$(FORTRAN) $(_FFLAGS) -S $< $(ASM_RULE_2)
1429
$(FORTRAN) $(_FFLAGS) -S $< $(ASM_RULE_2)
1437
$(CPP) $(_SPPFLAGS) $< > $@
1440
$(CPP) $(_SPPFLAGS) -o $@ $<
1443
#*************************************
1444
# Create Preprocessed Source (.i)
1445
#*************************************
1450
_IFLAGS = -E -P -o $@
1457
$(CC) $(_CPPFLAGS) $(_CFLAGS) $(_IFLAGS) $<
1463
$(CXX) $(_CPPFLAGS) $(_CXXFLAGS) $(_IFLAGS) $<
1466
$(CXX) $(_CPPFLAGS) $(_CXXFLAGS) $(_IFLAGS) $<
1469
$(CXX) $(_CPPFLAGS) $(_CXXFLAGS) $(_IFLAGS) $<
1472
$(CXX) $(_CPPFLAGS) $(_CXXFLAGS) $(_IFLAGS) $<
1477
# no .i files for fortran
1483
$(CC) $(_SPPFLAGS) $(_CFLAGS) $(_IFLAGS) $<
1486
#*********************************
1487
# Create Listing Files (.lst)
1488
#*********************************
1491
_LSTFLAGS = -qsource -qlist -qlistopt -c
1493
_LSTFLAGS += -qshowinc
1496
_LSTFLAGS = -E -o $@
1503
$(CC) $(_CPPFLAGS) $(_CFLAGS) $(_LSTFLAGS) $<
1509
$(CXX) $(_CPPFLAGS) $(_CXXFLAGS) $(_LSTFLAGS) $<
1512
$(CXX) $(_CPPFLAGS) $(_CXXFLAGS) $(_LSTFLAGS) $<
1515
$(CXX) $(_CPPFLAGS) $(_CXXFLAGS) $(_LSTFLAGS) $<
1518
$(CXX) $(_CPPFLAGS) $(_CXXFLAGS) $(_LSTFLAGS) $<
1524
$(FORTRAN) $(_FFLAGS) $(_LSTFLAGS) $<
1527
$(FORTRAN) $(_FFLAGS) $(_LSTFLAGS) $<
1533
$(CXX) $(_SPPFLAGS) $(_CXXFLAGS) $(_LSTFLAGS) $<
1536
########################################################################
1538
########################################################################
1546
@if [ -r $@/Makefile ]; then $(MAKE) -C $@ $(MAKECMDGOALS); fi
1552
@if [ -r $@/Makefile.sti ]; \
1555
echo "***************************************************"; \
1557
echo "* [`date +\"%b %d %T\"`] Configuring gnu directory $(notdir $(CURDIR))/$@";\
1559
echo "***************************************************"; \
1561
$(MAKE) -C $@ -f Makefile.sti; \
1563
if [ -r $@/Makefile ]; \
1566
echo "***************************************************"; \
1568
echo "* [`date +\"%b %d %T\"`] Building gnu directory $(notdir $(CURDIR))/$@";\
1570
echo "***************************************************"; \
1572
$(MAKE) -C $@ all install; \
1577
########################################################################
1579
########################################################################
1582
$(_LIBRARY): $(SRC_BUILT_HERE) $(OBJS) $(_IMPORTS)
1583
$(AR) -qcs $@ $(OBJS_V) $(_IMPORTS)
1587
########################################################################
1588
# Embedded Library Rules
1589
########################################################################
1591
# we use PPU_AR here explicitly because this usually happens in an spu
1592
# directory where __spu__ is defined, but the output is a ppu library.
1593
ifdef _LIBRARY_embed
1594
$(_LIBRARY_embed): $(EMBED_OBJS)
1595
$(PPU_AR) -qcs $@ $(EMBED_OBJS_V)
1598
ifdef _LIBRARY_embed64
1599
$(_LIBRARY_embed64): $(EMBED64_OBJS)
1600
$(PPU_AR) -qcs $@ $(EMBED64_OBJS_V)
1604
# Embed into a 32-bit PPU obj
1605
$(EMBED_OBJS): %-embed.o: %
1606
$(EMBEDSPU32) $(subst -,_,$<)$(FTN_UNDERSCORE) $< $@
1610
# Embed spu obj into a 64-bit PPU obj
1611
$(EMBED64_OBJS): %-embed64.o: %
1612
$(EMBEDSPU64) $(subst -,_,$<)$(FTN_UNDERSCORE) $< $@
1616
########################################################################
1617
# Executable Program Rules
1618
########################################################################
1620
# get the filenames of the objs for this target, w/out the suffix:
1621
BASENAME_OBJS=$(basename $(OBJS))
1623
# we need to determine if any of the OBJS were made with c++ files; if so
1624
# then we have to use g++/xlC; otherwise we'll use gcc/xlc
1625
# get the filenames of the c++ files we found in our vpath, w/out the suffix:
1626
BASENAME_CXX_OBJS=$(basename $(CXX_OBJS))
1627
# intersect - if any match, then we have a c++ file in the obj list
1628
findcxxinobj=$(filter $(a),$(BASENAME_CXX_OBJS))
1629
BASENAME_TRUE_CXX_OBJS=$(foreach a,$(BASENAME_OBJS),$(findcxxinobj))
1630
# and if there is any in this list, we have to use g++/xlC
1631
ifneq "$(strip $(BASENAME_TRUE_CXX_OBJS))" ""
1633
_LDFLAGS += $(C_COMPILER_LDFLAGS)
1635
# we need to determine if any of the OBJS were made with fortran files; if so
1636
# then we have to use gfortran/xlf; otherwise we'll use gcc/xlc
1637
# get the filenames of the fortran files we found in our vpath, w/out the suffix:
1638
BASENAME_FTN_OBJS=$(basename $(FTN_OBJS))
1639
# intersect - if any match, then we have a fortran file in the obj list
1640
findftninobj=$(filter $(a),$(BASENAME_FTN_OBJS))
1641
BASENAME_TRUE_FTN_OBJS=$(foreach a,$(BASENAME_OBJS),$(findftninobj))
1642
# and if there is any in this list, we have to use gfortran/xlf
1643
ifneq "$(strip $(BASENAME_TRUE_FTN_OBJS))" ""
1645
_LDFLAGS += $(FTN_COMPILER_LDFLAGS)
1648
_LDFLAGS += $(C_COMPILER_LDFLAGS)
1653
$(_PROGRAM): $(SRC_BUILT_HERE) $(OBJS) $(_IMPORTS) $(START_FILE)
1654
$(_LD) -o $@ $(START_FILE_V) $(OBJS_V) $(_LDFLAGS) $(_IMPORTS) $(SYS_LIBS)
1658
#The % doesn't work in the $(OBJS_%) dependency:
1659
#$(_PROGRAMS): %: $(SRC_BUILT_HERE) $(OBJS_%) $(_IMPORTS)
1660
$(_PROGRAMS): $(SRC_BUILT_HERE) $(OBJS) $(_IMPORTS) $(_PER_FILE_IMPORTS) $(START_FILE)
1661
@if [ "$(OBJS_$@)" != "" ]; \
1663
objs="$(filter $(addprefix %/,$(OBJS_$@)) $(OBJS_$@),$^)"; \
1665
objs="$(filter $(addprefix %/,$@.o) $@.o,$^)"; \
1667
per_file_syslibs="$(filter -l%,$(IMPORTS_$@))"; \
1668
per_file_imports="$(filter $(addprefix %/,$(IMPORTS_$@)) $(IMPORTS_$@),$^)";\
1669
imports="$(_IMPORTS) $$per_file_imports $$per_file_syslibs"; \
1670
echo "$(_LD) -o $@ $(START_FILE_V) $$objs $(_LDFLAGS) $$imports $(SYS_LIBS)";\
1671
$(_LD) -o $@ $(START_FILE_V) $$objs $(_LDFLAGS) $$imports $(SYS_LIBS)
1675
########################################################################
1676
# Shared Library Rules
1677
########################################################################
1679
ifdef _SHARED_LIBRARY
1680
$(_SHARED_LIBRARY): $(SRC_BUILT_HERE) $(OBJS) $(_IMPORTS)
1681
$(LD) $(LDFLAGS) -o $@ $(SHARED_LDFLAGS) $(OBJS_V) $(_IMPORTS) $(SYS_LIBS)
1684
ifdef _SHARED_LIBRARY_embed
1685
$(_SHARED_LIBRARY_embed): $(SRC_BUILT_HERE) $(EMBED_OBJS)
1686
$(subst spu,ppu,$(subst $(SPU_TOOL_PREFIX),$(PPU32_TOOL_PREFIX),$(LD))) -o $@ $(SHARED_LDFLAGS) $(EMBED_OBJS_V)
1689
ifdef _SHARED_LIBRARY_embed64
1690
$(_SHARED_LIBRARY_embed64): $(SRC_BUILT_HERE) $(EMBED64_OBJS)
1691
$(subst spu,ppu,$(subst $(SPU_TOOL_PREFIX),$(PPU_TOOL_PREFIX),$(LD))) -o $@ $(SHARED_LDFLAGS) $(EMBED64_OBJS_V)
1695
########################################################################
1697
########################################################################
1701
$(PROGRAM): $(_PROGRAM)
1702
@if [ "$(@D)" = "" ]; then echo "Error in PROGRAM definition (use = instead of :=)"; exit 1; fi
1707
ifdef _PROGRAMS_dirs
1709
@if [ "$(@D)" = "" ]; then echo "Error in PROGRAMS definition (use = instead of :=)"; exit 1; fi
1715
$(LIBRARY): $(_LIBRARY)
1716
@if [ "$(@D)" = "" ]; then echo "Error in LIBRARY definition (use = instead of :=)"; exit 1; fi
1721
ifdef _LIBRARY_embed_dir
1722
$(LIBRARY_embed): $(_LIBRARY_embed)
1723
@if [ "$(@D)" = "" ]; then echo "Error in LIBRARY_embed definition (use = instead of :=)"; exit 1; fi
1728
ifdef _LIBRARY_embed64_dir
1729
$(LIBRARY_embed64): $(_LIBRARY_embed64)
1730
@if [ "$(@D)" = "" ]; then echo "Error in LIBRARY_embed64 definition (use = instead of :=)"; exit 1; fi
1735
ifdef _SHARED_LIBRARY_dir
1736
$(SHARED_LIBRARY): $(_SHARED_LIBRARY)
1737
@if [ "$(@D)" = "" ]; then echo "Error in SHARED_LIBRARY definition (use = instead of :=)"; exit 1; fi
1742
ifdef SHARED_LIBRARY_embed_dir
1743
$(SHARED_LIBRARY_embed): $(_SHARED_LIBRARY_embed)
1744
@if [ "$(@D)" = "" ]; then echo "Error in SHARED_LIBRARY_embed definition (use = instead of :=)"; exit 1; fi
1749
ifdef SHARED_LIBRARY_embed64_dir
1750
$(SHARED_LIBRARY_embed64): $(_SHARED_LIBRARY_embed64)
1751
@if [ "$(@D)" = "" ]; then echo "Error in SHARED_LIBRARY_embed64 definition (use = instead of :=)"; exit 1; fi
1758
_INSTALL_FILES = $(foreach dir,$(INSTALL_DIR),$(addprefix $(dir)/,$(INSTALL_FILES)))
1760
_INSTALL_FILES = $(INSTALL_FILES)
1763
ifdef TARGET_INSTALL_DIR
1764
_INSTALL_FILES += $(addprefix $(TARGET_INSTALL_DIR)/,$(TARGETS))
1767
ifneq "$(_INSTALL_FILES)" ""
1768
$(_INSTALL_FILES): $$(@F)
1773
install: $(_INSTALL_FILES)
1776
########################################################################
1778
########################################################################
1781
ifdef _INSTALL_FILES
1782
@$(RM) $(_INSTALL_FILES)
1794
@$(RM) *_tobey.c *.lst *.i *.i.tmp *o\$$1.s
1798
@$(RM) $(TARGETPATH_)*.o
1801
@$(RM) $(TARGETPATH_)*.d
1804
@$(RM) $(TARGETPATH_)*.mod
1807
@$(RM) $(LIBRARY)$(_LIBRARY) \
1808
$(SHARED_LIBRARY)$(_SHARED_LIBRARY) \
1809
$(_SHARED_LIBRARY_SONAME)$(_SHARED_LIBRARY_VERSION) \
1810
$(LIBRARY_embed)$(_LIBRARY_embed) \
1811
$(LIBRARY_embed64)$(_LIBRARY_embed64) \
1812
$(SHARED_LIBRARY_embed) $(_SHARED_LIBRARY_embed) \
1813
$(SHARED_LIBRARY_embed64) $(_SHARED_LIBRARY_embed64)
1816
@$(RM) $(PROGRAM) $(_PROGRAM) $(PROGRAMS) $(_PROGRAMS)
1819
@$(RM) -r $(LOCAL_TARGETS) $(OTHER_TARGETS)
1821
cleandir: cleanobj cleand cleanlib cleanexe cleantargets cleanmap cleantobey cleanlocal cleanfortran
1822
@$(RM) out $(SRC_BUILT_HERE)
1824
.PHONY: cleansubdirs
1828
@for i in $(DIRS); do \
1829
if [ -e $$i/Makefile ]; then $(MAKE) -C $$i clean; fi \
1833
for i in $(GNU_DIRS); do \
1834
if [ -e $$i/Makefile.sti ]; then $(MAKE) -C $$i -f Makefile.sti clean; fi \
1838
clean: cleandir cleansubdirs cleaninstall
1841
########################################################################
1843
########################################################################
1850
_OBJS += $(OBJS_ONLY)
1861
MACROIZE = -e 's,$(CELL_TOP),$$(CELL_TOP),g'
1862
ifneq "$(strip $(CBE_SYSROOT))" ""
1863
MACROIZE += -e 's, $(CBE_SYSROOT), $$(CBE_SYSROOT),g'
1865
ifneq "$(strip $(XLC_INSTALL_DIR))" ""
1866
MACROIZE += -e 's,$(XLC_INSTALL_DIR),$$(XLC_INSTALL_DIR),g'
1868
ifneq "$(strip $(GNU_SYSROOT))" ""
1869
MACROIZE += -e 's,$(GNU_SYSROOT),$$(GNU_SYSROOT),g'
1872
CONVERT_U = -M $(_CPPFLAGS) $< | \
1873
sed -e 's/\($*\)\.o[ :]*/\1.o \1.i \1.lst $@ : /g' \
1874
$(MACROIZE) > $@; [ -s $@ ] || $(RM) $@
1878
# xlc handles .d automagically with the -M option while compiling
1883
@set -e; $(CC) $(CONVERT_U)
1886
@set -e; $(CXX) $(CONVERT_U)
1889
@set -e; $(CXX) $(CONVERT_U)
1892
@set -e; $(CXX) $(CONVERT_U)
1895
@set -e; $(CXX) $(CONVERT_U)
1898
@set -e; $(CC) $(CONVERT_U)
1900
# following don't do .d files, so just touch one to satisfy the makefile rule
1913
########################################################################
1915
########################################################################
1918
@mkdir -p ./sysroot/opt/cell/sdk
1919
@cp -r ${GNU_SYSROOT}/opt/cell/sdk/usr ./sysroot/opt/cell/sdk
1920
@if [ -d ${GNU_SYSROOT}/opt/cell/sdk/prototype/usr ]; then \
1921
mkdir -p ./sysroot/opt/cell/sdk/prototype; \
1922
cp -r ${GNU_SYSROOT}/opt/cell/sdk/prototype/usr ./sysroot/opt/cell/sdk/prototype; \
1924
@echo "sysroot copied into sandbox";
1928
@cp -r ${OPTDIR}/buildutils .
1929
@echo "buildutils copied into sandbox"
1933
@cp ${OPTDIR}/src/Makefile src
1934
@mkdir -p ./prototype/src
1935
@echo "src directory created in sandbox"
1937
sandbox: copy_buildutils copy_sysroot copy_src
1938
@echo "making a local sandbox here (" `pwd` ")"
1939
@echo "make sure you do the following:"
1940
@echo "export CELL_TOP="`pwd`
1942
# Specify a target that will print out the key variables. This is
1943
# useful for debugging a Makefile.
1946
@echo $(shell which $(CC))
1949
@echo $(shell which $(FORTRAN))
1953
@echo "Directory Configuration:"
1954
@echo "------------------------"
1955
@echo " Building on: $(HOST_PROCESSOR) $(shell if [ -r /etc/redhat-release ]; then cat /etc/redhat-release; fi)"
1956
@echo " Target Processor: $(TARGET_PROCESSOR)"
1957
@echo " Makefiles: $(strip $(MAKEFILE_LIST))"
1959
@echo " CELL_TOP = $(CELL_TOP) ($(abspath $(CELL_TOP)))"
1960
@echo " VPATH = $(VPATH)"
1961
@echo " PATH = $(PATH)"
1963
@echo " ROOT_SYSROOT = $(ROOT_SYSROOT)"
1964
@echo " CBE_SYSROOT = $(CBE_SYSROOT)"
1965
@echo " EXP_SYSROOT = $(EXP_SYSROOT)"
1966
@echo " OPTDIR = $(OPTDIR)"
1967
@echo " SDK_OPTDIR = $(SDK_OPTDIR)"
1969
@echo " SDKBIN = $(SDKBIN)"
1970
@echo " SDKINC = $(SDKINC)"
1971
@echo " SDKLIB = $(SDKLIB)"
1973
@echo " SDKEXBIN = $(SDKEXBIN)"
1974
@echo " SDKEXINC = $(SDKEXINC)"
1975
@echo " SDKEXLIB = $(SDKEXLIB)"
1977
@echo " SDKRPATH = $(SDKRPATH)"
1978
@echo " SDKEXRPATH = $(SDKEXRPATH)"
1979
@echo " SDKPRRPATH = $(SDKPRRPATH)"
1981
@echo " EXP_SDKBIN = $(EXP_SDKBIN)"
1982
@echo " EXP_SDKINC = $(EXP_SDKINC)"
1983
@echo " EXP_SDKLIB = $(EXP_SDKLIB)"
1985
@echo " EXP_SDKPRBIN = $(EXP_SDKPRBIN)"
1986
@echo " EXP_SDKPRINC = $(EXP_SDKPRINC)"
1987
@echo " EXP_SDKPRLIB = $(EXP_SDKPRLIB)"
1989
@echo " SYSTEMSIM_INCLUDE = $(SYSTEMSIM_INCLUDE)"
1993
@echo " Targets = $(strip $(TARGETS))"
1994
@echo " Objects = $(strip $(OBJS))"
1995
@echo " Embed Objects = $(strip $(EMBED_OBJS))"
1996
@echo " Embed64 Objs = $(strip $(EMBED64_OBJS))"
1997
@echo " C++ Objects = $(strip $(CXX_OBJS))"
1998
@echo " Fortran Objects= $(strip $(FTN_OBJS))"
1999
@echo " C Objects = $(strip $(C_OBJS))"
2000
@echo " .S Objects = $(strip $(S_OBJS))"
2001
@echo " .s Objects = $(strip $(AS_OBJS))"
2002
@echo " Install Files = $(strip $(_INSTALL_FILES))"
2004
@echo " Build Tools:"
2005
@echo " ------------"
2006
@echo " C Preprocessor = $(CPP)"
2007
@echo " C Compiler = $(shell which $(CC))"
2008
@echo " C++ Compiler = $(shell which $(CXX))"
2009
@echo " Fortran Compiler = $(shell which $(FORTRAN))"
2010
@echo " Assembler = $(shell which $(AS))"
2011
@echo " Library Linker = $(shell which $(LD))"
2012
@echo " Program Linker = $(shell which $(_LD))"
2014
@echo " Default Flags"
2015
@echo " -------------"
2016
@echo " CPPFLAGS = $(strip $(_CPPFLAGS))"
2017
@echo " CXXFLAGS = $(strip $(_CXXFLAGS))"
2018
@echo " CFLAGS = $(strip $(_CFLAGS))"
2019
@echo " ASFLAGS = $(strip $(_ASFLAGS))"
2020
@echo " FFLAGS = $(strip $(_FFLAGS))"
2021
@echo " LDFLAGS = $(strip $(_LDFLAGS))"
2022
@echo " SYS_LIBS = $(strip $(SYS_LIBS))"
2023
@echo " IMPORTS = $(strip $(_IMPORTS))"
2025
$(CELL_TOP)/buildutils/make.header $(CELL_TOP)/buildutils/make.env $(make_footer) Makefile Makefile.sti: ;
2028
########################################################################
2030
########################################################################
2033
ifneq "$(MAKECMDGOALS)" "listenv"
2034
ifneq "$(MAKECMDGOALS)" "clean"
2035
DEPEND_FILES := $(foreach file,$(_OBJS:.o=.d),$(wildcard $(file)))
2036
ifneq "$(DEPEND_FILES)" ""
2037
include $(DEPEND_FILES)
2043
endif # MAKEFILE_LIST
2044
endif # __MAKE_FOOTER__