@ -20,7 +20,15 @@
# Will compile qconf as a C++ program, and menu as a C program.
# They are linked as C++ code to the executable qconf
# hostcc-option
# Usage: cflags-y += $(call hostcc-option,-march=winchip-c6,-march=i586)
hostcc-option = $( call try-run,\
$( HOSTCC) $( HOSTCFLAGS) $( HOST_EXTRACFLAGS) $( 1) -c -x c /dev/null -o " $$ TMP " ,$( 1) ,$( 2) )
__hostprogs := $( sort $( hostprogs-y) $( hostprogs-m) )
host-cshlib := $( sort $( hostlibs-y) $( hostlibs-m) )
host-cxxshlib := $( sort $( hostcxxlibs-y) $( hostcxxlibs-m) )
# C code
# Executables compiled from a single .c file
@ -42,6 +50,10 @@ host-cxxmulti := $(foreach m,$(__hostprogs),$(if $($(m)-cxxobjs),$(m)))
# C++ Object (.o) files compiled from .cc files
host-cxxobjs := $( sort $( foreach m,$( host-cxxmulti) ,$( $( m) -cxxobjs) ) )
# Object (.o) files used by the shared libaries
host-cshobjs := $( sort $( foreach m,$( host-cshlib) ,$( $( m:.so= -objs) ) ) )
host-cxxshobjs := $( sort $( foreach m,$( host-cxxshlib) ,$( $( m:.so= -objs) ) ) )
# output directory for programs/.o files
# hostprogs-y := tools/build may have been specified.
# Retrieve also directory of .o files from prog-objs or prog-cxxobjs notation
@ -56,6 +68,10 @@ host-cmulti := $(addprefix $(obj)/,$(host-cmulti))
host-cobjs := $( addprefix $( obj) /,$( host-cobjs) )
host-cxxmulti := $( addprefix $( obj) /,$( host-cxxmulti) )
host-cxxobjs := $( addprefix $( obj) /,$( host-cxxobjs) )
host-cshlib := $( addprefix $( obj) /,$( host-cshlib) )
host-cxxshlib := $( addprefix $( obj) /,$( host-cxxshlib) )
host-cshobjs := $( addprefix $( obj) /,$( host-cshobjs) )
host-cxxshobjs := $( addprefix $( obj) /,$( host-cxxshobjs) )
host-objdirs := $( addprefix $( obj) /,$( host-objdirs) )
obj-dirs += $( host-objdirs)
@ -124,5 +140,42 @@ quiet_cmd_host-cxxobjs = HOSTCXX $@
$(host-cxxobjs) : $( obj ) /%.o : $( src ) /%.cc FORCE
$( call if_changed_dep,host-cxxobjs)
# Compile .c file, create position independent .o file
# host-cshobjs -> .o
quiet_cmd_host-cshobjs = HOSTCC -fPIC $@
cmd_host-cshobjs = $( HOSTCC) $( hostc_flags) -fPIC -c -o $@ $<
$(host-cshobjs) : $( obj ) /%.o : $( src ) /%.c FORCE
$( call if_changed_dep,host-cshobjs)
# Compile .c file, create position independent .o file
# Note that plugin capable gcc versions can be either C or C++ based
# therefore plugin source files have to be compilable in both C and C++ mode.
# This is why a C++ compiler is invoked on a .c file.
# host-cxxshobjs -> .o
quiet_cmd_host-cxxshobjs = HOSTCXX -fPIC $@
cmd_host-cxxshobjs = $( HOSTCXX) $( hostcxx_flags) -fPIC -c -o $@ $<
$(host-cxxshobjs) : $( obj ) /%.o : $( src ) /%.c FORCE
$( call if_changed_dep,host-cxxshobjs)
# Link a shared library, based on position independent .o files
# *.o -> .so shared library (host-cshlib)
quiet_cmd_host-cshlib = HOSTLLD -shared $@
cmd_host-cshlib = $( HOSTCC) $( HOSTLDFLAGS) -shared -o $@ \
$( addprefix $( obj) /,$( $( @F:.so= -objs) ) ) \
$( HOST_LOADLIBES) $( HOSTLOADLIBES_$( @F) )
$(host-cshlib) : FORCE
$( call if_changed,host-cshlib)
$( call multi_depend , $ ( host -cshlib ) , .so , -objs )
# Link a shared library, based on position independent .o files
# *.o -> .so shared library (host-cxxshlib)
quiet_cmd_host-cxxshlib = HOSTLLD -shared $@
cmd_host-cxxshlib = $( HOSTCXX) $( HOSTLDFLAGS) -shared -o $@ \
$( addprefix $( obj) /,$( $( @F:.so= -objs) ) ) \
$( HOST_LOADLIBES) $( HOSTLOADLIBES_$( @F) )
$(host-cxxshlib) : FORCE
$( call if_changed,host-cxxshlib)
$( call multi_depend , $ ( host -cxxshlib ) , .so , -objs )
targets += $( host-csingle) $( host-cmulti) $( host-cobjs) \
$( host-cxxmulti) $( host-cxxobjs)
$( host-cxxmulti) $( host-cxxobjs) $( host-cshlib) $( host-cshobjs) $( host-cxxshlib) $( host-cxxshobjs)