* fpcmake & fpmake: support for installing .bc files (LLVM bitcode)

git-svn-id: branches/debug_eh@41913 -
This commit is contained in:
Jonas Maebe 2019-04-20 18:56:23 +00:00
parent cd3e4d26d4
commit 5757ae75b8
3 changed files with 344 additions and 323 deletions

View File

@ -235,6 +235,7 @@ Const
PPExt = '.pp';
IncExt = '.inc';
ObjExt = '.o';
LTOExt = '.bc';
RstExt = '.rst';
RsjExt = '.rsj';
LibExt = '.a';
@ -623,6 +624,7 @@ Type
Function GetUnitFileName : String; virtual;
function GetUnitLibFileName(AOS: TOS): String; virtual;
Function GetObjectFileName : String; virtual;
Function GetLTOFileName : String; virtual;
Function GetBinFileBase: String;
function GetRSTFileName : String; Virtual;
function GetRSJFileName : String; Virtual;
@ -654,6 +656,7 @@ Type
Property SourceFileName: String Read GetSourceFileName ;
Property UnitFileName : String Read GetUnitFileName;
Property ObjectFileName : String Read GetObjectFileName;
Property LTOFileName : String Read GetLTOFileName;
Property RSTFileName : String Read GetRSTFileName;
Property RSJFileName : String Read GetRSJFileName;
Property FPCTarget : String Read FFPCTarget Write FFPCTarget;
@ -8659,6 +8662,12 @@ begin
end;
function TTarget.GetLTOFileName: String;
begin
Result:=Name+LTOExt;
end;
function TTarget.GetRSTFileName: String;
begin
Result:=Name+RSText;
@ -8756,6 +8765,7 @@ begin
If not(ACPU in CPUs) or not(AOS in OSes) then
exit;
List.Add(APrefixU + ObjectFileName);
List.Add(APrefixU + LTOFileName);
If (TargetType in [ttUnit,ttImplicitUnit,ttExampleUnit, ttCleanOnlyUnit]) then
begin
List.Add(APrefixU + UnitFileName);
@ -8808,9 +8818,14 @@ var
UnitsDir : string;
begin
UnitsDir := Installer.BuildEngine.AddPathPrefix(nil, APrefixU);
If Not (TargetType in [ttProgram,ttSharedLibrary,ttExampleProgram]) and FileExists(UnitsDir + ObjectFileName) then
// The compiler does not create an objectfile for all programs.
List.Add(APrefixU + ObjectFileName);
If Not (TargetType in [ttProgram,ttSharedLibrary,ttExampleProgram]) then
begin
// The compiler does not create an objectfile for all programs.
if FileExists(UnitsDir + ObjectFileName) then
List.Add(APrefixU + ObjectFileName);
if FileExists(UnitsDir + LTOFileName) then
List.Add(APrefixU + LTOFileName);
end;
If (TargetType in [ttUnit,ttImplicitUnit,ttExampleUnit]) then
begin
List.Add(APrefixU + UnitFileName);

File diff suppressed because it is too large Load Diff

View File

@ -870,6 +870,7 @@ EXEEXT=.exe
PPLEXT=.ppl
PPUEXT=.ppu
OEXT=.o
LTOEXT=.bc
ASMEXT=.s
SMARTEXT=.sl
STATICLIBEXT=.a
@ -1587,7 +1588,7 @@ fpc_units: $(COMPILER_UNITTARGETDIR) $(UNITPPUFILES)
ifndef CROSSINSTALL
ifneq ($(TARGET_PROGRAMS),)
override EXEFILES=$(addsuffix $(EXEEXT),$(TARGET_PROGRAMS))
override EXEOFILES:=$(addsuffix $(OEXT),$(TARGET_PROGRAMS)) $(addprefix $(STATICLIBPREFIX),$(addsuffix $(STATICLIBEXT),$(TARGET_PROGRAMS))) $(addprefix $(IMPORTLIBPREFIX),$(addsuffix $(STATICLIBEXT),$(TARGET_PROGRAMS)))
override EXEOFILES:=$(addsuffix $(OEXT),$(TARGET_PROGRAMS)) $(addsuffix $(LTOEXT),$(TARGET_PROGRAMS))$(addprefix $(STATICLIBPREFIX),$(addsuffix $(STATICLIBEXT),$(TARGET_PROGRAMS))) $(addprefix $(IMPORTLIBPREFIX),$(addsuffix $(STATICLIBEXT),$(TARGET_PROGRAMS)))
override EXEDBGFILES:=$(addsuffix $(EXEDBGEXT),$(TARGET_PROGRAMS))
override ALLTARGET+=fpc_exes
@ -1629,7 +1630,7 @@ ifneq ($(TARGET_EXAMPLES),)
HASEXAMPLES=1
override EXAMPLESOURCEFILES:=$(wildcard $(addsuffix .pp,$(TARGET_EXAMPLES)) $(addsuffix .pas,$(TARGET_EXAMPLES)) $(addsuffix .lpr,$(TARGET_EXAMPLES)) $(addsuffix .dpr,$(TARGET_EXAMPLES)))
override EXAMPLEFILES:=$(addsuffix $(EXEEXT),$(TARGET_EXAMPLES))
override EXAMPLEOFILES:=$(addsuffix $(OEXT),$(TARGET_EXAMPLES)) $(addprefix $(STATICLIBPREFIX),$(addsuffix $(STATICLIBEXT),$(TARGET_EXAMPLES))) $(addprefix $(IMPORTLIBPREFIX),$(addsuffix $(STATICLIBEXT),$(TARGET_EXAMPLES)))
override EXAMPLEOFILES:=$(addsuffix $(OEXT),$(TARGET_EXAMPLES)) $(addsuffix $(LTOEXT),$(TARGET_EXAMPLES)) $(addprefix $(STATICLIBPREFIX),$(addsuffix $(STATICLIBEXT),$(TARGET_EXAMPLES))) $(addprefix $(IMPORTLIBPREFIX),$(addsuffix $(STATICLIBEXT),$(TARGET_EXAMPLES)))
override EXAMPLEDBGFILES:=$(addsuffix $(EXEDBGEXT),$(TARGET_EXAMPLES))
override CLEANEXEFILES+=$(EXAMPLEFILES) $(EXAMPLEOFILES)
@ -1671,7 +1672,7 @@ fpc_release:
# General compile rules, available for both possible .pp and .pas extensions
.SUFFIXES: $(EXEEXT) $(PPUEXT) $(OEXT) .pas .lpr .dpr .pp .rc .res
.SUFFIXES: $(EXEEXT) $(PPUEXT) $(OEXT) $(LTOEXT) .pas .lpr .dpr .pp .rc .res
$(COMPILER_UNITTARGETDIR):
$(MKDIRTREE) $(COMPILER_UNITTARGETDIR)
@ -1713,6 +1714,7 @@ vpath %.lpr $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
vpath %.dpr $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
vpath %.inc $(COMPILER_INCLUDEDIR)
vpath %$(OEXT) $(COMPILER_UNITTARGETDIR)
vpath %$(LTOEXT) $(COMPILER_UNITTARGETDIR)
vpath %$(PPUEXT) $(COMPILER_UNITTARGETDIR)
[sharedrules]
@ -1780,9 +1782,9 @@ ifdef INSTALLPPUFILES
# Avoid getting the same name twice as some install EXE fail
# in this case, happends for instance for OS/2 target
ifneq ($(IMPORTLIBPREFIX)-$(STATICLIBEXT),$(STATICLIBPREFIX)-$(STATICLIBEXT))
override INSTALLPPULINKFILES:=$(subst $(PPUEXT),$(OEXT),$(INSTALLPPUFILES)) $(addprefix $(STATICLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(INSTALLPPUFILES))) $(addprefix $(IMPORTLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(INSTALLPPUFILES)))
override INSTALLPPULINKFILES:=$(subst $(PPUEXT),$(OEXT),$(INSTALLPPUFILES)) $(subst $(PPUEXT),$(LTOEXT),$(INSTALLPPUFILES)) $(addprefix $(STATICLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(INSTALLPPUFILES))) $(addprefix $(IMPORTLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(INSTALLPPUFILES)))
else
override INSTALLPPULINKFILES:=$(subst $(PPUEXT),$(OEXT),$(INSTALLPPUFILES)) $(addprefix $(STATICLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(INSTALLPPUFILES)))
override INSTALLPPULINKFILES:=$(subst $(PPUEXT),$(OEXT),$(INSTALLPPUFILES)) $(subst $(PPUEXT),$(LTOEXT),$(INSTALLPPUFILES)) $(addprefix $(STATICLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(INSTALLPPUFILES)))
endif
ifneq ($(UNITTARGETDIRPREFIX),)
@ -1996,7 +1998,7 @@ override CLEANPPUFILES+=$(addsuffix $(PPUEXT),$(CLEAN_UNITS))
endif
ifdef CLEANPPUFILES
override CLEANPPULINKFILES:=$(subst $(PPUEXT),$(OEXT),$(CLEANPPUFILES)) $(addprefix $(STATICLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(CLEANPPUFILES))) $(addprefix $(IMPORTLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(CLEANPPUFILES)))
override CLEANPPULINKFILES:=$(subst $(PPUEXT),$(OEXT),$(CLEANPPUFILES)) $(subst $(PPUEXT),$(LTOEXT),$(CLEANPPUFILES)) $(addprefix $(STATICLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(CLEANPPUFILES))) $(addprefix $(IMPORTLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(CLEANPPUFILES)))
ifdef DEBUGSYMEXT
override CLEANPPULINKFILES+=$(subst $(PPUEXT),$(DEBUGSYMEXT),$(CLEANPPUFILES))
endif
@ -2050,7 +2052,7 @@ ifdef CLEAN_FILES
endif
-$(DELTREE) units
-$(DELTREE) bin
-$(DEL) *$(OEXT) *$(PPUEXT) *$(RSTEXT) *$(ASMEXT) *$(STATICLIBEXT) *$(SHAREDLIBEXT) *$(PPLEXT)
-$(DEL) *$(OEXT) *$(LTOEXT) *$(PPUEXT) *$(RSTEXT) *$(ASMEXT) *$(STATICLIBEXT) *$(SHAREDLIBEXT) *$(PPLEXT)
ifneq ($(PPUEXT),.ppu)
-$(DEL) *.o *.ppu *.a
endif
@ -2299,7 +2301,7 @@ lclinfo:
# fpmake prerules
#####################################################################
FPMAKEBIN=fpmake$(SRCEXEEXT)
FPMAKEBINOBJ=fpmake$(OEXT)
FPMAKEBINOBJ=fpmake$(OEXT) fpmake$(LTOEXT)
LOCALFPMAKEBIN=.$(PATHSEP)$(FPMAKEBIN)
# Convert the OS_TARGET and CPU_TARGET options to fpmake's --os and --cpu parameters