Makefile (3650B)
1 .POSIX: 2 3 all: 4 5 include config.mk 6 include makefiles/$(PLATFORM).$(ARCH).mk 7 8 all: $(BINOUT)/hare $(BINOUT)/haredoc docs 9 10 HARE_DEFINES = \ 11 -D PLATFORM:str='"$(PLATFORM)"' \ 12 -D ARCH:str='"$(ARCH)"' \ 13 -D VERSION:str="\"$(VERSION)\"" \ 14 -D HAREPATH:str='"$(HAREPATH)"' \ 15 -D AARCH64_AS:str='"$(AARCH64_AS)"' \ 16 -D AARCH64_CC:str='"$(AARCH64_CC)"' \ 17 -D AARCH64_LD:str='"$(AARCH64_LD)"' \ 18 -D RISCV64_AS:str='"$(RISCV64_AS)"' \ 19 -D RISCV64_CC:str='"$(RISCV64_CC)"' \ 20 -D RISCV64_LD:str='"$(RISCV64_LD)"' \ 21 -D X86_64_AS:str='"$(X86_64_AS)"' \ 22 -D X86_64_CC:str='"$(X86_64_CC)"' \ 23 -D X86_64_LD:str='"$(X86_64_LD)"' 24 25 .SUFFIXES: 26 .SUFFIXES: .ha .ssa .td .s .o .scd 27 .ssa.td: 28 @cmp -s '$@' '$@.tmp' 2>/dev/null || cp '$@.tmp' '$@' 29 30 .ssa.s: 31 @printf 'QBE\t%s\n' '$@' 32 @$(QBE) $(QBEFLAGS) -o '$@' '$<' 33 34 .s.o: 35 @printf 'AS\t%s\n' '$@' 36 @$(AS) $(ASFLAGS) -o '$@' '$<' 37 38 .scd: 39 @printf 'SCDOC\t%s\n' '$@' 40 @$(SCDOC) < '$<' > '$@' 41 42 $(BINOUT)/hare: $(OBJS) 43 @mkdir -p -- "$(BINOUT)" 44 @printf 'LD\t%s\n' "$@" 45 @$(LD) $(LDLINKFLAGS) -T $(RTSCRIPT) -o $@ $(OBJS) 46 47 HARE_BUILD_ENV = HAREPATH=. HAREC="$(HAREC)" QBE="$(QBE)" AS="$(AS)" \ 48 LD="$(LD)" HARECFLAGS="$(HARECFLAGS)" QBEFLAGS="$(QBEFLAGS)" \ 49 ASFLAGS="$(ASFLAGS)" LDLINKFLAGS="$(LDLINKFLAGS)" LDFLAGS="$(LDFLAGS)" 50 51 $(BINOUT)/hare-install: $(BINOUT)/hare 52 @mkdir -p $(BINOUT) 53 @printf 'HARE\t%s\n' "$@" 54 @env $(HARE_BUILD_ENV) \ 55 $(BINOUT)/hare build $(HARE_DEFINES) $(HAREFLAGS) -o $@ ./cmd/hare 56 57 $(BINOUT)/haredoc: $(BINOUT)/hare 58 @mkdir -p $(BINOUT) 59 @printf 'HARE\t%s\n' "$@" 60 @env $(HARE_BUILD_ENV) $(BINOUT)/hare build \ 61 $(HARE_DEFINES) $(HAREFLAGS) -o $@ ./cmd/haredoc 62 63 docs/html: $(BINOUT)/haredoc 64 mkdir -p docs/html 65 $(BINOUT)/haredoc -Fhtml > docs/html/index.html 66 for d in $$(scripts/moddirs); do \ 67 find $$d -type d | sed -E '/(\+|-)/d'; \ 68 done \ 69 | while read path; do \ 70 mod=$$(echo $$path | sed -E 's@/@::@g'); \ 71 echo $$mod; \ 72 mkdir -p docs/html/$$path; \ 73 $(BINOUT)/haredoc -Fhtml $$mod > docs/html/$$path/index.html; \ 74 done 75 76 docs: \ 77 docs/hare.1 \ 78 docs/hare-build.1 \ 79 docs/hare-cache.1 \ 80 docs/hare-deps.1 \ 81 docs/haredoc.1 \ 82 docs/hare-run.1 \ 83 docs/hare-test.1 \ 84 docs/haredoc.5 \ 85 docs/hare-module.5 86 87 MAN1 = hare hare-build hare-cache hare-deps haredoc hare-run hare-test 88 MAN5 = haredoc hare-module 89 90 bootstrap: 91 @BINOUT=$(BINOUT) ./scripts/genbootstrap 92 93 clean: 94 rm -rf -- '$(HARECACHE)' '$(BINOUT)' docs/*.1 docs/*.5 docs/html 95 96 check: $(BINOUT)/hare 97 @env HAREPATH=. HAREC='$(HAREC)' QBE='$(QBE)' AS='$(AS)' LD='$(LD)' \ 98 HAREFLAGS='$(HAREFLAGS)' HARECFLAGS='$(HARECFLAGS)' \ 99 QBEFLAGS='$(QBEFLAGS)' ASFLAGS='$(ASFLAGS)' \ 100 LDLINKFLAGS='$(LDLINKFLAGS)' '$(BINOUT)/hare' test 101 102 install: install-cmd install-mods 103 104 install-cmd: all $(BINOUT)/hare-install 105 mkdir -p -- \ 106 '$(DESTDIR)$(BINDIR)' '$(DESTDIR)$(MANDIR)/man1' \ 107 '$(DESTDIR)$(BINDIR)' '$(DESTDIR)$(MANDIR)/man5' 108 install -m755 '$(BINOUT)/hare-install' '$(DESTDIR)$(BINDIR)/hare' 109 install -m755 '$(BINOUT)/haredoc' '$(DESTDIR)$(BINDIR)/haredoc' 110 for i in $(MAN1); do install -m644 docs/$$i.1 '$(DESTDIR)$(MANDIR)'/man1/$$i.1; done 111 for i in $(MAN5); do install -m644 docs/$$i.5 '$(DESTDIR)$(MANDIR)'/man5/$$i.5; done 112 113 install-mods: 114 rm -rf -- '$(DESTDIR)$(STDLIB)' 115 mkdir -p -- '$(DESTDIR)$(STDLIB)' 116 cp -R -- $$(scripts/moddirs) '$(DESTDIR)$(STDLIB)' 117 118 uninstall: 119 rm -- '$(DESTDIR)$(BINDIR)/hare' 120 rm -- '$(DESTDIR)$(BINDIR)/haredoc' 121 for i in $(MAN1); do rm -- '$(DESTDIR)$(MANDIR)'/man1/$$i.1; done 122 for i in $(MAN5); do rm -- '$(DESTDIR)$(MANDIR)'/man5/$$i.5; done 123 rm -r -- '$(DESTDIR)$(STDLIB)' 124 125 .PHONY: all $(BINOUT)/hare-install $(BINOUT)/haredoc bootstrap clean check \ 126 docs docs/html install start uninstall