diff options
Diffstat (limited to 'scripts/Makefile.host')
| -rw-r--r-- | scripts/Makefile.host | 55 |
1 files changed, 54 insertions, 1 deletions
diff --git a/scripts/Makefile.host b/scripts/Makefile.host index 133edfae5b8a..45b5b1aaedbd 100644 --- a/scripts/Makefile.host +++ b/scripts/Makefile.host | |||
| @@ -20,7 +20,15 @@ | |||
| 20 | # Will compile qconf as a C++ program, and menu as a C program. | 20 | # Will compile qconf as a C++ program, and menu as a C program. |
| 21 | # They are linked as C++ code to the executable qconf | 21 | # They are linked as C++ code to the executable qconf |
| 22 | 22 | ||
| 23 | # hostcc-option | ||
| 24 | # Usage: cflags-y += $(call hostcc-option,-march=winchip-c6,-march=i586) | ||
| 25 | |||
| 26 | hostcc-option = $(call try-run,\ | ||
| 27 | $(HOSTCC) $(HOSTCFLAGS) $(HOST_EXTRACFLAGS) $(1) -c -x c /dev/null -o "$$TMP",$(1),$(2)) | ||
| 28 | |||
| 23 | __hostprogs := $(sort $(hostprogs-y) $(hostprogs-m)) | 29 | __hostprogs := $(sort $(hostprogs-y) $(hostprogs-m)) |
| 30 | host-cshlib := $(sort $(hostlibs-y) $(hostlibs-m)) | ||
| 31 | host-cxxshlib := $(sort $(hostcxxlibs-y) $(hostcxxlibs-m)) | ||
| 24 | 32 | ||
| 25 | # C code | 33 | # C code |
| 26 | # Executables compiled from a single .c file | 34 | # Executables compiled from a single .c file |
| @@ -42,6 +50,10 @@ host-cxxmulti := $(foreach m,$(__hostprogs),$(if $($(m)-cxxobjs),$(m))) | |||
| 42 | # C++ Object (.o) files compiled from .cc files | 50 | # C++ Object (.o) files compiled from .cc files |
| 43 | host-cxxobjs := $(sort $(foreach m,$(host-cxxmulti),$($(m)-cxxobjs))) | 51 | host-cxxobjs := $(sort $(foreach m,$(host-cxxmulti),$($(m)-cxxobjs))) |
| 44 | 52 | ||
| 53 | # Object (.o) files used by the shared libaries | ||
| 54 | host-cshobjs := $(sort $(foreach m,$(host-cshlib),$($(m:.so=-objs)))) | ||
| 55 | host-cxxshobjs := $(sort $(foreach m,$(host-cxxshlib),$($(m:.so=-objs)))) | ||
| 56 | |||
| 45 | # output directory for programs/.o files | 57 | # output directory for programs/.o files |
| 46 | # hostprogs-y := tools/build may have been specified. | 58 | # hostprogs-y := tools/build may have been specified. |
| 47 | # Retrieve also directory of .o files from prog-objs or prog-cxxobjs notation | 59 | # Retrieve also directory of .o files from prog-objs or prog-cxxobjs notation |
| @@ -56,6 +68,10 @@ host-cmulti := $(addprefix $(obj)/,$(host-cmulti)) | |||
| 56 | host-cobjs := $(addprefix $(obj)/,$(host-cobjs)) | 68 | host-cobjs := $(addprefix $(obj)/,$(host-cobjs)) |
| 57 | host-cxxmulti := $(addprefix $(obj)/,$(host-cxxmulti)) | 69 | host-cxxmulti := $(addprefix $(obj)/,$(host-cxxmulti)) |
| 58 | host-cxxobjs := $(addprefix $(obj)/,$(host-cxxobjs)) | 70 | host-cxxobjs := $(addprefix $(obj)/,$(host-cxxobjs)) |
| 71 | host-cshlib := $(addprefix $(obj)/,$(host-cshlib)) | ||
| 72 | host-cxxshlib := $(addprefix $(obj)/,$(host-cxxshlib)) | ||
| 73 | host-cshobjs := $(addprefix $(obj)/,$(host-cshobjs)) | ||
| 74 | host-cxxshobjs := $(addprefix $(obj)/,$(host-cxxshobjs)) | ||
| 59 | host-objdirs := $(addprefix $(obj)/,$(host-objdirs)) | 75 | host-objdirs := $(addprefix $(obj)/,$(host-objdirs)) |
| 60 | 76 | ||
| 61 | obj-dirs += $(host-objdirs) | 77 | obj-dirs += $(host-objdirs) |
| @@ -124,5 +140,42 @@ quiet_cmd_host-cxxobjs = HOSTCXX $@ | |||
| 124 | $(host-cxxobjs): $(obj)/%.o: $(src)/%.cc FORCE | 140 | $(host-cxxobjs): $(obj)/%.o: $(src)/%.cc FORCE |
| 125 | $(call if_changed_dep,host-cxxobjs) | 141 | $(call if_changed_dep,host-cxxobjs) |
| 126 | 142 | ||
| 143 | # Compile .c file, create position independent .o file | ||
| 144 | # host-cshobjs -> .o | ||
| 145 | quiet_cmd_host-cshobjs = HOSTCC -fPIC $@ | ||
| 146 | cmd_host-cshobjs = $(HOSTCC) $(hostc_flags) -fPIC -c -o $@ $< | ||
| 147 | $(host-cshobjs): $(obj)/%.o: $(src)/%.c FORCE | ||
| 148 | $(call if_changed_dep,host-cshobjs) | ||
| 149 | |||
| 150 | # Compile .c file, create position independent .o file | ||
| 151 | # Note that plugin capable gcc versions can be either C or C++ based | ||
| 152 | # therefore plugin source files have to be compilable in both C and C++ mode. | ||
| 153 | # This is why a C++ compiler is invoked on a .c file. | ||
| 154 | # host-cxxshobjs -> .o | ||
| 155 | quiet_cmd_host-cxxshobjs = HOSTCXX -fPIC $@ | ||
| 156 | cmd_host-cxxshobjs = $(HOSTCXX) $(hostcxx_flags) -fPIC -c -o $@ $< | ||
| 157 | $(host-cxxshobjs): $(obj)/%.o: $(src)/%.c FORCE | ||
| 158 | $(call if_changed_dep,host-cxxshobjs) | ||
| 159 | |||
| 160 | # Link a shared library, based on position independent .o files | ||
| 161 | # *.o -> .so shared library (host-cshlib) | ||
| 162 | quiet_cmd_host-cshlib = HOSTLLD -shared $@ | ||
| 163 | cmd_host-cshlib = $(HOSTCC) $(HOSTLDFLAGS) -shared -o $@ \ | ||
| 164 | $(addprefix $(obj)/,$($(@F:.so=-objs))) \ | ||
| 165 | $(HOST_LOADLIBES) $(HOSTLOADLIBES_$(@F)) | ||
| 166 | $(host-cshlib): FORCE | ||
| 167 | $(call if_changed,host-cshlib) | ||
| 168 | $(call multi_depend, $(host-cshlib), .so, -objs) | ||
| 169 | |||
| 170 | # Link a shared library, based on position independent .o files | ||
| 171 | # *.o -> .so shared library (host-cxxshlib) | ||
| 172 | quiet_cmd_host-cxxshlib = HOSTLLD -shared $@ | ||
| 173 | cmd_host-cxxshlib = $(HOSTCXX) $(HOSTLDFLAGS) -shared -o $@ \ | ||
| 174 | $(addprefix $(obj)/,$($(@F:.so=-objs))) \ | ||
| 175 | $(HOST_LOADLIBES) $(HOSTLOADLIBES_$(@F)) | ||
| 176 | $(host-cxxshlib): FORCE | ||
| 177 | $(call if_changed,host-cxxshlib) | ||
| 178 | $(call multi_depend, $(host-cxxshlib), .so, -objs) | ||
| 179 | |||
| 127 | targets += $(host-csingle) $(host-cmulti) $(host-cobjs)\ | 180 | targets += $(host-csingle) $(host-cmulti) $(host-cobjs)\ |
| 128 | $(host-cxxmulti) $(host-cxxobjs) | 181 | $(host-cxxmulti) $(host-cxxobjs) $(host-cshlib) $(host-cshobjs) $(host-cxxshlib) $(host-cxxshobjs) |
