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

File diff suppressed because it is too large Load Diff

View File

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