From ca5e2ee16a2a6c2268d3595ab3594b18c662d4b1 Mon Sep 17 00:00:00 2001 From: pierre Date: Thu, 20 Aug 2020 05:20:26 +0000 Subject: [PATCH 01/25] Also add platformopt to DllCmd[1], as done for ExeCmd[1] git-svn-id: trunk@46501 - --- compiler/systems/t_linux.pas | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compiler/systems/t_linux.pas b/compiler/systems/t_linux.pas index f5874b2fa5..b36d20f51d 100644 --- a/compiler/systems/t_linux.pas +++ b/compiler/systems/t_linux.pas @@ -390,7 +390,7 @@ begin with Info do begin ExeCmd[1]:='ld '+platform_select+platformopt+' $OPT $DYNLINK $STATIC $GCSECTIONS $STRIP $MAP $LTO -L. -o $EXE'; - DllCmd[1]:='ld '+platform_select+' $OPT $INIT $FINI $SONAME $MAP $LTO -shared $GCSECTIONS -L. -o $EXE'; + DllCmd[1]:='ld '+platform_select+platformopt+' $OPT $INIT $FINI $SONAME $MAP $LTO -shared $GCSECTIONS -L. -o $EXE'; { when we want to cross-link we need to override default library paths; when targeting binutils 2.19 or later, we use the "INSERT" command to augment the default linkerscript, which also requires -T (normally that From 460dc49d68abcfff83f21c1c71ff6740b8286fb5 Mon Sep 17 00:00:00 2001 From: michael Date: Thu, 20 Aug 2020 08:32:50 +0000 Subject: [PATCH 02/25] * Fix bug #37445, find resource file in subdir git-svn-id: trunk@46502 - --- packages/pastojs/src/pas2jsfilecache.pp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/pastojs/src/pas2jsfilecache.pp b/packages/pastojs/src/pas2jsfilecache.pp index 2198369944..fee9d389a8 100644 --- a/packages/pastojs/src/pas2jsfilecache.pp +++ b/packages/pastojs/src/pas2jsfilecache.pp @@ -1988,11 +1988,18 @@ var function SearchInDir(Dir: string; var Filename: string): boolean; // search in Dir for pp, pas, p times given case, lower case, upper case + var + CurFile : String; begin Dir:=IncludeTrailingPathDelimiter(Dir); if IndexOfFile(SearchedDirs,Dir)>=0 then exit(false); SearchedDirs.Add(Dir); - if SearchLowUpCase(Filename) then exit(true); + CurFile:=Dir+Filename; + if SearchLowUpCase(CurFile) then + begin + FileName:=CurFile; + exit(true); + end; Result:=false; end; From 9a01bcf3dc185dac2d310d178b62d5e48e608529 Mon Sep 17 00:00:00 2001 From: yury Date: Thu, 20 Aug 2020 10:31:56 +0000 Subject: [PATCH 03/25] * Changed Integer to Longint in definitions of RTTI structures. It fixes typinfo for 16-bit CPUs. git-svn-id: trunk@46503 - --- rtl/objpas/typinfo.pp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/rtl/objpas/typinfo.pp b/rtl/objpas/typinfo.pp index 91e239dabb..4906092cf6 100644 --- a/rtl/objpas/typinfo.pp +++ b/rtl/objpas/typinfo.pp @@ -477,12 +477,12 @@ unit TypInfo; case TTypeKind of tkRecord: ( Terminator: Pointer; - Size: Integer; + Size: Longint; {$ifndef VER3_0} InitOffsetOp: PRecOpOffsetTable; ManagementOp: Pointer; {$endif} - ManagedFieldCount: Integer; + ManagedFieldCount: Longint; { ManagedFields: array[0..ManagedFieldCount - 1] of TInitManagedField ; } ); { include for proper alignment } @@ -710,10 +710,10 @@ unit TypInfo; {$ifndef VER3_0} RecInitInfo: Pointer; { points to TTypeInfo followed by init table } {$endif VER3_0} - RecSize: Integer; + RecSize: Longint; case Boolean of - False: (ManagedFldCount: Integer deprecated 'Use RecInitData^.ManagedFieldCount or TotalFieldCount depending on your use case'); - True: (TotalFieldCount: Integer); + False: (ManagedFldCount: Longint deprecated 'Use RecInitData^.ManagedFieldCount or TotalFieldCount depending on your use case'); + True: (TotalFieldCount: Longint); {ManagedFields: array[1..TotalFieldCount] of TManagedField} ); tkHelper: @@ -812,7 +812,7 @@ unit TypInfo; GetProc : CodePointer; SetProc : CodePointer; StoredProc : CodePointer; - Index : Integer; + Index : Longint; Default : Longint; NameIndex : SmallInt; From 5d0e1dbe5a148350b5aa041c511a5115a04a5ae0 Mon Sep 17 00:00:00 2001 From: yury Date: Thu, 20 Aug 2020 11:20:10 +0000 Subject: [PATCH 04/25] * msdos: Fixed section based smartlinking after my recent changes. git-svn-id: trunk@46504 - --- compiler/systems/t_msdos.pas | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/compiler/systems/t_msdos.pas b/compiler/systems/t_msdos.pas index 436576f910..325d9aaebe 100644 --- a/compiler/systems/t_msdos.pas +++ b/compiler/systems/t_msdos.pas @@ -102,14 +102,17 @@ implementation procedure tmsdostai_typedconstbuilder.add_link_ordered_symbol(sym: tasmsymbol; const secname: TSymStr); begin - with current_module.linkorderedsymbols do - if (Last=nil) or (TCmdStrListItem(Last).Str<>secname) then - current_module.linkorderedsymbols.concat(secname); + if (tf_smartlink_library in target_info.flags) and is_smartlink_vectorized_dead_strip then + begin + with current_module.linkorderedsymbols do + if (Last=nil) or (TCmdStrListItem(Last).Str<>secname) then + current_module.linkorderedsymbols.concat(secname); + end; end; class function tmsdostai_typedconstbuilder.get_vectorized_dead_strip_custom_section_name(const basename: TSymStr; st: tsymtable; options: ttcasmlistoptions; out secname: TSymStr): boolean; begin - result:=is_smartlink_vectorized_dead_strip; + result:=(tf_smartlink_library in target_info.flags) and is_smartlink_vectorized_dead_strip; if not result then exit; if tcalo_vectorized_dead_strip_start in options then @@ -126,9 +129,9 @@ implementation class function tmsdostai_typedconstbuilder.is_smartlink_vectorized_dead_strip: boolean; begin {$ifdef USE_LINKER_WLINK} - result:=true; + result:=inherited or (tf_smartlink_library in target_info.flags); {$else} - result:=not (cs_link_extern in current_settings.globalswitches); + result:=inherited and not (cs_link_extern in current_settings.globalswitches); {$endif USE_LINKER_WLINK} end; From 8bc2326b772fb85d3fbd297582a04d9008c34d60 Mon Sep 17 00:00:00 2001 From: michael Date: Thu, 20 Aug 2020 11:53:43 +0000 Subject: [PATCH 05/25] * Fix bug #37601: add some attribte definitions git-svn-id: trunk@46505 - --- rtl/inc/objpash.inc | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/rtl/inc/objpash.inc b/rtl/inc/objpash.inc index 1a7257bcdc..1ff5c7ac41 100644 --- a/rtl/inc/objpash.inc +++ b/rtl/inc/objpash.inc @@ -440,7 +440,11 @@ constructor Create; end; {$POP} - + WeakAttribute = class(TCustomAttribute); + UnsafeAttribute = class(TCustomAttribute); + RefAttribute = class(TCustomAttribute); + VolatileAttribute = class(TCustomAttribute); + Const ExceptProc : TExceptProc = Nil; RaiseProc : TExceptProc = Nil; From 82346563c118fa536cdc0b5472be1f2be0e74c6f Mon Sep 17 00:00:00 2001 From: michael Date: Thu, 20 Aug 2020 12:06:14 +0000 Subject: [PATCH 06/25] * Add StoredAttribute class, bug ID #37602 git-svn-id: trunk@46506 - --- rtl/inc/objpas.inc | 22 ++++++++++++++++++++++ rtl/inc/objpash.inc | 13 +++++++++++++ 2 files changed, 35 insertions(+) diff --git a/rtl/inc/objpas.inc b/rtl/inc/objpas.inc index d0beaba2f2..6207928a40 100644 --- a/rtl/inc/objpas.inc +++ b/rtl/inc/objpas.inc @@ -1172,6 +1172,28 @@ inherited; end; +{**************************************************************************** + TCustomStoredAttribute +****************************************************************************} + + + constructor StoredAttribute.Create; + begin + end; + + + constructor StoredAttribute.Create(Const aFlag : Boolean); + begin + FFlag:=aFlag; + end; + + + + constructor StoredAttribute.Create(Const aName : string); + begin + FName:=aName; + end; + {**************************************************************************** Exception Support diff --git a/rtl/inc/objpash.inc b/rtl/inc/objpash.inc index 1ff5c7ac41..711969e897 100644 --- a/rtl/inc/objpash.inc +++ b/rtl/inc/objpash.inc @@ -444,6 +444,19 @@ UnsafeAttribute = class(TCustomAttribute); RefAttribute = class(TCustomAttribute); VolatileAttribute = class(TCustomAttribute); + + StoredAttribute = Class(TCustomAttribute) + Private + FFlag : Boolean; + FName : String; + Public + Constructor Create; + Constructor Create(Const aFlag : Boolean); + Constructor Create(Const aName : String); + Property Flag : Boolean Read FFlag; + Property Name : String Read FName; + end; + Const ExceptProc : TExceptProc = Nil; From ac36a214bff45a88a2018584105934233a524b60 Mon Sep 17 00:00:00 2001 From: pierre Date: Thu, 20 Aug 2020 13:17:59 +0000 Subject: [PATCH 07/25] Do not set EXCLUDE_80BIT_TARGETS to 1 if OPT variable contains -dFPC_SOFT_FPUX80 git-svn-id: trunk@46507 - --- compiler/Makefile | 572 ++++++------------------------------------ compiler/Makefile.fpc | 2 + 2 files changed, 73 insertions(+), 501 deletions(-) diff --git a/compiler/Makefile b/compiler/Makefile index 398156d5f6..59c6329e4d 100644 --- a/compiler/Makefile +++ b/compiler/Makefile @@ -2,7 +2,7 @@ # Don't edit, this file is generated by FPCMake Version 2.0.0 # default: all -MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android i386-aros m68k-linux m68k-netbsd m68k-amiga m68k-atari m68k-palmos m68k-macosclassic m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macosclassic powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-haiku x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded x86_64-iphonesim x86_64-android x86_64-aros x86_64-dragonfly arm-linux arm-netbsd arm-palmos arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android arm-aros arm-freertos arm-ios powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux mipsel-embedded mipsel-android mips64el-linux jvm-java jvm-android i8086-embedded i8086-msdos i8086-win16 aarch64-linux aarch64-darwin aarch64-win64 aarch64-android aarch64-ios wasm-wasm sparc64-linux riscv32-linux riscv32-embedded riscv64-linux riscv64-embedded xtensa-linux xtensa-embedded xtensa-freertos z80-embedded z80-zxspectrum z80-msxdos +MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android i386-aros m68k-linux m68k-netbsd m68k-amiga m68k-atari m68k-palmos m68k-macos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-haiku x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded x86_64-iphonesim x86_64-android x86_64-aros x86_64-dragonfly arm-linux arm-netbsd arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android arm-aros powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux mipsel-embedded mipsel-android jvm-java jvm-android i8086-embedded i8086-msdos i8086-win16 aarch64-linux aarch64-darwin aarch64-android wasm-wasm sparc64-linux BSDs = freebsd netbsd openbsd darwin dragonfly UNIXs = linux $(BSDs) solaris qnx haiku aix LIMIT83fs = go32v2 os2 emx watcom msdos win16 atari @@ -196,24 +196,6 @@ $(error When compiling for mipsel-embedded, a sub-architecture (e.g. SUBARCH=pic endif override FPCOPT+=-Cp$(SUBARCH) endif -ifeq ($(FULL_TARGET),xtensa-embedded) -ifeq ($(SUBARCH),) -$(error When compiling for xtensa-embedded, a sub-architecture (e.g. SUBARCH=lx106 or SUBARCH=lx6) must be defined) -endif -override FPCOPT+=-Cp$(SUBARCH) -endif -ifeq ($(FULL_TARGET),xtensa-freertos) -ifeq ($(SUBARCH),) -$(error When compiling for xtensa-freertos, a sub-architecture (e.g. SUBARCH=lx106 or SUBARCH=lx6) must be defined) -endif -override FPCOPT+=-Cp$(SUBARCH) -endif -ifeq ($(FULL_TARGET),arm-freertos) -ifeq ($(SUBARCH),) -$(error When compiling for arm-freertos, a sub-architecture (e.g. SUBARCH=armv6m or SUBARCH=armv7em) must be defined) -endif -override FPCOPT+=-Cp$(SUBARCH) -endif ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),) TARGETSUFFIX=$(OS_TARGET) SOURCESUFFIX=$(OS_SOURCE) @@ -287,8 +269,8 @@ endif ifndef CROSSBINDIR CROSSBINDIR:=$(wildcard $(FPCDIR)/bin/$(TARGETSUFFIX)) endif -ifneq ($(findstring $(OS_TARGET),darwin iphonesim ios),) -ifneq ($(findstring $(OS_SOURCE),darwin ios),) +ifneq ($(findstring $(OS_TARGET),darwin iphonesim),) +ifeq ($(OS_SOURCE),darwin) DARWIN2DARWIN=1 endif endif @@ -728,7 +710,7 @@ endif ifeq ($(FULL_TARGET),m68k-palmos) override TARGET_DIRS+=utils endif -ifeq ($(FULL_TARGET),m68k-macosclassic) +ifeq ($(FULL_TARGET),m68k-macos) override TARGET_DIRS+=utils endif ifeq ($(FULL_TARGET),m68k-embedded) @@ -743,7 +725,7 @@ endif ifeq ($(FULL_TARGET),powerpc-amiga) override TARGET_DIRS+=utils endif -ifeq ($(FULL_TARGET),powerpc-macosclassic) +ifeq ($(FULL_TARGET),powerpc-macos) override TARGET_DIRS+=utils endif ifeq ($(FULL_TARGET),powerpc-darwin) @@ -821,6 +803,9 @@ endif ifeq ($(FULL_TARGET),arm-palmos) override TARGET_DIRS+=utils endif +ifeq ($(FULL_TARGET),arm-darwin) +override TARGET_DIRS+=utils +endif ifeq ($(FULL_TARGET),arm-wince) override TARGET_DIRS+=utils endif @@ -842,12 +827,6 @@ endif ifeq ($(FULL_TARGET),arm-aros) override TARGET_DIRS+=utils endif -ifeq ($(FULL_TARGET),arm-freertos) -override TARGET_DIRS+=utils -endif -ifeq ($(FULL_TARGET),arm-ios) -override TARGET_DIRS+=utils -endif ifeq ($(FULL_TARGET),powerpc64-linux) override TARGET_DIRS+=utils endif @@ -881,9 +860,6 @@ endif ifeq ($(FULL_TARGET),mipsel-android) override TARGET_DIRS+=utils endif -ifeq ($(FULL_TARGET),mips64el-linux) -override TARGET_DIRS+=utils -endif ifeq ($(FULL_TARGET),jvm-java) override TARGET_DIRS+=utils endif @@ -905,51 +881,15 @@ endif ifeq ($(FULL_TARGET),aarch64-darwin) override TARGET_DIRS+=utils endif -ifeq ($(FULL_TARGET),aarch64-win64) -override TARGET_DIRS+=utils -endif ifeq ($(FULL_TARGET),aarch64-android) override TARGET_DIRS+=utils endif -ifeq ($(FULL_TARGET),aarch64-ios) -override TARGET_DIRS+=utils -endif ifeq ($(FULL_TARGET),wasm-wasm) override TARGET_DIRS+=utils endif ifeq ($(FULL_TARGET),sparc64-linux) override TARGET_DIRS+=utils endif -ifeq ($(FULL_TARGET),riscv32-linux) -override TARGET_DIRS+=utils -endif -ifeq ($(FULL_TARGET),riscv32-embedded) -override TARGET_DIRS+=utils -endif -ifeq ($(FULL_TARGET),riscv64-linux) -override TARGET_DIRS+=utils -endif -ifeq ($(FULL_TARGET),riscv64-embedded) -override TARGET_DIRS+=utils -endif -ifeq ($(FULL_TARGET),xtensa-linux) -override TARGET_DIRS+=utils -endif -ifeq ($(FULL_TARGET),xtensa-embedded) -override TARGET_DIRS+=utils -endif -ifeq ($(FULL_TARGET),xtensa-freertos) -override TARGET_DIRS+=utils -endif -ifeq ($(FULL_TARGET),z80-embedded) -override TARGET_DIRS+=utils -endif -ifeq ($(FULL_TARGET),z80-zxspectrum) -override TARGET_DIRS+=utils -endif -ifeq ($(FULL_TARGET),z80-msxdos) -override TARGET_DIRS+=utils -endif ifeq ($(FULL_TARGET),i386-linux) override TARGET_PROGRAMS+=pp endif @@ -1034,7 +974,7 @@ endif ifeq ($(FULL_TARGET),m68k-palmos) override TARGET_PROGRAMS+=pp endif -ifeq ($(FULL_TARGET),m68k-macosclassic) +ifeq ($(FULL_TARGET),m68k-macos) override TARGET_PROGRAMS+=pp endif ifeq ($(FULL_TARGET),m68k-embedded) @@ -1049,7 +989,7 @@ endif ifeq ($(FULL_TARGET),powerpc-amiga) override TARGET_PROGRAMS+=pp endif -ifeq ($(FULL_TARGET),powerpc-macosclassic) +ifeq ($(FULL_TARGET),powerpc-macos) override TARGET_PROGRAMS+=pp endif ifeq ($(FULL_TARGET),powerpc-darwin) @@ -1127,6 +1067,9 @@ endif ifeq ($(FULL_TARGET),arm-palmos) override TARGET_PROGRAMS+=pp endif +ifeq ($(FULL_TARGET),arm-darwin) +override TARGET_PROGRAMS+=pp +endif ifeq ($(FULL_TARGET),arm-wince) override TARGET_PROGRAMS+=pp endif @@ -1148,12 +1091,6 @@ endif ifeq ($(FULL_TARGET),arm-aros) override TARGET_PROGRAMS+=pp endif -ifeq ($(FULL_TARGET),arm-freertos) -override TARGET_PROGRAMS+=pp -endif -ifeq ($(FULL_TARGET),arm-ios) -override TARGET_PROGRAMS+=pp -endif ifeq ($(FULL_TARGET),powerpc64-linux) override TARGET_PROGRAMS+=pp endif @@ -1187,9 +1124,6 @@ endif ifeq ($(FULL_TARGET),mipsel-android) override TARGET_PROGRAMS+=pp endif -ifeq ($(FULL_TARGET),mips64el-linux) -override TARGET_PROGRAMS+=pp -endif ifeq ($(FULL_TARGET),jvm-java) override TARGET_PROGRAMS+=pp endif @@ -1211,51 +1145,15 @@ endif ifeq ($(FULL_TARGET),aarch64-darwin) override TARGET_PROGRAMS+=pp endif -ifeq ($(FULL_TARGET),aarch64-win64) -override TARGET_PROGRAMS+=pp -endif ifeq ($(FULL_TARGET),aarch64-android) override TARGET_PROGRAMS+=pp endif -ifeq ($(FULL_TARGET),aarch64-ios) -override TARGET_PROGRAMS+=pp -endif ifeq ($(FULL_TARGET),wasm-wasm) override TARGET_PROGRAMS+=pp endif ifeq ($(FULL_TARGET),sparc64-linux) override TARGET_PROGRAMS+=pp endif -ifeq ($(FULL_TARGET),riscv32-linux) -override TARGET_PROGRAMS+=pp -endif -ifeq ($(FULL_TARGET),riscv32-embedded) -override TARGET_PROGRAMS+=pp -endif -ifeq ($(FULL_TARGET),riscv64-linux) -override TARGET_PROGRAMS+=pp -endif -ifeq ($(FULL_TARGET),riscv64-embedded) -override TARGET_PROGRAMS+=pp -endif -ifeq ($(FULL_TARGET),xtensa-linux) -override TARGET_PROGRAMS+=pp -endif -ifeq ($(FULL_TARGET),xtensa-embedded) -override TARGET_PROGRAMS+=pp -endif -ifeq ($(FULL_TARGET),xtensa-freertos) -override TARGET_PROGRAMS+=pp -endif -ifeq ($(FULL_TARGET),z80-embedded) -override TARGET_PROGRAMS+=pp -endif -ifeq ($(FULL_TARGET),z80-zxspectrum) -override TARGET_PROGRAMS+=pp -endif -ifeq ($(FULL_TARGET),z80-msxdos) -override TARGET_PROGRAMS+=pp -endif override INSTALL_FPCPACKAGE=y ifeq ($(FULL_TARGET),i386-linux) override COMPILER_INCLUDEDIR+=$(CPC_TARGET) @@ -1341,7 +1239,7 @@ endif ifeq ($(FULL_TARGET),m68k-palmos) override COMPILER_INCLUDEDIR+=$(CPC_TARGET) endif -ifeq ($(FULL_TARGET),m68k-macosclassic) +ifeq ($(FULL_TARGET),m68k-macos) override COMPILER_INCLUDEDIR+=$(CPC_TARGET) endif ifeq ($(FULL_TARGET),m68k-embedded) @@ -1356,7 +1254,7 @@ endif ifeq ($(FULL_TARGET),powerpc-amiga) override COMPILER_INCLUDEDIR+=$(CPC_TARGET) endif -ifeq ($(FULL_TARGET),powerpc-macosclassic) +ifeq ($(FULL_TARGET),powerpc-macos) override COMPILER_INCLUDEDIR+=$(CPC_TARGET) endif ifeq ($(FULL_TARGET),powerpc-darwin) @@ -1434,6 +1332,9 @@ endif ifeq ($(FULL_TARGET),arm-palmos) override COMPILER_INCLUDEDIR+=$(CPC_TARGET) endif +ifeq ($(FULL_TARGET),arm-darwin) +override COMPILER_INCLUDEDIR+=$(CPC_TARGET) +endif ifeq ($(FULL_TARGET),arm-wince) override COMPILER_INCLUDEDIR+=$(CPC_TARGET) endif @@ -1455,12 +1356,6 @@ endif ifeq ($(FULL_TARGET),arm-aros) override COMPILER_INCLUDEDIR+=$(CPC_TARGET) endif -ifeq ($(FULL_TARGET),arm-freertos) -override COMPILER_INCLUDEDIR+=$(CPC_TARGET) -endif -ifeq ($(FULL_TARGET),arm-ios) -override COMPILER_INCLUDEDIR+=$(CPC_TARGET) -endif ifeq ($(FULL_TARGET),powerpc64-linux) override COMPILER_INCLUDEDIR+=$(CPC_TARGET) endif @@ -1494,9 +1389,6 @@ endif ifeq ($(FULL_TARGET),mipsel-android) override COMPILER_INCLUDEDIR+=$(CPC_TARGET) endif -ifeq ($(FULL_TARGET),mips64el-linux) -override COMPILER_INCLUDEDIR+=$(CPC_TARGET) -endif ifeq ($(FULL_TARGET),jvm-java) override COMPILER_INCLUDEDIR+=$(CPC_TARGET) endif @@ -1518,51 +1410,15 @@ endif ifeq ($(FULL_TARGET),aarch64-darwin) override COMPILER_INCLUDEDIR+=$(CPC_TARGET) endif -ifeq ($(FULL_TARGET),aarch64-win64) -override COMPILER_INCLUDEDIR+=$(CPC_TARGET) -endif ifeq ($(FULL_TARGET),aarch64-android) override COMPILER_INCLUDEDIR+=$(CPC_TARGET) endif -ifeq ($(FULL_TARGET),aarch64-ios) -override COMPILER_INCLUDEDIR+=$(CPC_TARGET) -endif ifeq ($(FULL_TARGET),wasm-wasm) override COMPILER_INCLUDEDIR+=$(CPC_TARGET) endif ifeq ($(FULL_TARGET),sparc64-linux) override COMPILER_INCLUDEDIR+=$(CPC_TARGET) endif -ifeq ($(FULL_TARGET),riscv32-linux) -override COMPILER_INCLUDEDIR+=$(CPC_TARGET) -endif -ifeq ($(FULL_TARGET),riscv32-embedded) -override COMPILER_INCLUDEDIR+=$(CPC_TARGET) -endif -ifeq ($(FULL_TARGET),riscv64-linux) -override COMPILER_INCLUDEDIR+=$(CPC_TARGET) -endif -ifeq ($(FULL_TARGET),riscv64-embedded) -override COMPILER_INCLUDEDIR+=$(CPC_TARGET) -endif -ifeq ($(FULL_TARGET),xtensa-linux) -override COMPILER_INCLUDEDIR+=$(CPC_TARGET) -endif -ifeq ($(FULL_TARGET),xtensa-embedded) -override COMPILER_INCLUDEDIR+=$(CPC_TARGET) -endif -ifeq ($(FULL_TARGET),xtensa-freertos) -override COMPILER_INCLUDEDIR+=$(CPC_TARGET) -endif -ifeq ($(FULL_TARGET),z80-embedded) -override COMPILER_INCLUDEDIR+=$(CPC_TARGET) -endif -ifeq ($(FULL_TARGET),z80-zxspectrum) -override COMPILER_INCLUDEDIR+=$(CPC_TARGET) -endif -ifeq ($(FULL_TARGET),z80-msxdos) -override COMPILER_INCLUDEDIR+=$(CPC_TARGET) -endif ifeq ($(FULL_TARGET),i386-linux) override COMPILER_UNITDIR+=$(COMPILERSOURCEDIR) endif @@ -1647,7 +1503,7 @@ endif ifeq ($(FULL_TARGET),m68k-palmos) override COMPILER_UNITDIR+=$(COMPILERSOURCEDIR) endif -ifeq ($(FULL_TARGET),m68k-macosclassic) +ifeq ($(FULL_TARGET),m68k-macos) override COMPILER_UNITDIR+=$(COMPILERSOURCEDIR) endif ifeq ($(FULL_TARGET),m68k-embedded) @@ -1662,7 +1518,7 @@ endif ifeq ($(FULL_TARGET),powerpc-amiga) override COMPILER_UNITDIR+=$(COMPILERSOURCEDIR) endif -ifeq ($(FULL_TARGET),powerpc-macosclassic) +ifeq ($(FULL_TARGET),powerpc-macos) override COMPILER_UNITDIR+=$(COMPILERSOURCEDIR) endif ifeq ($(FULL_TARGET),powerpc-darwin) @@ -1740,6 +1596,9 @@ endif ifeq ($(FULL_TARGET),arm-palmos) override COMPILER_UNITDIR+=$(COMPILERSOURCEDIR) endif +ifeq ($(FULL_TARGET),arm-darwin) +override COMPILER_UNITDIR+=$(COMPILERSOURCEDIR) +endif ifeq ($(FULL_TARGET),arm-wince) override COMPILER_UNITDIR+=$(COMPILERSOURCEDIR) endif @@ -1761,12 +1620,6 @@ endif ifeq ($(FULL_TARGET),arm-aros) override COMPILER_UNITDIR+=$(COMPILERSOURCEDIR) endif -ifeq ($(FULL_TARGET),arm-freertos) -override COMPILER_UNITDIR+=$(COMPILERSOURCEDIR) -endif -ifeq ($(FULL_TARGET),arm-ios) -override COMPILER_UNITDIR+=$(COMPILERSOURCEDIR) -endif ifeq ($(FULL_TARGET),powerpc64-linux) override COMPILER_UNITDIR+=$(COMPILERSOURCEDIR) endif @@ -1800,9 +1653,6 @@ endif ifeq ($(FULL_TARGET),mipsel-android) override COMPILER_UNITDIR+=$(COMPILERSOURCEDIR) endif -ifeq ($(FULL_TARGET),mips64el-linux) -override COMPILER_UNITDIR+=$(COMPILERSOURCEDIR) -endif ifeq ($(FULL_TARGET),jvm-java) override COMPILER_UNITDIR+=$(COMPILERSOURCEDIR) endif @@ -1824,51 +1674,15 @@ endif ifeq ($(FULL_TARGET),aarch64-darwin) override COMPILER_UNITDIR+=$(COMPILERSOURCEDIR) endif -ifeq ($(FULL_TARGET),aarch64-win64) -override COMPILER_UNITDIR+=$(COMPILERSOURCEDIR) -endif ifeq ($(FULL_TARGET),aarch64-android) override COMPILER_UNITDIR+=$(COMPILERSOURCEDIR) endif -ifeq ($(FULL_TARGET),aarch64-ios) -override COMPILER_UNITDIR+=$(COMPILERSOURCEDIR) -endif ifeq ($(FULL_TARGET),wasm-wasm) override COMPILER_UNITDIR+=$(COMPILERSOURCEDIR) endif ifeq ($(FULL_TARGET),sparc64-linux) override COMPILER_UNITDIR+=$(COMPILERSOURCEDIR) endif -ifeq ($(FULL_TARGET),riscv32-linux) -override COMPILER_UNITDIR+=$(COMPILERSOURCEDIR) -endif -ifeq ($(FULL_TARGET),riscv32-embedded) -override COMPILER_UNITDIR+=$(COMPILERSOURCEDIR) -endif -ifeq ($(FULL_TARGET),riscv64-linux) -override COMPILER_UNITDIR+=$(COMPILERSOURCEDIR) -endif -ifeq ($(FULL_TARGET),riscv64-embedded) -override COMPILER_UNITDIR+=$(COMPILERSOURCEDIR) -endif -ifeq ($(FULL_TARGET),xtensa-linux) -override COMPILER_UNITDIR+=$(COMPILERSOURCEDIR) -endif -ifeq ($(FULL_TARGET),xtensa-embedded) -override COMPILER_UNITDIR+=$(COMPILERSOURCEDIR) -endif -ifeq ($(FULL_TARGET),xtensa-freertos) -override COMPILER_UNITDIR+=$(COMPILERSOURCEDIR) -endif -ifeq ($(FULL_TARGET),z80-embedded) -override COMPILER_UNITDIR+=$(COMPILERSOURCEDIR) -endif -ifeq ($(FULL_TARGET),z80-zxspectrum) -override COMPILER_UNITDIR+=$(COMPILERSOURCEDIR) -endif -ifeq ($(FULL_TARGET),z80-msxdos) -override COMPILER_UNITDIR+=$(COMPILERSOURCEDIR) -endif ifeq ($(FULL_TARGET),i386-linux) override COMPILER_TARGETDIR+=$(CPU_UNITDIR)/bin/$(FULL_TARGET) endif @@ -1953,7 +1767,7 @@ endif ifeq ($(FULL_TARGET),m68k-palmos) override COMPILER_TARGETDIR+=$(CPU_UNITDIR)/bin/$(FULL_TARGET) endif -ifeq ($(FULL_TARGET),m68k-macosclassic) +ifeq ($(FULL_TARGET),m68k-macos) override COMPILER_TARGETDIR+=$(CPU_UNITDIR)/bin/$(FULL_TARGET) endif ifeq ($(FULL_TARGET),m68k-embedded) @@ -1968,7 +1782,7 @@ endif ifeq ($(FULL_TARGET),powerpc-amiga) override COMPILER_TARGETDIR+=$(CPU_UNITDIR)/bin/$(FULL_TARGET) endif -ifeq ($(FULL_TARGET),powerpc-macosclassic) +ifeq ($(FULL_TARGET),powerpc-macos) override COMPILER_TARGETDIR+=$(CPU_UNITDIR)/bin/$(FULL_TARGET) endif ifeq ($(FULL_TARGET),powerpc-darwin) @@ -2046,6 +1860,9 @@ endif ifeq ($(FULL_TARGET),arm-palmos) override COMPILER_TARGETDIR+=$(CPU_UNITDIR)/bin/$(FULL_TARGET) endif +ifeq ($(FULL_TARGET),arm-darwin) +override COMPILER_TARGETDIR+=$(CPU_UNITDIR)/bin/$(FULL_TARGET) +endif ifeq ($(FULL_TARGET),arm-wince) override COMPILER_TARGETDIR+=$(CPU_UNITDIR)/bin/$(FULL_TARGET) endif @@ -2067,12 +1884,6 @@ endif ifeq ($(FULL_TARGET),arm-aros) override COMPILER_TARGETDIR+=$(CPU_UNITDIR)/bin/$(FULL_TARGET) endif -ifeq ($(FULL_TARGET),arm-freertos) -override COMPILER_TARGETDIR+=$(CPU_UNITDIR)/bin/$(FULL_TARGET) -endif -ifeq ($(FULL_TARGET),arm-ios) -override COMPILER_TARGETDIR+=$(CPU_UNITDIR)/bin/$(FULL_TARGET) -endif ifeq ($(FULL_TARGET),powerpc64-linux) override COMPILER_TARGETDIR+=$(CPU_UNITDIR)/bin/$(FULL_TARGET) endif @@ -2106,9 +1917,6 @@ endif ifeq ($(FULL_TARGET),mipsel-android) override COMPILER_TARGETDIR+=$(CPU_UNITDIR)/bin/$(FULL_TARGET) endif -ifeq ($(FULL_TARGET),mips64el-linux) -override COMPILER_TARGETDIR+=$(CPU_UNITDIR)/bin/$(FULL_TARGET) -endif ifeq ($(FULL_TARGET),jvm-java) override COMPILER_TARGETDIR+=$(CPU_UNITDIR)/bin/$(FULL_TARGET) endif @@ -2130,51 +1938,15 @@ endif ifeq ($(FULL_TARGET),aarch64-darwin) override COMPILER_TARGETDIR+=$(CPU_UNITDIR)/bin/$(FULL_TARGET) endif -ifeq ($(FULL_TARGET),aarch64-win64) -override COMPILER_TARGETDIR+=$(CPU_UNITDIR)/bin/$(FULL_TARGET) -endif ifeq ($(FULL_TARGET),aarch64-android) override COMPILER_TARGETDIR+=$(CPU_UNITDIR)/bin/$(FULL_TARGET) endif -ifeq ($(FULL_TARGET),aarch64-ios) -override COMPILER_TARGETDIR+=$(CPU_UNITDIR)/bin/$(FULL_TARGET) -endif ifeq ($(FULL_TARGET),wasm-wasm) override COMPILER_TARGETDIR+=$(CPU_UNITDIR)/bin/$(FULL_TARGET) endif ifeq ($(FULL_TARGET),sparc64-linux) override COMPILER_TARGETDIR+=$(CPU_UNITDIR)/bin/$(FULL_TARGET) endif -ifeq ($(FULL_TARGET),riscv32-linux) -override COMPILER_TARGETDIR+=$(CPU_UNITDIR)/bin/$(FULL_TARGET) -endif -ifeq ($(FULL_TARGET),riscv32-embedded) -override COMPILER_TARGETDIR+=$(CPU_UNITDIR)/bin/$(FULL_TARGET) -endif -ifeq ($(FULL_TARGET),riscv64-linux) -override COMPILER_TARGETDIR+=$(CPU_UNITDIR)/bin/$(FULL_TARGET) -endif -ifeq ($(FULL_TARGET),riscv64-embedded) -override COMPILER_TARGETDIR+=$(CPU_UNITDIR)/bin/$(FULL_TARGET) -endif -ifeq ($(FULL_TARGET),xtensa-linux) -override COMPILER_TARGETDIR+=$(CPU_UNITDIR)/bin/$(FULL_TARGET) -endif -ifeq ($(FULL_TARGET),xtensa-embedded) -override COMPILER_TARGETDIR+=$(CPU_UNITDIR)/bin/$(FULL_TARGET) -endif -ifeq ($(FULL_TARGET),xtensa-freertos) -override COMPILER_TARGETDIR+=$(CPU_UNITDIR)/bin/$(FULL_TARGET) -endif -ifeq ($(FULL_TARGET),z80-embedded) -override COMPILER_TARGETDIR+=$(CPU_UNITDIR)/bin/$(FULL_TARGET) -endif -ifeq ($(FULL_TARGET),z80-zxspectrum) -override COMPILER_TARGETDIR+=$(CPU_UNITDIR)/bin/$(FULL_TARGET) -endif -ifeq ($(FULL_TARGET),z80-msxdos) -override COMPILER_TARGETDIR+=$(CPU_UNITDIR)/bin/$(FULL_TARGET) -endif ifeq ($(FULL_TARGET),i386-linux) override COMPILER_UNITTARGETDIR+=$(CPU_UNITDIR)/units/$(FULL_TARGET) endif @@ -2259,7 +2031,7 @@ endif ifeq ($(FULL_TARGET),m68k-palmos) override COMPILER_UNITTARGETDIR+=$(CPU_UNITDIR)/units/$(FULL_TARGET) endif -ifeq ($(FULL_TARGET),m68k-macosclassic) +ifeq ($(FULL_TARGET),m68k-macos) override COMPILER_UNITTARGETDIR+=$(CPU_UNITDIR)/units/$(FULL_TARGET) endif ifeq ($(FULL_TARGET),m68k-embedded) @@ -2274,7 +2046,7 @@ endif ifeq ($(FULL_TARGET),powerpc-amiga) override COMPILER_UNITTARGETDIR+=$(CPU_UNITDIR)/units/$(FULL_TARGET) endif -ifeq ($(FULL_TARGET),powerpc-macosclassic) +ifeq ($(FULL_TARGET),powerpc-macos) override COMPILER_UNITTARGETDIR+=$(CPU_UNITDIR)/units/$(FULL_TARGET) endif ifeq ($(FULL_TARGET),powerpc-darwin) @@ -2352,6 +2124,9 @@ endif ifeq ($(FULL_TARGET),arm-palmos) override COMPILER_UNITTARGETDIR+=$(CPU_UNITDIR)/units/$(FULL_TARGET) endif +ifeq ($(FULL_TARGET),arm-darwin) +override COMPILER_UNITTARGETDIR+=$(CPU_UNITDIR)/units/$(FULL_TARGET) +endif ifeq ($(FULL_TARGET),arm-wince) override COMPILER_UNITTARGETDIR+=$(CPU_UNITDIR)/units/$(FULL_TARGET) endif @@ -2373,12 +2148,6 @@ endif ifeq ($(FULL_TARGET),arm-aros) override COMPILER_UNITTARGETDIR+=$(CPU_UNITDIR)/units/$(FULL_TARGET) endif -ifeq ($(FULL_TARGET),arm-freertos) -override COMPILER_UNITTARGETDIR+=$(CPU_UNITDIR)/units/$(FULL_TARGET) -endif -ifeq ($(FULL_TARGET),arm-ios) -override COMPILER_UNITTARGETDIR+=$(CPU_UNITDIR)/units/$(FULL_TARGET) -endif ifeq ($(FULL_TARGET),powerpc64-linux) override COMPILER_UNITTARGETDIR+=$(CPU_UNITDIR)/units/$(FULL_TARGET) endif @@ -2412,9 +2181,6 @@ endif ifeq ($(FULL_TARGET),mipsel-android) override COMPILER_UNITTARGETDIR+=$(CPU_UNITDIR)/units/$(FULL_TARGET) endif -ifeq ($(FULL_TARGET),mips64el-linux) -override COMPILER_UNITTARGETDIR+=$(CPU_UNITDIR)/units/$(FULL_TARGET) -endif ifeq ($(FULL_TARGET),jvm-java) override COMPILER_UNITTARGETDIR+=$(CPU_UNITDIR)/units/$(FULL_TARGET) endif @@ -2436,51 +2202,15 @@ endif ifeq ($(FULL_TARGET),aarch64-darwin) override COMPILER_UNITTARGETDIR+=$(CPU_UNITDIR)/units/$(FULL_TARGET) endif -ifeq ($(FULL_TARGET),aarch64-win64) -override COMPILER_UNITTARGETDIR+=$(CPU_UNITDIR)/units/$(FULL_TARGET) -endif ifeq ($(FULL_TARGET),aarch64-android) override COMPILER_UNITTARGETDIR+=$(CPU_UNITDIR)/units/$(FULL_TARGET) endif -ifeq ($(FULL_TARGET),aarch64-ios) -override COMPILER_UNITTARGETDIR+=$(CPU_UNITDIR)/units/$(FULL_TARGET) -endif ifeq ($(FULL_TARGET),wasm-wasm) override COMPILER_UNITTARGETDIR+=$(CPU_UNITDIR)/units/$(FULL_TARGET) endif ifeq ($(FULL_TARGET),sparc64-linux) override COMPILER_UNITTARGETDIR+=$(CPU_UNITDIR)/units/$(FULL_TARGET) endif -ifeq ($(FULL_TARGET),riscv32-linux) -override COMPILER_UNITTARGETDIR+=$(CPU_UNITDIR)/units/$(FULL_TARGET) -endif -ifeq ($(FULL_TARGET),riscv32-embedded) -override COMPILER_UNITTARGETDIR+=$(CPU_UNITDIR)/units/$(FULL_TARGET) -endif -ifeq ($(FULL_TARGET),riscv64-linux) -override COMPILER_UNITTARGETDIR+=$(CPU_UNITDIR)/units/$(FULL_TARGET) -endif -ifeq ($(FULL_TARGET),riscv64-embedded) -override COMPILER_UNITTARGETDIR+=$(CPU_UNITDIR)/units/$(FULL_TARGET) -endif -ifeq ($(FULL_TARGET),xtensa-linux) -override COMPILER_UNITTARGETDIR+=$(CPU_UNITDIR)/units/$(FULL_TARGET) -endif -ifeq ($(FULL_TARGET),xtensa-embedded) -override COMPILER_UNITTARGETDIR+=$(CPU_UNITDIR)/units/$(FULL_TARGET) -endif -ifeq ($(FULL_TARGET),xtensa-freertos) -override COMPILER_UNITTARGETDIR+=$(CPU_UNITDIR)/units/$(FULL_TARGET) -endif -ifeq ($(FULL_TARGET),z80-embedded) -override COMPILER_UNITTARGETDIR+=$(CPU_UNITDIR)/units/$(FULL_TARGET) -endif -ifeq ($(FULL_TARGET),z80-zxspectrum) -override COMPILER_UNITTARGETDIR+=$(CPU_UNITDIR)/units/$(FULL_TARGET) -endif -ifeq ($(FULL_TARGET),z80-msxdos) -override COMPILER_UNITTARGETDIR+=$(CPU_UNITDIR)/units/$(FULL_TARGET) -endif ifdef REQUIRE_UNITSDIR override UNITSDIR+=$(REQUIRE_UNITSDIR) endif @@ -2677,70 +2407,12 @@ endif else CROSSBINDIR= endif -ifeq ($(OS_SOURCE),linux) -ifndef GCCLIBDIR -ifeq ($(CPU_TARGET),i386) -ifneq ($(findstring x86_64,$(shell uname -a)),) -ifeq ($(BINUTILSPREFIX),) -GCCLIBDIR:=$(shell dirname `gcc -m32 -print-libgcc-file-name`) -else -CROSSGCCOPT=-m32 -endif -endif -endif -ifeq ($(CPU_TARGET),powerpc) -ifeq ($(BINUTILSPREFIX),) -GCCLIBDIR:=$(shell dirname `gcc -m32 -print-libgcc-file-name`) -else -CROSSGCCOPT=-m32 -endif -endif -ifeq ($(CPU_TARGET),powerpc64) -ifeq ($(BINUTILSPREFIX),) -GCCLIBDIR:=$(shell dirname `gcc -m64 -print-libgcc-file-name`) -else -CROSSGCCOPT=-m64 -endif -endif -ifeq ($(CPU_TARGET),sparc) -ifneq ($(findstring sparc64,$(shell uname -a)),) -ifeq ($(BINUTILSPREFIX),) -GCCLIBDIR:=$(shell dirname `gcc -m32 -print-libgcc-file-name`) -else -CROSSGCCOPT=-m32 -endif -endif -endif -endif -ifdef FPCFPMAKE -FPCFPMAKE_CPU_TARGET=$(shell $(FPCFPMAKE) -iTP) -ifeq ($(CPU_TARGET),$(FPCFPMAKE_CPU_TARGET)) -FPCMAKEGCCLIBDIR:=$(GCCLIBDIR) -endif -endif -ifndef FPCMAKEGCCLIBDIR -FPCMAKEGCCLIBDIR:=$(shell dirname `gcc -print-libgcc-file-name`) -endif -ifndef GCCLIBDIR -CROSSGCC=$(strip $(wildcard $(addsuffix /$(BINUTILSPREFIX)gcc$(SRCEXEEXT),$(SEARCHPATH)))) -ifneq ($(CROSSGCC),) -GCCLIBDIR:=$(shell dirname `$(CROSSGCC) $(CROSSGCCOPT) -print-libgcc-file-name`) -endif -endif -endif -ifdef inUnix -ifeq ($(OS_SOURCE),netbsd) -OTHERLIBDIR:=/usr/pkg/lib -endif -export GCCLIBDIR FPCMAKEGCCLIBDIR OTHERLIBDIR -endif BATCHEXT=.bat LOADEREXT=.as EXEEXT=.exe PPLEXT=.ppl PPUEXT=.ppu OEXT=.o -LTOEXT=.bc ASMEXT=.s SMARTEXT=.sl STATICLIBEXT=.a @@ -2878,14 +2550,14 @@ STATICLIBPREFIX= SHORTSUFFIX=nwl IMPORTLIBPREFIX=imp endif -ifeq ($(OS_TARGET),macosclassic) +ifeq ($(OS_TARGET),macos) BATCHEXT= EXEEXT= DEBUGSYMEXT=.xcoff SHORTSUFFIX=mac IMPORTLIBPREFIX=imp endif -ifneq ($(findstring $(OS_TARGET),darwin iphonesim ios),) +ifneq ($(findstring $(OS_TARGET),darwin iphonesim),) BATCHEXT=.sh EXEEXT= HASSHAREDLIB=1 @@ -2935,11 +2607,6 @@ STATICLIBPREFIX= STATICLIBEXT=.a SHORTSUFFIX=d16 endif -ifeq ($(OS_TARGET),msxdos) -STATICLIBPREFIX= -STATICLIBEXT=.a -SHORTSUFFIX=msd -endif ifeq ($(OS_TARGET),embedded) ifeq ($(CPU_TARGET),i8086) STATICLIBPREFIX= @@ -2947,9 +2614,6 @@ STATICLIBEXT=.a else EXEEXT=.bin endif -ifeq ($(CPU_TARGET),z80) -OEXT=.rel -endif SHORTSUFFIX=emb endif ifeq ($(OS_TARGET),win16) @@ -2958,9 +2622,6 @@ STATICLIBEXT=.a SHAREDLIBEXT=.dll SHORTSUFFIX=w16 endif -ifeq ($(OS_TARGET),zxspectrum) -OEXT=.rel -endif ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),) FPCMADE=fpcmade.$(SHORTSUFFIX) ZIPSUFFIX=$(SHORTSUFFIX) @@ -3300,7 +2961,7 @@ endif ifeq ($(FULL_TARGET),m68k-palmos) REQUIRE_PACKAGES_RTL=1 endif -ifeq ($(FULL_TARGET),m68k-macosclassic) +ifeq ($(FULL_TARGET),m68k-macos) REQUIRE_PACKAGES_RTL=1 endif ifeq ($(FULL_TARGET),m68k-embedded) @@ -3315,7 +2976,7 @@ endif ifeq ($(FULL_TARGET),powerpc-amiga) REQUIRE_PACKAGES_RTL=1 endif -ifeq ($(FULL_TARGET),powerpc-macosclassic) +ifeq ($(FULL_TARGET),powerpc-macos) REQUIRE_PACKAGES_RTL=1 endif ifeq ($(FULL_TARGET),powerpc-darwin) @@ -3393,6 +3054,9 @@ endif ifeq ($(FULL_TARGET),arm-palmos) REQUIRE_PACKAGES_RTL=1 endif +ifeq ($(FULL_TARGET),arm-darwin) +REQUIRE_PACKAGES_RTL=1 +endif ifeq ($(FULL_TARGET),arm-wince) REQUIRE_PACKAGES_RTL=1 endif @@ -3414,12 +3078,6 @@ endif ifeq ($(FULL_TARGET),arm-aros) REQUIRE_PACKAGES_RTL=1 endif -ifeq ($(FULL_TARGET),arm-freertos) -REQUIRE_PACKAGES_RTL=1 -endif -ifeq ($(FULL_TARGET),arm-ios) -REQUIRE_PACKAGES_RTL=1 -endif ifeq ($(FULL_TARGET),powerpc64-linux) REQUIRE_PACKAGES_RTL=1 endif @@ -3453,9 +3111,6 @@ endif ifeq ($(FULL_TARGET),mipsel-android) REQUIRE_PACKAGES_RTL=1 endif -ifeq ($(FULL_TARGET),mips64el-linux) -REQUIRE_PACKAGES_RTL=1 -endif ifeq ($(FULL_TARGET),jvm-java) REQUIRE_PACKAGES_RTL=1 endif @@ -3477,51 +3132,15 @@ endif ifeq ($(FULL_TARGET),aarch64-darwin) REQUIRE_PACKAGES_RTL=1 endif -ifeq ($(FULL_TARGET),aarch64-win64) -REQUIRE_PACKAGES_RTL=1 -endif ifeq ($(FULL_TARGET),aarch64-android) REQUIRE_PACKAGES_RTL=1 endif -ifeq ($(FULL_TARGET),aarch64-ios) -REQUIRE_PACKAGES_RTL=1 -endif ifeq ($(FULL_TARGET),wasm-wasm) REQUIRE_PACKAGES_RTL=1 endif ifeq ($(FULL_TARGET),sparc64-linux) REQUIRE_PACKAGES_RTL=1 endif -ifeq ($(FULL_TARGET),riscv32-linux) -REQUIRE_PACKAGES_RTL=1 -endif -ifeq ($(FULL_TARGET),riscv32-embedded) -REQUIRE_PACKAGES_RTL=1 -endif -ifeq ($(FULL_TARGET),riscv64-linux) -REQUIRE_PACKAGES_RTL=1 -endif -ifeq ($(FULL_TARGET),riscv64-embedded) -REQUIRE_PACKAGES_RTL=1 -endif -ifeq ($(FULL_TARGET),xtensa-linux) -REQUIRE_PACKAGES_RTL=1 -endif -ifeq ($(FULL_TARGET),xtensa-embedded) -REQUIRE_PACKAGES_RTL=1 -endif -ifeq ($(FULL_TARGET),xtensa-freertos) -REQUIRE_PACKAGES_RTL=1 -endif -ifeq ($(FULL_TARGET),z80-embedded) -REQUIRE_PACKAGES_RTL=1 -endif -ifeq ($(FULL_TARGET),z80-zxspectrum) -REQUIRE_PACKAGES_RTL=1 -endif -ifeq ($(FULL_TARGET),z80-msxdos) -REQUIRE_PACKAGES_RTL=1 -endif ifdef REQUIRE_PACKAGES_RTL PACKAGEDIR_RTL:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /rtl/Makefile.fpc,$(PACKAGESDIR)))))) ifneq ($(PACKAGEDIR_RTL),) @@ -3611,7 +3230,16 @@ override FPCOPT+=-gl override FPCOPTDEF+=DEBUG endif ifdef RELEASE +ifneq ($(findstring 2.0.,$(FPC_VERSION)),) +ifeq ($(CPU_TARGET),i386) +FPCCPUOPT:=-OG2p3 +endif +ifeq ($(CPU_TARGET),powerpc) +FPCCPUOPT:=-O1r +endif +else FPCCPUOPT:=-O2 +endif override FPCOPT+=-Ur -Xs $(FPCCPUOPT) -n override FPCOPTDEF+=RELEASE endif @@ -3673,17 +3301,6 @@ endif endif ifdef LINKSHARED endif -ifdef GCCLIBDIR -override FPCOPT+=-Fl$(GCCLIBDIR) -ifdef FPCMAKEGCCLIBDIR -override FPCMAKEOPT+=-Fl$(FPCMAKEGCCLIBDIR) -else -override FPCMAKEOPT+=-Fl$(GCCLIBDIR) -endif -endif -ifdef OTHERLIBDIR -override FPCOPT+=$(addprefix -Fl,$(OTHERLIBDIR)) -endif ifdef OPT override FPCOPT+=$(OPT) endif @@ -3731,7 +3348,7 @@ endif ifndef CROSSINSTALL ifneq ($(TARGET_PROGRAMS),) override EXEFILES=$(addsuffix $(EXEEXT),$(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 EXEOFILES:=$(addsuffix $(OEXT),$(TARGET_PROGRAMS)) $(addprefix $(STATICLIBPREFIX),$(addsuffix $(STATICLIBEXT),$(TARGET_PROGRAMS))) $(addprefix $(IMPORTLIBPREFIX),$(addsuffix $(STATICLIBEXT),$(TARGET_PROGRAMS))) override EXEDBGFILES:=$(addsuffix $(EXEDBGEXT),$(TARGET_PROGRAMS)) override ALLTARGET+=fpc_exes override INSTALLEXEFILES+=$(EXEFILES) @@ -3760,7 +3377,7 @@ fpc_debug: $(MAKE) all DEBUG=1 fpc_release: $(MAKE) all RELEASE=1 -.SUFFIXES: $(EXEEXT) $(PPUEXT) $(OEXT) $(LTOEXT) .pas .lpr .dpr .pp .rc .res +.SUFFIXES: $(EXEEXT) $(PPUEXT) $(OEXT) .pas .lpr .dpr .pp .rc .res $(COMPILER_UNITTARGETDIR): $(MKDIRTREE) $(COMPILER_UNITTARGETDIR) $(COMPILER_TARGETDIR): @@ -3791,7 +3408,6 @@ 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) .PHONY: fpc_shared override INSTALLTARGET+=fpc_shared_install @@ -3812,7 +3428,7 @@ fpc_shared: ifdef HASSHAREDLIB $(MAKE) all CREATESHARED=1 LINKSHARED=1 CREATESMART=1 ifneq ($(SHARED_BUILD),n) - $(PPUMOVE) -q $(SHARED_LIBUNITS) -i$(COMPILER_UNITTARGETDIR) -o$(SHARED_FULLNAME) -d$(COMPILER_UNITTARGETDIR) -P$(BINUTILSPREFIX) + $(PPUMOVE) -q $(SHARED_LIBUNITS) -i$(COMPILER_UNITTARGETDIR) -o$(SHARED_FULLNAME) -d$(COMPILER_UNITTARGETDIR) endif else @$(ECHO) Shared Libraries not supported @@ -3834,15 +3450,13 @@ override INSTALLPPUFILES:=$(filter-out $(INSTALL_BUILDUNIT)$(PPUEXT),$(INSTALLPP endif ifdef INSTALLPPUFILES ifneq ($(IMPORTLIBPREFIX)-$(STATICLIBEXT),$(STATICLIBPREFIX)-$(STATICLIBEXT)) -override INSTALLPPULINKFILES:=$(subst $(PPUEXT),$(OEXT),$(INSTALLPPUFILES)) $(subst $(PPUEXT),$(LTOEXT),$(INSTALLPPUFILES)) $(addprefix $(STATICLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(INSTALLPPUFILES))) $(addprefix $(IMPORTLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(INSTALLPPUFILES))) +override INSTALLPPULINKFILES:=$(subst $(PPUEXT),$(OEXT),$(INSTALLPPUFILES)) $(addprefix $(STATICLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(INSTALLPPUFILES))) $(addprefix $(IMPORTLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(INSTALLPPUFILES))) else -override INSTALLPPULINKFILES:=$(subst $(PPUEXT),$(OEXT),$(INSTALLPPUFILES)) $(subst $(PPUEXT),$(LTOEXT),$(INSTALLPPUFILES)) $(addprefix $(STATICLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(INSTALLPPUFILES))) +override INSTALLPPULINKFILES:=$(subst $(PPUEXT),$(OEXT),$(INSTALLPPUFILES)) $(addprefix $(STATICLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(INSTALLPPUFILES))) endif ifneq ($(UNITTARGETDIRPREFIX),) -override INSTALLPPUFILENAMES:=$(notdir $(INSTALLPPUFILES)) -override INSTALLPPULINKFILENAMES:=$(notdir $(INSTALLPPULINKFILES)) -override INSTALLPPUFILES=$(addprefix $(UNITTARGETDIRPREFIX),$(INSTALLPPUFILENAMES)) -override INSTALLPPULINKFILES=$(wildcard $(addprefix $(UNITTARGETDIRPREFIX),$(INSTALLPPULINKFILENAMES))) +override INSTALLPPUFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(notdir $(INSTALLPPUFILES))) +override INSTALLPPULINKFILES:=$(wildcard $(addprefix $(UNITTARGETDIRPREFIX),$(notdir $(INSTALLPPULINKFILES)))) endif override INSTALL_CREATEPACKAGEFPC=1 endif @@ -3997,14 +3611,12 @@ ifdef CLEAN_UNITS override CLEANPPUFILES+=$(addsuffix $(PPUEXT),$(CLEAN_UNITS)) endif ifdef CLEANPPUFILES -override CLEANPPULINKFILES:=$(subst $(PPUEXT),$(OEXT),$(CLEANPPUFILES)) $(subst $(PPUEXT),$(LTOEXT),$(CLEANPPUFILES)) $(addprefix $(STATICLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(CLEANPPUFILES))) $(addprefix $(IMPORTLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(CLEANPPUFILES))) +override CLEANPPULINKFILES:=$(subst $(PPUEXT),$(OEXT),$(CLEANPPUFILES)) $(addprefix $(STATICLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(CLEANPPUFILES))) $(addprefix $(IMPORTLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(CLEANPPUFILES))) ifdef DEBUGSYMEXT override CLEANPPULINKFILES+=$(subst $(PPUEXT),$(DEBUGSYMEXT),$(CLEANPPUFILES)) endif -override CLEANPPUFILENAMES:=$(CLEANPPUFILES) -override CLEANPPUFILES=$(addprefix $(UNITTARGETDIRPREFIX),$(CLEANPPUFILENAMES)) -override CLEANPPULINKFILENAMES:=$(CLEANPPULINKFILES) -override CLEANPPULINKFILES=$(wildcard $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANPPULINKFILENAMES))) +override CLEANPPUFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(CLEANPPUFILES)) +override CLEANPPULINKFILES:=$(wildcard $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANPPULINKFILES))) endif fpc_clean: $(CLEANTARGET) ifdef CLEANEXEFILES @@ -4028,9 +3640,8 @@ endif ifdef LIB_NAME -$(DEL) $(LIB_NAME) $(LIB_FULLNAME) endif - -$(DEL) $(FPCMADE) *$(FULL_TARGET).fpm Package.fpc *$(ASMEXT) - -$(DEL) $(FPCEXTFILE) $(REDIRFILE) script*.res link*.res *_script.res *_link.res - -$(DEL) $(PPAS) *_ppas$(BATCHEXT) ppas$(BATCHEXT) ppaslink$(BATCHEXT) + -$(DEL) $(FPCMADE) Package.fpc $(PPAS) script.res link.res $(FPCEXTFILE) $(REDIRFILE) + -$(DEL) *$(ASMEXT) *_ppas$(BATCHEXT) ppas$(BATCHEXT) ppaslink$(BATCHEXT) fpc_cleanall: $(CLEANTARGET) ifdef CLEANEXEFILES -$(DEL) $(CLEANEXEFILES) @@ -4051,14 +3662,13 @@ ifdef CLEAN_FILES endif -$(DELTREE) units -$(DELTREE) bin - -$(DEL) *$(OEXT) *$(LTOEXT) *$(PPUEXT) *$(RSTEXT) *$(ASMEXT) *$(STATICLIBEXT) *$(SHAREDLIBEXT) *$(PPLEXT) + -$(DEL) *$(OEXT) *$(PPUEXT) *$(RSTEXT) *$(ASMEXT) *$(STATICLIBEXT) *$(SHAREDLIBEXT) *$(PPLEXT) ifneq ($(PPUEXT),.ppu) -$(DEL) *.o *.ppu *.a endif -$(DELTREE) *$(SMARTEXT) - -$(DEL) fpcmade.* Package.fpc *.fpm - -$(DEL) $(FPCEXTFILE) $(REDIRFILE) script*.res link*.res *_script.res *_link.res - -$(DEL) $(PPAS) *_ppas$(BATCHEXT) ppas$(BATCHEXT) ppaslink$(BATCHEXT) + -$(DEL) fpcmade.* Package.fpc $(PPAS) script.res link.res $(FPCEXTFILE) $(REDIRFILE) + -$(DEL) *_ppas$(BATCHEXT) ppas$(BATCHEXT) ppaslink$(BATCHEXT) ifdef AOUTEXT -$(DEL) *$(AOUTEXT) endif @@ -4261,7 +3871,7 @@ endif ifeq ($(FULL_TARGET),m68k-palmos) TARGET_DIRS_UTILS=1 endif -ifeq ($(FULL_TARGET),m68k-macosclassic) +ifeq ($(FULL_TARGET),m68k-macos) TARGET_DIRS_UTILS=1 endif ifeq ($(FULL_TARGET),m68k-embedded) @@ -4276,7 +3886,7 @@ endif ifeq ($(FULL_TARGET),powerpc-amiga) TARGET_DIRS_UTILS=1 endif -ifeq ($(FULL_TARGET),powerpc-macosclassic) +ifeq ($(FULL_TARGET),powerpc-macos) TARGET_DIRS_UTILS=1 endif ifeq ($(FULL_TARGET),powerpc-darwin) @@ -4354,6 +3964,9 @@ endif ifeq ($(FULL_TARGET),arm-palmos) TARGET_DIRS_UTILS=1 endif +ifeq ($(FULL_TARGET),arm-darwin) +TARGET_DIRS_UTILS=1 +endif ifeq ($(FULL_TARGET),arm-wince) TARGET_DIRS_UTILS=1 endif @@ -4375,12 +3988,6 @@ endif ifeq ($(FULL_TARGET),arm-aros) TARGET_DIRS_UTILS=1 endif -ifeq ($(FULL_TARGET),arm-freertos) -TARGET_DIRS_UTILS=1 -endif -ifeq ($(FULL_TARGET),arm-ios) -TARGET_DIRS_UTILS=1 -endif ifeq ($(FULL_TARGET),powerpc64-linux) TARGET_DIRS_UTILS=1 endif @@ -4414,9 +4021,6 @@ endif ifeq ($(FULL_TARGET),mipsel-android) TARGET_DIRS_UTILS=1 endif -ifeq ($(FULL_TARGET),mips64el-linux) -TARGET_DIRS_UTILS=1 -endif ifeq ($(FULL_TARGET),jvm-java) TARGET_DIRS_UTILS=1 endif @@ -4438,51 +4042,15 @@ endif ifeq ($(FULL_TARGET),aarch64-darwin) TARGET_DIRS_UTILS=1 endif -ifeq ($(FULL_TARGET),aarch64-win64) -TARGET_DIRS_UTILS=1 -endif ifeq ($(FULL_TARGET),aarch64-android) TARGET_DIRS_UTILS=1 endif -ifeq ($(FULL_TARGET),aarch64-ios) -TARGET_DIRS_UTILS=1 -endif ifeq ($(FULL_TARGET),wasm-wasm) TARGET_DIRS_UTILS=1 endif ifeq ($(FULL_TARGET),sparc64-linux) TARGET_DIRS_UTILS=1 endif -ifeq ($(FULL_TARGET),riscv32-linux) -TARGET_DIRS_UTILS=1 -endif -ifeq ($(FULL_TARGET),riscv32-embedded) -TARGET_DIRS_UTILS=1 -endif -ifeq ($(FULL_TARGET),riscv64-linux) -TARGET_DIRS_UTILS=1 -endif -ifeq ($(FULL_TARGET),riscv64-embedded) -TARGET_DIRS_UTILS=1 -endif -ifeq ($(FULL_TARGET),xtensa-linux) -TARGET_DIRS_UTILS=1 -endif -ifeq ($(FULL_TARGET),xtensa-embedded) -TARGET_DIRS_UTILS=1 -endif -ifeq ($(FULL_TARGET),xtensa-freertos) -TARGET_DIRS_UTILS=1 -endif -ifeq ($(FULL_TARGET),z80-embedded) -TARGET_DIRS_UTILS=1 -endif -ifeq ($(FULL_TARGET),z80-zxspectrum) -TARGET_DIRS_UTILS=1 -endif -ifeq ($(FULL_TARGET),z80-msxdos) -TARGET_DIRS_UTILS=1 -endif ifdef TARGET_DIRS_UTILS utils_all: $(MAKE) -C utils all @@ -4969,12 +4537,14 @@ extcycle: $(MAKE) cycle OPT="$(OPT) -n -OG2p3 -glttt -CRriot -dEXTDEBUG" ALLOW_WARNINGS=1 cvstest: $(MAKE) cycle 'LOCALOPT=-n -Se' 'RTLOPT=-n -Se' +ifneq ($(findstring -dFPC_SOFT_FPUX80,$(OPT)),) ifeq ($(OS_SOURCE),win64) EXCLUDE_80BIT_TARGETS=1 endif ifneq ($(findstring $(CPU_SOURCE),aarch64 arm avr jvm m68k mips mipsel powerpc powerpc64 sparc sparc64 riscv32 riscv64 xtensa),) EXCLUDE_80BIT_TARGETS=1 endif +endif full: fullcycle fullcycle: $(MAKE) distclean diff --git a/compiler/Makefile.fpc b/compiler/Makefile.fpc index c89f97c711..4a4819d388 100644 --- a/compiler/Makefile.fpc +++ b/compiler/Makefile.fpc @@ -1016,6 +1016,7 @@ cvstest: # This is also the case for other CPUs that don't support # 80bit real type. +ifneq ($(findstring -dFPC_SOFT_FPUX80,$(OPT)),) ifeq ($(OS_SOURCE),win64) EXCLUDE_80BIT_TARGETS=1 endif @@ -1023,6 +1024,7 @@ endif ifneq ($(findstring $(CPU_SOURCE),aarch64 arm avr jvm m68k mips mipsel powerpc powerpc64 sparc sparc64 riscv32 riscv64 xtensa),) EXCLUDE_80BIT_TARGETS=1 endif +endif full: fullcycle From dacf740561026c01f8b28e0d4cda46900f4515e0 Mon Sep 17 00:00:00 2001 From: Mattias Gaertner Date: Thu, 20 Aug 2020 13:26:09 +0000 Subject: [PATCH 08/25] fcl-passrc: resolver: FinishedInterfaceIndex git-svn-id: trunk@46508 - --- packages/fcl-passrc/src/pasresolver.pp | 28 +++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/packages/fcl-passrc/src/pasresolver.pp b/packages/fcl-passrc/src/pasresolver.pp index 1c406d9bc9..bff3b7c53b 100644 --- a/packages/fcl-passrc/src/pasresolver.pp +++ b/packages/fcl-passrc/src/pasresolver.pp @@ -1433,7 +1433,9 @@ type private FOwner: TObject; public - constructor Create(TheOwner: TObject); + FinishedInterfaceCount: integer; + constructor Create(TheOwner: TObject); virtual; + procedure Reset; virtual; property Owner: TObject read FOwner; end; TPasResolverHubClass = class of TPasResolverHub; @@ -1491,6 +1493,7 @@ type FDefaultScope: TPasDefaultScope; FDynArrayMaxIndex: TMaxPrecInt; FDynArrayMinIndex: TMaxPrecInt; + FFinishedInterfaceIndex: integer; FHub: TPasResolverHub; FLastCreatedData: array[TResolveDataListKind] of TResolveData; FLastElement: TPasElement; @@ -2268,6 +2271,7 @@ type PosEl: TPasElement; RaiseIfConst: boolean = true): boolean; function ResolvedElIsClassOrRecordInstance(const ResolvedEl: TPasResolverResult): boolean; // utility functions + function GetResolver(El: TPasElement): TPasResolver; function ElHasModeSwitch(El: TPasElement; ms: TModeSwitch): boolean; function GetElModeSwitches(El: TPasElement): TModeSwitches; function ElHasBoolSwitch(El: TPasElement; bs: TBoolSwitch): boolean; @@ -2403,6 +2407,7 @@ type property RootElement: TPasModule read FRootElement write SetRootElement; property Step: TPasResolverStep read FStep; property ActiveHelpers: TPRHelperEntryArray read FActiveHelpers; + property FinishedInterfaceIndex: integer read FFinishedInterfaceIndex; // scopes property Scopes[Index: integer]: TPasScope read GetScopes; property ScopeCount: integer read FScopeCount; @@ -3084,6 +3089,11 @@ begin FOwner:=TheOwner; end; +procedure TPasResolverHub.Reset; +begin + FinishedInterfaceCount:=0; +end; + { TPRSpecializedItem } destructor TPRSpecializedItem.Destroy; @@ -5844,6 +5854,8 @@ begin if not IsUnitIntfFinished(Section.GetModule) then RaiseInternalError(20171214004323,'TPasResolver.FinishInterfaceSection "'+RootElement.Name+'" "'+Section.GetModule.Name+'" IsUnitIntfFinished=false'); {$ENDIF} + inc(Hub.FinishedInterfaceCount); + FFinishedInterfaceIndex:=Hub.FinishedInterfaceCount; NotifyPendingUsedInterfaces; if Section=nil then ; end; @@ -24957,6 +24969,20 @@ begin exit(true); end; +function TPasResolver.GetResolver(El: TPasElement): TPasResolver; +var + Module: TPasModule; + Scope: TPasModuleScope; +begin + Result:=nil; + if El=nil then exit; + Module:=El.GetModule; + if Module=nil then exit; + Scope:=Module.CustomData as TPasModuleScope; + if Scope=nil then exit; + Result:=Scope.Owner as TPasResolver; +end; + function TPasResolver.ElHasModeSwitch(El: TPasElement; ms: TModeSwitch ): boolean; begin From dba6f9a8288eab01e19613aad6facf84c74862b2 Mon Sep 17 00:00:00 2001 From: Mattias Gaertner Date: Thu, 20 Aug 2020 13:26:40 +0000 Subject: [PATCH 09/25] fcl-passrc: simplify git-svn-id: trunk@46509 - --- packages/fcl-passrc/src/pasuseanalyzer.pas | 37 +++++++++------------- 1 file changed, 15 insertions(+), 22 deletions(-) diff --git a/packages/fcl-passrc/src/pasuseanalyzer.pas b/packages/fcl-passrc/src/pasuseanalyzer.pas index fe688482e8..62e85712f9 100644 --- a/packages/fcl-passrc/src/pasuseanalyzer.pas +++ b/packages/fcl-passrc/src/pasuseanalyzer.pas @@ -329,6 +329,7 @@ function CompareElementWithPAElement(El, Id: Pointer): integer; function ComparePAOverrideLists(List1, List2: Pointer): integer; function CompareElementWithPAOverrideList(El, List: Pointer): integer; {$endif} +function CreatePasElementSet: TPasAnalyzerKeySet; function GetElModName(El: TPasElement): string; function dbgs(a: TPAIdentifierAccess): string; overload; @@ -394,6 +395,17 @@ begin end; {$endif} +function CreatePasElementSet: TPasAnalyzerKeySet; +begin + Result:=TPasAnalyzerKeySet.Create( + {$ifdef pas2js} + @PasElementToHashName + {$else} + @ComparePointer + {$endif} + ,nil); +end; + function GetElModName(El: TPasElement): string; var aModule: TPasModule; @@ -898,12 +910,7 @@ end; procedure TPasAnalyzer.CreateTree; begin - FUsedElements:=TPasAnalyzerKeySet.Create( - {$ifdef pas2js} - @PAElement_ElToHashName,@PasElementToHashName - {$else} - @ComparePAElements,@CompareElementWithPAElement - {$endif}); + FUsedElements:=CreatePasElementSet; end; function TPasAnalyzer.MarkElementAsUsed(El: TPasElement; aClass: TPAElementClass @@ -2977,23 +2984,9 @@ var begin CreateTree; for m in TPAUseMode do - FModeChecked[m]:=TPasAnalyzerKeySet.Create( - {$ifdef pas2js} - @PasElementToHashName - {$else} - @ComparePointer - {$endif} - ,nil - ); + FModeChecked[m]:=CreatePasElementSet; for oc in TPAOtherCheckedEl do - FOtherChecked[oc]:=TPasAnalyzerKeySet.Create( - {$ifdef pas2js} - @PasElementToHashName - {$else} - @ComparePointer - {$endif} - ,nil - ); + FOtherChecked[oc]:=CreatePasElementSet; FOverrideLists:=TPasAnalyzerKeySet.Create( {$ifdef pas2js} @PAOverrideList_ElToHashName,@PasElementToHashName From b1ee6f7fdc9bcaa9e249d6e7403e3ee2b5bdc113 Mon Sep 17 00:00:00 2001 From: pierre Date: Thu, 20 Aug 2020 16:01:34 +0000 Subject: [PATCH 10/25] Fix error in previous commit Try to avoid unneeded steps for fullinstallsymlink git-svn-id: trunk@46510 - --- compiler/Makefile | 611 ++++++++++++++++++++++++++++++++++++------ compiler/Makefile.fpc | 23 +- 2 files changed, 548 insertions(+), 86 deletions(-) diff --git a/compiler/Makefile b/compiler/Makefile index 59c6329e4d..6da17af8eb 100644 --- a/compiler/Makefile +++ b/compiler/Makefile @@ -2,7 +2,7 @@ # Don't edit, this file is generated by FPCMake Version 2.0.0 # default: all -MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android i386-aros m68k-linux m68k-netbsd m68k-amiga m68k-atari m68k-palmos m68k-macos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-haiku x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded x86_64-iphonesim x86_64-android x86_64-aros x86_64-dragonfly arm-linux arm-netbsd arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android arm-aros powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux mipsel-embedded mipsel-android jvm-java jvm-android i8086-embedded i8086-msdos i8086-win16 aarch64-linux aarch64-darwin aarch64-android wasm-wasm sparc64-linux +MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android i386-aros m68k-linux m68k-netbsd m68k-amiga m68k-atari m68k-palmos m68k-macosclassic m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macosclassic powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-haiku x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded x86_64-iphonesim x86_64-android x86_64-aros x86_64-dragonfly arm-linux arm-netbsd arm-palmos arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android arm-aros arm-freertos arm-ios powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux mipsel-embedded mipsel-android mips64el-linux jvm-java jvm-android i8086-embedded i8086-msdos i8086-win16 aarch64-linux aarch64-darwin aarch64-win64 aarch64-android aarch64-ios wasm-wasm sparc64-linux riscv32-linux riscv32-embedded riscv64-linux riscv64-embedded xtensa-linux xtensa-embedded xtensa-freertos z80-embedded z80-zxspectrum z80-msxdos z80-amstradcpc BSDs = freebsd netbsd openbsd darwin dragonfly UNIXs = linux $(BSDs) solaris qnx haiku aix LIMIT83fs = go32v2 os2 emx watcom msdos win16 atari @@ -196,6 +196,24 @@ $(error When compiling for mipsel-embedded, a sub-architecture (e.g. SUBARCH=pic endif override FPCOPT+=-Cp$(SUBARCH) endif +ifeq ($(FULL_TARGET),xtensa-embedded) +ifeq ($(SUBARCH),) +$(error When compiling for xtensa-embedded, a sub-architecture (e.g. SUBARCH=lx106 or SUBARCH=lx6) must be defined) +endif +override FPCOPT+=-Cp$(SUBARCH) +endif +ifeq ($(FULL_TARGET),xtensa-freertos) +ifeq ($(SUBARCH),) +$(error When compiling for xtensa-freertos, a sub-architecture (e.g. SUBARCH=lx106 or SUBARCH=lx6) must be defined) +endif +override FPCOPT+=-Cp$(SUBARCH) +endif +ifeq ($(FULL_TARGET),arm-freertos) +ifeq ($(SUBARCH),) +$(error When compiling for arm-freertos, a sub-architecture (e.g. SUBARCH=armv6m or SUBARCH=armv7em) must be defined) +endif +override FPCOPT+=-Cp$(SUBARCH) +endif ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),) TARGETSUFFIX=$(OS_TARGET) SOURCESUFFIX=$(OS_SOURCE) @@ -269,8 +287,8 @@ endif ifndef CROSSBINDIR CROSSBINDIR:=$(wildcard $(FPCDIR)/bin/$(TARGETSUFFIX)) endif -ifneq ($(findstring $(OS_TARGET),darwin iphonesim),) -ifeq ($(OS_SOURCE),darwin) +ifneq ($(findstring $(OS_TARGET),darwin iphonesim ios),) +ifneq ($(findstring $(OS_SOURCE),darwin ios),) DARWIN2DARWIN=1 endif endif @@ -710,7 +728,7 @@ endif ifeq ($(FULL_TARGET),m68k-palmos) override TARGET_DIRS+=utils endif -ifeq ($(FULL_TARGET),m68k-macos) +ifeq ($(FULL_TARGET),m68k-macosclassic) override TARGET_DIRS+=utils endif ifeq ($(FULL_TARGET),m68k-embedded) @@ -725,7 +743,7 @@ endif ifeq ($(FULL_TARGET),powerpc-amiga) override TARGET_DIRS+=utils endif -ifeq ($(FULL_TARGET),powerpc-macos) +ifeq ($(FULL_TARGET),powerpc-macosclassic) override TARGET_DIRS+=utils endif ifeq ($(FULL_TARGET),powerpc-darwin) @@ -803,9 +821,6 @@ endif ifeq ($(FULL_TARGET),arm-palmos) override TARGET_DIRS+=utils endif -ifeq ($(FULL_TARGET),arm-darwin) -override TARGET_DIRS+=utils -endif ifeq ($(FULL_TARGET),arm-wince) override TARGET_DIRS+=utils endif @@ -827,6 +842,12 @@ endif ifeq ($(FULL_TARGET),arm-aros) override TARGET_DIRS+=utils endif +ifeq ($(FULL_TARGET),arm-freertos) +override TARGET_DIRS+=utils +endif +ifeq ($(FULL_TARGET),arm-ios) +override TARGET_DIRS+=utils +endif ifeq ($(FULL_TARGET),powerpc64-linux) override TARGET_DIRS+=utils endif @@ -860,6 +881,9 @@ endif ifeq ($(FULL_TARGET),mipsel-android) override TARGET_DIRS+=utils endif +ifeq ($(FULL_TARGET),mips64el-linux) +override TARGET_DIRS+=utils +endif ifeq ($(FULL_TARGET),jvm-java) override TARGET_DIRS+=utils endif @@ -881,15 +905,54 @@ endif ifeq ($(FULL_TARGET),aarch64-darwin) override TARGET_DIRS+=utils endif +ifeq ($(FULL_TARGET),aarch64-win64) +override TARGET_DIRS+=utils +endif ifeq ($(FULL_TARGET),aarch64-android) override TARGET_DIRS+=utils endif +ifeq ($(FULL_TARGET),aarch64-ios) +override TARGET_DIRS+=utils +endif ifeq ($(FULL_TARGET),wasm-wasm) override TARGET_DIRS+=utils endif ifeq ($(FULL_TARGET),sparc64-linux) override TARGET_DIRS+=utils endif +ifeq ($(FULL_TARGET),riscv32-linux) +override TARGET_DIRS+=utils +endif +ifeq ($(FULL_TARGET),riscv32-embedded) +override TARGET_DIRS+=utils +endif +ifeq ($(FULL_TARGET),riscv64-linux) +override TARGET_DIRS+=utils +endif +ifeq ($(FULL_TARGET),riscv64-embedded) +override TARGET_DIRS+=utils +endif +ifeq ($(FULL_TARGET),xtensa-linux) +override TARGET_DIRS+=utils +endif +ifeq ($(FULL_TARGET),xtensa-embedded) +override TARGET_DIRS+=utils +endif +ifeq ($(FULL_TARGET),xtensa-freertos) +override TARGET_DIRS+=utils +endif +ifeq ($(FULL_TARGET),z80-embedded) +override TARGET_DIRS+=utils +endif +ifeq ($(FULL_TARGET),z80-zxspectrum) +override TARGET_DIRS+=utils +endif +ifeq ($(FULL_TARGET),z80-msxdos) +override TARGET_DIRS+=utils +endif +ifeq ($(FULL_TARGET),z80-amstradcpc) +override TARGET_DIRS+=utils +endif ifeq ($(FULL_TARGET),i386-linux) override TARGET_PROGRAMS+=pp endif @@ -974,7 +1037,7 @@ endif ifeq ($(FULL_TARGET),m68k-palmos) override TARGET_PROGRAMS+=pp endif -ifeq ($(FULL_TARGET),m68k-macos) +ifeq ($(FULL_TARGET),m68k-macosclassic) override TARGET_PROGRAMS+=pp endif ifeq ($(FULL_TARGET),m68k-embedded) @@ -989,7 +1052,7 @@ endif ifeq ($(FULL_TARGET),powerpc-amiga) override TARGET_PROGRAMS+=pp endif -ifeq ($(FULL_TARGET),powerpc-macos) +ifeq ($(FULL_TARGET),powerpc-macosclassic) override TARGET_PROGRAMS+=pp endif ifeq ($(FULL_TARGET),powerpc-darwin) @@ -1067,9 +1130,6 @@ endif ifeq ($(FULL_TARGET),arm-palmos) override TARGET_PROGRAMS+=pp endif -ifeq ($(FULL_TARGET),arm-darwin) -override TARGET_PROGRAMS+=pp -endif ifeq ($(FULL_TARGET),arm-wince) override TARGET_PROGRAMS+=pp endif @@ -1091,6 +1151,12 @@ endif ifeq ($(FULL_TARGET),arm-aros) override TARGET_PROGRAMS+=pp endif +ifeq ($(FULL_TARGET),arm-freertos) +override TARGET_PROGRAMS+=pp +endif +ifeq ($(FULL_TARGET),arm-ios) +override TARGET_PROGRAMS+=pp +endif ifeq ($(FULL_TARGET),powerpc64-linux) override TARGET_PROGRAMS+=pp endif @@ -1124,6 +1190,9 @@ endif ifeq ($(FULL_TARGET),mipsel-android) override TARGET_PROGRAMS+=pp endif +ifeq ($(FULL_TARGET),mips64el-linux) +override TARGET_PROGRAMS+=pp +endif ifeq ($(FULL_TARGET),jvm-java) override TARGET_PROGRAMS+=pp endif @@ -1145,15 +1214,54 @@ endif ifeq ($(FULL_TARGET),aarch64-darwin) override TARGET_PROGRAMS+=pp endif +ifeq ($(FULL_TARGET),aarch64-win64) +override TARGET_PROGRAMS+=pp +endif ifeq ($(FULL_TARGET),aarch64-android) override TARGET_PROGRAMS+=pp endif +ifeq ($(FULL_TARGET),aarch64-ios) +override TARGET_PROGRAMS+=pp +endif ifeq ($(FULL_TARGET),wasm-wasm) override TARGET_PROGRAMS+=pp endif ifeq ($(FULL_TARGET),sparc64-linux) override TARGET_PROGRAMS+=pp endif +ifeq ($(FULL_TARGET),riscv32-linux) +override TARGET_PROGRAMS+=pp +endif +ifeq ($(FULL_TARGET),riscv32-embedded) +override TARGET_PROGRAMS+=pp +endif +ifeq ($(FULL_TARGET),riscv64-linux) +override TARGET_PROGRAMS+=pp +endif +ifeq ($(FULL_TARGET),riscv64-embedded) +override TARGET_PROGRAMS+=pp +endif +ifeq ($(FULL_TARGET),xtensa-linux) +override TARGET_PROGRAMS+=pp +endif +ifeq ($(FULL_TARGET),xtensa-embedded) +override TARGET_PROGRAMS+=pp +endif +ifeq ($(FULL_TARGET),xtensa-freertos) +override TARGET_PROGRAMS+=pp +endif +ifeq ($(FULL_TARGET),z80-embedded) +override TARGET_PROGRAMS+=pp +endif +ifeq ($(FULL_TARGET),z80-zxspectrum) +override TARGET_PROGRAMS+=pp +endif +ifeq ($(FULL_TARGET),z80-msxdos) +override TARGET_PROGRAMS+=pp +endif +ifeq ($(FULL_TARGET),z80-amstradcpc) +override TARGET_PROGRAMS+=pp +endif override INSTALL_FPCPACKAGE=y ifeq ($(FULL_TARGET),i386-linux) override COMPILER_INCLUDEDIR+=$(CPC_TARGET) @@ -1239,7 +1347,7 @@ endif ifeq ($(FULL_TARGET),m68k-palmos) override COMPILER_INCLUDEDIR+=$(CPC_TARGET) endif -ifeq ($(FULL_TARGET),m68k-macos) +ifeq ($(FULL_TARGET),m68k-macosclassic) override COMPILER_INCLUDEDIR+=$(CPC_TARGET) endif ifeq ($(FULL_TARGET),m68k-embedded) @@ -1254,7 +1362,7 @@ endif ifeq ($(FULL_TARGET),powerpc-amiga) override COMPILER_INCLUDEDIR+=$(CPC_TARGET) endif -ifeq ($(FULL_TARGET),powerpc-macos) +ifeq ($(FULL_TARGET),powerpc-macosclassic) override COMPILER_INCLUDEDIR+=$(CPC_TARGET) endif ifeq ($(FULL_TARGET),powerpc-darwin) @@ -1332,9 +1440,6 @@ endif ifeq ($(FULL_TARGET),arm-palmos) override COMPILER_INCLUDEDIR+=$(CPC_TARGET) endif -ifeq ($(FULL_TARGET),arm-darwin) -override COMPILER_INCLUDEDIR+=$(CPC_TARGET) -endif ifeq ($(FULL_TARGET),arm-wince) override COMPILER_INCLUDEDIR+=$(CPC_TARGET) endif @@ -1356,6 +1461,12 @@ endif ifeq ($(FULL_TARGET),arm-aros) override COMPILER_INCLUDEDIR+=$(CPC_TARGET) endif +ifeq ($(FULL_TARGET),arm-freertos) +override COMPILER_INCLUDEDIR+=$(CPC_TARGET) +endif +ifeq ($(FULL_TARGET),arm-ios) +override COMPILER_INCLUDEDIR+=$(CPC_TARGET) +endif ifeq ($(FULL_TARGET),powerpc64-linux) override COMPILER_INCLUDEDIR+=$(CPC_TARGET) endif @@ -1389,6 +1500,9 @@ endif ifeq ($(FULL_TARGET),mipsel-android) override COMPILER_INCLUDEDIR+=$(CPC_TARGET) endif +ifeq ($(FULL_TARGET),mips64el-linux) +override COMPILER_INCLUDEDIR+=$(CPC_TARGET) +endif ifeq ($(FULL_TARGET),jvm-java) override COMPILER_INCLUDEDIR+=$(CPC_TARGET) endif @@ -1410,15 +1524,54 @@ endif ifeq ($(FULL_TARGET),aarch64-darwin) override COMPILER_INCLUDEDIR+=$(CPC_TARGET) endif +ifeq ($(FULL_TARGET),aarch64-win64) +override COMPILER_INCLUDEDIR+=$(CPC_TARGET) +endif ifeq ($(FULL_TARGET),aarch64-android) override COMPILER_INCLUDEDIR+=$(CPC_TARGET) endif +ifeq ($(FULL_TARGET),aarch64-ios) +override COMPILER_INCLUDEDIR+=$(CPC_TARGET) +endif ifeq ($(FULL_TARGET),wasm-wasm) override COMPILER_INCLUDEDIR+=$(CPC_TARGET) endif ifeq ($(FULL_TARGET),sparc64-linux) override COMPILER_INCLUDEDIR+=$(CPC_TARGET) endif +ifeq ($(FULL_TARGET),riscv32-linux) +override COMPILER_INCLUDEDIR+=$(CPC_TARGET) +endif +ifeq ($(FULL_TARGET),riscv32-embedded) +override COMPILER_INCLUDEDIR+=$(CPC_TARGET) +endif +ifeq ($(FULL_TARGET),riscv64-linux) +override COMPILER_INCLUDEDIR+=$(CPC_TARGET) +endif +ifeq ($(FULL_TARGET),riscv64-embedded) +override COMPILER_INCLUDEDIR+=$(CPC_TARGET) +endif +ifeq ($(FULL_TARGET),xtensa-linux) +override COMPILER_INCLUDEDIR+=$(CPC_TARGET) +endif +ifeq ($(FULL_TARGET),xtensa-embedded) +override COMPILER_INCLUDEDIR+=$(CPC_TARGET) +endif +ifeq ($(FULL_TARGET),xtensa-freertos) +override COMPILER_INCLUDEDIR+=$(CPC_TARGET) +endif +ifeq ($(FULL_TARGET),z80-embedded) +override COMPILER_INCLUDEDIR+=$(CPC_TARGET) +endif +ifeq ($(FULL_TARGET),z80-zxspectrum) +override COMPILER_INCLUDEDIR+=$(CPC_TARGET) +endif +ifeq ($(FULL_TARGET),z80-msxdos) +override COMPILER_INCLUDEDIR+=$(CPC_TARGET) +endif +ifeq ($(FULL_TARGET),z80-amstradcpc) +override COMPILER_INCLUDEDIR+=$(CPC_TARGET) +endif ifeq ($(FULL_TARGET),i386-linux) override COMPILER_UNITDIR+=$(COMPILERSOURCEDIR) endif @@ -1503,7 +1656,7 @@ endif ifeq ($(FULL_TARGET),m68k-palmos) override COMPILER_UNITDIR+=$(COMPILERSOURCEDIR) endif -ifeq ($(FULL_TARGET),m68k-macos) +ifeq ($(FULL_TARGET),m68k-macosclassic) override COMPILER_UNITDIR+=$(COMPILERSOURCEDIR) endif ifeq ($(FULL_TARGET),m68k-embedded) @@ -1518,7 +1671,7 @@ endif ifeq ($(FULL_TARGET),powerpc-amiga) override COMPILER_UNITDIR+=$(COMPILERSOURCEDIR) endif -ifeq ($(FULL_TARGET),powerpc-macos) +ifeq ($(FULL_TARGET),powerpc-macosclassic) override COMPILER_UNITDIR+=$(COMPILERSOURCEDIR) endif ifeq ($(FULL_TARGET),powerpc-darwin) @@ -1596,9 +1749,6 @@ endif ifeq ($(FULL_TARGET),arm-palmos) override COMPILER_UNITDIR+=$(COMPILERSOURCEDIR) endif -ifeq ($(FULL_TARGET),arm-darwin) -override COMPILER_UNITDIR+=$(COMPILERSOURCEDIR) -endif ifeq ($(FULL_TARGET),arm-wince) override COMPILER_UNITDIR+=$(COMPILERSOURCEDIR) endif @@ -1620,6 +1770,12 @@ endif ifeq ($(FULL_TARGET),arm-aros) override COMPILER_UNITDIR+=$(COMPILERSOURCEDIR) endif +ifeq ($(FULL_TARGET),arm-freertos) +override COMPILER_UNITDIR+=$(COMPILERSOURCEDIR) +endif +ifeq ($(FULL_TARGET),arm-ios) +override COMPILER_UNITDIR+=$(COMPILERSOURCEDIR) +endif ifeq ($(FULL_TARGET),powerpc64-linux) override COMPILER_UNITDIR+=$(COMPILERSOURCEDIR) endif @@ -1653,6 +1809,9 @@ endif ifeq ($(FULL_TARGET),mipsel-android) override COMPILER_UNITDIR+=$(COMPILERSOURCEDIR) endif +ifeq ($(FULL_TARGET),mips64el-linux) +override COMPILER_UNITDIR+=$(COMPILERSOURCEDIR) +endif ifeq ($(FULL_TARGET),jvm-java) override COMPILER_UNITDIR+=$(COMPILERSOURCEDIR) endif @@ -1674,15 +1833,54 @@ endif ifeq ($(FULL_TARGET),aarch64-darwin) override COMPILER_UNITDIR+=$(COMPILERSOURCEDIR) endif +ifeq ($(FULL_TARGET),aarch64-win64) +override COMPILER_UNITDIR+=$(COMPILERSOURCEDIR) +endif ifeq ($(FULL_TARGET),aarch64-android) override COMPILER_UNITDIR+=$(COMPILERSOURCEDIR) endif +ifeq ($(FULL_TARGET),aarch64-ios) +override COMPILER_UNITDIR+=$(COMPILERSOURCEDIR) +endif ifeq ($(FULL_TARGET),wasm-wasm) override COMPILER_UNITDIR+=$(COMPILERSOURCEDIR) endif ifeq ($(FULL_TARGET),sparc64-linux) override COMPILER_UNITDIR+=$(COMPILERSOURCEDIR) endif +ifeq ($(FULL_TARGET),riscv32-linux) +override COMPILER_UNITDIR+=$(COMPILERSOURCEDIR) +endif +ifeq ($(FULL_TARGET),riscv32-embedded) +override COMPILER_UNITDIR+=$(COMPILERSOURCEDIR) +endif +ifeq ($(FULL_TARGET),riscv64-linux) +override COMPILER_UNITDIR+=$(COMPILERSOURCEDIR) +endif +ifeq ($(FULL_TARGET),riscv64-embedded) +override COMPILER_UNITDIR+=$(COMPILERSOURCEDIR) +endif +ifeq ($(FULL_TARGET),xtensa-linux) +override COMPILER_UNITDIR+=$(COMPILERSOURCEDIR) +endif +ifeq ($(FULL_TARGET),xtensa-embedded) +override COMPILER_UNITDIR+=$(COMPILERSOURCEDIR) +endif +ifeq ($(FULL_TARGET),xtensa-freertos) +override COMPILER_UNITDIR+=$(COMPILERSOURCEDIR) +endif +ifeq ($(FULL_TARGET),z80-embedded) +override COMPILER_UNITDIR+=$(COMPILERSOURCEDIR) +endif +ifeq ($(FULL_TARGET),z80-zxspectrum) +override COMPILER_UNITDIR+=$(COMPILERSOURCEDIR) +endif +ifeq ($(FULL_TARGET),z80-msxdos) +override COMPILER_UNITDIR+=$(COMPILERSOURCEDIR) +endif +ifeq ($(FULL_TARGET),z80-amstradcpc) +override COMPILER_UNITDIR+=$(COMPILERSOURCEDIR) +endif ifeq ($(FULL_TARGET),i386-linux) override COMPILER_TARGETDIR+=$(CPU_UNITDIR)/bin/$(FULL_TARGET) endif @@ -1767,7 +1965,7 @@ endif ifeq ($(FULL_TARGET),m68k-palmos) override COMPILER_TARGETDIR+=$(CPU_UNITDIR)/bin/$(FULL_TARGET) endif -ifeq ($(FULL_TARGET),m68k-macos) +ifeq ($(FULL_TARGET),m68k-macosclassic) override COMPILER_TARGETDIR+=$(CPU_UNITDIR)/bin/$(FULL_TARGET) endif ifeq ($(FULL_TARGET),m68k-embedded) @@ -1782,7 +1980,7 @@ endif ifeq ($(FULL_TARGET),powerpc-amiga) override COMPILER_TARGETDIR+=$(CPU_UNITDIR)/bin/$(FULL_TARGET) endif -ifeq ($(FULL_TARGET),powerpc-macos) +ifeq ($(FULL_TARGET),powerpc-macosclassic) override COMPILER_TARGETDIR+=$(CPU_UNITDIR)/bin/$(FULL_TARGET) endif ifeq ($(FULL_TARGET),powerpc-darwin) @@ -1860,9 +2058,6 @@ endif ifeq ($(FULL_TARGET),arm-palmos) override COMPILER_TARGETDIR+=$(CPU_UNITDIR)/bin/$(FULL_TARGET) endif -ifeq ($(FULL_TARGET),arm-darwin) -override COMPILER_TARGETDIR+=$(CPU_UNITDIR)/bin/$(FULL_TARGET) -endif ifeq ($(FULL_TARGET),arm-wince) override COMPILER_TARGETDIR+=$(CPU_UNITDIR)/bin/$(FULL_TARGET) endif @@ -1884,6 +2079,12 @@ endif ifeq ($(FULL_TARGET),arm-aros) override COMPILER_TARGETDIR+=$(CPU_UNITDIR)/bin/$(FULL_TARGET) endif +ifeq ($(FULL_TARGET),arm-freertos) +override COMPILER_TARGETDIR+=$(CPU_UNITDIR)/bin/$(FULL_TARGET) +endif +ifeq ($(FULL_TARGET),arm-ios) +override COMPILER_TARGETDIR+=$(CPU_UNITDIR)/bin/$(FULL_TARGET) +endif ifeq ($(FULL_TARGET),powerpc64-linux) override COMPILER_TARGETDIR+=$(CPU_UNITDIR)/bin/$(FULL_TARGET) endif @@ -1917,6 +2118,9 @@ endif ifeq ($(FULL_TARGET),mipsel-android) override COMPILER_TARGETDIR+=$(CPU_UNITDIR)/bin/$(FULL_TARGET) endif +ifeq ($(FULL_TARGET),mips64el-linux) +override COMPILER_TARGETDIR+=$(CPU_UNITDIR)/bin/$(FULL_TARGET) +endif ifeq ($(FULL_TARGET),jvm-java) override COMPILER_TARGETDIR+=$(CPU_UNITDIR)/bin/$(FULL_TARGET) endif @@ -1938,15 +2142,54 @@ endif ifeq ($(FULL_TARGET),aarch64-darwin) override COMPILER_TARGETDIR+=$(CPU_UNITDIR)/bin/$(FULL_TARGET) endif +ifeq ($(FULL_TARGET),aarch64-win64) +override COMPILER_TARGETDIR+=$(CPU_UNITDIR)/bin/$(FULL_TARGET) +endif ifeq ($(FULL_TARGET),aarch64-android) override COMPILER_TARGETDIR+=$(CPU_UNITDIR)/bin/$(FULL_TARGET) endif +ifeq ($(FULL_TARGET),aarch64-ios) +override COMPILER_TARGETDIR+=$(CPU_UNITDIR)/bin/$(FULL_TARGET) +endif ifeq ($(FULL_TARGET),wasm-wasm) override COMPILER_TARGETDIR+=$(CPU_UNITDIR)/bin/$(FULL_TARGET) endif ifeq ($(FULL_TARGET),sparc64-linux) override COMPILER_TARGETDIR+=$(CPU_UNITDIR)/bin/$(FULL_TARGET) endif +ifeq ($(FULL_TARGET),riscv32-linux) +override COMPILER_TARGETDIR+=$(CPU_UNITDIR)/bin/$(FULL_TARGET) +endif +ifeq ($(FULL_TARGET),riscv32-embedded) +override COMPILER_TARGETDIR+=$(CPU_UNITDIR)/bin/$(FULL_TARGET) +endif +ifeq ($(FULL_TARGET),riscv64-linux) +override COMPILER_TARGETDIR+=$(CPU_UNITDIR)/bin/$(FULL_TARGET) +endif +ifeq ($(FULL_TARGET),riscv64-embedded) +override COMPILER_TARGETDIR+=$(CPU_UNITDIR)/bin/$(FULL_TARGET) +endif +ifeq ($(FULL_TARGET),xtensa-linux) +override COMPILER_TARGETDIR+=$(CPU_UNITDIR)/bin/$(FULL_TARGET) +endif +ifeq ($(FULL_TARGET),xtensa-embedded) +override COMPILER_TARGETDIR+=$(CPU_UNITDIR)/bin/$(FULL_TARGET) +endif +ifeq ($(FULL_TARGET),xtensa-freertos) +override COMPILER_TARGETDIR+=$(CPU_UNITDIR)/bin/$(FULL_TARGET) +endif +ifeq ($(FULL_TARGET),z80-embedded) +override COMPILER_TARGETDIR+=$(CPU_UNITDIR)/bin/$(FULL_TARGET) +endif +ifeq ($(FULL_TARGET),z80-zxspectrum) +override COMPILER_TARGETDIR+=$(CPU_UNITDIR)/bin/$(FULL_TARGET) +endif +ifeq ($(FULL_TARGET),z80-msxdos) +override COMPILER_TARGETDIR+=$(CPU_UNITDIR)/bin/$(FULL_TARGET) +endif +ifeq ($(FULL_TARGET),z80-amstradcpc) +override COMPILER_TARGETDIR+=$(CPU_UNITDIR)/bin/$(FULL_TARGET) +endif ifeq ($(FULL_TARGET),i386-linux) override COMPILER_UNITTARGETDIR+=$(CPU_UNITDIR)/units/$(FULL_TARGET) endif @@ -2031,7 +2274,7 @@ endif ifeq ($(FULL_TARGET),m68k-palmos) override COMPILER_UNITTARGETDIR+=$(CPU_UNITDIR)/units/$(FULL_TARGET) endif -ifeq ($(FULL_TARGET),m68k-macos) +ifeq ($(FULL_TARGET),m68k-macosclassic) override COMPILER_UNITTARGETDIR+=$(CPU_UNITDIR)/units/$(FULL_TARGET) endif ifeq ($(FULL_TARGET),m68k-embedded) @@ -2046,7 +2289,7 @@ endif ifeq ($(FULL_TARGET),powerpc-amiga) override COMPILER_UNITTARGETDIR+=$(CPU_UNITDIR)/units/$(FULL_TARGET) endif -ifeq ($(FULL_TARGET),powerpc-macos) +ifeq ($(FULL_TARGET),powerpc-macosclassic) override COMPILER_UNITTARGETDIR+=$(CPU_UNITDIR)/units/$(FULL_TARGET) endif ifeq ($(FULL_TARGET),powerpc-darwin) @@ -2124,9 +2367,6 @@ endif ifeq ($(FULL_TARGET),arm-palmos) override COMPILER_UNITTARGETDIR+=$(CPU_UNITDIR)/units/$(FULL_TARGET) endif -ifeq ($(FULL_TARGET),arm-darwin) -override COMPILER_UNITTARGETDIR+=$(CPU_UNITDIR)/units/$(FULL_TARGET) -endif ifeq ($(FULL_TARGET),arm-wince) override COMPILER_UNITTARGETDIR+=$(CPU_UNITDIR)/units/$(FULL_TARGET) endif @@ -2148,6 +2388,12 @@ endif ifeq ($(FULL_TARGET),arm-aros) override COMPILER_UNITTARGETDIR+=$(CPU_UNITDIR)/units/$(FULL_TARGET) endif +ifeq ($(FULL_TARGET),arm-freertos) +override COMPILER_UNITTARGETDIR+=$(CPU_UNITDIR)/units/$(FULL_TARGET) +endif +ifeq ($(FULL_TARGET),arm-ios) +override COMPILER_UNITTARGETDIR+=$(CPU_UNITDIR)/units/$(FULL_TARGET) +endif ifeq ($(FULL_TARGET),powerpc64-linux) override COMPILER_UNITTARGETDIR+=$(CPU_UNITDIR)/units/$(FULL_TARGET) endif @@ -2181,6 +2427,9 @@ endif ifeq ($(FULL_TARGET),mipsel-android) override COMPILER_UNITTARGETDIR+=$(CPU_UNITDIR)/units/$(FULL_TARGET) endif +ifeq ($(FULL_TARGET),mips64el-linux) +override COMPILER_UNITTARGETDIR+=$(CPU_UNITDIR)/units/$(FULL_TARGET) +endif ifeq ($(FULL_TARGET),jvm-java) override COMPILER_UNITTARGETDIR+=$(CPU_UNITDIR)/units/$(FULL_TARGET) endif @@ -2202,15 +2451,54 @@ endif ifeq ($(FULL_TARGET),aarch64-darwin) override COMPILER_UNITTARGETDIR+=$(CPU_UNITDIR)/units/$(FULL_TARGET) endif +ifeq ($(FULL_TARGET),aarch64-win64) +override COMPILER_UNITTARGETDIR+=$(CPU_UNITDIR)/units/$(FULL_TARGET) +endif ifeq ($(FULL_TARGET),aarch64-android) override COMPILER_UNITTARGETDIR+=$(CPU_UNITDIR)/units/$(FULL_TARGET) endif +ifeq ($(FULL_TARGET),aarch64-ios) +override COMPILER_UNITTARGETDIR+=$(CPU_UNITDIR)/units/$(FULL_TARGET) +endif ifeq ($(FULL_TARGET),wasm-wasm) override COMPILER_UNITTARGETDIR+=$(CPU_UNITDIR)/units/$(FULL_TARGET) endif ifeq ($(FULL_TARGET),sparc64-linux) override COMPILER_UNITTARGETDIR+=$(CPU_UNITDIR)/units/$(FULL_TARGET) endif +ifeq ($(FULL_TARGET),riscv32-linux) +override COMPILER_UNITTARGETDIR+=$(CPU_UNITDIR)/units/$(FULL_TARGET) +endif +ifeq ($(FULL_TARGET),riscv32-embedded) +override COMPILER_UNITTARGETDIR+=$(CPU_UNITDIR)/units/$(FULL_TARGET) +endif +ifeq ($(FULL_TARGET),riscv64-linux) +override COMPILER_UNITTARGETDIR+=$(CPU_UNITDIR)/units/$(FULL_TARGET) +endif +ifeq ($(FULL_TARGET),riscv64-embedded) +override COMPILER_UNITTARGETDIR+=$(CPU_UNITDIR)/units/$(FULL_TARGET) +endif +ifeq ($(FULL_TARGET),xtensa-linux) +override COMPILER_UNITTARGETDIR+=$(CPU_UNITDIR)/units/$(FULL_TARGET) +endif +ifeq ($(FULL_TARGET),xtensa-embedded) +override COMPILER_UNITTARGETDIR+=$(CPU_UNITDIR)/units/$(FULL_TARGET) +endif +ifeq ($(FULL_TARGET),xtensa-freertos) +override COMPILER_UNITTARGETDIR+=$(CPU_UNITDIR)/units/$(FULL_TARGET) +endif +ifeq ($(FULL_TARGET),z80-embedded) +override COMPILER_UNITTARGETDIR+=$(CPU_UNITDIR)/units/$(FULL_TARGET) +endif +ifeq ($(FULL_TARGET),z80-zxspectrum) +override COMPILER_UNITTARGETDIR+=$(CPU_UNITDIR)/units/$(FULL_TARGET) +endif +ifeq ($(FULL_TARGET),z80-msxdos) +override COMPILER_UNITTARGETDIR+=$(CPU_UNITDIR)/units/$(FULL_TARGET) +endif +ifeq ($(FULL_TARGET),z80-amstradcpc) +override COMPILER_UNITTARGETDIR+=$(CPU_UNITDIR)/units/$(FULL_TARGET) +endif ifdef REQUIRE_UNITSDIR override UNITSDIR+=$(REQUIRE_UNITSDIR) endif @@ -2407,12 +2695,70 @@ endif else CROSSBINDIR= endif +ifeq ($(OS_SOURCE),linux) +ifndef GCCLIBDIR +ifeq ($(CPU_TARGET),i386) +ifneq ($(findstring x86_64,$(shell uname -a)),) +ifeq ($(BINUTILSPREFIX),) +GCCLIBDIR:=$(shell dirname `gcc -m32 -print-libgcc-file-name`) +else +CROSSGCCOPT=-m32 +endif +endif +endif +ifeq ($(CPU_TARGET),powerpc) +ifeq ($(BINUTILSPREFIX),) +GCCLIBDIR:=$(shell dirname `gcc -m32 -print-libgcc-file-name`) +else +CROSSGCCOPT=-m32 +endif +endif +ifeq ($(CPU_TARGET),powerpc64) +ifeq ($(BINUTILSPREFIX),) +GCCLIBDIR:=$(shell dirname `gcc -m64 -print-libgcc-file-name`) +else +CROSSGCCOPT=-m64 +endif +endif +ifeq ($(CPU_TARGET),sparc) +ifneq ($(findstring sparc64,$(shell uname -a)),) +ifeq ($(BINUTILSPREFIX),) +GCCLIBDIR:=$(shell dirname `gcc -m32 -print-libgcc-file-name`) +else +CROSSGCCOPT=-m32 +endif +endif +endif +endif +ifdef FPCFPMAKE +FPCFPMAKE_CPU_TARGET=$(shell $(FPCFPMAKE) -iTP) +ifeq ($(CPU_TARGET),$(FPCFPMAKE_CPU_TARGET)) +FPCMAKEGCCLIBDIR:=$(GCCLIBDIR) +endif +endif +ifndef FPCMAKEGCCLIBDIR +FPCMAKEGCCLIBDIR:=$(shell dirname `gcc -print-libgcc-file-name`) +endif +ifndef GCCLIBDIR +CROSSGCC=$(strip $(wildcard $(addsuffix /$(BINUTILSPREFIX)gcc$(SRCEXEEXT),$(SEARCHPATH)))) +ifneq ($(CROSSGCC),) +GCCLIBDIR:=$(shell dirname `$(CROSSGCC) $(CROSSGCCOPT) -print-libgcc-file-name`) +endif +endif +endif +ifdef inUnix +ifeq ($(OS_SOURCE),netbsd) +OTHERLIBDIR:=/usr/pkg/lib +endif +export GCCLIBDIR FPCMAKEGCCLIBDIR OTHERLIBDIR +endif BATCHEXT=.bat LOADEREXT=.as EXEEXT=.exe PPLEXT=.ppl PPUEXT=.ppu OEXT=.o +LTOEXT=.bc ASMEXT=.s SMARTEXT=.sl STATICLIBEXT=.a @@ -2550,14 +2896,14 @@ STATICLIBPREFIX= SHORTSUFFIX=nwl IMPORTLIBPREFIX=imp endif -ifeq ($(OS_TARGET),macos) +ifeq ($(OS_TARGET),macosclassic) BATCHEXT= EXEEXT= DEBUGSYMEXT=.xcoff SHORTSUFFIX=mac IMPORTLIBPREFIX=imp endif -ifneq ($(findstring $(OS_TARGET),darwin iphonesim),) +ifneq ($(findstring $(OS_TARGET),darwin iphonesim ios),) BATCHEXT=.sh EXEEXT= HASSHAREDLIB=1 @@ -2607,6 +2953,11 @@ STATICLIBPREFIX= STATICLIBEXT=.a SHORTSUFFIX=d16 endif +ifeq ($(OS_TARGET),msxdos) +STATICLIBPREFIX= +STATICLIBEXT=.a +SHORTSUFFIX=msd +endif ifeq ($(OS_TARGET),embedded) ifeq ($(CPU_TARGET),i8086) STATICLIBPREFIX= @@ -2614,6 +2965,9 @@ STATICLIBEXT=.a else EXEEXT=.bin endif +ifeq ($(CPU_TARGET),z80) +OEXT=.rel +endif SHORTSUFFIX=emb endif ifeq ($(OS_TARGET),win16) @@ -2622,6 +2976,9 @@ STATICLIBEXT=.a SHAREDLIBEXT=.dll SHORTSUFFIX=w16 endif +ifeq ($(OS_TARGET),zxspectrum) +OEXT=.rel +endif ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),) FPCMADE=fpcmade.$(SHORTSUFFIX) ZIPSUFFIX=$(SHORTSUFFIX) @@ -2961,7 +3318,7 @@ endif ifeq ($(FULL_TARGET),m68k-palmos) REQUIRE_PACKAGES_RTL=1 endif -ifeq ($(FULL_TARGET),m68k-macos) +ifeq ($(FULL_TARGET),m68k-macosclassic) REQUIRE_PACKAGES_RTL=1 endif ifeq ($(FULL_TARGET),m68k-embedded) @@ -2976,7 +3333,7 @@ endif ifeq ($(FULL_TARGET),powerpc-amiga) REQUIRE_PACKAGES_RTL=1 endif -ifeq ($(FULL_TARGET),powerpc-macos) +ifeq ($(FULL_TARGET),powerpc-macosclassic) REQUIRE_PACKAGES_RTL=1 endif ifeq ($(FULL_TARGET),powerpc-darwin) @@ -3054,9 +3411,6 @@ endif ifeq ($(FULL_TARGET),arm-palmos) REQUIRE_PACKAGES_RTL=1 endif -ifeq ($(FULL_TARGET),arm-darwin) -REQUIRE_PACKAGES_RTL=1 -endif ifeq ($(FULL_TARGET),arm-wince) REQUIRE_PACKAGES_RTL=1 endif @@ -3078,6 +3432,12 @@ endif ifeq ($(FULL_TARGET),arm-aros) REQUIRE_PACKAGES_RTL=1 endif +ifeq ($(FULL_TARGET),arm-freertos) +REQUIRE_PACKAGES_RTL=1 +endif +ifeq ($(FULL_TARGET),arm-ios) +REQUIRE_PACKAGES_RTL=1 +endif ifeq ($(FULL_TARGET),powerpc64-linux) REQUIRE_PACKAGES_RTL=1 endif @@ -3111,6 +3471,9 @@ endif ifeq ($(FULL_TARGET),mipsel-android) REQUIRE_PACKAGES_RTL=1 endif +ifeq ($(FULL_TARGET),mips64el-linux) +REQUIRE_PACKAGES_RTL=1 +endif ifeq ($(FULL_TARGET),jvm-java) REQUIRE_PACKAGES_RTL=1 endif @@ -3132,15 +3495,54 @@ endif ifeq ($(FULL_TARGET),aarch64-darwin) REQUIRE_PACKAGES_RTL=1 endif +ifeq ($(FULL_TARGET),aarch64-win64) +REQUIRE_PACKAGES_RTL=1 +endif ifeq ($(FULL_TARGET),aarch64-android) REQUIRE_PACKAGES_RTL=1 endif +ifeq ($(FULL_TARGET),aarch64-ios) +REQUIRE_PACKAGES_RTL=1 +endif ifeq ($(FULL_TARGET),wasm-wasm) REQUIRE_PACKAGES_RTL=1 endif ifeq ($(FULL_TARGET),sparc64-linux) REQUIRE_PACKAGES_RTL=1 endif +ifeq ($(FULL_TARGET),riscv32-linux) +REQUIRE_PACKAGES_RTL=1 +endif +ifeq ($(FULL_TARGET),riscv32-embedded) +REQUIRE_PACKAGES_RTL=1 +endif +ifeq ($(FULL_TARGET),riscv64-linux) +REQUIRE_PACKAGES_RTL=1 +endif +ifeq ($(FULL_TARGET),riscv64-embedded) +REQUIRE_PACKAGES_RTL=1 +endif +ifeq ($(FULL_TARGET),xtensa-linux) +REQUIRE_PACKAGES_RTL=1 +endif +ifeq ($(FULL_TARGET),xtensa-embedded) +REQUIRE_PACKAGES_RTL=1 +endif +ifeq ($(FULL_TARGET),xtensa-freertos) +REQUIRE_PACKAGES_RTL=1 +endif +ifeq ($(FULL_TARGET),z80-embedded) +REQUIRE_PACKAGES_RTL=1 +endif +ifeq ($(FULL_TARGET),z80-zxspectrum) +REQUIRE_PACKAGES_RTL=1 +endif +ifeq ($(FULL_TARGET),z80-msxdos) +REQUIRE_PACKAGES_RTL=1 +endif +ifeq ($(FULL_TARGET),z80-amstradcpc) +REQUIRE_PACKAGES_RTL=1 +endif ifdef REQUIRE_PACKAGES_RTL PACKAGEDIR_RTL:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /rtl/Makefile.fpc,$(PACKAGESDIR)))))) ifneq ($(PACKAGEDIR_RTL),) @@ -3230,16 +3632,7 @@ override FPCOPT+=-gl override FPCOPTDEF+=DEBUG endif ifdef RELEASE -ifneq ($(findstring 2.0.,$(FPC_VERSION)),) -ifeq ($(CPU_TARGET),i386) -FPCCPUOPT:=-OG2p3 -endif -ifeq ($(CPU_TARGET),powerpc) -FPCCPUOPT:=-O1r -endif -else FPCCPUOPT:=-O2 -endif override FPCOPT+=-Ur -Xs $(FPCCPUOPT) -n override FPCOPTDEF+=RELEASE endif @@ -3301,6 +3694,17 @@ endif endif ifdef LINKSHARED endif +ifdef GCCLIBDIR +override FPCOPT+=-Fl$(GCCLIBDIR) +ifdef FPCMAKEGCCLIBDIR +override FPCMAKEOPT+=-Fl$(FPCMAKEGCCLIBDIR) +else +override FPCMAKEOPT+=-Fl$(GCCLIBDIR) +endif +endif +ifdef OTHERLIBDIR +override FPCOPT+=$(addprefix -Fl,$(OTHERLIBDIR)) +endif ifdef OPT override FPCOPT+=$(OPT) endif @@ -3348,7 +3752,7 @@ endif 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 override INSTALLEXEFILES+=$(EXEFILES) @@ -3377,7 +3781,7 @@ fpc_debug: $(MAKE) all DEBUG=1 fpc_release: $(MAKE) all RELEASE=1 -.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) $(COMPILER_TARGETDIR): @@ -3408,6 +3812,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) .PHONY: fpc_shared override INSTALLTARGET+=fpc_shared_install @@ -3428,7 +3833,7 @@ fpc_shared: ifdef HASSHAREDLIB $(MAKE) all CREATESHARED=1 LINKSHARED=1 CREATESMART=1 ifneq ($(SHARED_BUILD),n) - $(PPUMOVE) -q $(SHARED_LIBUNITS) -i$(COMPILER_UNITTARGETDIR) -o$(SHARED_FULLNAME) -d$(COMPILER_UNITTARGETDIR) + $(PPUMOVE) -q $(SHARED_LIBUNITS) -i$(COMPILER_UNITTARGETDIR) -o$(SHARED_FULLNAME) -d$(COMPILER_UNITTARGETDIR) -P$(BINUTILSPREFIX) endif else @$(ECHO) Shared Libraries not supported @@ -3450,13 +3855,15 @@ override INSTALLPPUFILES:=$(filter-out $(INSTALL_BUILDUNIT)$(PPUEXT),$(INSTALLPP endif ifdef INSTALLPPUFILES 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),) -override INSTALLPPUFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(notdir $(INSTALLPPUFILES))) -override INSTALLPPULINKFILES:=$(wildcard $(addprefix $(UNITTARGETDIRPREFIX),$(notdir $(INSTALLPPULINKFILES)))) +override INSTALLPPUFILENAMES:=$(notdir $(INSTALLPPUFILES)) +override INSTALLPPULINKFILENAMES:=$(notdir $(INSTALLPPULINKFILES)) +override INSTALLPPUFILES=$(addprefix $(UNITTARGETDIRPREFIX),$(INSTALLPPUFILENAMES)) +override INSTALLPPULINKFILES=$(wildcard $(addprefix $(UNITTARGETDIRPREFIX),$(INSTALLPPULINKFILENAMES))) endif override INSTALL_CREATEPACKAGEFPC=1 endif @@ -3611,12 +4018,14 @@ ifdef CLEAN_UNITS 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 -override CLEANPPUFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(CLEANPPUFILES)) -override CLEANPPULINKFILES:=$(wildcard $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANPPULINKFILES))) +override CLEANPPUFILENAMES:=$(CLEANPPUFILES) +override CLEANPPUFILES=$(addprefix $(UNITTARGETDIRPREFIX),$(CLEANPPUFILENAMES)) +override CLEANPPULINKFILENAMES:=$(CLEANPPULINKFILES) +override CLEANPPULINKFILES=$(wildcard $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANPPULINKFILENAMES))) endif fpc_clean: $(CLEANTARGET) ifdef CLEANEXEFILES @@ -3640,8 +4049,9 @@ endif ifdef LIB_NAME -$(DEL) $(LIB_NAME) $(LIB_FULLNAME) endif - -$(DEL) $(FPCMADE) Package.fpc $(PPAS) script.res link.res $(FPCEXTFILE) $(REDIRFILE) - -$(DEL) *$(ASMEXT) *_ppas$(BATCHEXT) ppas$(BATCHEXT) ppaslink$(BATCHEXT) + -$(DEL) $(FPCMADE) *$(FULL_TARGET).fpm Package.fpc *$(ASMEXT) + -$(DEL) $(FPCEXTFILE) $(REDIRFILE) script*.res link*.res *_script.res *_link.res + -$(DEL) $(PPAS) *_ppas$(BATCHEXT) ppas$(BATCHEXT) ppaslink$(BATCHEXT) fpc_cleanall: $(CLEANTARGET) ifdef CLEANEXEFILES -$(DEL) $(CLEANEXEFILES) @@ -3662,13 +4072,14 @@ 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 -$(DELTREE) *$(SMARTEXT) - -$(DEL) fpcmade.* Package.fpc $(PPAS) script.res link.res $(FPCEXTFILE) $(REDIRFILE) - -$(DEL) *_ppas$(BATCHEXT) ppas$(BATCHEXT) ppaslink$(BATCHEXT) + -$(DEL) fpcmade.* Package.fpc *.fpm + -$(DEL) $(FPCEXTFILE) $(REDIRFILE) script*.res link*.res *_script.res *_link.res + -$(DEL) $(PPAS) *_ppas$(BATCHEXT) ppas$(BATCHEXT) ppaslink$(BATCHEXT) ifdef AOUTEXT -$(DEL) *$(AOUTEXT) endif @@ -3871,7 +4282,7 @@ endif ifeq ($(FULL_TARGET),m68k-palmos) TARGET_DIRS_UTILS=1 endif -ifeq ($(FULL_TARGET),m68k-macos) +ifeq ($(FULL_TARGET),m68k-macosclassic) TARGET_DIRS_UTILS=1 endif ifeq ($(FULL_TARGET),m68k-embedded) @@ -3886,7 +4297,7 @@ endif ifeq ($(FULL_TARGET),powerpc-amiga) TARGET_DIRS_UTILS=1 endif -ifeq ($(FULL_TARGET),powerpc-macos) +ifeq ($(FULL_TARGET),powerpc-macosclassic) TARGET_DIRS_UTILS=1 endif ifeq ($(FULL_TARGET),powerpc-darwin) @@ -3964,9 +4375,6 @@ endif ifeq ($(FULL_TARGET),arm-palmos) TARGET_DIRS_UTILS=1 endif -ifeq ($(FULL_TARGET),arm-darwin) -TARGET_DIRS_UTILS=1 -endif ifeq ($(FULL_TARGET),arm-wince) TARGET_DIRS_UTILS=1 endif @@ -3988,6 +4396,12 @@ endif ifeq ($(FULL_TARGET),arm-aros) TARGET_DIRS_UTILS=1 endif +ifeq ($(FULL_TARGET),arm-freertos) +TARGET_DIRS_UTILS=1 +endif +ifeq ($(FULL_TARGET),arm-ios) +TARGET_DIRS_UTILS=1 +endif ifeq ($(FULL_TARGET),powerpc64-linux) TARGET_DIRS_UTILS=1 endif @@ -4021,6 +4435,9 @@ endif ifeq ($(FULL_TARGET),mipsel-android) TARGET_DIRS_UTILS=1 endif +ifeq ($(FULL_TARGET),mips64el-linux) +TARGET_DIRS_UTILS=1 +endif ifeq ($(FULL_TARGET),jvm-java) TARGET_DIRS_UTILS=1 endif @@ -4042,15 +4459,54 @@ endif ifeq ($(FULL_TARGET),aarch64-darwin) TARGET_DIRS_UTILS=1 endif +ifeq ($(FULL_TARGET),aarch64-win64) +TARGET_DIRS_UTILS=1 +endif ifeq ($(FULL_TARGET),aarch64-android) TARGET_DIRS_UTILS=1 endif +ifeq ($(FULL_TARGET),aarch64-ios) +TARGET_DIRS_UTILS=1 +endif ifeq ($(FULL_TARGET),wasm-wasm) TARGET_DIRS_UTILS=1 endif ifeq ($(FULL_TARGET),sparc64-linux) TARGET_DIRS_UTILS=1 endif +ifeq ($(FULL_TARGET),riscv32-linux) +TARGET_DIRS_UTILS=1 +endif +ifeq ($(FULL_TARGET),riscv32-embedded) +TARGET_DIRS_UTILS=1 +endif +ifeq ($(FULL_TARGET),riscv64-linux) +TARGET_DIRS_UTILS=1 +endif +ifeq ($(FULL_TARGET),riscv64-embedded) +TARGET_DIRS_UTILS=1 +endif +ifeq ($(FULL_TARGET),xtensa-linux) +TARGET_DIRS_UTILS=1 +endif +ifeq ($(FULL_TARGET),xtensa-embedded) +TARGET_DIRS_UTILS=1 +endif +ifeq ($(FULL_TARGET),xtensa-freertos) +TARGET_DIRS_UTILS=1 +endif +ifeq ($(FULL_TARGET),z80-embedded) +TARGET_DIRS_UTILS=1 +endif +ifeq ($(FULL_TARGET),z80-zxspectrum) +TARGET_DIRS_UTILS=1 +endif +ifeq ($(FULL_TARGET),z80-msxdos) +TARGET_DIRS_UTILS=1 +endif +ifeq ($(FULL_TARGET),z80-amstradcpc) +TARGET_DIRS_UTILS=1 +endif ifdef TARGET_DIRS_UTILS utils_all: $(MAKE) -C utils all @@ -4270,10 +4726,11 @@ $(PPC_TARGETS): $(MAKE) PPC_TARGET=$@ CPU_UNITDIR=$@ compiler $(INSTALL_TARGETS): $(MAKE) PPC_TARGET=$(subst _exe_install,,$@) CPU_UNITDIR=$(subst _exe_install,,$@) compiler - $(MAKE) PPC_TARGET=$(subst _exe_install,,$@) CPU_UNITDIR=$(subst _exe_install,,$@) exeinstall + $(MAKE) PPC_TARGET=$(subst _exe_install,,$@) CPU_UNITDIR=$(subst _exe_install,,$@) exeinstall $(SYMLINKINSTALL_TARGETS): $(MAKE) PPC_TARGET=$(subst _symlink_install,,$@) CPU_UNITDIR=$(subst _symlink_install,,$@) compiler - $(MAKE) PPC_TARGET=$(subst _symlink_install,,$@) CPU_UNITDIR=$(subst _symlink_install,,$@) installsymlink + $(ECHO) "Compiler $(subst _symlink_install,,$@) finished, starting installsymlink" + $(MAKE) PPC_TARGET=$(subst _symlink_install,,$@) CPU_UNITDIR=$(subst _symlink_install,,$@) installsymlink alltargets: $(ALLTARGETS) .PHONY: all compiler echotime ppuclean execlean clean distclean all: compiler $(addsuffix _all,$(TARGET_DIRS)) @@ -4537,7 +4994,7 @@ extcycle: $(MAKE) cycle OPT="$(OPT) -n -OG2p3 -glttt -CRriot -dEXTDEBUG" ALLOW_WARNINGS=1 cvstest: $(MAKE) cycle 'LOCALOPT=-n -Se' 'RTLOPT=-n -Se' -ifneq ($(findstring -dFPC_SOFT_FPUX80,$(OPT)),) +ifeq ($(findstring -dFPC_SOFT_FPUX80,$(OPT)),) ifeq ($(OS_SOURCE),win64) EXCLUDE_80BIT_TARGETS=1 endif @@ -4585,10 +5042,11 @@ endif endif fullinstall: ifndef EXCLUDE_80BIT_TARGETS - $(MAKE) $(addsuffix _exe_install,$(filter-out $(PPC_TARGET),$(CYCLETARGETS))) $(addsuffix _all,$(TARGET_DIRS)) + $(MAKE) $(addsuffix _exe_install,$(filter-out $(PPC_TARGET),$(CYCLETARGETS))) else - $(MAKE) $(addsuffix _exe_install,$(filter-out i8086,$(filter-out i386,$(filter-out $(PPC_TARGET),$(CYCLETARGETS))))) $(addsuffix _all,$(TARGET_DIRS)) + $(MAKE) $(addsuffix _exe_install,$(filter-out i8086,$(filter-out i386,$(filter-out $(PPC_TARGET),$(CYCLETARGETS))))) endif + $(MAKE) $(addsuffix _all,$(TARGET_DIRS)) $(MAKE) $(addsuffix _install,$(TARGET_DIRS)) auxfilesinstall: ifndef CROSSINSTALL @@ -4605,12 +5063,13 @@ ifndef FPC else $(MAKE) quickinstall auxfilesinstall endif -installsymlink: install +installsymlink: exeinstall ifneq ($(PPCCPULOCATION),$(INSTALL_BINDIR)) $(MKDIR) $(INSTALL_BINDIR) ln -sf $(INSTALL_BASEDIR)/$(EXENAME) $(INSTALL_BINDIR)/$(EXENAME) endif -fullinstallsymlink: fullinstall +fullinstallsymlink: + $(ECHO) "Fullinstall finished, starting XXX_symlink_install" ifndef EXCLUDE_80BIT_TARGETS $(MAKE) $(addsuffix _symlink_install,$(filter-out $(PPC_TARGET),$(CYCLETARGETS))) else diff --git a/compiler/Makefile.fpc b/compiler/Makefile.fpc index 4a4819d388..21a303c6a6 100644 --- a/compiler/Makefile.fpc +++ b/compiler/Makefile.fpc @@ -611,15 +611,16 @@ SYMLINKINSTALL_TARGETS=$(addsuffix _symlink_install,$(sort $(CYCLETARGETS) $(PPC .PHONY: $(PPC_TARGETS) $(INSTALL_TARGETS)$(SYMLINKINSTALL_TARGETS) $(PPC_TARGETS): - $(MAKE) PPC_TARGET=$@ CPU_UNITDIR=$@ compiler + $(MAKE) PPC_TARGET=$@ CPU_UNITDIR=$@ compiler $(INSTALL_TARGETS): - $(MAKE) PPC_TARGET=$(subst _exe_install,,$@) CPU_UNITDIR=$(subst _exe_install,,$@) compiler - $(MAKE) PPC_TARGET=$(subst _exe_install,,$@) CPU_UNITDIR=$(subst _exe_install,,$@) exeinstall + $(MAKE) PPC_TARGET=$(subst _exe_install,,$@) CPU_UNITDIR=$(subst _exe_install,,$@) compiler + $(MAKE) PPC_TARGET=$(subst _exe_install,,$@) CPU_UNITDIR=$(subst _exe_install,,$@) exeinstall $(SYMLINKINSTALL_TARGETS): - $(MAKE) PPC_TARGET=$(subst _symlink_install,,$@) CPU_UNITDIR=$(subst _symlink_install,,$@) compiler - $(MAKE) PPC_TARGET=$(subst _symlink_install,,$@) CPU_UNITDIR=$(subst _symlink_install,,$@) installsymlink + $(MAKE) PPC_TARGET=$(subst _symlink_install,,$@) CPU_UNITDIR=$(subst _symlink_install,,$@) compiler + $(ECHO) "Compiler $(subst _symlink_install,,$@) finished, starting installsymlink" + $(MAKE) PPC_TARGET=$(subst _symlink_install,,$@) CPU_UNITDIR=$(subst _symlink_install,,$@) installsymlink alltargets: $(ALLTARGETS) @@ -1016,7 +1017,7 @@ cvstest: # This is also the case for other CPUs that don't support # 80bit real type. -ifneq ($(findstring -dFPC_SOFT_FPUX80,$(OPT)),) +ifeq ($(findstring -dFPC_SOFT_FPUX80,$(OPT)),) ifeq ($(OS_SOURCE),win64) EXCLUDE_80BIT_TARGETS=1 endif @@ -1087,10 +1088,11 @@ endif fullinstall: ifndef EXCLUDE_80BIT_TARGETS - $(MAKE) $(addsuffix _exe_install,$(filter-out $(PPC_TARGET),$(CYCLETARGETS))) $(addsuffix _all,$(TARGET_DIRS)) + $(MAKE) $(addsuffix _exe_install,$(filter-out $(PPC_TARGET),$(CYCLETARGETS))) else - $(MAKE) $(addsuffix _exe_install,$(filter-out i8086,$(filter-out i386,$(filter-out $(PPC_TARGET),$(CYCLETARGETS))))) $(addsuffix _all,$(TARGET_DIRS)) + $(MAKE) $(addsuffix _exe_install,$(filter-out i8086,$(filter-out i386,$(filter-out $(PPC_TARGET),$(CYCLETARGETS))))) endif + $(MAKE) $(addsuffix _all,$(TARGET_DIRS)) $(MAKE) $(addsuffix _install,$(TARGET_DIRS)) auxfilesinstall: @@ -1114,13 +1116,14 @@ endif # This also installs a link from bin to the actual executable. # The .deb does that later. -installsymlink: install +installsymlink: exeinstall ifneq ($(PPCCPULOCATION),$(INSTALL_BINDIR)) $(MKDIR) $(INSTALL_BINDIR) ln -sf $(INSTALL_BASEDIR)/$(EXENAME) $(INSTALL_BINDIR)/$(EXENAME) endif -fullinstallsymlink: fullinstall +fullinstallsymlink: + $(ECHO) "Fullinstall finished, starting XXX_symlink_install" ifndef EXCLUDE_80BIT_TARGETS $(MAKE) $(addsuffix _symlink_install,$(filter-out $(PPC_TARGET),$(CYCLETARGETS))) else From 1002a7c5901cdb185711fc197b4b0c6cee1de91d Mon Sep 17 00:00:00 2001 From: yury Date: Thu, 20 Aug 2020 16:35:27 +0000 Subject: [PATCH 11/25] * 8086: Fixed very long section names when $HUGECODE is ON and section based smartlinking is used. * Added a utility function TrimStrCRC32(). git-svn-id: trunk@46511 - --- compiler/fpccrc.pas | 21 ++++++++++++++++++++- compiler/ogomf.pas | 4 ++-- compiler/x86/agx86nsm.pas | 4 ++-- 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/compiler/fpccrc.pas b/compiler/fpccrc.pas index a617b65dba..0e8249b0d5 100644 --- a/compiler/fpccrc.pas +++ b/compiler/fpccrc.pas @@ -26,7 +26,9 @@ Unit fpccrc; Interface Function UpdateCrc32(InitCrc:cardinal;const InBuf;InLen:integer):cardinal; - +{ If needed trims the string to maxlen, adding at the end the CRC32 of discarded chars. + The resulting string is guaranteed to be not longer than maxlen. } +function TrimStrCRC32(const s: ansistring; maxlen: longint): ansistring; Implementation @@ -73,4 +75,21 @@ begin end; +function TrimStrCRC32(const s: ansistring; maxlen: longint): ansistring; +var + crc: DWord; + len: longint; +begin + len:=length(s); + if (len<=maxlen) or (len<12) then + result:=s + else + begin + dec(maxlen,11); + crc:=0; + crc:=UpdateCrc32(crc,s[maxlen+1],len-maxlen); + result:=copy(s,1,maxlen)+'$CRC'+hexstr(crc,8); + end; +end; + end. diff --git a/compiler/ogomf.pas b/compiler/ogomf.pas index b4c0047ca9..0755b0a2ec 100644 --- a/compiler/ogomf.pas +++ b/compiler/ogomf.pas @@ -803,7 +803,7 @@ implementation uses SysUtils, - cutils,verbose,globals, + cutils,verbose,globals,fpccrc, fmodule,aasmtai,aasmdata, ogmap,owomflib,elfbase, version @@ -1053,7 +1053,7 @@ implementation if current_settings.x86memorymodel in x86_far_code_models then begin if cs_huge_code in current_settings.moduleswitches then - result:=aname + '_TEXT' + result:=TrimStrCRC32(aname,30) + '_TEXT' else result:=current_module.modulename^ + '_TEXT'; end diff --git a/compiler/x86/agx86nsm.pas b/compiler/x86/agx86nsm.pas index a18979ea77..89b0fa8018 100644 --- a/compiler/x86/agx86nsm.pas +++ b/compiler/x86/agx86nsm.pas @@ -84,7 +84,7 @@ interface implementation uses - cutils,globals,systems, + cutils,globals,systems,fpccrc, fmodule,finput,verbose,cpuinfo,cgbase,omfbase ; @@ -306,7 +306,7 @@ interface if current_settings.x86memorymodel in x86_far_code_models then begin if cs_huge_code in current_settings.moduleswitches then - result:=aname + '_TEXT' + result:=TrimStrCRC32(aname,30) + '_TEXT' else result:=current_module.modulename^ + '_TEXT'; end From 01d5519fe88ec4e73c451c8ecdd7c680b07faf02 Mon Sep 17 00:00:00 2001 From: Mattias Gaertner Date: Thu, 20 Aug 2020 16:41:03 +0000 Subject: [PATCH 12/25] fcl-js: skip writeln test git-svn-id: trunk@46512 - --- packages/fcl-js/src/jswriter.pp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/fcl-js/src/jswriter.pp b/packages/fcl-js/src/jswriter.pp index 2f49a8c10c..4daecc083d 100644 --- a/packages/fcl-js/src/jswriter.pp +++ b/packages/fcl-js/src/jswriter.pp @@ -441,6 +441,7 @@ end; {$endif} { TJSWriter } +{AllowWriteln} procedure TJSWriter.SetOptions(AValue: TWriteOptions); begin @@ -1939,6 +1940,7 @@ begin // Write('/* '+El.ClassName+' */'); FSkipCurlyBrackets:=False; end; +{AllowWriteln-} {$ifdef HasFileWriter} { TFileWriter } From ccc26ad34c0b822dc11aa7187c318af4839ed870 Mon Sep 17 00:00:00 2001 From: Mattias Gaertner Date: Thu, 20 Aug 2020 16:41:46 +0000 Subject: [PATCH 13/25] pastojs: compiler: reset hub git-svn-id: trunk@46513 - --- packages/pastojs/src/pas2jscompiler.pp | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/pastojs/src/pas2jscompiler.pp b/packages/pastojs/src/pas2jscompiler.pp index 41bf8e577e..7a6e051d7d 100644 --- a/packages/pastojs/src/pas2jscompiler.pp +++ b/packages/pastojs/src/pas2jscompiler.pp @@ -4413,6 +4413,7 @@ end; procedure TPas2jsCompiler.Reset; begin + FResolverHub.Reset; FreeAndNil(FWPOAnalyzer); FPrecompileGUID:=default(TGUID); FNamespaces.Clear; From 75e5afd45b8ad8fae83c2931a7d04e66de893f7f Mon Sep 17 00:00:00 2001 From: yury Date: Thu, 20 Aug 2020 16:59:10 +0000 Subject: [PATCH 14/25] * When optimization is off always load unused parentfp to a local location to be debugger friendly. git-svn-id: trunk@46514 - --- compiler/ncgutil.pas | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/compiler/ncgutil.pas b/compiler/ncgutil.pas index d7c6375a79..29329b8b3d 100644 --- a/compiler/ncgutil.pas +++ b/compiler/ncgutil.pas @@ -865,7 +865,8 @@ implementation end { Unused parameters need to be kept in the original location to prevent allocation of registers/resources for them. } - else if not tparavarsym(vs).is_used then + else if not tparavarsym(vs).is_used and + (cs_opt_unused_para in current_settings.optimizerswitches) then begin tparavarsym(vs).paraloc[calleeside].get_location(vs.initialloc); end From 89752e042d2c9872cd3f878c44bf61133c901ed7 Mon Sep 17 00:00:00 2001 From: Mattias Gaertner Date: Thu, 20 Aug 2020 17:18:59 +0000 Subject: [PATCH 15/25] fcl-passrc: fixed anaylyzer git-svn-id: trunk@46515 - --- packages/fcl-passrc/src/pasuseanalyzer.pas | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/fcl-passrc/src/pasuseanalyzer.pas b/packages/fcl-passrc/src/pasuseanalyzer.pas index 62e85712f9..177f94c63a 100644 --- a/packages/fcl-passrc/src/pasuseanalyzer.pas +++ b/packages/fcl-passrc/src/pasuseanalyzer.pas @@ -910,7 +910,12 @@ end; procedure TPasAnalyzer.CreateTree; begin - FUsedElements:=CreatePasElementSet; + FUsedElements:=TPasAnalyzerKeySet.Create( + {$ifdef pas2js} + @PAElement_ElToHashName,@PasElementToHashName + {$else} + @ComparePAElements,@CompareElementWithPAElement + {$endif}); end; function TPasAnalyzer.MarkElementAsUsed(El: TPasElement; aClass: TPAElementClass From 16e50abd749b0e0ba2b14900ed00bf85b2db7317 Mon Sep 17 00:00:00 2001 From: Mattias Gaertner Date: Thu, 20 Aug 2020 17:19:56 +0000 Subject: [PATCH 16/25] fcl-passrc: fixed memeleak when error during parsing generic constraints git-svn-id: trunk@46516 - --- packages/fcl-passrc/src/pastree.pp | 38 +++++++++++++++++++++++++----- packages/fcl-passrc/src/pparser.pp | 7 +++++- 2 files changed, 38 insertions(+), 7 deletions(-) diff --git a/packages/fcl-passrc/src/pastree.pp b/packages/fcl-passrc/src/pastree.pp index 1cd85ff610..7abdd74939 100644 --- a/packages/fcl-passrc/src/pastree.pp +++ b/packages/fcl-passrc/src/pastree.pp @@ -562,12 +562,15 @@ type { TPasGenericTemplateType - type param of a generic } TPasGenericTemplateType = Class(TPasType) + protected + procedure SetParent(const AValue: TPasElement); override; public destructor Destroy; override; function GetDeclaration(full : boolean) : string; override; procedure ForEachCall(const aMethodCall: TOnForEachPasElement; const Arg: Pointer); override; procedure AddConstraint(El: TPasElement); + procedure ClearConstraints; Public TypeConstraint: String deprecated; // deprecated in fpc 3.3.1 Constraints: TPasElementArray; // list of TPasExpr or TPasType, can be nil! @@ -1962,13 +1965,20 @@ end; { TPasGenericTemplateType } -destructor TPasGenericTemplateType.Destroy; -var - i: Integer; +procedure TPasGenericTemplateType.SetParent(const AValue: TPasElement); begin - for i:=0 to length(Constraints)-1 do - Constraints[i].Release{$IFDEF CheckPasTreeRefCount}('CreateElement'){$ENDIF}; - Constraints:=nil; + if (AValue=nil) and (Parent<>nil) then + begin + // parent is cleared + // -> clear all references to this class (releasing loops) + ClearConstraints; + end; + inherited SetParent(AValue); +end; + +destructor TPasGenericTemplateType.Destroy; +begin + ClearConstraints; inherited Destroy; end; @@ -2008,6 +2018,22 @@ begin Constraints[l]:=El; end; +procedure TPasGenericTemplateType.ClearConstraints; +var + i: Integer; + aConstraint: TPasElement; +begin + // -> clear all references to this class (releasing loops) + for i:=0 to length(Constraints)-1 do + begin + aConstraint:=Constraints[i]; + if aConstraint.Parent=Self then + aConstraint.Parent:=nil; + aConstraint.Release{$IFDEF CheckPasTreeRefCount}('CreateElement'){$ENDIF}; + end; + Constraints:=nil; +end; + {$IFDEF HasPTDumpStack} procedure PTDumpStack; begin diff --git a/packages/fcl-passrc/src/pparser.pp b/packages/fcl-passrc/src/pparser.pp index 5bd6fbbcda..c8a9fe2d36 100644 --- a/packages/fcl-passrc/src/pparser.pp +++ b/packages/fcl-passrc/src/pparser.pp @@ -4429,6 +4429,7 @@ var i: Integer; AObjKind: TPasObjKind; ok: Boolean; + GenTempl: TPasGenericTemplateType; begin Result:=nil; ok := false; @@ -4517,7 +4518,11 @@ begin if (not ok) and (Result<>nil) and not AddToParent then Result.Release({$IFDEF CheckPasTreeRefCount}('CreateElement'){$ENDIF}); for i:=0 to TypeParams.Count-1 do - TPasElement(TypeParams[i]).Release{$IFDEF CheckPasTreeRefCount}('CreateElement'){$ENDIF}; + begin + GenTempl:=TPasGenericTemplateType(TypeParams[i]); + GenTempl.Parent:=nil; + GenTempl.Release{$IFDEF CheckPasTreeRefCount}('CreateElement'){$ENDIF}; + end; TypeParams.Free; end; end; From fcaf04686b50a4c5e7a055d0eb97ffdaae92e58f Mon Sep 17 00:00:00 2001 From: Mattias Gaertner Date: Thu, 20 Aug 2020 17:20:43 +0000 Subject: [PATCH 17/25] fcl-passrc: check generic constraint T:T git-svn-id: trunk@46517 - --- packages/fcl-passrc/src/pasresolver.pp | 3 +++ .../fcl-passrc/tests/tcresolvegenerics.pas | 18 ++++++++++++++++-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/packages/fcl-passrc/src/pasresolver.pp b/packages/fcl-passrc/src/pasresolver.pp index bff3b7c53b..15a4e7db21 100644 --- a/packages/fcl-passrc/src/pasresolver.pp +++ b/packages/fcl-passrc/src/pasresolver.pp @@ -6595,6 +6595,9 @@ begin if ResolvedEl.LoTypeEl is TPasGenericTemplateType then begin + if ResolvedEl.LoTypeEl=El then + RaiseMsg(20200820185313,nTypeCycleFound,sTypeCycleFound,[], + GetGenericConstraintErrorEl(ConEl,El)); // ok if length(El.Constraints)>1 then RaiseXIsNotAValidConstraint(20190831213645,ResolvedEl.HiTypeEl.Name); diff --git a/packages/fcl-passrc/tests/tcresolvegenerics.pas b/packages/fcl-passrc/tests/tcresolvegenerics.pas index acdf9467e3..3880c3ffb9 100644 --- a/packages/fcl-passrc/tests/tcresolvegenerics.pas +++ b/packages/fcl-passrc/tests/tcresolvegenerics.pas @@ -34,6 +34,8 @@ type procedure TestGen_ConstraintSpecialize; procedure TestGen_ConstraintTSpecializeWithT; procedure TestGen_ConstraintTSpecializeAsTFail; + procedure TestGen_ConstraintTcolonTFail; // A + // ToDo: A> fail procedure TestGen_TemplNameEqTypeNameFail; procedure TestGen_ConstraintInheritedMissingRecordFail; procedure TestGen_ConstraintInheritedMissingClassTypeFail; @@ -42,8 +44,6 @@ type procedure TestGen_ConstraintClassType_DotIsAsTypeCast; procedure TestGen_ConstraintClassType_ForInT; procedure TestGen_ConstraintClassType_IsAs; - // ToDo: A fail - // ToDo: A> fail // generic record procedure TestGen_RecordLocalNameDuplicateFail; @@ -429,6 +429,20 @@ begin CheckResolverException('identifier not found "T<>"',nIdentifierNotFound); end; +procedure TTestResolveGenerics.TestGen_ConstraintTcolonTFail; +begin + StartProgram(false); + Add([ + '{$mode objfpc}', + 'type', + ' TObject = class end;', + ' T = TObject;', + ' generic TAnt = record v: word; end;', + 'begin', + '']); + CheckResolverException(sTypeCycleFound,nTypeCycleFound); +end; + procedure TTestResolveGenerics.TestGen_TemplNameEqTypeNameFail; begin StartProgram(false); From c2cceaeba8e7b8f0602c107b601fe7c5d1ebeae9 Mon Sep 17 00:00:00 2001 From: Mattias Gaertner Date: Thu, 20 Aug 2020 17:25:51 +0000 Subject: [PATCH 18/25] pastojs: started delay specialization git-svn-id: trunk@46518 - --- packages/pastojs/src/fppas2js.pp | 133 +++++++++++++++++++++++++++---- 1 file changed, 119 insertions(+), 14 deletions(-) diff --git a/packages/pastojs/src/fppas2js.pp b/packages/pastojs/src/fppas2js.pp index 993e8c02aa..9b59deac0d 100644 --- a/packages/pastojs/src/fppas2js.pp +++ b/packages/pastojs/src/fppas2js.pp @@ -465,9 +465,14 @@ unit FPPas2Js; interface uses + {$ifdef pas2js} + js, + {$else} + AVL_Tree, + {$endif} Classes, SysUtils, math, contnrs, jsbase, jstree, jswriter, - PasTree, PScanner, PasResolveEval, PasResolver; + PasTree, PScanner, PasResolveEval, PasResolver, PasUseAnalyzer; // message numbers const @@ -1372,6 +1377,15 @@ type { TPas2JSResolverHub } TPas2JSResolverHub = class(TPasResolverHub) + private + FJSSpecialized: TPasAnalyzerKeySet; // set of TPasGenericType + public + constructor Create(TheOwner: TObject); override; + destructor Destroy; override; + procedure Reset; override; + // delayed type specialization + procedure AddJSSpecialized(SpecType: TPasGenericType); + function IsJSSpecialized(SpecType: TPasGenericType): boolean; end; { TPas2JSResolver } @@ -1908,6 +1922,7 @@ type Function CreateVarStatement(const aName: String; Init: TJSElement; El: TPasElement): TJSVariableStatement; virtual; Function CreateVarDecl(const aName: String; Init: TJSElement; El: TPasElement): TJSVarDeclaration; virtual; + Procedure InitJSSpecialization(aType: TPasType; AContext: TConvertContext; ErrorEl: TPasElement); virtual; // JS literals Function CreateLiteralNumber(El: TPasElement; const n: TJSNumber): TJSLiteral; virtual; Function CreateLiteralHexNumber(El: TPasElement; const n: TMaxPrecInt; Digits: byte): TJSLiteral; virtual; @@ -2317,6 +2332,36 @@ begin Result:='['+Result+']'; end; +{ TPas2JSResolverHub } + +constructor TPas2JSResolverHub.Create(TheOwner: TObject); +begin + inherited Create(TheOwner); + FJSSpecialized:=CreatePasElementSet; +end; + +destructor TPas2JSResolverHub.Destroy; +begin + FreeAndNil(FJSSpecialized); + inherited Destroy; +end; + +procedure TPas2JSResolverHub.Reset; +begin + inherited Reset; +end; + +procedure TPas2JSResolverHub.AddJSSpecialized(SpecType: TPasGenericType); +begin + if FJSSpecialized.FindItem(SpecType)=nil then + FJSSpecialized.Add(SpecType,false); +end; + +function TPas2JSResolverHub.IsJSSpecialized(SpecType: TPasGenericType): boolean; +begin + Result:=FJSSpecialized.FindItem(SpecType)<>nil; +end; + { TPas2JSModuleScope } procedure TPas2JSModuleScope.SetJSPromiseClass(const AValue: TPasClassType); @@ -4918,32 +4963,44 @@ var Param: TPasType; i: Integer; GenSection, ParamSection: TPasSection; + ParamResolver, GenResolver: TPasResolver; begin Result:=nil; + {$IFNDEF EnableDelaySpecialize} + exit; + {$ENDIF} Gen:=SpecializedItem.GenericEl; GenSection:=GetParentSection(Gen); if not (GenSection is TInterfaceSection) then - exit; // generic in unit implementation/program/library -> params cannot be defined a later section - GenMod:=GenSection.GetModule; + exit; // generic in unit implementation/program/library -> params cannot be defined in a later section -> no delay needed + GenMod:=nil; + GenResolver:=nil; Params:=SpecializedItem.Params; for i:=0 to length(Params)-1 do begin Param:=ResolveAliasType(Params[i],false); if Param.ClassType=TPasUnresolvedSymbolRef then - continue; // built-in type + continue; // built-in type -> no delay needed ParamSection:=GetParentSection(Param); - if ParamSection=GenSection then continue; + if ParamSection=GenSection then + continue; // same section -> no delay needed // not in same section ParamMod:=ParamSection.GetModule; + if GenMod=nil then + GenMod:=GenSection.GetModule; if ParamMod=GenMod then - exit(Param); // generic in unit interface, specialize in implementation + exit(Param); // generic in unit interface, param in implementation // param in another unit if ParamSection is TImplementationSection then - exit(Param); // generic in unit interface, specialize in another(later) implementation + exit(Param); // generic in unit interface, param in another implementation // param in another unit interface - - //xxx + if GenResolver=nil then + GenResolver:=GetResolver(GenMod); + ParamResolver:=GetResolver(ParamMod); + if ParamResolver.FinishedInterfaceIndex no delay needed end; end; @@ -14422,7 +14479,7 @@ begin continue; end else if C=TPasAttributes then - // ToDo + continue else RaiseNotSupported(P as TPasElement,AContext,20161024191434); Add(E,P); @@ -22545,6 +22602,53 @@ begin Result.Init:=Init; end; +procedure TPasToJSConverter.InitJSSpecialization(aType: TPasType; + AContext: TConvertContext; ErrorEl: TPasElement); +var + aResolver: TPas2JSResolver; + SpecTypeData: TPasSpecializeTypeData; + Hub: TPas2JSResolverHub; + SpecType: TPasGenericType; + C: TClass; + FuncCtx: TFunctionContext; + SrcEl: TJSSourceElements; +begin + while aType<>nil do + begin + C:=aType.ClassType; + if C=TPasAliasType then + aType:=TPasAliasType(aType).DestType + else if C=TPasSpecializeType then + begin + // specialized type + SpecTypeData:=aType.CustomData as TPasSpecializeTypeData; + if SpecTypeData=nil then + RaiseNotSupported(aType,AContext,20200815210904); + aResolver:=AContext.Resolver; + Hub:=TPas2JSResolverHub(aResolver.Hub); + SpecType:=SpecTypeData.SpecializedType; + if Hub.IsJSSpecialized(SpecType) then exit; + Hub.AddJSSpecialized(SpecType); + FuncCtx:=AContext.GetGlobalFunc; + SrcEl:=FuncCtx.JSElement as TJSSourceElements; + + if SrcEl=nil then ; + + if SpecType is TPasRecordType then + begin + // add $mod.TAnt$G1(); + //CreateReferencePath(); + RaiseNotSupported(ErrorEl,AContext,20200815215652); + end + else + RaiseNotSupported(ErrorEl,AContext,20200815215338); + exit; + end + else + exit; + end; +end; + function TPasToJSConverter.CreateLiteralNumber(El: TPasElement; const n: TJSNumber): TJSLiteral; begin @@ -24639,6 +24743,7 @@ var ok, IsFull: Boolean; VarSt: TJSVariableStatement; bifn: TPas2JSBuiltInName; + RecScope: TPas2JSRecordScope; begin Result:=nil; if El.Name='' then @@ -24657,14 +24762,14 @@ begin // rtl.recNewT() Call:=CreateCallExpression(El); bifn:=pbifnRecordCreateType; - {$IFDEF EnableDelaySpecialize} + RecScope:=TPas2JSRecordScope(El.CustomData); if RecScope.SpecializedFromItem<>nil then begin - if RecScope.SpecializedFromItem.FirstSpecialize.GetModule<>EL.GetModule then - bifn:=pbifnRecordCreateSpecializeType; + // ToDo + //if aResolver.SpecializeNeedsDelay(RecScope.SpecializedFromItem)<>nil then + //bifn:=pbifnRecordCreateSpecializeType; end; - {$ENDIF} Call.Expr:=CreateMemberExpression([GetBIName(pbivnRTL),GetBIName(bifn)]); From c69090446ae513ade58e3c803a3f1d6092b8e6aa Mon Sep 17 00:00:00 2001 From: yury Date: Thu, 20 Aug 2020 17:39:45 +0000 Subject: [PATCH 19/25] * msdos: Fixed AV in the internal linker in some cases when code or data exceeds 64k. git-svn-id: trunk@46519 - --- compiler/ogomf.pas | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/compiler/ogomf.pas b/compiler/ogomf.pas index 0755b0a2ec..a541b38c40 100644 --- a/compiler/ogomf.pas +++ b/compiler/ogomf.pas @@ -3546,7 +3546,13 @@ cleanup: else if assigned(objreloc.symbol.group) then framebase:=TMZExeUnifiedLogicalGroup(ExeUnifiedLogicalGroups.Find(objreloc.symbol.group.Name)).MemPos else - framebase:=TOmfObjSection(objreloc.symbol.objsection).MZExeUnifiedLogicalSegment.MemBasePos; + if assigned(TOmfObjSection(objreloc.symbol.objsection).MZExeUnifiedLogicalSegment) then + framebase:=TOmfObjSection(objreloc.symbol.objsection).MZExeUnifiedLogicalSegment.MemBasePos + else + begin + framebase:=0; + Comment(V_Warning,'Encountered an OMF reference to a symbol, that is not present in the final executable: '+objreloc.symbol.Name); + end; case objreloc.typ of RELOC_ABSOLUTE16,RELOC_ABSOLUTE32,RELOC_SEG,RELOC_FARPTR,RELOC_FARPTR48: fixupamount:=target-framebase; @@ -3595,7 +3601,7 @@ cleanup: else begin framebase:=0; - Comment(V_Warning,'Encountered an OMF reference to a section, that has been removed by smartlinking: '+TOmfObjSection(objreloc.objsection).Name); + Comment(V_Warning,'Encountered an OMF reference to a section, that is not present in the final executable: '+TOmfObjSection(objreloc.objsection).Name); end; end; case objreloc.typ of From e28fca97299911fbf77142d001c0b905f4337711 Mon Sep 17 00:00:00 2001 From: yury Date: Thu, 20 Aug 2020 18:30:09 +0000 Subject: [PATCH 20/25] * If parentfp is passed in the stack it can be skipped only if po_delphi_nested_cc is set for the routine. git-svn-id: trunk@46520 - --- compiler/ncgcal.pas | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/compiler/ncgcal.pas b/compiler/ncgcal.pas index 2a0ea8e848..5c3b830393 100644 --- a/compiler/ncgcal.pas +++ b/compiler/ncgcal.pas @@ -143,13 +143,15 @@ implementation { We can skip passing the parameter when: the parameter can be optimized as unused and the target does not strictly require all parameters (has_strict_proc_signature = false) - and fixed stack is used + and + fixed stack is used or the parameter is in a register - or the parameter is $parentfp. } + or the parameter is $parentfp and po_delphi_nested_cc is set for the routine. } result:=paramanager.can_opt_unused_para(parasym) and not paramanager.has_strict_proc_signature and (paramanager.use_fixed_stack or - (vo_is_parentfp in parasym.varoptions) or + ((vo_is_parentfp in parasym.varoptions) and + (po_delphi_nested_cc in tabstractprocdef(parasym.owner.defowner).procoptions)) or (parasym.paraloc[callerside].Location^.Loc in [LOC_REGISTER,LOC_CREGISTER])); end; From 0a34a090e0f6676bae0ed2afb9570969b37a461b Mon Sep 17 00:00:00 2001 From: yury Date: Thu, 20 Aug 2020 19:59:36 +0000 Subject: [PATCH 21/25] x86: It is more optimal to push some register (NR_FRAME_POINTER_REG) instead of a constant value in a_load_undefined_cgpara(). git-svn-id: trunk@46521 - --- compiler/x86/hlcgx86.pas | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/compiler/x86/hlcgx86.pas b/compiler/x86/hlcgx86.pas index b38ed19ff1..a0ba60722b 100644 --- a/compiler/x86/hlcgx86.pas +++ b/compiler/x86/hlcgx86.pas @@ -43,6 +43,8 @@ interface protected procedure gen_load_uninitialized_function_result(list: TAsmList; pd: tprocdef; resdef: tdef; const resloc: tcgpara); override; procedure a_jmp_external_name(list: TAsmList; const externalname: TSymStr); override; + public + procedure a_load_undefined_cgpara(list: TAsmList; size: tdef; const cgpara: TCGPara); override; end; implementation @@ -89,4 +91,14 @@ implementation list.concat(taicpu.op_ref(A_JMP,S_NO,ref)); end; + + procedure thlcgx86.a_load_undefined_cgpara(list: TAsmList; size: tdef; const cgpara: TCGPara); + begin + if not (cgpara.Location^.Loc in [LOC_REGISTER,LOC_CREGISTER]) and + (cgpara.size=OS_ADDR) then + a_load_reg_cgpara(list,size,NR_FRAME_POINTER_REG,cgpara) + else + inherited; + end; + end. From de3a479be3a56a2bcb4f43c778d735b4b95e4d99 Mon Sep 17 00:00:00 2001 From: yury Date: Thu, 20 Aug 2020 20:08:10 +0000 Subject: [PATCH 22/25] * Added assembler comments about unused parameters. git-svn-id: trunk@46522 - --- compiler/ncgcal.pas | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/compiler/ncgcal.pas b/compiler/ncgcal.pas index 5c3b830393..245e6561d5 100644 --- a/compiler/ncgcal.pas +++ b/compiler/ncgcal.pas @@ -128,13 +128,14 @@ implementation uses systems, - verbose,globals, + verbose,globals,cutils, symconst,symtable,symtype,symsym,defutil,paramgr, pass_2, nld,ncnv, ncgutil,blockutl, cgobj,tgobj,hlcgobj, procinfo, + aasmtai, wpobase; @@ -306,7 +307,14 @@ implementation exit; { If we can't skip loading of the parameter, load an undefined dummy value. } if not can_skip_para_push(parasym) then - hlcg.a_load_undefined_cgpara(current_asmdata.CurrAsmList,left.resultdef,tempcgpara); + begin + if cs_asm_source in current_settings.globalswitches then + current_asmdata.CurrAsmList.concat(tai_comment.Create(strpnew('Parameter '+parasym.realname+' is unused, loading undefined value'))); + hlcg.a_load_undefined_cgpara(current_asmdata.CurrAsmList,left.resultdef,tempcgpara); + end + else + if cs_asm_source in current_settings.globalswitches then + current_asmdata.CurrAsmList.concat(tai_comment.Create(strpnew('Parameter '+parasym.realname+' is unused'))); end; From 1ad31dd32d342622dc7b63a28facc251a58ce5e3 Mon Sep 17 00:00:00 2001 From: florian Date: Thu, 20 Aug 2020 21:29:47 +0000 Subject: [PATCH 23/25] * reduce number of default libs git-svn-id: trunk@46526 - --- rtl/freertos/xtensa/esp8266.pp | 6 ------ 1 file changed, 6 deletions(-) diff --git a/rtl/freertos/xtensa/esp8266.pp b/rtl/freertos/xtensa/esp8266.pp index 1def52b2f1..344603e3a7 100644 --- a/rtl/freertos/xtensa/esp8266.pp +++ b/rtl/freertos/xtensa/esp8266.pp @@ -9,7 +9,6 @@ unit esp8266; interface {$linklib esp8266, static} -{$linklib util, static} {$linklib log, static} {$linklib c_fnano, static} {$linklib newlib, static} @@ -29,11 +28,6 @@ unit esp8266; {$linklib pp, static} {$linklib stdc++, static} {$linklib pthread, static} -{$linklib wpa_supplicant, static} -//{$linklib esp_event, static} // Not in V3.3 -{$linklib wpa, static} // not in master version -{$linklib lwip, static} -{$linklib mbedtls, static} implementation From 7157bac9fddade13cb9325499b12202009d0f7d5 Mon Sep 17 00:00:00 2001 From: florian Date: Thu, 20 Aug 2020 21:29:48 +0000 Subject: [PATCH 24/25] * patch by Christo Crause, resolves #37335 * ESP8266 support for t_freertos.pas + -Ff switch to be able to pass the IDF_PATH without using an evironment variable git-svn-id: trunk@46527 - --- compiler/globals.pas | 5 +- compiler/msg/errore.msg | 2 +- compiler/msgidx.inc | 2 +- compiler/msgtxt.inc | 261 ++++++++--------- compiler/options.pas | 4 + compiler/systems/t_freertos.pas | 478 +++++++++++++++++--------------- 6 files changed, 397 insertions(+), 355 deletions(-) diff --git a/compiler/globals.pas b/compiler/globals.pas index c3a1f781a0..3ebaeef198 100644 --- a/compiler/globals.pas +++ b/compiler/globals.pas @@ -254,7 +254,10 @@ interface { specified with -FW and -Fw } wpofeedbackinput, wpofeedbackoutput : TPathStr; - +{$ifdef XTENSA} + { specified with -Ff } + idfpath : TPathStr; +{$endif XTENSA} { external assembler extra option } asmextraopt : string; diff --git a/compiler/msg/errore.msg b/compiler/msg/errore.msg index 02b084c2c7..00f3e65a4b 100644 --- a/compiler/msg/errore.msg +++ b/compiler/msg/errore.msg @@ -3961,7 +3961,7 @@ A*2CV_Set section threadvar model to **2FD_Set the directory where to search for compiler utilities **2Fe_Redirect error output to **2FE_Set exe/unit output path to -**2Ff_Add to framework path (Darwin only) +**2Ff_Add to framework path (Darwin only), or set IDF path to (Xtensa-FreeRTOS) **2FF_Use fpcres as RC to RES compiler instead of windres or gorc **2Fi_Add to include path **2Fl_Add to library path diff --git a/compiler/msgidx.inc b/compiler/msgidx.inc index 6edbab1d35..d194989e97 100644 --- a/compiler/msgidx.inc +++ b/compiler/msgidx.inc @@ -1126,7 +1126,7 @@ const option_info=11024; option_help_pages=11025; - MsgTxtSize = 85690; + MsgTxtSize = 85732; MsgIdxMax : array[1..20] of longint=( 28,106,356,129,99,63,143,36,223,68, diff --git a/compiler/msgtxt.inc b/compiler/msgtxt.inc index 84a107d592..93f8f144ae 100644 --- a/compiler/msgtxt.inc +++ b/compiler/msgtxt.inc @@ -1592,164 +1592,165 @@ const msgtxt : array[0..000357,1..240] of char=( '**2FD_Set the directory where to search for compiler utilities'#010+ '**2Fe_Redirect error output to '#010+ '**2FE_Set exe/unit output path to '#010+ - '**2Ff_Add ',' to framework path (Darwin only)'#010+ + '**2Ff_Add ',' to framework path (Darwin only), or set IDF path to'+ + ' (Xtensa-FreeRTOS)'#010+ '**2FF_Use fpcres as RC to RES compiler instead of windres or gorc'#010+ '**2Fi_Add to include path'#010+ '**2Fl_Add to library path'#010+ - '**2FL_Use as dynamic linker'#010+ - '**2Fm_Load unicode conversion tabl','e from .txt in the compiler '+ - 'dir'#010+ + '**2FL_Use as dynamic li','nker'#010+ + '**2Fm_Load unicode conversion table from .txt in the compiler di'+ + 'r'#010+ '**2FM_Set the directory where to search for unicode binary files'#010+ '**2FN_Add to list of default unit scopes (namespaces)'#010+ '**2Fo_Add to object path'#010+ - '**2Fr_Load error message file '#010+ - '**2FR_Set resource (.res) linker to '#010+ + '**','2Fr_Load error message file '#010+ + '**2FR_Set resource (.res) linker to '#010+ '**2Fu_Add to unit path'#010+ '**2FU_Set unit output path to , overrides -FE'#010+ '**2FW_Store generated whole-program optimization feedback in '#010+ - '**2Fw_Load previously stored whole-program optimiza','tion feedback '+ + '**2Fw_Loa','d previously stored whole-program optimization feedback '+ 'from '#010+ '*g1g_Generate debug information (default format for target)'#010+ '*g2gc_Generate checks for pointers (experimental, only available on so'+ 'me targets, might generate false positive)'#010+ - '*g2gh_Use heaptrace unit (for memory leak/co','rruption debugging)'#010+ + '*g','2gh_Use heaptrace unit (for memory leak/corruption debugging)'#010+ '*g2gl_Use line info unit (show more info with backtraces)'#010+ '*g2gm_Generate Microsoft CodeView debug information (experimental)'#010+ '*g2go_Set debug information options'#010+ - '*g3godwarfsets_ Enable DWARF '#039'set'#039' type debug informatio','n (b'+ + '*g3godwarfsets','_ Enable DWARF '#039'set'#039' type debug information (b'+ 'reaks gdb < 6.5)'#010+ '*g3gostabsabsincludes_ Store absolute/full include file paths in Stabs'+ #010+ '*g3godwarfmethodclassprefix_ Prefix method names in DWARF with class n'+ 'ame'#010+ - '*g3godwarfcpp_ Simulate C++ debug information in DWARF'#010+ - '*g3godwarfomflinnum','_ Generate line number information in OMF LINNUM '+ - 'records in MS LINK format in addition to the DWARF debug information ('+ - 'Open Watcom Debugger/Linker compatibility)'#010+ - '*g2gp_Preserve case in stabs symbol names'#010+ - '*g2gs_Generate Stabs debug informati','on'#010+ + '*g3godwarfcpp_ Simulate C++ debu','g information in DWARF'#010+ + '*g3godwarfomflinnum_ Generate line number information in OMF LINNUM re'+ + 'cords in MS LINK format in addition to the DWARF debug information (Op'+ + 'en Watcom Debugger/Linker compatibility)'#010+ + '*g2gp_Preserve case in stabs symbol ','names'#010+ + '*g2gs_Generate Stabs debug information'#010+ '*g2gt_Trash local variables (to detect uninitialized uses; multiple '#039+ 't'#039' changes the trashing value)'#010+ '*g2gv_Generates programs traceable with Valgrind'#010+ - '*g2gw_Generate DWARFv2 debug information (same as -gw2)'#010+ - '*g2gw2_Generate DWARFv2 debug in','formation'#010+ + '*g2gw_Generate DWARFv2 debug information (same',' as -gw2)'#010+ + '*g2gw2_Generate DWARFv2 debug information'#010+ '*g2gw3_Generate DWARFv3 debug information'#010+ '*g2gw4_Generate DWARFv4 debug information (experimental)'#010+ '**1i_Information'#010+ '**2iD_Return compiler date'#010+ '**2iSO_Return compiler OS'#010+ - '**2iSP_Return compiler host processor'#010+ - '**2iTO_Return target OS',#010+ + '**2iSP_Return compi','ler host processor'#010+ + '**2iTO_Return target OS'#010+ '**2iTP_Return target processor'#010+ '**2iV_Return short compiler version'#010+ '**2iW_Return full compiler version'#010+ '**2ia_Return list of supported ABI targets'#010+ '**2ib_Return the used code generation backend type'#010+ - '**2ic_Return list of supported CPU instruct','ion sets'#010+ + '*','*2ic_Return list of supported CPU instruction sets'#010+ '**2if_Return list of supported FPU instruction sets'#010+ '**2ii_Return list of supported inline assembler modes'#010+ '**2im_Return list of supported modeswitches'#010+ - '**2io_Return list of supported optimizations'#010+ - '**2ir_Return list of recognized comp','iler and RTL features'#010+ + '**2io_Return list of supported optimiza','tions'#010+ + '**2ir_Return list of recognized compiler and RTL features'#010+ '**2it_Return list of supported targets'#010+ '**2iu_Return list of supported microcontroller types'#010+ '**2iw_Return list of supported whole program optimizations'#010+ - '**1I_Add to include path'#010+ + '**1I_Add to includ','e path'#010+ '**1k_Pass to the linker'#010+ - '**1l','_Write logo'#010+ + '**1l_Write logo'#010+ '**1M_Set language mode to / enable modeswitch (see option -'+ 'im)'#010+ '**2Mfpc_Free Pascal dialect (default)'#010+ '**2Mobjfpc_FPC mode with Object Pascal support'#010+ - '**2Mdelphi_Delphi 7 compatibility mode'#010+ - '**2Mtp_TP/BP 7.0 compatibility',' mode'#010+ + '**2Mdelphi_Delphi 7 compati','bility mode'#010+ + '**2Mtp_TP/BP 7.0 compatibility mode'#010+ '**2Mmacpas_Macintosh Pascal dialects compatibility mode'#010+ '**2Miso_ISO 7185 mode'#010+ '**2Mextendedpascal_ISO 10206 mode'#010+ '**2Mdelphiunicode_Delphi 2009 and later compatibility mode'#010+ - '**2*_Each mode (as listed above) enables its default set of mod','eswit'+ + '**2*_Each mode (as li','sted above) enables its default set of modeswit'+ 'ches.'#010+ '**2*_Other modeswitches are disabled and need to be enabled one by ano'+ 'ther.'#010+ '**1M-_Disable modeswitch (see option -im)'#010+ '**1n_Do not read the default config files'#010+ - '**1o_Change the name of the executable produced to '#010+ - '**1O','_Optimizations:'#010+ + '**1o_Change the n','ame of the executable produced to '#010+ + '**1O_Optimizations:'#010+ '**2O-_Disable optimizations'#010+ '**2O1_Level 1 optimizations (quick and debugger friendly)'#010+ '**2O2_Level 2 optimizations (-O1 + quick optimizations)'#010+ - '**2O3_Level 3 optimizations (-O2 + slow optimizations)'#010+ - '**2O4_Level 4 optimizati','ons (-O3 + optimizations which might have un'+ - 'expected side effects)'#010+ + '**2O3_Level 3 optimizations (-O2 + sl','ow optimizations)'#010+ + '**2O4_Level 4 optimizations (-O3 + optimizations which might have unex'+ + 'pected side effects)'#010+ '**2Oa=_Set alignment'#010+ '**2Oo[NO]_Enable or disable optimizations; see fpc -i or fpc -io fo'+ 'r possible values'#010+ - '**2Op_Set target cpu for optimizing; see fpc -i or fpc ','-ic for po'+ + '**2Op_Set tar','get cpu for optimizing; see fpc -i or fpc -ic for po'+ 'ssible values'#010+ '**2OW_Generate whole-program optimization feedback for optimization'+ ' ; see fpc -i or fpc -iw for possible values'#010+ - '**2Ow_Perform whole-program optimization ; see fpc -i or fpc -iw'+ - ' for possible values'#010+ - '**2Os_O','ptimize for size rather than speed'#010+ + '**2Ow_Perform whole-program optimization ; see fpc',' -i or fpc -'+ + 'iw for possible values'#010+ + '**2Os_Optimize for size rather than speed'#010+ '**1pg_Generate profile code for gprof (defines FPC_PROFILE)'#010+ 'F*1P_Target CPU / compiler related options:'#010+ 'F*2PB_Show default compiler binary'#010+ - 'F*2PP_Show default target cpu'#010+ - 'F*2P_Set target CPU (aarch64,a','rm,avr,i386,i8086,jvm,m68k,mips,mip'+ - 'sel,powerpc,powerpc64,sparc,x86_64)'#010+ + 'F*2PP_Show default ta','rget cpu'#010+ + 'F*2P_Set target CPU (aarch64,arm,avr,i386,i8086,jvm,m68k,mips,mipse'+ + 'l,powerpc,powerpc64,sparc,x86_64)'#010+ '**1R_Assembler reading style:'#010+ '**2Rdefault_Use default assembler for target'#010+ '3*2Ratt_Read AT&T style assembler'#010+ - '3*2Rintel_Read Intel style assembler'#010+ - '4*2Ratt_Read AT&T st','yle assembler'#010+ + '3*2Rintel_Read ','Intel style assembler'#010+ + '4*2Ratt_Read AT&T style assembler'#010+ '4*2Rintel_Read Intel style assembler'#010+ '8*2Ratt_Read AT&T style assembler'#010+ '8*2Rintel_Read Intel style assembler'#010+ '6*2RMOT_Read Motorola style assembler'#010+ '**1S_Syntax options:'#010+ - '**2S2_Same as -Mobjfpc'#010+ - '**2Sc_Support operators like C (*','=,+=,/= and -=)'#010+ + '**2S2_Same as ','-Mobjfpc'#010+ + '**2Sc_Support operators like C (*=,+=,/= and -=)'#010+ '**2Sa_Turn on assertions'#010+ '**2Sd_Same as -Mdelphi'#010+ '**2Se_Error options. is a combination of the following:'#010+ '**3*_ : Compiler halts after the errors (default is 1)'#010+ - '**3*_w : Compiler also halts after warnings'#010+ - '**3*_n ',': Compiler also halts after notes'#010+ + '**3*_w : ','Compiler also halts after warnings'#010+ + '**3*_n : Compiler also halts after notes'#010+ '**3*_h : Compiler also halts after hints'#010+ '**2Sf_Enable certain features in compiler and RTL; see fpc -i or fpc -'+ 'ir for possible values)'#010+ - '**2Sg_Enable LABEL and GOTO (default in -Mtp and -Mdelphi)'#010+ - '**2Sh_Use re','ference counted strings (ansistring by default) instead '+ - 'of shortstrings'#010+ + '**2Sg_Enable LABEL and GOTO (','default in -Mtp and -Mdelphi)'#010+ + '**2Sh_Use reference counted strings (ansistring by default) instead of'+ + ' shortstrings'#010+ '**2Si_Turn on inlining of procedures/functions declared as "inline"'#010+ - '**2Sj_Allows typed constants to be writeable (default in all modes)'#010+ + '**2Sj_Allows typed constants to be writeable (default in a','ll modes)'#010+ '**2Sk_Load fpcylix unit'#010+ - '**2SI','_Set interface style to '#010+ + '**2SI_Set interface style to '#010+ '**3SIcom_COM compatible interface (default)'#010+ '**3SIcorba_CORBA compatible interface'#010+ '**2Sm_Support macros like C (global)'#010+ '**2So_Same as -Mtp'#010+ - '**2Sr_Transparent file names in ISO mode'#010+ - '**2Ss_Constructor name must be in','it (destructor must be done)'#010+ + '**2Sr_Transparent file names in ','ISO mode'#010+ + '**2Ss_Constructor name must be init (destructor must be done)'#010+ '**2Sv_Support vector processing (use CPU vector extensions if availabl'+ 'e)'#010+ '**2Sx_Enable exception keywords (default in Delphi/ObjFPC modes)'#010+ - '**2Sy_@ returns a typed pointer, same as $T+'#010+ - '**1s_Do not call as','sembler and linker'#010+ + '**2Sy_@ returns a type','d pointer, same as $T+'#010+ + '**1s_Do not call assembler and linker'#010+ '**2sh_Generate script to link on host'#010+ '**2st_Generate script to link on target'#010+ '**2sr_Skip register allocation phase (use with -alr)'#010+ '**1T_Target operating system:'#010+ - '3*2Tandroid_Android'#010+ + '3*2Tandroid_And','roid'#010+ '3*2Taros_AROS'#010+ '3*2Tbeos_BeOS'#010+ - '3*2Tdarwi','n_Darwin/Mac OS X'#010+ + '3*2Tdarwin_Darwin/Mac OS X'#010+ '3*2Tembedded_Embedded'#010+ '3*2Temx_OS/2 via EMX (including EMX/RSX extender)'#010+ '3*2Tfreebsd_FreeBSD'#010+ '3*2Tgo32v2_Version 2 of DJ Delorie DOS extender'#010+ '3*2Thaiku_Haiku'#010+ - '3*2Tiphonesim_iPhoneSimulator from iOS SDK 3.2+ (older versions: -','Td'+ + '3*2Tiphonesim_iPhoneSimu','lator from iOS SDK 3.2+ (older versions: -Td'+ 'arwin)'#010+ '3*2Tlinux_Linux'#010+ '3*2Tnativent_Native NT API (experimental)'#010+ @@ -1757,9 +1758,9 @@ const msgtxt : array[0..000357,1..240] of char=( '3*2Tnetware_Novell Netware Module (clib)'#010+ '3*2Tnetwlibc_Novell Netware Module (libc)'#010+ '3*2Topenbsd_OpenBSD'#010+ - '3*2Tos2_OS/2 / eComStation'#010+ + '3*2Tos2_OS','/2 / eComStation'#010+ '3*2Tsymbian_Symbian OS'#010+ - '3*','2Tsolaris_Solaris'#010+ + '3*2Tsolaris_Solaris'#010+ '3*2Twatcom_Watcom compatible DOS extender'#010+ '3*2Twdosx_WDOSX DOS extender'#010+ '3*2Twin32_Windows 32 Bit'#010+ @@ -1767,8 +1768,8 @@ const msgtxt : array[0..000357,1..240] of char=( '4*2Tandroid_Android'#010+ '4*2Taros_AROS'#010+ '4*2Tdarwin_Darwin/Mac OS X'#010+ - '4*2Tdragonfly_DragonFly BSD'#010+ - '4*2Tembedded_Emb','edded'#010+ + '4*','2Tdragonfly_DragonFly BSD'#010+ + '4*2Tembedded_Embedded'#010+ '4*2Tfreebsd_FreeBSD'#010+ '4*2Thaiku_Haiku'#010+ '4*2Tiphonesim_iPhoneSimulator'#010+ @@ -1777,9 +1778,9 @@ const msgtxt : array[0..000357,1..240] of char=( '4*2Topenbsd_OpenBSD'#010+ '4*2Tsolaris_Solaris'#010+ '4*2Twin64_Win64 (64 bit Windows systems)'#010+ - '6*2Tamiga_Commodore Amiga'#010+ + '6*2Tamiga_C','ommodore Amiga'#010+ '6*2Tatari_Atari ST/STe/TT'#010+ - '6','*2Tembedded_Embedded'#010+ + '6*2Tembedded_Embedded'#010+ '6*2Tlinux_Linux'#010+ '6*2Tnetbsd_NetBSD'#010+ '6*2Tmacosclassic_Classic Mac OS'#010+ @@ -1787,9 +1788,9 @@ const msgtxt : array[0..000357,1..240] of char=( '8*2Tembedded_Embedded'#010+ '8*2Tmsdos_MS-DOS (and compatible)'#010+ '8*2Twin16_Windows 16 Bit'#010+ - 'A*2Tandroid_Android'#010+ + 'A*2Tandroid_','Android'#010+ 'A*2Taros_AROS'#010+ - 'A*2Tdarwin_Darwin/iP','honeOS/iOS'#010+ + 'A*2Tdarwin_Darwin/iPhoneOS/iOS'#010+ 'A*2Tembedded_Embedded'#010+ 'A*2Tfreertos_FreeRTOS'#010+ 'A*2Tgba_Game Boy Advance'#010+ @@ -1799,9 +1800,9 @@ const msgtxt : array[0..000357,1..240] of char=( 'A*2Tpalmos_PalmOS'#010+ 'A*2Tsymbian_Symbian'#010+ 'A*2Twince_Windows CE'#010+ - 'a*2Tandroid_Android'#010+ + 'a*2Ta','ndroid_Android'#010+ 'a*2Tdarwin_Darwin/iOS'#010+ - 'a*2Tl','inux_Linux'#010+ + 'a*2Tlinux_Linux'#010+ 'a*2Twin64_Windows 64'#010+ 'J*2Tandroid_Android'#010+ 'J*2Tjava_Java'#010+ @@ -1812,8 +1813,8 @@ const msgtxt : array[0..000357,1..240] of char=( 'M*2Tlinux_Linux'#010+ 'P*2Taix_AIX'#010+ 'P*2Tamiga_AmigaOS'#010+ - 'P*2Tdarwin_Darwin/Mac OS X'#010+ - 'P*2Tembedded_Embedded',#010+ + 'P*2Tda','rwin_Darwin/Mac OS X'#010+ + 'P*2Tembedded_Embedded'#010+ 'P*2Tlinux_Linux'#010+ 'P*2Tmacosclassic_Classic Mac OS'#010+ 'P*2Tmorphos_MorphOS'#010+ @@ -1824,9 +1825,9 @@ const msgtxt : array[0..000357,1..240] of char=( 'p*2Tembedded_Embedded'#010+ 'p*2Tlinux_Linux'#010+ 'R*2Tlinux_Linux'#010+ - 'R*2Tembedded_Embedded'#010+ + 'R*2Tem','bedded_Embedded'#010+ 'r*2Tlinux_Linux'#010+ - 'r*2Tembedd','ed_Embedded'#010+ + 'r*2Tembedded_Embedded'#010+ 'S*2Tlinux_Linux'#010+ 'S*2Tsolaris_Solaris'#010+ 's*2Tlinux_Linux'#010+ @@ -1836,152 +1837,152 @@ const msgtxt : array[0..000357,1..240] of char=( 'x*2Tlinux_Linux'#010+ 'Z*2Tembedded_Embedded'#010+ 'Z*2Tzxspectrum_ZX Spectrum'#010+ - 'Z*2Tmsxdos_MSX-DOS'#010+ - '**1u_Undefines the symb','ol '#010+ + 'Z*2','Tmsxdos_MSX-DOS'#010+ + '**1u_Undefines the symbol '#010+ '**1U_Unit options:'#010+ '**2Un_Do not check where the unit name matches the file name'#010+ '**2Ur_Generate release unit files (never automatically recompiled)'#010+ '**2Us_Compile a system unit'#010+ - '**1v_Be verbose. is a combination of the following ','letters:'#010+ + '**1v_Be verbo','se. is a combination of the following letters:'#010+ '**2*_e : Show errors (default) 0 : Show nothing (except errors)'#010+ '**2*_w : Show warnings u : Show unit info'#010+ - '**2*_n : Show notes t : Show tried/used files'#010+ - '**2*_h : Show hints c : S','how conditionals'#010+ + '**2*_n : Show notes t : Show tried/used files'#010, + '**2*_h : Show hints c : Show conditionals'#010+ '**2*_i : Show general info d : Show debug info'#010+ '**2*_l : Show linenumbers r : Rhide/GCC compatibility mode'#010+ - '**2*_s : Show time stamps q : Show message numbers'#010+ - '**2*_a : Show everything ',' x : Show info about invoked too'+ - 'ls'#010+ + '**2*_s : Show time stamps q : Show message ','numbers'#010+ + '**2*_a : Show everything x : Show info about invoked tools'+ + #010+ '**2*_b : Write file names messages p : Write tree.log with parse tre'+ 'e'#010+ '**2*_ with full path v : Write fpcdebug.txt with'#010+ - '**2*_z : Write output to stderr lots of debugging info'#010+ - '**','2*_m, : Do not show messages numbered and '#010+ + '**2*_z : Write output to',' stderr lots of debugging info'#010+ + '**2*_m, : Do not show messages numbered and '#010+ 'F*1V_Append '#039'-'#039' to the used compiler binary name (e.g. f'+ 'or version)'#010+ '**1W_Target-specific options (targets)'#010+ - '3*2WA_Specify native type application (Windows)'#010+ - '4*2WA_Specify native',' type application (Windows)'#010+ + '3*2WA_Specify native type ','application (Windows)'#010+ + '4*2WA_Specify native type application (Windows)'#010+ 'A*2WA_Specify native type application (Windows)'#010+ '3*2Wb_Create a bundle instead of a library (Darwin)'#010+ 'P*2Wb_Create a bundle instead of a library (Darwin)'#010+ - 'p*2Wb_Create a bundle instead of a library (Darwin)'#010+ - 'a*2Wb_Cr','eate a bundle instead of a library (Darwin)'#010+ + 'p*2Wb_Create a bun','dle instead of a library (Darwin)'#010+ + 'a*2Wb_Create a bundle instead of a library (Darwin)'#010+ 'A*2Wb_Create a bundle instead of a library (Darwin)'#010+ '4*2Wb_Create a bundle instead of a library (Darwin)'#010+ - '3*2WB_Create a relocatable image (Windows, Symbian)'#010+ - '3*2WB_Set image base to (Windows,',' Symbian)'#010+ + '3*2WB_Create a relocatable image (Windows, Symbian',')'#010+ + '3*2WB_Set image base to (Windows, Symbian)'#010+ '4*2WB_Create a relocatable image (Windows)'#010+ '4*2WB_Set image base to (Windows)'#010+ 'A*2WB_Create a relocatable image (Windows, Symbian)'#010+ 'A*2WB_Set image base to (Windows, Symbian)'#010+ - 'Z*2WB_Set image base to (ZX Spectrum)',#010+ + 'Z*','2WB_Set image base to (ZX Spectrum)'#010+ '3*2WC_Specify console type application (EMX, OS/2, Windows)'#010+ '4*2WC_Specify console type application (Windows)'#010+ 'A*2WC_Specify console type application (Windows)'#010+ - 'P*2WC_Specify console type application (Classic Mac OS)'#010+ - '3*2WD_Use DEFFILE to expo','rt functions of DLL or EXE (Windows)'#010+ + 'P*2WC_Specify console type application ','(Classic Mac OS)'#010+ + '3*2WD_Use DEFFILE to export functions of DLL or EXE (Windows)'#010+ '4*2WD_Use DEFFILE to export functions of DLL or EXE (Windows)'#010+ 'A*2WD_Use DEFFILE to export functions of DLL or EXE (Windows)'#010+ - '3*2We_Use external resources (Darwin)'#010+ + '3*2We_Use external resources (Darwin)',#010+ '4*2We_Use external resources (Darwin)'#010+ - 'a*2','We_Use external resources (Darwin)'#010+ + 'a*2We_Use external resources (Darwin)'#010+ 'A*2We_Use external resources (Darwin)'#010+ 'P*2We_Use external resources (Darwin)'#010+ 'p*2We_Use external resources (Darwin)'#010+ - '3*2WF_Specify full-screen type application (EMX, OS/2)'#010+ - '3*2WG_Specify graphic type applicati','on (EMX, OS/2, Windows)'#010+ + '3*2WF_Specify full-screen type application (EMX, ','OS/2)'#010+ + '3*2WG_Specify graphic type application (EMX, OS/2, Windows)'#010+ '4*2WG_Specify graphic type application (Windows)'#010+ 'A*2WG_Specify graphic type application (Windows)'#010+ 'P*2WG_Specify graphic type application (Classic Mac OS)'#010+ - '3*2Wi_Use internal resources (Darwin)'#010+ - '4*2Wi_Use internal resou','rces (Darwin)'#010+ + '3*2Wi_Use internal r','esources (Darwin)'#010+ + '4*2Wi_Use internal resources (Darwin)'#010+ 'a*2Wi_Use internal resources (Darwin)'#010+ 'A*2Wi_Use internal resources (Darwin)'#010+ 'P*2Wi_Use internal resources (Darwin)'#010+ 'p*2Wi_Use internal resources (Darwin)'#010+ - '3*2WI_Turn on/off the usage of import sections (Windows)'#010+ - '4*2WI_Turn on/off',' the usage of import sections (Windows)'#010+ + '3*2WI_Turn on/off the usage of i','mport sections (Windows)'#010+ + '4*2WI_Turn on/off the usage of import sections (Windows)'#010+ 'A*2WI_Turn on/off the usage of import sections (Windows)'#010+ '8*2Wh_Use huge code for units (ignored for models with CODE in a uniqu'+ 'e segment)'#010+ - '8*2Wm_Set memory model'#010+ + '8*2Wm_Set memory ','model'#010+ '8*3WmTiny_Tiny memory model'#010+ - '8*3WmSma','ll_Small memory model (default)'#010+ + '8*3WmSmall_Small memory model (default)'#010+ '8*3WmMedium_Medium memory model'#010+ '8*3WmCompact_Compact memory model'#010+ '8*3WmLarge_Large memory model'#010+ '8*3WmHuge_Huge memory model'#010+ - '3*2WM_Minimum Mac OS X deployment version: 10.4, 10.5.1, ... (Darwi'+ - 'n)'#010+ - '4*2WM_Mi','nimum Mac OS X deployment version: 10.4, 10.5.1, ... (Dar'+ + '3*2WM_Minimum Mac OS X deployment versi','on: 10.4, 10.5.1, ... (Dar'+ 'win)'#010+ + '4*2WM_Minimum Mac OS X deployment version: 10.4, 10.5.1, ... (Darwi'+ + 'n)'#010+ 'p*2WM_Minimum Mac OS X deployment version: 10.4, 10.5.1, ... (Darwi'+ 'n)'#010+ - 'P*2WM_Minimum Mac OS X deployment version: 10.4, 10.5.1, ... (Darwi'+ - 'n)'#010+ - '3*2WN_Do not generate relocation',' code, needed for debugging (Windows'+ - ')'#010+ + 'P*2WM_Minimum Mac OS X deployment version: 10.4, 10.5.1, ...',' (Dar'+ + 'win)'#010+ + '3*2WN_Do not generate relocation code, needed for debugging (Windows)'#010+ '4*2WN_Do not generate relocation code, needed for debugging (Windows)'#010+ 'A*2WN_Do not generate relocation code, needed for debugging (Windows)'#010+ - 'A*2Wp_Specify the controller type; see fpc -i or fpc -iu fo','r poss'+ + 'A*2Wp_Specify the',' controller type; see fpc -i or fpc -iu for poss'+ 'ible values'#010+ 'm*2Wp_Specify the controller type; see fpc -i or fpc -iu for possib'+ 'le values'#010+ 'R*2Wp_Specify the controller type; see fpc -i or fpc -iu for possib'+ 'le values'#010+ - 'V*2Wp_Specify the controller type; see fpc -i or fpc -iu fo','r poss'+ + 'V*2Wp_Specify the',' controller type; see fpc -i or fpc -iu for poss'+ 'ible values'#010+ 'x*2Wp_Specify the controller type; see fpc -i or fpc -iu for possib'+ 'le values'#010+ '3*2WP_Minimum iOS deployment version: 3.0, 5.0.1, ... (iphonesim)'#010+ - '4*2WP_Minimum iOS deployment version: 8.0, 8.0.2, ... (iphonesim)'#010+ - 'a*2W','P_Minimum iOS deployment version: 7.0, 7.1.2, ... (Darwin)'#010+ + '4*2WP_Minimum iOS deployment',' version: 8.0, 8.0.2, ... (iphonesim)'+ + #010+ + 'a*2WP_Minimum iOS deployment version: 7.0, 7.1.2, ... (Darwin)'#010+ 'A*2WP_Minimum iOS deployment version: 3.0, 5.0.1, ... (Darwin)'#010+ '3*2WR_Generate relocation code (Windows)'#010+ - '4*2WR_Generate relocation code (Windows)'#010+ - 'A*2WR_Generate relocation code',' (Windows)'#010+ + '4*2WR_Generate relocation cod','e (Windows)'#010+ + 'A*2WR_Generate relocation code (Windows)'#010+ '8*2Wt_Set the target executable format'#010+ '8*3Wtexe_Create a DOS .EXE file (default)'#010+ '8*3Wtcom_Create a DOS .COM file (requires tiny memory model)'#010+ - 'P*2WT_Specify MPW tool type application (Classic Mac OS)'#010+ - '**2WX_Enable executable sta','ck (Linux)'#010+ + 'P*2WT_Specify MPW tool type application (C','lassic Mac OS)'#010+ + '**2WX_Enable executable stack (Linux)'#010+ '**1X_Executable options:'#010+ '**2X9_Generate linkerscript for GNU Binutils ld older than version 2.1'+ '9.1 (Linux)'#010+ '**2Xc_Pass --shared/-dynamic to the linker (BeOS, Darwin, FreeBSD, Lin'+ 'ux)'#010+ - '**2Xd_Do not search default library path (someti','mes required for cro'+ + '**2Xd_','Do not search default library path (sometimes required for cro'+ 'ss-compiling when not using -XR)'#010+ '**2Xe_Use external linker'#010+ '**2Xf_Substitute pthread library name for linking (BSD)'#010+ - '**2Xg_Create debuginfo in a separate file and add a debuglink section '+ - 'to executable'#010+ - '**2XD_Try to link uni','ts dynamically (defines FPC_LINK_DYNAMIC)'#010+ + '**2Xg_Create debuginfo in a separate file and add a debuglink s','ectio'+ + 'n to executable'#010+ + '**2XD_Try to link units dynamically (defines FPC_LINK_DYNAMIC)'#010+ '**2Xi_Use internal linker'#010+ 'L*2XlS_LLVM utilties suffix (e.g. -7 in case clang is called clang-'+ '7)'#010+ '**2XLA_Define library substitutions for linking'#010+ - '**2XLO_Define order of library linking'#010+ - '**2XLD_','Exclude default order of standard libraries'#010+ + '**2X','LO_Define order of library linking'#010+ + '**2XLD_Exclude default order of standard libraries'#010+ '**2Xm_Generate link map'#010+ '**2XM_Set the name of the '#039'main'#039' program routine (default i'+ 's '#039'main'#039')'#010+ - '**2Xn_Use target system native linker instead of GNU ld (Solaris, AIX)'+ - #010+ - 'F*2Xp_First search for the',' compiler binary in the directory '#010+ + '**2Xn_Use target system native linker instead of GNU ld (S','olaris, AI'+ + 'X)'#010+ + 'F*2Xp_First search for the compiler binary in the directory '#010+ '**2XP_Prepend the binutils names with the prefix '#010+ '**2Xr_Set the linker'#039's rlink-path to (needed for cross comp'+ - 'ile, see the ld manual for more information) (BeOS, Linux)'#010+ - '**2XR_Prepend ','to all linker search paths (BeOS, Darwin, FreeB'+ - 'SD, Linux, Mac OS, Solaris)'#010+ + 'ile, see the ld manual for more inform','ation) (BeOS, Linux)'#010+ + '**2XR_Prepend to all linker search paths (BeOS, Darwin, FreeBSD'+ + ', Linux, Mac OS, Solaris)'#010+ '**2Xs_Strip all symbols from executable'#010+ '**2XS_Try to link units statically (default, defines FPC_LINK_STATIC)'#010+ - '**2Xt_Link with static libraries (-static is passed to ','linker)'#010+ + '**2Xt_Link wi','th static libraries (-static is passed to linker)'#010+ '**2Xv_Generate table for Virtual Entry calls'#010+ '**2XV_Use VLink as external linker (default on Amiga, MorphOS)'#010+ '**2XX_Try to smartlink units (defines FPC_LINK_SMART)'#010+ '**1*_'#010+ - '**1?_Show this help'#010+ - '**1h_Shows this help witho','ut waiting' + '**1?','_Show this help'#010+ + '**1h_Shows this help without waiting' ); diff --git a/compiler/options.pas b/compiler/options.pas index 41dc48932a..00745d25ca 100644 --- a/compiler/options.pas +++ b/compiler/options.pas @@ -1698,6 +1698,10 @@ begin ParaFrameworkPath.AddPath(More,false) else frameworksearchpath.AddPath(More,true) +{$ifdef XTENSA} + else if (target_info.system=system_xtensa_freertos) then + idfpath:=FixPath(More,true) +{$endif XTENSA} else IllegalPara(opt); 'F' : diff --git a/compiler/systems/t_freertos.pas b/compiler/systems/t_freertos.pas index dee1324cde..25d951f2bb 100644 --- a/compiler/systems/t_freertos.pas +++ b/compiler/systems/t_freertos.pas @@ -46,8 +46,6 @@ implementation function postprocessexecutable(const fn : string;isdll:boolean):boolean; end; - var - IDF_PATH: string; {***************************************************************************** TlinkerEmbedded @@ -73,21 +71,7 @@ const platform_select=''; {$endif} begin - with Info do - begin -{$ifdef xtensa} - if target_info.system=system_xtensa_freertos then - ExeCmd[1]:='ld -g '+platform_select+' $OPT $DYNLINK $STATIC $GCSECTIONS $STRIP $MAP -L. -o $EXE -T $RES '+ - '-u call_user_start_cpu0 -u ld_include_panic_highint_hdl -u esp_app_desc -u vfs_include_syscalls_impl -u pthread_include_pthread_impl -u pthread_include_pthread_cond_impl -u pthread_include_pthread_local_storage_impl -u newlib_include_locks_impl -u newlib_include_heap_impl -u newlib_include_syscalls_impl -u newlib_include_pthread_impl -u app_main -u uxTopUsedPriority '+ - '-L $IDF_PATH/components/esp_rom/esp32/ld '+ - '-T esp32.rom.ld -T esp32.rom.libgcc.ld -T esp32.rom.newlib-data.ld -T esp32.rom.syscalls.ld -T esp32.rom.newlib-funcs.ld '+ - '-L . -T esp32_out.ld -T esp32.project.ld '+ - '-L $IDF_PATH/components/esp32/ld -T esp32.peripherals.ld' - else -{$else} - ExeCmd[1]:='ld -g '+platform_select+' $OPT $DYNLINK $STATIC $GCSECTIONS $STRIP $MAP -L. -o $EXE -T $RES'; -{$endif xtensa} - end; + Info.ExeCmd[1]:='ld -g '+platform_select+' $OPT $DYNLINK $STATIC $GCSECTIONS $STRIP $MAP -L. -o $EXE -T $RES'; end; @@ -961,14 +945,11 @@ var hp: TCmdStrListItem; filepath: TCmdStr; begin - IDF_PATH:=''; -{$ifdef xtensa} - if (target_info.system=system_xtensa_freertos) then - if (current_settings.controllertype = ct_esp32) then - IDF_PATH := 'IDF_PATH' - else - IDF_PATH := 'IDF_PATH8266'; -{$endif xtensa} +{$ifdef XTENSA} + { idfpath can be set by -Ff, else default to environment value of IDF_PATH } + if idfpath='' then + idfpath := trim(GetEnvironmentVariable('IDF_PATH')); +{$endif XTENSA} { for future use } StaticStr:=''; @@ -979,194 +960,250 @@ begin success:=true; Result:=false; - if target_info.system=system_xtensa_freertos then +{$ifdef XTENSA} + { generate a sdkconfig.h if none is provided, + only a few fields are provided to far } + Assign(t,'sdkconfig.h'); + {$push}{$I-} + Rewrite(t); + if ioresult<>0 then + exit; + + if (current_settings.controllertype = ct_esp32) then begin - { generate a sdkconfig.h if none is provided, - only a few fields are provided to far } - if not(Sysutils.FileExists('sdkconfig.h')) then - begin - Assign(t,'sdkconfig.h'); - {$push}{$I-} - Rewrite(t); - if ioresult<>0 then - exit; - writeln(t,'#pragma once'); - writeln(t,'#define CONFIG_APP_BUILD_USE_FLASH_SECTIONS 1'); - writeln(t,'#define CONFIG_BT_RESERVE_DRAM 0x0'); - writeln(t,'#define CONFIG_ESP32_ULP_COPROC_RESERVE_MEM 0'); - writeln(t,'#define CONFIG_ESP32_TRACEMEM_RESERVE_DRAM 0x0'); + writeln(t,'#pragma once'); + writeln(t,'#define CONFIG_APP_BUILD_USE_FLASH_SECTIONS 1'); + writeln(t,'#define CONFIG_BT_RESERVE_DRAM 0x0'); + writeln(t,'#define CONFIG_ESP32_ULP_COPROC_RESERVE_MEM 0'); + writeln(t,'#define CONFIG_ESP32_TRACEMEM_RESERVE_DRAM 0x0'); + end + else + begin + { TODO: APP_OFFSET & APP_SIZE depends on partition table + Default for partition table: Single factory app, no OTA } + writeln(t,'#define APP_OFFSET 0x10000'); + writeln(t,'#define APP_SIZE 0xf0000'); + { Include build version of sdkconfig.h for custom configuration, if available } + S:=idfpath+'/libs/sdkconfig.h'; + if SysUtils.FileExists(S) then + writeln(t,'#include "'+S+'"') + else + { Assume SOC_FULL_ICACHE option not selected (default) } + writeln(t,'#define CONFIG_SOC_IRAM_SIZE 0xC000'); + end; - Close(t); - if ioresult<>0 then - exit; - {$pop} - end; + Close(t); + if ioresult<>0 then + exit; + {$pop} - { generate an sdkconfig if none is provided, - this is a dummy so far } - if not(Sysutils.FileExists('sdkconfig')) then - begin - Assign(t,'sdkconfig'); - {$push}{$I-} - Rewrite(t); - if ioresult<>0 then - exit; - - writeln(t); - - Close(t); - if ioresult<>0 then - exit; - {$pop} - end; - - { generate an Kconfig if none is provided, - this is a dummy so far } - if not(Sysutils.FileExists('Kconfig')) then - begin - Assign(t,'Kconfig'); - {$push}{$I-} - Rewrite(t); - if ioresult<>0 then - exit; - - writeln(t); - - Close(t); - if ioresult<>0 then - exit; - {$pop} - end; - - { generate an Kconfig.projbuild if none is provided, - this is a dummy so far } - if not(Sysutils.FileExists('Kconfig.projbuild')) then - begin - Assign(t,'Kconfig.projbuild'); - {$push}{$I-} - Rewrite(t); - if ioresult<>0 then - exit; - - writeln(t); - - Close(t); - if ioresult<>0 then - exit; - {$pop} - end; - - { generate an kconfigs.in if none is provided, - this is a dummy so far } - if not(Sysutils.FileExists('kconfigs.in')) then - begin - Assign(t,'kconfigs.in'); - {$push}{$I-} - Rewrite(t); - if ioresult<>0 then - exit; - - writeln(t); - - Close(t); - if ioresult<>0 then - exit; - {$pop} - end; - - { generate an kconfigs_projbuild.in if none is provided, - this is a dummy so far } - if not(Sysutils.FileExists('kconfigs_projbuild.in')) then - begin - Assign(t,'kconfigs_projbuild.in'); - {$push}{$I-} - Rewrite(t); - if ioresult<>0 then - exit; - - writeln(t); - - Close(t); - if ioresult<>0 then - exit; - {$pop} - end; - - { generate a config.env if none is provided, - COMPONENT_KCONFIGS and COMPONENT_KCONFIGS_PROJBUILD are dummy fields and might - be needed to be filed properly } - if not(Sysutils.FileExists('config.env')) then - begin - Assign(t,'config.env'); - {$push}{$I-} - Rewrite(t); - if ioresult<>0 then - exit; - - writeln(t,'{'); - writeln(t,' "COMPONENT_KCONFIGS": "Kconfig",'); - writeln(t,' "COMPONENT_KCONFIGS_PROJBUILD": "Kconfig.projbuild",'); - writeln(t,' "IDF_CMAKE": "y",'); - writeln(t,' "IDF_TARGET": "esp32",'); - writeln(t,' "IDF_PATH": "'+GetEnvironmentVariable('IDF_PATH')+'",'); - writeln(t,' "COMPONENT_KCONFIGS_SOURCE_FILE": "kconfigs.in",'); - writeln(t,' "COMPONENT_KCONFIGS_PROJBUILD_SOURCE_FILE": "kconfigs_projbuild.in"'); - writeln(t,'}'); - - Close(t); - if ioresult<>0 then - exit; - {$pop} - end; - - { generate ldgen_libraries } - Assign(t,'ldgen_libraries'); + { generate an sdkconfig if none is provided, + this is a dummy so far } + if not(Sysutils.FileExists('sdkconfig')) then + begin + Assign(t,'sdkconfig'); {$push}{$I-} Rewrite(t); if ioresult<>0 then exit; - hp:=TCmdStrListItem(StaticLibFiles.First); - while assigned(hp) do - begin - FindLibraryFile(hp.Str,target_info.staticClibprefix,target_info.staticClibext,filepath); - writeln(t,filepath); - hp:=TCmdStrListItem(hp.Next); - end; + writeln(t); Close(t); if ioresult<>0 then exit; {$pop} - - binstr:='xtensa-esp32-elf-gcc'; - cmdstr:='-C -P -x c -E -o esp32_out.ld -I . $IDF_PATH/components/esp32/ld/esp32.ld'; - - Replace(binstr,'$IDF_PATH',maybequoted(GetEnvironmentVariable('IDF_PATH'))); - Replace(cmdstr,'$IDF_PATH',maybequoted(GetEnvironmentVariable('IDF_PATH'))); - success:=DoExec(binstr,cmdstr,true,true); - - { generate linker maps for esp32 } - binstr:='$IDF_PATH/tools/ldgen/ldgen.py'; - cmdstr:='--config sdkconfig --fragments $IDF_PATH/components/xtensa/linker.lf $IDF_PATH/components/soc/linker.lf $IDF_PATH/components/esp_event/linker.lf '+ - '$IDF_PATH/components/spi_flash/linker.lf $IDF_PATH/components/esp_wifi/linker.lf $IDF_PATH/components/lwip/linker.lf '+ - '$IDF_PATH/components/heap/linker.lf $IDF_PATH/components/esp_ringbuf/linker.lf $IDF_PATH/components/espcoredump/linker.lf $IDF_PATH/components/esp32/linker.lf '+ - '$IDF_PATH/components/esp32/ld/esp32_fragments.lf $IDF_PATH/components/freertos/linker.lf $IDF_PATH/components/newlib/newlib.lf '+ - '$IDF_PATH/components/esp_gdbstub/linker.lf '+ - '--input $IDF_PATH/components/esp32/ld/esp32.project.ld.in --output ./esp32.project.ld --kconfig $IDF_PATH/Kconfig --env-file config.env '+ - '--libraries-file ldgen_libraries --objdump xtensa-esp32-elf-objdump'; - Replace(binstr,'$IDF_PATH',maybequoted(GetEnvironmentVariable('IDF_PATH'))); - Replace(cmdstr,'$IDF_PATH',maybequoted(GetEnvironmentVariable('IDF_PATH'))); - if success and not(cs_link_nolink in current_settings.globalswitches) then - success:=DoExec(binstr,cmdstr,true,false); end; - if IDF_PATH <> '' then - Replace(Info.ExeCmd[1],'$'+IDF_PATH,maybequoted(GetEnvironmentVariable(IDF_PATH))); + { generate an Kconfig if none is provided, + this is a dummy so far } + if not(Sysutils.FileExists('Kconfig')) then + begin + Assign(t,'Kconfig'); + {$push}{$I-} + Rewrite(t); + if ioresult<>0 then + exit; + + writeln(t); + + Close(t); + if ioresult<>0 then + exit; + {$pop} + end; + + { generate an Kconfig.projbuild if none is provided, + this is a dummy so far } + if not(Sysutils.FileExists('Kconfig.projbuild')) then + begin + Assign(t,'Kconfig.projbuild'); + {$push}{$I-} + Rewrite(t); + if ioresult<>0 then + exit; + + writeln(t); + + Close(t); + if ioresult<>0 then + exit; + {$pop} + end; + + { generate an kconfigs.in if none is provided, + this is a dummy so far } + if not(Sysutils.FileExists('kconfigs.in')) then + begin + Assign(t,'kconfigs.in'); + {$push}{$I-} + Rewrite(t); + if ioresult<>0 then + exit; + + writeln(t); + + Close(t); + if ioresult<>0 then + exit; + {$pop} + end; + + { generate an kconfigs_projbuild.in if none is provided, + this is a dummy so far } + if not(Sysutils.FileExists('kconfigs_projbuild.in')) then + begin + Assign(t,'kconfigs_projbuild.in'); + {$push}{$I-} + Rewrite(t); + if ioresult<>0 then + exit; + + writeln(t); + + Close(t); + if ioresult<>0 then + exit; + {$pop} + end; + + { generate a config.env if none is provided, + COMPONENT_KCONFIGS and COMPONENT_KCONFIGS_PROJBUILD are dummy fields and might + be needed to be filed properly } + Assign(t,'config.env'); + {$push}{$I-} + Rewrite(t); + if ioresult<>0 then + exit; + + writeln(t,'{'); + if (current_settings.controllertype = ct_esp32) then + begin + writeln(t,' "COMPONENT_KCONFIGS": "Kconfig",'); + writeln(t,' "COMPONENT_KCONFIGS_PROJBUILD": "Kconfig.projbuild",'); + writeln(t,' "IDF_CMAKE": "y",'); + writeln(t,' "IDF_TARGET": "esp32",'); + writeln(t,' "IDF_PATH": "'+idfpath+'",'); + writeln(t,' "COMPONENT_KCONFIGS_SOURCE_FILE": "kconfigs.in",'); + writeln(t,' "COMPONENT_KCONFIGS_PROJBUILD_SOURCE_FILE": "kconfigs_projbuild.in"'); + end + else + begin + writeln(t,' "IDF_PATH": "'+idfpath+'",'); + writeln(t,' "IDF_TARGET": "esp8266",'); + writeln(t,' "IDF_CMAKE": "n"'); + end; + writeln(t,'}'); + + Close(t); + if ioresult<>0 then + exit; + {$pop} + + { generate ldgen_libraries } + Assign(t,'ldgen_libraries'); + {$push}{$I-} + Rewrite(t); + if ioresult<>0 then + exit; + + hp:=TCmdStrListItem(StaticLibFiles.First); + while assigned(hp) do + begin + FindLibraryFile(hp.Str,target_info.staticClibprefix,target_info.staticClibext,filepath); + writeln(t,filepath); + hp:=TCmdStrListItem(hp.Next); + end; + + Close(t); + if ioresult<>0 then + exit; + {$pop} + + binstr:='gcc'; + if (current_settings.controllertype = ct_esp32) then + cmdstr:='-C -P -x c -E -o esp32_out.ld -I . $IDF_PATH/components/esp32/ld/esp32.ld' + else + cmdstr:='-C -P -x c -E -o esp8266_out.ld -I . $IDF_PATH/components/esp8266/ld/esp8266.ld'; + Replace(cmdstr,'$IDF_PATH',idfpath); + success:=DoExec(FindUtil(utilsprefix+binstr),cmdstr,true,true); + + { generate linker maps } + binstr:='$IDF_PATH/tools/ldgen/ldgen.py'; + if (current_settings.controllertype = ct_esp32) then + cmdstr:='--config sdkconfig '+ + '--fragments $IDF_PATH/components/xtensa/linker.lf $IDF_PATH/components/soc/linker.lf $IDF_PATH/components/esp_event/linker.lf '+ + '$IDF_PATH/components/spi_flash/linker.lf $IDF_PATH/components/esp_wifi/linker.lf $IDF_PATH/components/lwip/linker.lf '+ + '$IDF_PATH/components/heap/linker.lf $IDF_PATH/components/esp_ringbuf/linker.lf $IDF_PATH/components/espcoredump/linker.lf $IDF_PATH/components/esp32/linker.lf '+ + '$IDF_PATH/components/esp32/ld/esp32_fragments.lf $IDF_PATH/components/freertos/linker.lf $IDF_PATH/components/newlib/newlib.lf '+ + '$IDF_PATH/components/esp_gdbstub/linker.lf '+ + '--input $IDF_PATH/components/esp32/ld/esp32.project.ld.in '+ + '--output ./esp32.project.ld '+ + '--kconfig $IDF_PATH/Kconfig '+ + '--env-file config.env '+ + '--libraries-file ldgen_libraries '+ + '--objdump xtensa-esp32-elf-objdump' + else + cmdstr:='--config sdkconfig '+ + '--fragments $IDF_PATH/components/esp8266/ld/esp8266_fragments.lf '+ + '$IDF_PATH/components/esp8266/ld/esp8266_bss_fragments.lf $IDF_PATH/components/esp8266/linker.lf '+ + '$IDF_PATH/components/freertos/linker.lf $IDF_PATH/components/log/linker.lf '+ + '$IDF_PATH/components/lwip/linker.lf $IDF_PATH/components/spi_flash/linker.lf '+ + '--env "COMPONENT_KCONFIGS_PROJBUILD= $IDF_PATH/components/bootloader/Kconfig.projbuild '+ + '$IDF_PATH/components/esptool_py/Kconfig.projbuild $IDF_PATH/components/partition_table/Kconfig.projbuild"'+ + '--env "COMPONENT_KCONFIGS=$IDF_PATH/components/app_update/Kconfig '+ + '$IDF_PATH/components/esp8266/Kconfig $IDF_PATH/components/freertos/Kconfig '+ + '$IDF_PATH/components/log/Kconfig $IDF_PATH/components/lwip/Kconfig" '+ + '--input $IDF_PATH/components/esp8266/ld/esp8266.project.ld.in '+ + '--output ./esp8266.project.ld '+ + '--kconfig $IDF_PATH/Kconfig '+ + '--env-file config.env '+ + '--libraries-file ldgen_libraries '+ + '--objdump xtensa-lx106-elf-objdump'; + + Replace(binstr,'$IDF_PATH',idfpath); + Replace(cmdstr,'$IDF_PATH',idfpath); + if success and not(cs_link_nolink in current_settings.globalswitches) then + success:=DoExec(binstr,cmdstr,true,false); + + if (current_settings.controllertype = ct_esp32) then + Info.ExeCmd[1] := Info.ExeCmd[1]+' -u call_user_start_cpu0 -u ld_include_panic_highint_hdl -u esp_app_desc -u vfs_include_syscalls_impl -u pthread_include_pthread_impl -u pthread_include_pthread_cond_impl -u pthread_include_pthread_local_storage_impl -u newlib_include_locks_impl '+ + '-u newlib_include_heap_impl -u newlib_include_syscalls_impl -u newlib_include_pthread_impl -u app_main -u uxTopUsedPriority '+ + '-L $IDF_PATH/components/esp_rom/esp32/ld '+ + '-T esp32.rom.ld -T esp32.rom.libgcc.ld -T esp32.rom.newlib-data.ld -T esp32.rom.syscalls.ld -T esp32.rom.newlib-funcs.ld '+ + '-L . -T esp32_out.ld -T esp32.project.ld '+ + '-L $IDF_PATH/components/esp32/ld -T esp32.peripherals.ld' + else + Info.ExeCmd[1] := Info.ExeCmd[1]+' -u call_user_start -u g_esp_sys_info -u _printf_float -u _scanf_float '+ + '-L $IDF_PATH/components/esp8266/ld -T esp8266.peripherals.ld -T esp8266.rom.ld '+ { SDK scripts } + '-L . -T esp8266_out.ld -T esp8266.project.ld'; { Project scripts } + + Replace(Info.ExeCmd[1],'$IDF_PATH',idfpath); +{$endif XTENSA} + FixedExeFileName:=maybequoted(ScriptFixFileName(ChangeFileExt(current_module.exefilename,'.elf'))); GCSectionsStr:='--gc-sections'; - //if not(cs_link_extern in current_settings.globalswitches) then if not(cs_link_nolink in current_settings.globalswitches) then Message1(exec_i_linking,current_module.exefilename); @@ -1179,8 +1216,6 @@ begin { Call linker } SplitBinCmd(Info.ExeCmd[1],binstr,cmdstr); Replace(cmdstr,'$OPT',Info.ExtraOptions); - if target_info.system=system_xtensa_freertos then - Replace(cmdstr,'$'+IDF_PATH,maybequoted(GetEnvironmentVariable(IDF_PATH))); if not(cs_link_on_target in current_settings.globalswitches) then begin Replace(cmdstr,'$EXE',FixedExeFileName); @@ -1212,32 +1247,31 @@ begin if success and not(cs_link_nolink in current_settings.globalswitches) then success:=PostProcessExecutable(FixedExeFileName,false); -{$ifdef xtensa} - if success and (target_info.system=system_xtensa_freertos) then - if (current_settings.controllertype = ct_esp32) then - begin - binstr:='$'+IDF_PATH+'/components/esptool_py/esptool/esptool.py'; - Replace(binstr,'$'+IDF_PATH,maybequoted(GetEnvironmentVariable(IDF_PATH))); - success:=DoExec(binstr,'--chip esp32 elf2image --flash_mode dio --flash_freq 40m '+ - '--flash_size '+tostr(embedded_controllers[current_settings.controllertype].flashsize div (1024*1024))+'MB '+ - '--elf-sha256-offset 0xb0 '+ - '-o '+maybequoted(ScriptFixFileName(ChangeFileExt(current_module.exefilename,'.bin')))+' '+ - FixedExeFileName, - true,false); - end - else if (current_settings.controllertype = ct_esp8266) then - begin - binstr:='$'+IDF_PATH+'/components/esptool_py/esptool/esptool.py'; - Replace(binstr,'$'+IDF_PATH,maybequoted(GetEnvironmentVariable(IDF_PATH))); - success:=DoExec(binstr,'--chip esp8266 elf2image --flash_mode dout --flash_freq 40m '+ - '--flash_size '+tostr(embedded_controllers[current_settings.controllertype].flashsize div (1024*1024))+'MB '+ - '--version=3 '+ - '-o '+maybequoted(ScriptFixFileName(ChangeFileExt(current_module.exefilename,'.bin')))+' '+ - FixedExeFileName, - true,false); - end +{$ifdef XTENSA} + if success then + begin + binstr:=idfpath+'/components/esptool_py/esptool/esptool.py'; + if (current_settings.controllertype = ct_esp32) then + begin + success:=DoExec(binstr,'--chip esp32 elf2image --flash_mode dio --flash_freq 40m '+ + '--flash_size '+tostr(embedded_controllers[current_settings.controllertype].flashsize div (1024*1024))+'MB '+ + '--elf-sha256-offset 0xb0 '+ + '-o '+maybequoted(ScriptFixFileName(ChangeFileExt(current_module.exefilename,'.bin')))+' '+ + FixedExeFileName, + true,false); + end + else if (current_settings.controllertype = ct_esp8266) then + begin + success:=DoExec(binstr,'--chip esp8266 elf2image --flash_mode dout --flash_freq 40m '+ + '--flash_size '+tostr(embedded_controllers[current_settings.controllertype].flashsize div (1024*1024))+'MB '+ + '--version=3 '+ + '-o '+maybequoted(ScriptFixFileName(ChangeFileExt(current_module.exefilename,'.bin')))+' '+ + FixedExeFileName, + true,false); + end + end else -{$endif xtensa} +{$endif XTENSA} if success then success:=DoExec(FindUtil(utilsprefix+'objcopy'),'-O binary '+ FixedExeFileName+' '+ From 0881e4fd9827791a508b5ad985e6f8def25f496a Mon Sep 17 00:00:00 2001 From: florian Date: Thu, 20 Aug 2020 21:29:49 +0000 Subject: [PATCH 25/25] * insert literals after the section start which belongs to the current procedure git-svn-id: trunk@46528 - --- compiler/xtensa/hlcgcpu.pas | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/compiler/xtensa/hlcgcpu.pas b/compiler/xtensa/hlcgcpu.pas index abb628b573..bfea43c0e3 100644 --- a/compiler/xtensa/hlcgcpu.pas +++ b/compiler/xtensa/hlcgcpu.pas @@ -115,16 +115,12 @@ implementation var alt : TAsmListType; begin - if not(po_assembler in pd.procoptions) then - alt:=al_procedures - else - alt:=al_pure_assembler; { Xtensa needs the data before the subroutine } if assigned(data) and (not data.empty) then begin - data.Insert(tai_align.Create(4)); - current_asmdata.asmlists[alt].concatlist(data); + data.Concat(tai_align.Create(4)); + code.insertlist(data); end; inherited record_generated_code_for_procdef(pd,code,nil); end;