hare

[hare] The Hare programming language
git clone https://git.torresjrjr.com/hare.git
Log | Files | Refs | README | LICENSE

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