about summary refs log blame commit diff
path: root/Rules
blob: da21ac65446fc5cfab9f8ee03857f261f49782ee (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
                                                                  

                                                                    

                                                                    


                                                                      
                                                 
 


                                                                   














                                                                            
                          



                                                                          
                    
 
                            
                                             
                                                                    
                                                                  


                                             
 






                                                  


                                                         

                                                             

                    
                        

                                                                          
                                       

                        
 
                        
                
                                                
                                   
 
                                                 
                    
                            
                                                                       

                                            
                             
                                                   
             
    
                                           
                                             
                                                
                                                         
     
 
                            
                                                                         
                                                  
    
                                              
                 




                                                                   
                                                       

                                                             

                                                   
                                                              
                                                             
     
 
                           
                                                                   




                                                               
                                                   
                                                              



                                                               
                                  
                                            
                                                                              
                             

                                                               
                                                        


                               
                                






                                 
                                                                            
                                                                                       



                                                                           
                                                    



                               



                                                                  
                                                                   
 

                  
# Copyright (C) 1991-2000,2002,2003 Free Software Foundation, Inc.
# This file is part of the GNU C Library.

# The GNU C Library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.

# The GNU C Library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# Lesser General Public License for more details.

# You should have received a copy of the GNU Lesser General Public
# License along with the GNU C Library; if not, write to the Free
# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
# 02111-1307 USA.

#
#	Rules for making a subdirectory in the GNU C library.
#	Each subdirectory Makefile defines some variables and includes this.
#
ifneq (,)
This makefile requires GNU Make.
endif

all: # Don't let the default goal come from Makeconfig.

include ../Makeconfig

ifndef	subdir
Each subdirectory makefile must define the `subdir' variable.
endif
# This ` unconfuses emacs.
# This is benign and useless in GNU make before 3.63.
export subdir := $(subdir)

# This is the default target; it makes the library and auxiliary programs.
.PHONY: all
all: objs lib others

ifeq ($(build-programs),yes)
others: $(addprefix $(objpfx),$(extra-objs) \
			      $(install-lib) \
			      $(install-bin) $(install-bin-script) \
			      $(install-rootsbin) $(install-sbin))
else
others: $(addprefix $(objpfx),$(extra-objs) \
			      $(install-lib))
endif

ifneq	"$(findstring env,$(origin headers))" ""
headers :=
endif

ifneq	"$(findstring env,$(origin generated))" ""
generated :=
endif

ifneq	"$(findstring env,$(origin common-generated))" ""
common-generated :=
endif

# See below.  This must be set before Makerules processes it.
before-compile += $(common-objpfx)bits/stdio_lim.h

include ../Makerules

.PHONY: subdir_lib
subdir_lib: lib-noranlib

# Some subdirs need to install a dummy library.
# They can use "$(objpfx)libfnord.a: $(dep-dummy-lib); $(make-dummy-lib)".
dep-dummy-lib = $(common-objpfx)dummy.o
define make-dummy-lib
$(AR) cr$(verbose) $@ $<
endef

$(common-objpfx)dummy.c:
	rm -f $@
	(echo 'extern void __dummy__ (void);'; \
	 echo 'void __dummy__ (void) { }') > $@
common-generated += dummy.o dummy.c

# This makes all the auxiliary and test programs.

.PHONY: others tests
ifeq ($(build-programs),yes)
others: $(addprefix $(objpfx),$(others) $(sysdep-others) $(extra-objs))
else
others: $(addprefix $(objpfx),$(extra-objs))
endif
ifeq ($(cross-compiling),yes)
tests: $(addprefix $(objpfx),$(tests) $(test-srcs))
xtests: tests
else
ifeq ($(build-bounded),yes)
tests-bp.out = $(tests:%=$(objpfx)%-bp.out)
xtests-bp.out = $(xtests:%=$(objpfx)%-bp.out)
endif
tests: $(tests:%=$(objpfx)%.out) $(tests-bp.out)
xtests: tests $(xtests:%=$(objpfx)%.out) $(xtests-bp.out)
endif

ifeq ($(build-programs),yes)
binaries-all = $(others) $(sysdep-others) $(tests) $(xtests) $(test-srcs)
binaries-static = $(others-static) $(tests-static)
else
binaries-all = $(tests) $(xtests) $(test-srcs)
binaries-static =
endif

binaries-shared = $(filter-out $(binaries-static), $(binaries-all))

ifneq "$(strip $(binaries-shared))" ""
$(addprefix $(objpfx),$(binaries-shared)): %: %.o \
  $(sort $(filter $(common-objpfx)lib%,$(link-libc))) \
  $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit)
	$(+link)
endif

ifneq "$(strip $(binaries-static))" ""
$(addprefix $(objpfx),$(binaries-static)): %: %.o \
  $(sort $(filter $(common-objpfx)lib%,$(link-libc-static))) \
  $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit)
	$(+link-static)
endif

ifeq ($(build-bounded),yes)
binaries-bounded = $(addsuffix -bp,$(tests) $(xtests) $(test-srcs))
$(addprefix $(objpfx),$(binaries-bounded)): %-bp: %.ob \
  $(sort $(filter $(common-objpfx)lib%,$(link-libc-bounded))) \
  $(addprefix $(csu-objpfx),start.ob) $(+preinit) $(+postinit)
	$(+link-bounded)
endif

ifneq "$(strip $(tests) $(xtests) $(test-srcs))" ""
# These are the implicit rules for making test outputs
# from the test programs and whatever input files are present.

make-test-out = GCONV_PATH=$(common-objpfx)iconvdata LC_ALL=C \
		$($*-ENV) $(built-program-cmd) $($*-ARGS)
$(objpfx)%-bp.out: %.input $(objpfx)%-bp
	$(make-test-out) > $@ < $(word 1,$^)
$(objpfx)%.out: %.input $(objpfx)%
	$(make-test-out) > $@ < $(word 1,$^)
$(objpfx)%.out: /dev/null $(objpfx)%	# Make it 2nd arg for canned sequence.
	$(make-test-out) > $@

endif	# tests

.PHONY: distclean realclean subdir_distclean subdir_realclean \
	subdir_clean subdir_mostlyclean subdir_testclean
subdir_mostlyclean: mostlyclean
subdir_clean: clean
subdir_distclean: distclean
subdir_realclean: realclean
subdir_testclean: do-tests-clean
realclean: distclean
distclean: clean

.PHONY: subdir_echo-headers
subdir_echo-headers: echo-headers

.PHONY: subdir_echo-distinfo
subdir_echo-distinfo:
	@echo $(addprefix +header+,$(headers) $(filter %.h,$(distribute))) \
	      $(addprefix +nodist+,$(generated) $(common-generated) $(dont_distribute))

# We want to install everything except the library itself, but update all
# our portions of the library because the parent make will install it later
# (likewise the stubs file).
.PHONY: subdir_install
subdir_install: install-no-libc.a lib-noranlib stubs

.PHONY: subdir_TAGS subdir_dist
subdir_TAGS: TAGS
subdir_dist: dist

# Target required by the Hurd to ensure that all the MiG-generated
# headers are in place before building a subdirectory.
.PHONY: before-compile
before-compile: $(before-compile)

$(common-objpfx)dummy.o: $(common-objpfx)dummy.c $(before-compile);
	$(compile-command.c)

# Local Variables:
# mode: makefile
# End: