12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- #
- # OS/161 build environment: compile source files for the host system.
- #
- # Usage: use os161.hostprog.mk or os161.hostlib.mk
- #
- # Variables controlling this file:
- #
- # SRCS .c and .S files to compile.
- #
- # Provides:
- #
- # HOST_OBJS .ho files from compilation.
- #
- # Objects list starts empty. It is added to below.
- HOST_OBJS=
- # .ho is a host object.
- .SUFFIXES: .ho
- clean: cleanhostcompile
- cleanhostcompile:
- rm -f $(MYBUILDDIR)/*.ho $(MYBUILDDIR)/*.ha
- distclean: distcleanhostcompile
- distcleanhostcompile:
- rm -f .hostdepend
- #
- # Depend: generate dependency information.
- # Use gcc's -MM argument for this.
- #
- # Note that we use -MM rather than -M, so we don't get system headers.
- # They would be host system headers and we don't want to get involved
- # with those.
- #
- # The awk scripts and the first sed invocation transform the results to
- # have one file per line.
- #
- # The second sed command changes the .o filenames in gcc's output
- # to .ho names.
- #
- # The third sed command replaces the value of $(INSTALLTOP) -- which
- # is some pathname -- with the string $(INSTALLTOP). This makes the
- # depend file independent of the value of $(INSTALLTOP).
- #
- # XXX: why the $p;$x? That seems like a no-op in this script... also,
- # this logic is extremely opaque and could be done a lot better...
- #
- depend: dependhostcompile
- dependhostcompile:
- $(HOST_CC) $(HOST_CFLAGS) -DHOST -MM $(SRCS) |\
- awk '{x=$$0~"^ ";for(i=1;i<=NF;i++){printf "%d %s\n",x,$$i;x=1; }}'|\
- sed '/1 \\/d' | awk '{ printf "%s%s", $$1?" \\\n ":"\n", $$2 }' |\
- sed 's/\.o/\.ho/' |\
- sed 's|$(INSTALLTOP)|$$(INSTALLTOP)|;$$p;$$x' |\
- sed 's|^\([^ ]\)|$$(MYBUILDDIR)/\1|' > .deptmp
- mv -f .deptmp .depend
- # We do need to explicitly include .hostdepend, unlike .depend.
- .-include ".hostdepend"
- # No tags for host programs.
- tags: tagshostcompile
- tagshostcompile: ;
- #
- # Compile rules.
- # We can use the same rules for .c and .S because gcc knows how to handle
- # .S files.
- #
- .for _S_ in $(SRCS:M*.[cS])
- HOST_OBJS+=$(MYBUILDDIR)/$(_S_:T:R).ho
- $(MYBUILDDIR)/$(_S_:T:R).ho: $(_S_)
- $(HOST_CC) $(HOST_CFLAGS) -DHOST -c $(_S_) -o $(.TARGET)
- .endfor
- # Make non-file rules PHONY.
- .PHONY: clean cleanhostcompile distclean distcleanhostcompile
- .PHONY: depend dependhostcompile tags tagshostcompile
- # End.
|