# # Makefile.fpc for Free Pascal Source Tree # [package] name=fpc version=2.5.1 [target] dirs=compiler rtl utils packages ide installer [require] nortl=y [install] fpcpackage=y [default] fpcdir=. rule=help [prerules] # make versions < 3.77 (OS2 version) are buggy ifndef inOS2 override FPCDIR:=$(BASEDIR) export FPCDIR endif # Build dir ifndef BUILDDIR BUILDDIR=$(BASEDIR)/build endif # New ppc386 (or ppc68k if on m68k machine !) ifndef PPNEW ifeq ($(CPU_TARGET),m68k) PPSUF=68k endif ifeq ($(CPU_TARGET),i386) PPSUF=386 endif ifeq ($(CPU_TARGET),x86_64) PPSUF=x64 endif ifeq ($(CPU_TARGET),sparc) PPSUF=sparc endif ifeq ($(CPU_TARGET),powerpc) PPSUF=ppc endif ifeq ($(CPU_TARGET),powerpc64) PPSUF=ppc64 endif ifeq ($(CPU_TARGET),alpha) PPSUF=axp endif ifeq ($(CPU_TARGET),arm) PPSUF=arm endif ifeq ($(CPU_TARGET),armeb) PPSUF=arm endif # cross compilers uses full cpu_target, not just ppc-suffix. ifdef CROSSCOMPILE PPPRE=ppcross else PPPRE=ppc endif PPNEW=$(BASEDIR)/compiler/$(PPPRE)$(PPSUF)$(SRCEXEEXT) endif # Check if install/ subdir is available ifneq ($(wildcard install),) CVSINSTALL=install else CVSINSTALL=. endif # Install target, for snapshots we don't install examples. # Cross installation only needs the .ppu files ifdef SNAPSHOT INSTALLTARGET=install else ifdef CROSSINSTALL INSTALLTARGET=install else INSTALLTARGET=distinstall endif endif # All target ifdef SNAPSHOT ALLTARGET=all else ifndef ALLTARGET SHAREDTARGETS= SMARTTARGETS=win32 go32v2 linux freebsd netbsd openbsd netware netwlibc darwin ifneq ($(findstring $(OS_TARGET),$(SHAREDTARGETS)),) ALLTARGET=shared else ifneq ($(findstring $(OS_TARGET),$(SMARTTARGETS)),) ALLTARGET=smart else ALLTARGET=all endif endif endif endif # Prefix for units ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),) PKGUNITSPRE=u else PKGUNITSPRE=units- endif # Cross compile needs a prefix to not conflict with original packages ifdef CROSSINSTALL PKGPRE=$(FULL_TARGET)- else PKGPRE= endif # Always compile for release override RELEASE=1 export RELEASE # We want to have the resulting .zips in the current dir ifndef DIST_DESTDIR export DIST_DESTDIR:=$(BASEDIR) endif # Temporary path to pack a file BASEPACKDIR=$(BASEDIR)/basepack # Newly created fpcmake ifeq ($(FULL_SOURCE),$(FULL_TARGET)) FPCMAKENEW=$(BASEDIR)/utils/fpcm/fpcmake$(EXEEXT) else FPCMAKENEW=fpcmake endif # Build/install options CLEANOPTS=FPC=$(PPNEW) BUILDOPTS=FPC=$(PPNEW) RELEASE=1 INSTALLOPTS=FPC=$(PPNEW) ZIPDESTDIR=$(BASEDIR) FPCMAKE=$(FPCMAKENEW) # Compile also IDE (check for ide and fv dir) # Skipped by default for cross compiles, because it depends on libc ifndef CROSSCOMPILE ifneq ($(wildcard ide),) IDETARGETS=go32v2 win32 linux freebsd os2 emx beos haiku ifneq ($(findstring $(OS_TARGET),$(IDETARGETS)),) IDE=1 endif endif endif [rules] .NOTPARALLEL: # These values can change unexport FPC_VERSION FPC_COMPILERINFO OS_SOURCE # Only process directories that really exists override TARGET_DIRS:=$(wildcard $(TARGET_DIRS)) ##################################################################### # Main targets ##################################################################### .PHONY: help help: @$(ECHO) @$(ECHO) Targets @$(ECHO) all Alias for build @$(ECHO) build Build a new compiler and all packages @$(ECHO) install Install newly build files @$(ECHO) zipinstall Create zip/tar of installed files @$(ECHO) singlezipinstall Alias for zipinstall @$(ECHO) @exit ##################################################################### # Dependencies ##################################################################### ####################################### # Compiler ####################################### .PHONY: compiler_cycle compiler_cycle: $(MAKE) -C compiler cycle ########################################################################## # Packaging ########################################################################## BUILDSTAMP=build-stamp.$(FULL_TARGET) .PHONY: all clean distclean build buildbase install installbase installother zipinstallbase zipinstallotherzipinstall singlezipinstall all: build clean: $(addsuffix _distclean,$(TARGET_DIRS)) -$(DEL) build-stamp.* -$(DEL) base.build-stamp.* distclean: clean build: $(BUILDSTAMP) $(BUILDSTAMP): # create new compiler $(MAKE) compiler_cycle RELEASE=1 # clean $(MAKE) rtl_clean $(CLEANOPTS) $(MAKE) packages_clean $(CLEANOPTS) $(MAKE) utils_clean $(CLEANOPTS) ifdef IDE $(MAKE) ide_clean $(CLEANOPTS) $(MAKE) installer_clean $(CLEANOPTS) endif # build everything $(MAKE) rtl_$(ALLTARGET) $(BUILDOPTS) $(MAKE) packages_$(ALLTARGET) $(BUILDOPTS) $(MAKE) utils_all $(BUILDOPTS) ifdef IDE $(MAKE) ide_all $(BUILDOPTS) $(MAKE) installer_all $(BUILDOPTS) endif $(ECHOREDIR) Build > $(BUILDSTAMP) buildbase: base.$(BUILDSTAMP) base.$(BUILDSTAMP): # create new compiler $(MAKE) compiler_cycle RELEASE=1 # clean $(MAKE) rtl_clean $(CLEANOPTS) # build everything $(MAKE) rtl_$(ALLTARGET) $(BUILDOPTS) $(ECHOREDIR) Build > base.$(BUILDSTAMP) installbase: # create dirs $(MKDIR) $(INSTALL_BASEDIR) $(MKDIR) $(INSTALL_BINDIR) # install compiler+rtl $(MAKE) compiler_$(INSTALLTARGET) $(INSTALLOPTS) $(MAKE) rtl_$(INSTALLTARGET) $(INSTALLOPTS) installother: $(MAKE) packages_$(INSTALLTARGET) $(INSTALLOPTS) $(MAKE) utils_$(INSTALLTARGET) $(INSTALLOPTS) ifdef IDE $(MAKE) ide_$(INSTALLTARGET) $(BUILDOPTS) endif zipinstallbase: $(MAKE) fpc_zipinstall ZIPTARGET=installbase ZIPNAME=base $(INSTALLOPTS) zipinstallother: $(MAKE) packages_zip$(INSTALLTARGET) $(INSTALLOPTS) ZIPPREFIX=$(PKGUNITSPRE) $(MAKE) utils_zip$(INSTALLTARGET) $(INSTALLOPTS) ifdef IDE $(MAKE) ide_zip$(INSTALLTARGET) $(INSTALLOPTS) endif install: $(BUILDSTAMP) $(MAKE) installbase $(INSTALLOPTS) $(MAKE) installother $(INSTALLOPTS) singlezipinstall: zipinstall zipinstall: $(BUILDSTAMP) $(MAKE) fpc_zipinstall ZIPTARGET=install FULLZIPNAME=fpc-$(PACKAGE_VERSION).$(TARGETSUFFIX) $(INSTALLOPTS) ########################################################################## # Cross installation (installation of cross compiler and units) ########################################################################## .PHONY: crossall crossinstall crosszipinstall crosssinglezipinstall crossall: $(MAKE) all CROSSINSTALL=1 crossinstall: $(MAKE) install CROSSINSTALL=1 crosszipinstall: $(MAKE) zipinstall CROSSINSTALL=1 crosssinglezipinstall: $(MAKE) fpc_zipinstall ZIPTARGET=crossinstall ZIPNAME=fpc $(INSTALLOPTS)