mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-06 21:47:58 +02:00
309 lines
7.0 KiB
Makefile
309 lines
7.0 KiB
Makefile
#
|
|
# Makefile.fpc for Free Pascal Source Tree
|
|
#
|
|
|
|
[package]
|
|
name=fpc
|
|
version=2.1.1
|
|
|
|
[target]
|
|
dirs=compiler rtl utils fcl fv 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),alpha)
|
|
PPSUF=axp
|
|
endif
|
|
ifeq ($(CPU_TARGET),arm)
|
|
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
|
|
SMARTTARGETS=win32 go32v2 linux freebsd netbsd openbsd netware netwlibc
|
|
ifneq ($(findstring $(OS_TARGET),$(SMARTTARGETS)),)
|
|
ALLTARGET=smart
|
|
else
|
|
ALLTARGET=all
|
|
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),)
|
|
ifneq ($(wildcard fv),)
|
|
IDETARGETS=go32v2 win32 linux freebsd os2 emx
|
|
ifneq ($(findstring $(OS_TARGET),$(IDETARGETS)),)
|
|
IDE=1
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
|
|
[rules]
|
|
# 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
|
|
|
|
|
|
#######################################
|
|
# Packages
|
|
#######################################
|
|
|
|
.PHONY: packages_base_all packages_extra_all \
|
|
packages_base_smart packages_extra_smart
|
|
|
|
packages_base_all:
|
|
$(MAKE) -C packages base_all
|
|
|
|
packages_base_smart:
|
|
$(MAKE) -C packages base_smart
|
|
|
|
packages_extra_all:
|
|
$(MAKE) -C packages extra_all
|
|
|
|
packages_extra_smart:
|
|
$(MAKE) -C packages extra_smart
|
|
|
|
|
|
##########################################################################
|
|
# Packaging
|
|
##########################################################################
|
|
|
|
BUILDSTAMP=build-stamp.$(FULL_TARGET)
|
|
|
|
.PHONY: all clean distclean build install installbase installother zipinstallbase zipinstallotherzipinstall singlezipinstall
|
|
|
|
all: build
|
|
|
|
clean: $(addsuffix _distclean,$(TARGET_DIRS))
|
|
$(DEL) 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) fcl_clean $(CLEANOPTS)
|
|
$(MAKE) fv_clean $(CLEANOPTS)
|
|
$(MAKE) utils_clean $(CLEANOPTS)
|
|
ifdef IDE
|
|
$(MAKE) ide_clean $(CLEANOPTS)
|
|
endif
|
|
# build everything
|
|
$(MAKE) rtl_$(ALLTARGET) $(BUILDOPTS)
|
|
$(MAKE) packages_base_$(ALLTARGET) $(BUILDOPTS)
|
|
$(MAKE) fcl_$(ALLTARGET) $(BUILDOPTS)
|
|
$(MAKE) fv_$(ALLTARGET) $(BUILDOPTS)
|
|
$(MAKE) packages_extra_$(ALLTARGET) $(BUILDOPTS)
|
|
$(MAKE) utils_all $(BUILDOPTS)
|
|
ifdef IDE
|
|
$(MAKE) ide_all $(BUILDOPTS)
|
|
$(MAKE) installer_all $(BUILDOPTS)
|
|
endif
|
|
$(ECHOREDIR) Build > $(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) fcl_$(INSTALLTARGET) $(INSTALLOPTS)
|
|
$(MAKE) fv_$(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) fcl_zip$(INSTALLTARGET) $(INSTALLOPTS) ZIPPREFIX=$(PKGUNITSPRE)
|
|
$(MAKE) fv_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 ZIPNAME=fpc-$(PACKAGE_VERSION) $(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)
|