2013-05-15 20:14:06 +00:00
|
|
|
D := util/ego
|
|
|
|
|
|
|
|
define build-ego-backend-impl
|
|
|
|
|
|
|
|
$(call reset)
|
|
|
|
$(eval cflags += -DVERBOSE -DNOTCOMPACT)
|
|
|
|
$(eval cflags += -I$D/share -I$(OBJDIR)/$D)
|
|
|
|
$(foreach f, $2, $(call cfile, $f))
|
2015-03-22 11:09:46 +00:00
|
|
|
$(call rawfile, $(LIBDIR)/libegocore.a)
|
|
|
|
$(call rawfile, $(LIBEM_DATA))
|
2013-05-15 20:14:06 +00:00
|
|
|
$(call cprogram, $(BINDIR)/ego/$(strip $1))
|
|
|
|
$(call installto, $(PLATDEP)/ego/$(strip $1))
|
|
|
|
$(eval EGO_MODULES += $q)
|
|
|
|
|
|
|
|
endef
|
|
|
|
|
|
|
|
define build-ego-impl
|
|
|
|
|
|
|
|
# Generated files that egocore needs.
|
|
|
|
|
|
|
|
$(call reset)
|
|
|
|
$(call cfile, $D/share/makecldef.c)
|
|
|
|
$(call cprogram, $(OBJDIR)/$D/makecldef)
|
|
|
|
|
|
|
|
$(eval g := $(OBJDIR)/$D/classdefs.h)
|
|
|
|
$(eval CLEANABLES += $g)
|
|
|
|
$g: $(OBJDIR)/$D/makecldef $(INCDIR)/em_mnem.h $D/share/cldefs.src
|
|
|
|
@echo MAKECLDEF $g
|
|
|
|
@mkdir -p $(dir $g)
|
|
|
|
$(hide) $$^ > $g
|
|
|
|
|
|
|
|
$(eval g := $(OBJDIR)/$D/pop_push.h)
|
|
|
|
$(eval CLEANABLES += $g)
|
|
|
|
$g: $D/share/pop_push.awk h/em_table
|
|
|
|
@echo POP_PUSH $g
|
|
|
|
@mkdir -p $(dir $g)
|
|
|
|
$(hide) awk -f $D/share/pop_push.awk < h/em_table > $g
|
|
|
|
|
|
|
|
# Build the egocore library.
|
|
|
|
|
|
|
|
$(call reset)
|
|
|
|
$(eval cflags += -I$D/share -I$(OBJDIR)/$D)
|
|
|
|
$(eval cflags += -DVERBOSE -DNOTCOMPACT)
|
|
|
|
|
|
|
|
$(call cfile, $D/share/debug.c)
|
|
|
|
$(call cfile, $D/share/global.c)
|
|
|
|
$(call cfile, $D/share/files.c)
|
|
|
|
$(call cfile, $D/share/go.c)
|
|
|
|
$(call cfile, $D/share/map.c)
|
|
|
|
$(call cfile, $D/share/aux.c)
|
|
|
|
$(call cfile, $D/share/get.c)
|
|
|
|
$(call cfile, $D/share/put.c)
|
|
|
|
$(call cfile, $D/share/alloc.c)
|
|
|
|
$(call cfile, $D/share/lset.c)
|
|
|
|
$(call cfile, $D/share/cset.c)
|
|
|
|
$(call cfile, $D/share/parser.c)
|
|
|
|
$(call cfile, $D/share/stack_chg.c)
|
|
|
|
$(call cfile, $D/share/locals.c)
|
|
|
|
$(call cfile, $D/share/init_glob.c)
|
|
|
|
$(eval $q: $(OBJDIR)/$D/classdefs.h $(OBJDIR)/$D/pop_push.h)
|
|
|
|
|
|
|
|
$(call clibrary, $(LIBDIR)/libegocore.a)
|
|
|
|
$(eval CLEANABLES += $q)
|
|
|
|
|
|
|
|
# Now build each of the back ends.
|
|
|
|
|
|
|
|
$(call build-ego-backend-impl, bo, \
|
|
|
|
$D/bo/bo.c)
|
|
|
|
|
|
|
|
$(call build-ego-backend-impl, ca, \
|
|
|
|
$D/ca/ca.c \
|
|
|
|
$D/ca/ca_put.c)
|
|
|
|
|
|
|
|
$(call build-ego-backend-impl, cf, \
|
|
|
|
$D/cf/cf.c \
|
|
|
|
$D/cf/cf_idom.c \
|
|
|
|
$D/cf/cf_loop.c \
|
|
|
|
$D/cf/cf_succ.c)
|
|
|
|
|
|
|
|
$(call build-ego-backend-impl, cj, \
|
|
|
|
$D/cj/cj.c)
|
|
|
|
|
|
|
|
$(call build-ego-backend-impl, cs, \
|
|
|
|
$D/cs/cs.c \
|
|
|
|
$D/cs/cs_alloc.c \
|
|
|
|
$D/cs/cs_aux.c \
|
|
|
|
$D/cs/cs_avail.c \
|
|
|
|
$D/cs/cs_debug.c \
|
|
|
|
$D/cs/cs_elim.c \
|
|
|
|
$D/cs/cs_entity.c \
|
|
|
|
$D/cs/cs_getent.c \
|
|
|
|
$D/cs/cs_kill.c \
|
|
|
|
$D/cs/cs_partit.c \
|
|
|
|
$D/cs/cs_profit.c \
|
|
|
|
$D/cs/cs_stack.c \
|
|
|
|
$D/cs/cs_vnm.c)
|
|
|
|
|
|
|
|
$(call build-ego-backend-impl, ic, \
|
|
|
|
$D/ic/ic.c \
|
|
|
|
$D/ic/ic_aux.c \
|
|
|
|
$D/ic/ic_io.c \
|
|
|
|
$D/ic/ic_lib.c \
|
|
|
|
$D/ic/ic_lookup.c)
|
|
|
|
|
|
|
|
$(call build-ego-backend-impl, il, \
|
|
|
|
$D/il/il.c \
|
|
|
|
$D/il/il1_anal.c \
|
|
|
|
$D/il/il1_aux.c \
|
|
|
|
$D/il/il1_cal.c \
|
|
|
|
$D/il/il1_formal.c \
|
|
|
|
$D/il/il2_aux.c \
|
|
|
|
$D/il/il3_aux.c \
|
|
|
|
$D/il/il3_change.c \
|
|
|
|
$D/il/il3_subst.c \
|
|
|
|
$D/il/il_aux.c)
|
|
|
|
|
|
|
|
$(call build-ego-backend-impl, lv, \
|
|
|
|
$D/lv/lv.c)
|
|
|
|
|
|
|
|
$(call build-ego-backend-impl, ra, \
|
|
|
|
$D/ra/ra.c \
|
|
|
|
$D/ra/ra_allocl.c \
|
|
|
|
$D/ra/ra_aux.c \
|
|
|
|
$D/ra/ra_interv.c \
|
|
|
|
$D/ra/ra_lifet.c \
|
|
|
|
$D/ra/ra_pack.c \
|
|
|
|
$D/ra/ra_profits.c \
|
|
|
|
$D/ra/ra_xform.c \
|
|
|
|
$D/ra/ra_items.c)
|
|
|
|
|
|
|
|
$(eval g := $(OBJDIR)/$D/itemtab.h)
|
|
|
|
$(eval CLEANABLES += $g)
|
|
|
|
$D/ra/ra_items.c: $g
|
|
|
|
$g: $(OBJDIR)/$D/makeitems $(INCDIR)/em_mnem.h $D/ra/itemtab.src
|
|
|
|
@echo MAKEITEMS $g
|
|
|
|
@mkdir -p $(dir $g)
|
|
|
|
$(hide) $$^ > $g
|
|
|
|
|
|
|
|
$(call reset)
|
|
|
|
$(call cfile, $D/ra/makeitems.c)
|
|
|
|
$(call cprogram, $(OBJDIR)/$D/makeitems)
|
|
|
|
|
|
|
|
$(call build-ego-backend-impl, sp, \
|
|
|
|
$D/sp/sp.c)
|
|
|
|
|
|
|
|
$(call build-ego-backend-impl, sr, \
|
|
|
|
$D/sr/sr.c \
|
|
|
|
$D/sr/sr_aux.c \
|
|
|
|
$D/sr/sr_cand.c \
|
|
|
|
$D/sr/sr_expr.c \
|
|
|
|
$D/sr/sr_iv.c \
|
|
|
|
$D/sr/sr_reduce.c \
|
|
|
|
$D/sr/sr_xform.c)
|
|
|
|
|
|
|
|
$(call build-ego-backend-impl, ud, \
|
|
|
|
$D/ud/ud.c \
|
|
|
|
$D/ud/ud_aux.c \
|
|
|
|
$D/ud/ud_const.c \
|
|
|
|
$D/ud/ud_copy.c \
|
|
|
|
$D/ud/ud_defs.c)
|
|
|
|
|
|
|
|
# ...and now the front end, which depends on all the backends.
|
|
|
|
|
|
|
|
$(call reset)
|
|
|
|
$(call cfile, $D/em_ego/em_ego.c)
|
|
|
|
$(eval $q: $(INCDIR)/print.h $(INCDIR)/system.h)
|
|
|
|
$(eval $q: $(INCDIR)/em_path.h)
|
|
|
|
|
2015-03-22 11:09:46 +00:00
|
|
|
$(call rawfile, $(LIBPRINT))
|
|
|
|
$(call rawfile, $(LIBSTRING))
|
|
|
|
$(call rawfile, $(LIBSYSTEM))
|
2013-05-15 20:14:06 +00:00
|
|
|
|
|
|
|
$(call cprogram, $(BINDIR)/em_ego)
|
|
|
|
$(call installto, $(PLATDEP)/em_ego)
|
|
|
|
$(eval EM_EGO := $q)
|
|
|
|
$(eval $q: $(EGO_MODULES))
|
|
|
|
$(eval ACK_CORE_TOOLS += $q)
|
|
|
|
|
|
|
|
endef
|
|
|
|
|
|
|
|
$(eval $(build-ego-impl))
|
|
|
|
|
|
|
|
# Install the ego descr file for the current architecture, if one exists.
|
|
|
|
# This is a bit annoying because it's called by each platform, so we need
|
|
|
|
# to protect against the architecture being seen more than once. And some
|
|
|
|
# architectures don't get descr files.
|
|
|
|
|
|
|
|
define build-ego-descr-impl
|
|
|
|
|
|
|
|
$(eval EGO_DESCR_$(ARCH) := 1)
|
|
|
|
|
|
|
|
$(eval g := $(PLATIND)/ego/$(ARCH).descr)
|
|
|
|
$(eval CLEANABLES += $g)
|
|
|
|
$(eval $(EM_EGO): $g)
|
|
|
|
$g: util/ego/descr/descr.sed util/ego/descr/$(ARCH).descr $(CPPANSI) \
|
|
|
|
$(INCDIR)/em_mnem.h
|
|
|
|
@echo EGODESCR $g
|
|
|
|
@mkdir -p $(dir $g)
|
|
|
|
$(hide) $(CPPANSI) -P -I$(INCDIR) util/ego/descr/$(ARCH).descr | sed -f util/ego/descr/descr.sed > $g
|
|
|
|
|
|
|
|
endef
|
|
|
|
|
|
|
|
build-ego-descr = $(if $(EGO_DESCR_$(ARCH)),, \
|
|
|
|
$(if $(wildcard util/ego/descr/$(ARCH).descr), \
|
|
|
|
$(eval $(call build-ego-descr-impl, $1))))
|