318 lines
7.2 KiB
Makefile
318 lines
7.2 KiB
Makefile
#
|
|
# sdcc project main Makefile
|
|
#
|
|
|
|
SHELL = /bin/sh
|
|
|
|
VPATH = @srcdir@
|
|
srcdir = @srcdir@
|
|
top_builddir = @top_builddir@
|
|
top_srcdir = @top_srcdir@
|
|
|
|
EXEEXT = @EXEEXT@
|
|
|
|
include Makefile.common
|
|
|
|
SDCC_LIBS = support/makebin
|
|
SDCC_SCRIPTS = support/scripts
|
|
SDCC_DOC = doc
|
|
|
|
# Parts that are not normally compiled but need to be cleaned
|
|
SDCC_EXTRA = support/regression support/valdiag
|
|
|
|
SDCC_PACKIHX = support/packihx
|
|
SDCC_SDBINUTILS = support/sdbinutils
|
|
|
|
ifneq ($(OPT_DISABLE_HC08)$(OPT_DISABLE_S08), 11)
|
|
SDCC_AS += sdas/as6808
|
|
SDCC_LD += sdcc-ld6808
|
|
endif
|
|
|
|
ifeq ($(OPT_DISABLE_STM8), 0)
|
|
SDCC_AS += sdas/asstm8
|
|
SDCC_LD += sdcc-ldstm8
|
|
endif
|
|
|
|
ifneq ($(OPT_DISABLE_DS390)$(OPT_DISABLE_DS400), 11)
|
|
SDCC_AS += sdas/as8xcxxx
|
|
endif
|
|
|
|
ifeq ($(OPT_DISABLE_MCS51), 0)
|
|
SDCC_AS += sdas/as8051
|
|
SDCC_LD += sdcc-ld8051
|
|
SDCC_MISC += debugger/mcs51
|
|
endif
|
|
|
|
ifneq ($(OPT_DISABLE_Z80)$(OPT_DISABLE_Z180), 11)
|
|
SDCC_AS += sdas/asz80
|
|
SDCC_LD += sdcc-ldz80
|
|
endif
|
|
|
|
ifneq ($(OPT_DISABLE_R2K)$(OPT_DISABLE_R3KA), 11)
|
|
SDCC_AS += sdas/asrab
|
|
SDCC_LD += sdcc-ldz80
|
|
endif
|
|
|
|
ifeq ($(OPT_DISABLE_TLCS90), 0)
|
|
SDCC_AS += sdas/astlcs90
|
|
endif
|
|
|
|
ifeq ($(OPT_DISABLE_GBZ80), 0)
|
|
SDCC_AS += sdas/asgb
|
|
SDCC_LD += sdcc-ldgb
|
|
endif
|
|
|
|
ifeq ($(OPT_DISABLE_PDK13), 0)
|
|
SDCC_AS += sdas/aspdk13
|
|
SDCC_LD += sdcc-ldpdk
|
|
endif
|
|
|
|
ifeq ($(OPT_DISABLE_PDK14), 0)
|
|
SDCC_AS += sdas/aspdk14
|
|
SDCC_LD += sdcc-ldpdk
|
|
endif
|
|
|
|
ifeq ($(OPT_DISABLE_PDK15), 0)
|
|
SDCC_AS += sdas/aspdk15
|
|
SDCC_LD += sdcc-ldpdk
|
|
endif
|
|
|
|
ifeq ($(OPT_DISABLE_PDK16), 0)
|
|
SDCC_AS += sdas/aspdk16
|
|
SDCC_LD += sdcc-ldpdk
|
|
endif
|
|
|
|
|
|
ifeq ($(OPT_DISABLE_UCSIM), 0)
|
|
TARGETS += sdcc-misc
|
|
SDCC_MISC += sim/ucsim
|
|
PKGS += $(SDCC_MISC)
|
|
endif
|
|
|
|
SDCC_BINUTILS =
|
|
ifeq ($(OPT_DISABLE_SDBINUTILS), 0)
|
|
TARGETS += sdcc-sdbinutils
|
|
PKGS += $(SDCC_SDBINUTILS)
|
|
SDBINUTILS_BINS = sdar$(EXEEXT) sdranlib$(EXEEXT) sdnm$(EXEEXT) sdobjcopy$(EXEEXT)
|
|
SDCC_BINUTILS = sdcc-sdbinutils
|
|
endif
|
|
|
|
ifeq ($(OPT_DISABLE_DEVICE_LIB), 0)
|
|
TARGETS += sdcc-device-lib
|
|
PKGS += device/lib
|
|
ifeq ($(OPT_DISABLE_NON_FREE), 0)
|
|
PKGS += device/non-free/lib
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(OPT_DISABLE_PACKIHX), 0)
|
|
TARGETS += sdcc-packihx
|
|
PKGS += $(SDCC_PACKIHX)
|
|
endif
|
|
|
|
ifeq ($(OPT_ENABLE_DOC), 1)
|
|
TARGETS += sdcc-doc
|
|
endif
|
|
# always install docs, which don't need to be built
|
|
PKGS += $(SDCC_DOC)
|
|
|
|
ifeq ($(OPT_DISABLE_SDCPP), 0)
|
|
SDCC_LIBS += support/cpp
|
|
endif
|
|
|
|
TARGETS += sdcc-libs sdcc-cc sdcc-device-inc sdcc-as sdcc-ld sdcc-scripts
|
|
|
|
PKGS += $(SDCC_LIBS) src device/include
|
|
ifeq ($(OPT_DISABLE_NON_FREE), 0)
|
|
PKGS += device/non-free/include
|
|
endif
|
|
PKGS += $(SDCC_AS) sdas/linksrc $(SDCC_SCRIPTS)
|
|
|
|
PORTS = $(shell cat ports.build)
|
|
ALLPORTS = $(shell cat ports.all)
|
|
|
|
# Compiling entire program or any subproject
|
|
# ------------------------------------------
|
|
all: checkconf sdcc
|
|
|
|
tini: checkconf sdcc-tini
|
|
|
|
sdcc-libs: sdcc-sdbinutils
|
|
for lib in $(SDCC_LIBS); do $(MAKE) -C $$lib; done
|
|
|
|
sdcc-cc: sdcc-libs
|
|
$(MAKE) -C src
|
|
|
|
sdcc-as:
|
|
$(foreach as, $(SDCC_AS), $(MAKE) -C $(as) &&) echo "Assemblers built successfully."
|
|
|
|
sdcc-ld:
|
|
$(MAKE) -C sdas/linksrc $(SDCC_LD)
|
|
|
|
sdcc-misc:
|
|
for misc in $(SDCC_MISC); do $(MAKE) -C $$misc ; done
|
|
|
|
sdcc-scripts:
|
|
$(MAKE) -C $(SDCC_SCRIPTS)
|
|
|
|
sdcc-packihx:
|
|
$(MAKE) -C $(SDCC_PACKIHX)
|
|
|
|
sdcc-sdbinutils:
|
|
$(MAKE) -C $(SDCC_SDBINUTILS)
|
|
# in some cases (cygwin) the real binaries are in .libs
|
|
for bin in $(SDBINUTILS_BINS); do \
|
|
if [ -f $(SDCC_SDBINUTILS)/binutils/.libs/$$bin ]; then \
|
|
cp $(SDCC_SDBINUTILS)/binutils/.libs/$$bin bin; \
|
|
else \
|
|
cp $(SDCC_SDBINUTILS)/binutils/$$bin bin; \
|
|
fi \
|
|
done
|
|
|
|
sdcc-device-inc:
|
|
$(MAKE) -C device/include
|
|
ifeq ($(OPT_DISABLE_NON_FREE), 0)
|
|
$(MAKE) -C device/non-free/include
|
|
endif
|
|
|
|
sdcc-device-lib: sdcc-cc sdcc-as sdcc-ld $(SDCC_BINUTILS)
|
|
$(MAKE) -C device/lib
|
|
ifeq ($(OPT_DISABLE_NON_FREE), 0)
|
|
$(MAKE) -C device/non-free/lib
|
|
endif
|
|
|
|
sdcc-device-tini:
|
|
$(MAKE) -C device/include
|
|
ifeq ($(OPT_DISABLE_NON_FREE), 0)
|
|
$(MAKE) -C device/non-free/include
|
|
endif
|
|
$(MAKE) -C device/lib model-ds390 model-ds400
|
|
|
|
# doc depends on latex and latex2html
|
|
sdcc-doc:
|
|
$(MAKE) -C doc
|
|
|
|
sdcc: $(TARGETS)
|
|
|
|
sdcc-tini: sdcc-cc sdcc-as sdcc-ld sdcc-device-tini sdcc-packihx
|
|
$(MAKE) -f main.mk all
|
|
|
|
# Some interesting sub rules
|
|
sdcc-bin: sdcc-cc sdcc-as sdcc-ld sdcc-misc
|
|
|
|
sdcc-base: sdcc-cc sdcc-as sdcc-ld
|
|
|
|
# Compiling and installing everything and running test
|
|
# ----------------------------------------------------
|
|
install: checkconf sdcc
|
|
$(MAKE) -f main.mk install
|
|
@for pkg in $(PKGS); do\
|
|
$(MAKE) -C $$pkg install ;\
|
|
done
|
|
|
|
# Deleting all the installed files
|
|
# --------------------------------
|
|
uninstall:
|
|
$(MAKE) -f main.mk uninstall
|
|
@for pkg in $(PKGS); do\
|
|
$(MAKE) -C $$pkg uninstall ;\
|
|
done
|
|
|
|
# Deleting all files created by building the program
|
|
# --------------------------------------------------
|
|
clean:
|
|
@echo "+ Cleaning root of the project..."
|
|
$(MAKE) -f $(srcdir)/clean.mk clean
|
|
@echo "+ Cleaning packages in their directories..."
|
|
for pkg in $(PKGS); do\
|
|
$(MAKE) -C $$pkg PORTS="$(PORTS)" EXEEXT=$(EXEEXT) clean ;\
|
|
done
|
|
|
|
# Deleting all files created by configuring or building the program
|
|
# -----------------------------------------------------------------
|
|
distclean:
|
|
@echo "+ DistCleaning packages using clean.mk..."
|
|
for pkg in $(PKGS); do\
|
|
$(MAKE) -C $$pkg PORTS="$(PORTS)" EXEEXT=$(EXEEXT) distclean ;\
|
|
done
|
|
for pkg in $(SDCC_EXTRA); do \
|
|
$(MAKE) -C $$pkg distclean; \
|
|
done
|
|
@echo "+ DistCleaning root of the project..."
|
|
$(MAKE) -f $(srcdir)/clean.mk distclean
|
|
|
|
# Like clean but some files may still exist
|
|
# -----------------------------------------
|
|
mostlyclean: clean
|
|
$(MAKE) -f $(srcdir)/clean.mk mostlyclean
|
|
for pkg in $(PKGS); do\
|
|
$(MAKE) -C $$pkg PORTS="$(PORTS)" EXEEXT=$(EXEEXT) mostlyclean ;\
|
|
done
|
|
|
|
# Deleting everything that can reconstructed by this Makefile. It deletes
|
|
# everything deleted by distclean plus files created by bison, stc.
|
|
# -----------------------------------------------------------------------
|
|
realclean: distclean
|
|
$(MAKE) -f $(srcdir)/clean.mk realclean
|
|
for pkg in $(PKGS); do\
|
|
$(MAKE) -C $$pkg PORTS="$(PORTS)" EXEEXT=$(EXEEXT) realclean ;\
|
|
done
|
|
|
|
# Performing self-test
|
|
# --------------------
|
|
check:
|
|
|
|
# Performing installation test
|
|
# ----------------------------
|
|
installcheck:
|
|
|
|
# Creating dependencies
|
|
# ---------------------
|
|
dep: $(SDCC_LIBS)
|
|
$(MAKE) -f main.mk dep
|
|
@for pkg in $(PKGS); do\
|
|
$(MAKE) -C $$pkg dep ;\
|
|
done
|
|
|
|
# My rules
|
|
# --------
|
|
newer: distclean
|
|
@if [ -f start ]; then \
|
|
tar cvf - \
|
|
`find . -newer start -type f -print` |\
|
|
gzip -9c >`date '+%m%d%H%M'`.tgz; \
|
|
else \
|
|
echo "start file not found.\n"; \
|
|
exit 1; \
|
|
fi
|
|
|
|
putcopyright:
|
|
'put(c)' -s $(STARTYEAR) *.cc *.h *.y *.l
|
|
|
|
# Remaking configuration
|
|
# ----------------------
|
|
configure: configure.in
|
|
$(SHELL) $(AUTOCONF)
|
|
|
|
main.mk: $(srcdir)/main_in.mk $(srcdir)/configure.in config.status
|
|
$(SHELL) ./config.status
|
|
|
|
Makefiles: makefiles
|
|
|
|
makefiles: config.status
|
|
|
|
config.status: configure
|
|
$(SHELL) ./config.status --recheck
|
|
|
|
makefiles:
|
|
$(SHELL) ./config.status
|
|
|
|
freshconf: main.mk
|
|
|
|
checkconf:
|
|
@if [ -f devel ]; then\
|
|
$(MAKE) freshconf;\
|
|
fi
|
|
|
|
# End of Makefile
|