mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-16 15:59:30 +02:00
324 lines
7.1 KiB
Makefile
324 lines
7.1 KiB
Makefile
#
|
|
# Makefile.fpc for shedit
|
|
#
|
|
|
|
[dirs]
|
|
fpcdir=..
|
|
unitdir=
|
|
targetdir=.
|
|
|
|
[defaults]
|
|
defaultoptions=-Sg
|
|
|
|
[tools]
|
|
tooldiff=1
|
|
toolcmp=1
|
|
|
|
|
|
[presettings]
|
|
# RTL
|
|
RTL=../rtl
|
|
UTILS=../utils
|
|
|
|
# Utils used by compiler development/installation
|
|
COMPILERUTILS=utils
|
|
|
|
# Default language for the compiler
|
|
ifndef FPCLANG
|
|
FPCLANG=e
|
|
endif
|
|
|
|
# Local defines for the compiler only
|
|
ifndef LOCALDEF
|
|
LOCALDEF=
|
|
endif
|
|
|
|
# Local options for the compiler only
|
|
ifndef LOCALOPT
|
|
LOCALOPT=
|
|
endif
|
|
|
|
# Options for the RTL only when cycling
|
|
ifndef RTLOPTS
|
|
RTLOPTS=
|
|
endif
|
|
|
|
# Message files
|
|
MSGFILES=$(wildcard error*.msg)
|
|
|
|
|
|
[postsettings]
|
|
# Default message file
|
|
MSGFILE=error$(FPCLANG).msg
|
|
|
|
# set correct defines (-d$(CPU_TARGET) is automaticly added in makefile.fpc)
|
|
override LOCALDEF+=-dGDB -dBROWSERLOG
|
|
|
|
# for i386 also insert MMX support
|
|
ifeq ($(CPU_TARGET),i386)
|
|
override LOCALDEF+=-dSUPPORT_MMX
|
|
endif
|
|
|
|
# We don't need the intel and binary writer on linux...
|
|
ifdef inlinux
|
|
override LOCALDEF+=-dNOAG386INT -dNOAG386BIN
|
|
endif
|
|
|
|
override LOCALOPT+=$(LOCALDEF)
|
|
|
|
override FPCOPT+=$(LOCALOPT)
|
|
|
|
|
|
[rules]
|
|
#####################################################################
|
|
# Setup Targets
|
|
#####################################################################
|
|
|
|
ifeq ($(OS_TARGET),win32)
|
|
ifdef CMP
|
|
override DIFF:=$(CMP) -i138
|
|
endif
|
|
endif
|
|
|
|
# Used to avoid unnecessary steps in remake3
|
|
ifdef DIFF
|
|
ifdef OLDFPC
|
|
DIFFRESULT:=$(shell $(DIFF) $(OLDFPC) $(FPC))
|
|
else
|
|
DIFFRESULT=Not equal
|
|
endif
|
|
else
|
|
DIFFRESULT=No diff program
|
|
endif
|
|
|
|
|
|
#####################################################################
|
|
# Setup os-independent filenames
|
|
#####################################################################
|
|
|
|
FPCEXENAME=pp$(EXEEXT)
|
|
EXENAME=ppc386$(EXEEXT)
|
|
M68KEXENAME=ppc68k$(EXEEXT)
|
|
TEMPNAME=ppc$(EXEEXT)
|
|
TEMPNAME1=ppc1$(EXEEXT)
|
|
TEMPNAME2=ppc2$(EXEEXT)
|
|
TEMPNAME3=ppc3$(EXEEXT)
|
|
MAKEDEP=ppdep$(EXEEXT)
|
|
MSG2INC=msg2inc$(EXEEXT)
|
|
|
|
|
|
#####################################################################
|
|
# Default makefile
|
|
#####################################################################
|
|
|
|
all: $(EXENAME)
|
|
$(MAKE) echotime
|
|
|
|
ifeq ($(MAKELEVEL),0)
|
|
ifndef STARTTIME
|
|
ifdef DATE
|
|
STARTTIME:=$(shell $(DATE) +%T)
|
|
else
|
|
STARTTIME:=unknown
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
export STARTTIME
|
|
|
|
ifdef DATE
|
|
ENDTIME=$(shell $(DATE) +%T)
|
|
else
|
|
ENDTIME:=unknown
|
|
endif
|
|
|
|
echotime:
|
|
@echo Start $(STARTTIME) now $(ENDTIME)
|
|
|
|
ifndef DIFFRESULT
|
|
next :
|
|
@echo $(OLDFPC) and $(FPC) are equal
|
|
$(COPY) $(FPC) $(EXENAME)
|
|
else
|
|
next :
|
|
$(MAKE) execlean
|
|
$(MAKE) -C $(RTLDIR) clean
|
|
$(MAKE) -C $(RTLDIR) 'FPC=$(FPC)' 'OPT=$(RTLOPTS)' all
|
|
$(MAKE) clean
|
|
$(MAKE) all
|
|
endif
|
|
|
|
clean : execlean fpc_cleanall
|
|
|
|
execlean :
|
|
-$(DEL) $(EXENAME)
|
|
|
|
distclean: clean
|
|
-$(DEL) $(TEMPNAME) $(TEMPNAME1) $(TEMPNAME2) $(TEMPNAME3) $(MSG2INC)
|
|
|
|
|
|
#####################################################################
|
|
# Include depencies
|
|
#####################################################################
|
|
|
|
$(MAKEDEP): $(UTILS)/ppdep.pp
|
|
$(COMPILER) $(UTILS)/ppdep.pp
|
|
$(COPY) $(UTILS)/$(MAKEDEP) $(MAKEDEP)
|
|
|
|
dependencies : $(MAKEDEP)
|
|
$(MAKEDEP) pp.pas $(FPCOPTDEF) $(LOCALDEF) '-F$$(COMPILER) $$(LOCALOPT)' > depend
|
|
|
|
ifdef USEDEPEND
|
|
|
|
include depend
|
|
|
|
endif
|
|
|
|
|
|
#####################################################################
|
|
# Make targets
|
|
#####################################################################
|
|
|
|
$(MSG2INC): $(COMPILERUTILS)/msg2inc.pp
|
|
$(COMPILER) -FE. $(COMPILERUTILS)/msg2inc.pp
|
|
|
|
# The msgtxt.inc only depends on the error?.msg file, not on msg2inc,
|
|
# because that one will be new almost everytime
|
|
msgtxt.inc: $(MSGFILE)
|
|
$(MAKE) $(MSG2INC)
|
|
$(MSG2INC) $(MSGFILE) msg msg
|
|
|
|
msg: msgtxt.inc
|
|
|
|
# Make only the compiler
|
|
ifndef COMPLETE
|
|
$(EXENAME) : $(wildcard *.pas) $(wildcard *.inc) msg
|
|
$(COMPILER) pp.pas
|
|
$(EXECPPAS)
|
|
$(MOVE) $(FPCEXENAME) $(EXENAME)
|
|
else
|
|
$(EXENAME) : $(wildcard *.pas) $(wildcard *.inc) msg
|
|
$(COMPILER) pp.pas
|
|
$(EXECPPAS)
|
|
$(COMPILER) pp.pas
|
|
$(EXECPPAS)
|
|
$(COMPILER) pp.pas
|
|
$(EXECPPAS)
|
|
$(MOVE) $(FPCEXENAME) $(EXENAME)
|
|
endif
|
|
|
|
tokens.dat : $(wildcard *.pas) $(wildcard *.inc)
|
|
$(COMPILER) tokendat.pas
|
|
./tokendat
|
|
|
|
# This target remakes the units with the currently made version
|
|
remake: $(EXENAME)
|
|
$(MOVE) $(EXENAME) $(TEMPNAME)
|
|
$(MAKE) execlean
|
|
$(MAKE) -C $(RTLDIR) clean
|
|
$(MAKE) clean
|
|
$(MAKE) 'FPC=$(BASEDIR)/$(TEMPNAME)' all
|
|
|
|
remake3: $(TEMPNAME3)
|
|
$(MAKE) 'FPC=$(BASEDIR)/$(TEMPNAME3)' 'OLDFPC=$(BASEDIR)/$(TEMPNAME2)' next
|
|
$(DIFF) $(TEMPNAME3) $(EXENAME)
|
|
|
|
$(TEMPNAME1) : $(EXENAME)
|
|
-$(DEL) $(TEMPNAME1)
|
|
$(MOVE) $(EXENAME) $(TEMPNAME1)
|
|
|
|
$(TEMPNAME2) : $(TEMPNAME1)
|
|
$(MAKE) 'FPC=$(BASEDIR)/$(TEMPNAME1)' 'OLDFPC=' next
|
|
-$(DEL) $(TEMPNAME2)
|
|
$(MOVE) $(EXENAME) $(TEMPNAME2)
|
|
|
|
$(TEMPNAME3) : $(TEMPNAME2)
|
|
$(MAKE) 'FPC=$(BASEDIR)/$(TEMPNAME2)' 'OLDFPC=$(BASEDIR)/$(TEMPNAME1)' next
|
|
-$(DEL) $(TEMPNAME3)
|
|
$(MOVE) $(EXENAME) $(TEMPNAME3)
|
|
|
|
cycle:
|
|
$(MAKE) clean
|
|
$(MAKE) -C $(RTLDIR) clean
|
|
$(MAKE) -C $(RTLDIR) 'OPT=$(RTLOPTS)' all
|
|
$(MAKE) remake3
|
|
$(MAKE) echotime
|
|
|
|
cycledep:
|
|
$(MAKE) cycle USEDEPEND=1
|
|
|
|
cvstest:
|
|
$(MAKE) cycle 'LOCALOPT=-n -Se' 'RTLOPTS=-n -Se'
|
|
|
|
|
|
#####################################################################
|
|
# Installation
|
|
#####################################################################
|
|
|
|
# This will only install the ppc386.exe, not the message files etc.
|
|
quickinstall:
|
|
ifdef inlinux
|
|
$(MKDIR) $(LIBINSTALLDIR)
|
|
$(INSTALLEXE) $(EXENAME) $(LIBINSTALLDIR)
|
|
else
|
|
$(MKDIR) $(BININSTALLDIR)
|
|
ifdef UPX
|
|
-$(UPX) $(EXENAME)
|
|
endif
|
|
$(INSTALLEXE) $(EXENAME) $(BININSTALLDIR)
|
|
endif
|
|
|
|
installlib: quickinstall
|
|
ifdef inlinux
|
|
$(INSTALLEXE) $(COMPILERUTILS)/samplecfg $(LIBINSTALLDIR)/samplecfg
|
|
endif
|
|
$(MKDIR) $(MSGINSTALLDIR)
|
|
$(INSTALL) $(MSGFILES) $(MSGINSTALLDIR)
|
|
|
|
# this also installs the link /usr/bin/ppc386. The .deb does that later
|
|
install: installlib
|
|
ifdef inlinux
|
|
$(MKDIR) $(BININSTALLDIR)
|
|
ln -sf $(LIBINSTALLDIR)/ppc386 $(BININSTALLDIR)/ppc386
|
|
endif
|
|
|
|
|
|
#####################################################################
|
|
# Misc
|
|
#####################################################################
|
|
|
|
rtl :
|
|
$(MAKE) -C $(RTLDIR) all
|
|
|
|
rtlclean :
|
|
$(MAKE) -C $(RTLDIR) clean
|
|
|
|
rtlinstall:
|
|
$(MAKE) -C $(RTLDIR) install
|
|
|
|
#####################################################################
|
|
# local user configurable file
|
|
# in makefile.loc you can add any desired target
|
|
#####################################################################
|
|
|
|
localmake:=$(strip $(wildcard makefile.loc))
|
|
|
|
ifdef localmake
|
|
include ./$(localmake)
|
|
endif
|
|
|
|
|
|
#####################################################################
|
|
# M68k test targets
|
|
#####################################################################
|
|
|
|
# just a quick way to get ppc68k
|
|
# needs to be after makefile.def for PASFILES INCFILES
|
|
|
|
$(M68KEXENAME): $(PASFILES) $(INCFILES)
|
|
$(MAKE) clean
|
|
$(FPC) -uI386 -uSUPPORT_MMX -dm68k -o$(M68KEXENAME) pp
|
|
$(MAKE) clean
|
|
|
|
|