1 rule AddSharedObjectGlueCode
3 # AddSharedObjectGlueCode <target> : <isExecutable> ;
5 # we link with -nostdlib and add the required libs manually, when building
9 platform = $(PLATFORM) ;
10 if $(platform) = haiku {
11 local stdLibs = [ MultiArchDefaultGristFiles libroot.so ]
13 local type = EXECUTABLE ;
17 # special case for libroot: don't link it against itself
18 if $(DONT_LINK_AGAINST_LIBROOT) {
24 = $(HAIKU_$(type)_BEGIN_GLUE_CODE_$(TARGET_PACKAGING_ARCH)) ;
26 = $(HAIKU_$(type)_END_GLUE_CODE_$(TARGET_PACKAGING_ARCH)) ;
28 LINK_BEGIN_GLUE on $(1) = $(beginGlue) ;
29 LINK_END_GLUE on $(1) = $(endGlue) ;
31 NEEDLIBS on $(1) = [ on $(1) return $(NEEDLIBS) ] $(stdLibs) ;
32 Depends $(1) : $(stdLibs) $(beginGlue) $(endGlue) ;
33 LINKFLAGS on $(1) = [ on $(1) return $(LINKFLAGS) ] -nostdlib
34 -Xlinker --no-undefined ;
38 # link against the compatibility libraries needed for the target
39 if $(platform) != host && $(TARGET_HAIKU_COMPATIBILITY_LIBS) {
40 LinkAgainst $(1) : $(TARGET_HAIKU_COMPATIBILITY_LIBS) ;
46 # Executable <name> : <sources> : <libraries> : <res> ;
48 if ! [ IsPlatformSupportedForTarget $(1) ] {
52 AddResources $(1) : $(4) ;
54 LinkAgainst $(1) : $(3) ;
55 LINKFLAGS on $(1) = [ on $(1) return $(LINKFLAGS) ]
56 -Xlinker -soname=_APP_ ;
58 # we link with -nostdlib and add the required libs manually, when building
60 AddSharedObjectGlueCode $(1) : true ;
65 # Application <name> : <sources> : <libraries> : <res> ;
66 Executable $(1) : $(2) : $(3) : $(4) ;
71 # BinCommand <name> : <sources> : <libraries> : <res> ;
72 Executable $(1) : $(2) : $(3) : $(4) ;
77 # StdBinCommands <sources> : <libs> : <res> ;
83 local target = $(source:S=) ;
85 BinCommand $(target) : $(source) : $(libs) : $(ress) ;
91 # Preference <name> : <sources> : <libraries> : <res> ;
92 Executable $(1) : $(2) : $(3) : $(4) ;
97 # Server <name> : <sources> : <libraries> : <res> ;
99 Executable $(1) : $(2) : $(3) : $(4) ;
102 rule Addon target : sources : libraries : isExecutable
104 # Addon <target> : <sources> : <is executable> : <libraries> ;
105 # <target>: The add-on.
106 # <sources>: Source files.
107 # <libraries>: Libraries to be linked against.
108 # <isExecutable>: true, if the target shall be executable as well.
110 if ! [ IsPlatformSupportedForTarget $(target) ] {
114 Main $(target) : $(sources) ;
116 local linkFlags = -Xlinker -soname=\"$(target:G=)\" ;
117 if $(isExecutable) != true {
118 linkFlags = -shared $(linkFlags) ;
120 LINKFLAGS on $(target) = [ on $(target) return $(LINKFLAGS) ] $(linkFlags) ;
121 LinkAgainst $(target) : $(libraries) ;
123 AddSharedObjectGlueCode $(target) : $(isExecutable) ;
126 rule Translator target : sources : libraries : isExecutable
128 # Translator <target> : <sources> : <libraries> : <isExecutable> ;
129 Addon $(target) : $(sources) : $(libraries) : $(isExecutable) ;
132 rule ScreenSaver target : sources : libraries
134 # ScreenSaver <target> : <sources> : <libraries> ;
135 Addon $(target) : $(sources) : $(libraries) : false ;
140 # StaticLibrary <lib> : <sources> : <otherObjects> ;
141 # Creates a static library from sources.
142 # <lib>: The static library to be built.
143 # <sources>: List of source files.
144 # <otherObjects>: List of additional object files.
147 local sources = [ FGristFiles $(2) ] ;
148 local otherObjects = $(3) ;
149 local objects = $(sources:S=$(SUFOBJ)) ;
151 if ! [ IsPlatformSupportedForTarget $(1) ] {
155 InheritPlatform $(objects) : $(lib) ;
157 StaticLibraryFromObjects $(lib) : $(objects) $(otherObjects) ;
161 rule StaticLibraryFromObjects
163 if ! [ IsPlatformSupportedForTarget $(1) ] {
167 LibraryFromObjects $(1) : $(2) ;
172 if ! [ on $(1) return $(NASMFLAGS) ] {
173 NASMFLAGS on $(1) = -f elf32 ;
176 Depends $(1) : $(2) [ on $(2) return $(PLATFORM) ] ;
181 if test $(ASFLAGS) ; then
182 $(HAIKU_NASM) -d $(ASFLAGS) $(NASMFLAGS) -I$(2:D)/ -o $(1) $(2) ;
184 $(HAIKU_NASM) $(NASMFLAGS) -I$(2:D)/ -o $(1) $(2) ;
190 MakeLocate $(<) : $(HAIKU_OUTPUT_DIR) ;
191 Depends $(<) : $(>) ;
196 cpp -P -xassembler-with-cpp \
197 -I$(HAIKU_TOP)/src/data/dts/arch/$(TARGET_ARCH) \
198 -I$(HAIKU_TOP)/src/data/dts $(2) \
199 | dtc -O dtb -o $(1) \
200 -i $(HAIKU_TOP)/src/data/dts/arch/$(TARGET_ARCH) \
201 -i $(HAIKU_TOP)/src/data/dts ;
206 # Ld <name> : <objs> : <linkerscript> : <flags> ;
208 local target = $(1) ;
209 local objects = $(2) ;
210 local linkerScript = $(3) ;
211 local linkerFlags = $(4) ;
214 linkerFlags += --script=$(linkerScript) ;
218 if $(PLATFORM) = host {
219 LINK on $(target) = $(HOST_LD) ;
220 LINKFLAGS on $(target) = $(HOST_LDFLAGS) $(LINKFLAGS) $(linkerFlags) ;
222 LINK on $(target) = $(TARGET_LD_$(TARGET_PACKAGING_ARCH)) ;
223 LINKFLAGS on $(target) = $(TARGET_LDFLAGS_$(TARGET_PACKAGING_ARCH))
224 $(LINKFLAGS) $(linkerFlags) ;
227 NEEDLIBS on $(target) = $(NEEDLIBS) ;
228 LINKLIBS on $(target) = $(LINKLIBS) ;
231 LocalClean clean : $(target) ;
232 LocalDepends all : $(target) ;
233 Depends $(target) : $(objects) ;
235 MakeLocateDebug $(target) ;
237 on $(1) XRes $(1) : $(RESFILES) ;
238 if ! [ on $(1) return $(DONT_USE_BEOS_RULES) ] {
247 $(LINK) $(LINKFLAGS) -o "$(1)" "$(2)" "$(NEEDLIBS)" $(LINKLIBS)
250 rule CreateAsmStructOffsetsHeader header : source
252 # CreateAsmStructOffsetsHeader header : source
254 # Grist will be added to both header and source.
256 header = [ FGristFiles $(header) ] ;
257 source = [ FGristFiles $(source) ] ;
259 # find out which headers, defines, etc. to use
264 local includesSeparator ;
265 local localIncludesOption ;
266 local systemIncludesOption ;
268 on $(header) { # use on $(1) variable values
269 if ! $(PLATFORM) in $(SUPPORTED_PLATFORMS) {
273 # headers and defines
274 headers = $(HAIKU_CONFIG_HEADERS) $(SEARCH_SOURCE) $(SUBDIRHDRS)
276 sysHeaders = $(SUBDIRSYSHDRS) $(SYSHDRS) ;
277 defines = $(DEFINES) ;
279 if $(PLATFORM) = host {
280 sysHeaders += $(HOST_HDRS) ;
281 defines += $(HOST_DEFINES) ;
284 sysHeaders += $(HOST_BE_API_HEADERS) ;
288 sysHeaders += [ FStandardHeaders $(TARGET_PACKAGING_ARCH) ]
289 $(TARGET_HDRS_$(TARGET_PACKAGING_ARCH)) ;
290 defines += $(TARGET_DEFINES_$(TARGET_PACKAGING_ARCH))
301 if $(PLATFORM) = host {
303 if $(WARNINGS) != 0 {
304 flags += $(HOST_WARNING_C++FLAGS) ;
305 if $(WARNINGS) = treatAsErrors {
306 flags += -Werror $(HOST_WERROR_FLAGS) ;
310 # debug and other flags
311 flags += $(HOST_C++FLAGS) $(HOST_DEBUG_$(DEBUG)_C++FLAGS)
312 $(SUBDIRC++FLAGS) $(C++FLAGS) ;
315 flags += $(HOST_BE_API_C++FLAGS) ;
318 C++ on $(header) = $(HOST_C++) ;
320 includesSeparator = $(HOST_INCLUDES_SEPARATOR) ;
321 localIncludesOption = $(HOST_LOCAL_INCLUDES_OPTION) ;
322 systemIncludesOption = $(HOST_SYSTEM_INCLUDES_OPTION) ;
326 if $(WARNINGS) != 0 {
327 flags += $(TARGET_WARNING_C++FLAGS_$(TARGET_PACKAGING_ARCH)) ;
328 if $(WARNINGS) = treatAsErrors {
330 $(TARGET_WERROR_FLAGS_$(TARGET_PACKAGING_ARCH)) ;
334 # debug and other flags
335 flags += $(TARGET_C++FLAGS_$(TARGET_PACKAGING_ARCH))
336 $(TARGET_DEBUG_$(DEBUG)_C++FLAGS_$(TARGET_PACKAGING_ARCH))
337 $(SUBDIRC++FLAGS) $(C++FLAGS) ;
339 C++ on $(header) = $(TARGET_C++_$(TARGET_PACKAGING_ARCH)) ;
342 = $(TARGET_INCLUDES_SEPARATOR_$(TARGET_PACKAGING_ARCH)) ;
344 = $(TARGET_LOCAL_INCLUDES_OPTION_$(TARGET_PACKAGING_ARCH)) ;
346 = $(TARGET_SYSTEM_INCLUDES_OPTION_$(TARGET_PACKAGING_ARCH)) ;
350 # Turn off "invalid use of offsetof()" macro warning. We use offsetof() also
351 # for non-PODs. Since we're using the same compiler for the whole kernel and
352 # don't do virtual inheritence, that works well enough.
353 flags += -Wno-invalid-offsetof ;
354 # TODO: Rather get rid of the respective offsetof() instances.
356 if $(HAIKU_CC_IS_CLANG_$(TARGET_PACKAGING_ARCH)) = 1 {
357 flags += -no-integrated-as ;
360 # locate object, search for source, and set on target variables
362 Depends $(header) : $(source) $(PLATFORM) ;
363 SEARCH on $(source) += $(SEARCH_SOURCE) ;
364 MakeLocateArch $(header) ;
365 LocalClean clean : $(header) ;
367 HDRRULE on $(source) = HdrRule ;
368 HDRSCAN on $(source) = $(HDRPATTERN) ;
369 HDRSEARCH on $(source) = $(headers) $(sysHeaders) $(STDHDRS) ;
370 HDRGRIST on $(source) = $(HDRGRIST) ;
372 C++FLAGS on $(header) = $(flags) ;
373 CCHDRS on $(header) = [ FIncludes $(headers) : $(localIncludesOption) ]
375 [ FSysIncludes $(sysHeaders) : $(systemIncludesOption) ] ;
376 CCDEFS on $(header) = [ FDefines $(defines) ] ;
378 CreateAsmStructOffsetsHeader1 $(header) : $(source) ;
381 actions CreateAsmStructOffsetsHeader1
383 $(C++) -S "$(2)" $(C++FLAGS) $(CCDEFS) $(CCHDRS) -o - \
384 | grep "#define" | $(SED) -e 's/[\$\#]\([0-9]\)/\1/' > "$(1)"
387 rule MergeObjectFromObjects
389 # MergeObjectFromObjects <name> : <objects> : <other objects> ;
390 # Merges object files to an object file.
391 # <name>: Name of the object file to create. No grist will be added.
392 # <objects>: Object files to be merged. Grist will be added.
393 # <other objects>: Object files or static libraries to be merged. No grist
396 local objects = [ FGristFiles $(2) ] ;
399 if ! $(PLATFORM) in $(SUPPORTED_PLATFORMS) {
403 if $(PLATFORM) = host {
404 LINK on $(1) = $(HOST_LD) ;
405 LINKFLAGS on $(target) = $(HOST_LDFLAGS) ;
407 LINK on $(1) = $(TARGET_LD_$(TARGET_PACKAGING_ARCH)) ;
408 LINKFLAGS on $(target)
409 = $(TARGET_LDFLAGS_$(TARGET_PACKAGING_ARCH)) ;
413 MakeLocateDebug $(1) ;
414 Depends $(1) : $(objects) ;
415 Depends $(1) : $(3) ;
416 LocalDepends obj : $(1) ;
417 MergeObjectFromObjects1 $(1) : $(objects) $(3) ;
420 actions MergeObjectFromObjects1
422 $(LINK) $(LINKFLAGS) -r $(2) -o $(1) ;
427 # MergeObject <name> : <sources> : <other objects> ;
428 # Compiles source files and merges the object files to an object file.
429 # <name>: Name of the object file to create. No grist will be added.
430 # <sources>: Sources to be compiled. Grist will be added.
431 # <other objects>: Object files or static libraries to be merged. No grist
434 local target = $(1) ;
435 local sources = [ FGristFiles $(2) ] ;
436 local otherObjects = $(3) ;
437 local objects = $(sources:S=$(SUFOBJ)) ;
439 if ! [ IsPlatformSupportedForTarget $(1) ] {
443 InheritPlatform $(objects) : $(target) ;
445 MergeObjectFromObjects $(target) : $(objects) : $(otherObjects) ;
448 rule SharedLibraryFromObjects
450 # SharedLibraryFromObjects <lib> : <objects> : <libraries> ;
454 if ! [ IsPlatformSupportedForTarget $(1) ] {
458 local soname = [ on $(_lib) return $(HAIKU_SONAME) ] ;
459 soname ?= $(_lib:BS) ;
461 MainFromObjects $(_lib) : $(2) ;
462 LINKFLAGS on $(_lib) = [ on $(_lib) return $(LINKFLAGS) ]
463 -shared -Xlinker -soname=\"$(soname)\" ;
464 LinkAgainst $(_lib) : $(3) ;
466 AddSharedObjectGlueCode $(_lib) : false ;
471 # SharedLibrary <lib> : <sources> : <libraries> : <abiVersion> ;
473 local sources = [ FGristFiles $(2) ] ;
474 local objects = $(sources:S=$(SUFOBJ)) ;
476 local abiVersion = $(4) ; # major ABI (soname) version for lib (if any)
478 if ! [ IsPlatformSupportedForTarget $(1) ] {
483 HAIKU_SONAME on $(lib) = $(lib:BS).$(abiVersion) ;
484 HAIKU_LIB_ABI_VERSION on $(lib) = $(abiVersion) ;
487 InheritPlatform $(objects) : $(lib) ;
489 SharedLibraryFromObjects $(lib) : $(objects) : $(libs) ;
494 # LinkAgainst <name> : <libs> [ : <mapLibs> ] ;
495 # Valid elements for <libs> are e.g. "be" or "libtranslation.so" or
496 # "/boot/.../libfoo.so". If the basename starts with "lib" or the thingy
497 # has a dirname or grist, it is added to the NEEDLIBS variable (i.e. the
498 # file will be bound!), otherwise it is prefixed "-l" and added to
499 # LINKLIBS. If you want to specify a target that isn't a library and
500 # also has neither grist nor a dirname, you can prepend "<nogrist>" as
501 # grist; it will be stripped by this rule.
502 # <mapLibs> specifies whether the to translate library names (e.g. "be"
503 # to "libbe.so" in case of target platform "haiku"). Defaults to "true".
505 local target = $(1) ;
507 local mapLibs = $(3:E=true) ;
512 # map libraries, if desired and target platform is Haiku
513 local map = $(TARGET_LIBRARY_NAME_MAP_$(TARGET_PACKAGING_ARCH)) ;
514 if $(PLATFORM) != host && $(mapLibs) = true && $(map) {
518 local mapped = $($(map)_$(i)) ;
520 mappedLibs += $(mapped) ;
523 libs = $(mappedLibs) ;
532 if $(i:D) || $(i:G) {
534 if $(i:G) = <nogrist> {
540 # XXX: _APP_ and _KERNEL_ should not be needed for ELF.
541 case _APP_ : isfile = true ;
542 case _KERNEL_ : isfile = true ;
543 case lib* : isfile = true ;
546 if ! $(isfile) && ( $(i:S) = .so || $(i:S) = .a ) {
558 NEEDLIBS on $(1) = $(NEEDLIBS) $(needLibs) ;
559 LINKLIBS on $(1) = $(LINKLIBS) -l$(linkLibs) ;
561 if $(needLibs) && ! $(NO_LIBRARY_DEPENDENCIES) {
562 Depends $(1) : $(needLibs) ;
569 # AddResources <name> : <resourcefiles> ;
571 # add grist to the resource files which don't have any yet
576 file = [ FGristFiles $(file) ] ;
578 resfiles += $(file) ;
581 SEARCH on $(resfiles) += $(SEARCH_SOURCE) ;
583 for file in $(resfiles) {
584 if $(file:S) = .rdef {
585 local rdef = $(file) ;
586 file = $(rdef:S=.rsrc) ;
587 ResComp $(file) : $(rdef) ;
589 InheritPlatform $(file) : $(1) ;
590 RESFILES on $(1) += $(file) ;
594 rule SetVersionScript target : versionScript
596 # SetVersionScript <target> : <versionScript>
598 # Sets the version script for <target>. Grist will be added to
599 # <versionScript> and SEARCH will be set on it.
601 versionScript = [ FGristFiles $(versionScript) ] ;
603 SEARCH on $(versionScript) += $(SEARCH_SOURCE) ;
605 VERSION_SCRIPT on $(target) = $(versionScript) ;
606 Depends $(target) : $(versionScript) ;
609 rule BuildPlatformObjects
611 # Usage BuildPlatformObjects <sources> ;
612 # <sources> The sources.
614 local sources = [ FGristFiles $(1) ] ;
615 local objects = [ FGristFiles $(sources:S=$(SUFOBJ)) ] ;
617 PLATFORM on $(objects) = host ;
618 SUPPORTED_PLATFORMS on $(objects) = host ;
623 actions CygwinExtensionFix
625 if test -f $(1).exe ; then
631 rule BuildPlatformMain
633 # Usage BuildPlatformMain <target> : <sources> : <libraries> ;
634 # <target> The executable/library.
635 # <sources> The sources.
636 # <libraries> Libraries to link against.
638 local target = $(1) ;
639 local sources = $(2) ;
641 local objects = [ FGristFiles $(sources:S=$(SUFOBJ)) ] ;
643 PLATFORM on $(target) = host ;
644 SUPPORTED_PLATFORMS on $(target) = host ;
645 DONT_USE_BEOS_RULES on $(target) = true ;
647 local usesBeAPI = [ on $(target) return $(USES_BE_API) ] ;
649 # propagate the flag to the objects
650 USES_BE_API on $(objects) = $(usesBeAPI) ;
652 # add the build libroot
653 if ! $(HOST_PLATFORM_BEOS_COMPATIBLE) {
654 local libroot = [ on $(target) return $(HOST_LIBROOT) ] ;
655 Depends $(target) : $(libroot) ;
656 NEEDLIBS on $(target) += $(libroot) ;
660 Main $(target) : $(sources) ;
661 LinkAgainst $(target) : $(libs) ;
662 if $(HOST_PLATFORM) = cygwin {
663 # Cygwin gcc adds the ".exe" extension. We cannot force
664 # jam to use SUFEXE as haiku target executables are not
665 # supposed to have this extension, thus finding
666 # dependencies will fail for these.
667 # The hack is to remove the extension after a successful
668 # build of the Target.
669 CygwinExtensionFix $(target) ;
673 rule BuildPlatformSharedLibrary
675 # Usage BuildPlatformSharedLibrary <target> : <sources> : <libraries> ;
676 # <target> The library.
677 # <sources> The sources.
678 # <libraries> Libraries to link against.
680 local target = $(1) ;
681 local sources = $(2) ;
684 BuildPlatformMain $(target) : $(sources) : $(libs) ;
686 if $(HOST_PLATFORM) = darwin {
687 LINKFLAGS on $(target) = [ on $(target) return $(LINKFLAGS) ]
688 -dynamic -dynamiclib -Xlinker -flat_namespace ;
689 } else if $(HOST_PLATFORM) = cygwin {
690 LINKFLAGS on $(target) = [ on $(target) return $(LINKFLAGS) ]
691 -shared -Xlinker --allow-multiple-definition ;
693 LINKFLAGS on $(target) = [ on $(target) return $(LINKFLAGS) ]
694 -shared -Xlinker -soname=\"$(target:G=)\" ;
697 local objects = [ FGristFiles $(sources:S=$(SUFOBJ)) ] ;
698 CCFLAGS on $(objects) += $(HOST_PIC_CCFLAGS) ;
699 C++FLAGS on $(objects) += $(HOST_PIC_C++FLAGS) ;
702 rule BuildPlatformMergeObject
704 # BuildPlatformMergeObject <name> : <sources> : <other objects> ;
705 # Compiles source files and merges the object files to an object file.
706 # <name>: Name of the object file to create. No grist will be added.
707 # <sources>: Sources to be compiled. Grist will be added.
708 # <other objects>: Object files or static libraries to be merged. No grist
711 local target = $(1) ;
712 local sources = $(2) ;
713 local otherObjects = $(3) ;
714 local objects = [ FGristFiles $(sources:S=$(SUFOBJ)) ] ;
716 PLATFORM on $(target) = host ;
717 SUPPORTED_PLATFORMS on $(target) = host ;
719 local usesBeAPI = [ on $(target[1]) return $(USES_BE_API) ] ;
721 # propagate the flag to the objects
722 USES_BE_API on $(objects) = $(usesBeAPI) ;
725 MergeObject $(target) : $(sources) : $(otherObjects) ;
728 rule BuildPlatformMergeObjectPIC target : sources : otherObjects
730 # BuildPlatformMergeObjectPIC <name> : <sources> : <other objects> ;
731 # Compiles source files and merges the object files to an object file.
732 # Same as BuildPlatformMergeObject rule but adds position-independent
733 # flags to the compiler (if any).
734 # <name>: Name of the object file to create. No grist will be added.
735 # <sources>: Sources to be compiled. Grist will be added.
736 # <other objects>: Object files or static libraries to be merged. No grist
739 ObjectCcFlags $(sources) : $(HOST_PIC_CCFLAGS) ;
740 ObjectC++Flags $(sources) : $(HOST_PIC_C++FLAGS) ;
742 BuildPlatformMergeObject $(target) : $(sources) : $(otherObjects) ;
745 rule BuildPlatformStaticLibrary lib : sources : otherObjects
747 # BuildPlatformStaticLibrary <lib> : <sources> ;
748 # Creates a static library from sources.
749 # <lib>: The static library to be built.
750 # <sources>: List of source files.
751 # <otherObjects>: List of additional object files.
754 local objects = [ FGristFiles $(sources:S=$(SUFOBJ)) ] ;
756 PLATFORM on $(lib) = host ;
757 SUPPORTED_PLATFORMS on $(lib) = host ;
759 local usesBeAPI = [ on $(lib) return $(USES_BE_API) ] ;
761 # propagate the flag to the objects
762 USES_BE_API on $(objects) = $(usesBeAPI) ;
765 StaticLibrary $(lib) : $(sources) : $(otherObjects) ;
768 rule BuildPlatformStaticLibraryPIC target : sources : otherObjects
770 # Like BuildPlatformStaticLibrary, but producing position independent code.
772 ObjectCcFlags $(sources) : $(HOST_PIC_CCFLAGS) ;
773 ObjectC++Flags $(sources) : $(HOST_PIC_C++FLAGS) ;
775 BuildPlatformStaticLibrary $(target) : $(sources) : $(otherObjects) ;
778 rule BootstrapStage0PlatformObjects sources : separateFromStandardSiblings
780 # BootstrapStage0PlatformObjects <sources> : <separateFromStandardSiblings>
781 # Builds objects from the given sources for stage0 of the bootstrap process.
782 # <sources> The sources from which objects should be created.
783 # <separateFromStandardSiblings> Pass 'true' if the same objects are built
784 # in a different context, too, so that a separate grist and target location
785 # is required. This defaults to ''.
787 for source in $(sources) {
789 if $(separateFromStandardSiblings) = true {
790 objectGrist = "bootstrap!$(SOURCE_GRIST)" ;
792 objectGrist = $(SOURCE_GRIST) ;
794 local object = $(source:S=$(SUFOBJ):G=$(objectGrist)) ;
795 PLATFORM on $(object) = bootstrap_stage0 ;
796 SUPPORTED_PLATFORMS on $(object) = bootstrap_stage0 ;
797 if $(separateFromStandardSiblings) = true {
798 MakeLocate $(object) : [
799 FDirName $(TARGET_DEBUG_$(DEBUG)_LOCATE_TARGET) bootstrap
802 Object $(object) : $(source) ;