Redesign z80 build so that mkhpbase.sh bash script is not needed; remove support for older SDCC toolchains; Re-verify z80 build on Linux

git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@5416 42af7a65-404d-4744-a932-0658087f49c3
This commit is contained in:
patacongo 2012-12-07 19:02:57 +00:00
parent 3765d51eba
commit a7c72cc182
11 changed files with 35 additions and 247 deletions

View File

@ -97,6 +97,8 @@ selected with:
CONFIG_Z80_TOOLCHAIN_SDCCL=y : SDCC for Linux, MAC OSX or Cygwin (see below)
CONFIG_Z80_TOOLCHAIN_SDCCW=y : SDCC for Win32
SDCC versions 3.2.0 or higher are recommended.
Building the SDCC toolchain
^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -128,62 +130,3 @@ and install SDCC:
sudo make install
SDCC Update
^^^^^^^^^^^
I have had some problems building sdcc-2.6.0 on my current UBUNTU
release (9.10). I had other problems building sdcc-2.9.0 on UBUNTU 9.10.
I suspect that the newer gcc toolchains are causing problems for these
older SDCC releases.
A 20091106 snapshot did build with no major problems on UBUNTU 9.10, but
has some compatibilty problems with the older SDCC compiler. For one, you
will need to change the Z80 assember name and options in the Make.defs
files as follows:
-AS = as-z80
+AS = sdasz80
- @$(AS) $(ASFLAGS) $2 $1
+ $(AS) $(ASFLAGS) $1
For another, I had other problems building with that 20091106 that look
like compiler bugs. If you are using UBUNTU 9.10, you may have to either
(1) downgrade your GCC compiler to a version 3.x compiler and use one of
the older stable releases, or (2) wait for the next stable SDCC release
after 2.9.0.
See below: If you wish to continue using the older SDCC toolchain, you
must now also add CONFIG_SDCC_OLD=y to your configuration file.
Newer SDCC Versions
^^^^^^^^^^^^^^^^^^^
This is the text of bug 3468951 reported on the SourceForge website:
"Some obsolete stuff in z80sim port," (submitted by Philipp Klaus Krause):
The simz80 port needs a few updates to work well with current sdcc versions,
and has some unecessary stuff:
* The linker name for Make.defs should be sdldz80
* The assembler name for Make.defs should be sdasz80
* _asm and _endasm in z80_io.c and z80_irq.c should be replaced by __asm
and __endasm
* The --stack-auto --int-long-reent --float-reent options or Make.defs should
be removed, as they have no effect on sdcc's z80 port
* The current assembler AFAIK can handle long symbol names, so the
sdcc-2.6.0-asz80-symlen.patch is unnecessary, and it and the corresponding
section from the README can be removed.
These changes *have* been incorporated but only partially verified. In order
to get a successful compilation, I had to copy stdarg.h out of the SDCC source
(at sdcc/device/include/stdarg.h) to include/nuttx/stdarg.h.
There are also some library related issues when you get to the final build
that I have not looked into yet.
If you want to back out these change and continue to use the older toolchain
in your build, simpy define the following in your configuration file:
CONFIG_SDCC_OLD=y

View File

@ -58,18 +58,10 @@ endif
CROSSDEV =
CC = sdcc
CPP = sdcpp
ifeq ($(CONFIG_SDCC_OLD),y)
LD = link-z80
AS = as-z80
AR = sdcclib -a
ARCHCPUFLAGS = -mz80 --stack-auto --int-long-reent --float-reent
else
LD = sdldz80
AS = sdasz80
AR = sdar -r
ARCHCPUFLAGS = -mz80
endif
LD = sdldz80
AS = sdasz80
AR = sdar -r
ARCHCPUFLAGS = -mz80
ifeq ($(CONFIG_DEBUG_SYMBOLS),y)
ARCHOPTIMIZATION = --debug
@ -84,7 +76,7 @@ ARCHINCLUDES = -I. -I$(TOPDIR)$(DELIM)include
CFLAGS = $(ARCHWARNINGS) $(ARCHOPTIMIZATION) $(ARCHCPUFLAGS) $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRADEFINES)
CPPFLAGS = $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRADEFINES)
AFLAGS = -x -a -l -o -s
AFLAGS = -x -a -l -o -s -g
SDCCLIB = z80.lib

View File

@ -58,18 +58,10 @@ endif
CROSSDEV =
CC = sdcc
CPP = sdcpp
ifeq ($(CONFIG_SDCC_OLD),y)
LD = link-z80
AS = as-z80
AR = sdcclib -a
ARCHCPUFLAGS = -mz80 --stack-auto --int-long-reent --float-reent
else
LD = sdldz80
AS = sdasz80
AR = sdar -r
ARCHCPUFLAGS = -mz80
endif
LD = sdldz80
AS = sdasz80
AR = sdar -r
ARCHCPUFLAGS = -mz80
ifeq ($(CONFIG_DEBUG_SYMBOLS),y)
ARCHOPTIMIZATION = --debug
@ -84,7 +76,7 @@ ARCHINCLUDES = -I. -I$(TOPDIR)$(DELIM)include
CFLAGS = $(ARCHWARNINGS) $(ARCHOPTIMIZATION) $(ARCHCPUFLAGS) $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRADEFINES)
CPPFLAGS = $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRADEFINES)
AFLAGS = -x -a -l -o -s
AFLAGS = -x -a -l -o -s -g
SDCCLIB = z80.lib

View File

@ -58,18 +58,10 @@ endif
CROSSDEV =
CC = sdcc
CPP = sdcpp
ifeq ($(CONFIG_SDCC_OLD),y)
LD = link-z80
AS = as-z80
AR = sdcclib -a
ARCHCPUFLAGS = -mz80 --stack-auto --int-long-reent --float-reent
else
LD = sdldz80
AS = sdasz80
AR = sdar -r
ARCHCPUFLAGS = -mz80
endif
LD = sdldz80
AS = sdasz80
AR = sdar -r
ARCHCPUFLAGS = -mz80
ifeq ($(CONFIG_DEBUG_SYMBOLS),y)
ARCHOPTIMIZATION = --debug
@ -84,7 +76,7 @@ ARCHINCLUDES = -I. -I$(TOPDIR)$(DELIM)include
CFLAGS = $(ARCHWARNINGS) $(ARCHOPTIMIZATION) $(ARCHCPUFLAGS) $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRADEFINES)
CPPFLAGS = $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRADEFINES)
AFLAGS = -x -a -l -o -s
AFLAGS = -x -a -l -o -s -g
SDCCLIB = z80.lib

View File

@ -1,11 +0,0 @@
--- sdcc/as/z80/asm.h 2007-12-30 16:49:53.000000000 -0600
+++ sdcc.orig/as/z80/asm.h 2007-12-30 16:49:14.000000000 -0600
@@ -65,7 +65,7 @@
#define RTTERM ')' /* Right expression delimeter */
#ifdef SDK
-#define NCPS 80 /* characters per symbol */
+#define NCPS 32 /* characters per symbol */
#else /* SDK */
#define NCPS 8 /* Chars. per symbol */
#endif /* SDK */

View File

@ -42,10 +42,7 @@ Configuring NuttX
reconfiguration process.
2. The default setup for this configuration uses a windows native build.
As of this writing, the native Windows build still does not work. This
is due to issues in arch/z80/src/Makefile and in the Bash script
arch/z80/src/mkhpbase.sh which, of course, cannot be used in a Windows
CMD.exe shell. These configuration is broken for the time being.
As of this writing, the native Windows build still does not work.
This configuration was last verified sucessfully prior to the
the configure to Kconfig/mconf tool using SDCC 2.6.0 built to run
@ -104,6 +101,8 @@ selected with:
CONFIG_Z80_TOOLCHAIN_SDCCL=y : SDCC for Linux, MAC OSX or Cygwin (see below)
CONFIG_Z80_TOOLCHAIN_SDCCW=y : SDCC for Win32
SDCC versions 3.2.0 or higher are recommended.
Building the SDCC toolchain
^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -120,12 +119,6 @@ compatible with this build. First start with the usual steps
cd sdcc
./configure
But before making, we need to apply a patch to the SDCC 2.6.0 source
so that the z80 assembler can handle long symbol names
Apply sdcc-2.6.0-asz80-symlen.patch
cd sdcc/device/lib
Then make the SDCC binaries
cd sdcc
@ -135,62 +128,3 @@ and install SDCC:
sudo make install
SDCC Update
^^^^^^^^^^^
I have had some problems building sdcc-2.6.0 on my current UBUNTU
release (9.10). I had other problems building sdcc-2.9.0 on UBUNTU 9.10.
I suspect that the newer gcc toolchains are causing problems for these
older SDCC releases.
A 20091106 snapshot did build with no major problems on UBUNTU 9.10, but
has some compatibilty problems with the older SDCC compiler. For one, you
will need to change the Z80 assember name and options in the Make.defs
files as follows:
-AS = as-z80
+AS = sdasz80
- @$(AS) $(ASFLAGS) $2 $1
+ $(AS) $(ASFLAGS) $1
For another, I had other problems building with that 20091106 that look
like compiler bugs. If you are using UBUNTU 9.10, you may have to either
(1) downgrade your GCC compiler to a version 3.x compiler and use one of
the older stable releases, or (2) wait for the next stable SDCC release
after 2.9.0.
See below: If you wish to continue using the older SDCC toolchain, you
must now also add CONFIG_SDCC_OLD=y to your configuration file.
Newer SDCC Versions
^^^^^^^^^^^^^^^^^^^
This is the text of bug 3468951 reported on the SourceForge website:
"Some obsolete stuff in z80sim port," (submitted by Philipp Klaus Krause):
The simz80 port needs a few updates to work well with current sdcc versions,
and has some unecessary stuff:
* The linker name for Make.defs should be sdldz80
* The assembler name for Make.defs should be sdasz80
* _asm and _endasm in z80_io.c and z80_irq.c should be replaced by __asm
and __endasm
* The --stack-auto --int-long-reent --float-reent options or Make.defs should
be removed, as they have no effect on sdcc's z80 port
* The current assembler AFAIK can handle long symbol names, so the
sdcc-2.6.0-asz80-symlen.patch is unnecessary, and it and the corresponding
section from the README can be removed.
These changes *have* been incorporated but only partially verified. In order
to get a successful compilation, I had to copy stdarg.h out of the SDCC source
(at sdcc/device/include/stdarg.h) to include/nuttx/stdarg.h.
There are also some library related issues when you get to the final build
that I have not looked into yet.
If you want to back out these change and continue to use the older toolchain
in your build, simpy define the following in your configuration file:
CONFIG_SDCC_OLD=y

View File

@ -58,18 +58,10 @@ endif
CROSSDEV =
CC = sdcc
CPP = sdcpp
ifeq ($(CONFIG_SDCC_OLD),y)
LD = link-z80
AS = as-z80
AR = sdcclib -a
ARCHCPUFLAGS = -mz80 --stack-auto --int-long-reent --float-reent
else
LD = sdldz80
AS = sdasz80
AR = sdar -r
ARCHCPUFLAGS = -mz80
endif
LD = sdldz80
AS = sdasz80
AR = sdar -r
ARCHCPUFLAGS = -mz80
ifeq ($(CONFIG_DEBUG_SYMBOLS),y)
ARCHOPTIMIZATION = --debug
@ -84,7 +76,7 @@ ARCHINCLUDES = -I. -I$(TOPDIR)$(DELIM)include
CFLAGS = $(ARCHWARNINGS) $(ARCHOPTIMIZATION) $(ARCHCPUFLAGS) $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRADEFINES)
CPPFLAGS = $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRADEFINES)
AFLAGS = -x -a -l -o -s
AFLAGS = -x -a -l -o -s -g
SDCCLIB = z80.lib

View File

@ -58,18 +58,10 @@ endif
CROSSDEV =
CC = sdcc
CPP = sdcpp
ifeq ($(CONFIG_SDCC_OLD),y)
LD = link-z80
AS = as-z80
AR = sdcclib -a
ARCHCPUFLAGS = -mz80 --stack-auto --int-long-reent --float-reent
else
LD = sdldz80
AS = sdasz80
AR = sdar -r
ARCHCPUFLAGS = -mz80
endif
LD = sdldz80
AS = sdasz80
AR = sdar -r
ARCHCPUFLAGS = -mz80
ifeq ($(CONFIG_DEBUG_SYMBOLS),y)
ARCHOPTIMIZATION = --debug
@ -84,7 +76,7 @@ ARCHINCLUDES = -I. -I$(TOPDIR)$(DELIM)include
CFLAGS = $(ARCHWARNINGS) $(ARCHOPTIMIZATION) $(ARCHCPUFLAGS) $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRADEFINES)
CPPFLAGS = $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRADEFINES)
AFLAGS = -x -a -l -o -s
AFLAGS = -x -a -l -o -s -g
SDCCLIB = z80.lib

View File

@ -58,18 +58,10 @@ endif
CROSSDEV =
CC = sdcc
CPP = sdcpp
ifeq ($(CONFIG_SDCC_OLD),y)
LD = link-z80
AS = as-z80
AR = sdcclib -a
ARCHCPUFLAGS = -mz80 --stack-auto --int-long-reent --float-reent
else
LD = sdldz80
AS = sdasz80
AR = sdar -r
ARCHCPUFLAGS = -mz80
endif
LD = sdldz80
AS = sdasz80
AR = sdar -r
ARCHCPUFLAGS = -mz80
ifeq ($(CONFIG_DEBUG_SYMBOLS),y)
ARCHOPTIMIZATION = --debug
@ -84,7 +76,7 @@ ARCHINCLUDES = -I. -I$(TOPDIR)$(DELIM)include
CFLAGS = $(ARCHWARNINGS) $(ARCHOPTIMIZATION) $(ARCHCPUFLAGS) $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRADEFINES)
CPPFLAGS = $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRADEFINES)
AFLAGS = -x -a -l -o -s
AFLAGS = -x -a -l -o -s -g
SDCCLIB = z80.lib

View File

@ -1,11 +0,0 @@
--- sdcc/as/z80/asm.h 2007-12-30 16:49:53.000000000 -0600
+++ sdcc.orig/as/z80/asm.h 2007-12-30 16:49:14.000000000 -0600
@@ -65,7 +65,7 @@
#define RTTERM ')' /* Right expression delimeter */
#ifdef SDK
-#define NCPS 80 /* characters per symbol */
+#define NCPS 32 /* characters per symbol */
#else /* SDK */
#define NCPS 8 /* Chars. per symbol */
#endif /* SDK */

View File

@ -76,15 +76,6 @@
void z80_lowputc(char ch) __naked
{
#ifdef CONFIG_SDCC_OLD
_asm
ld hl, #2
add hl, sp
ld a, (hl)
out (0xbe), a
ret
_endasm;
#else
__asm__ (
"\tld hl, #2\n"
"\tadd hl, sp\n"
@ -92,7 +83,6 @@ void z80_lowputc(char ch) __naked
"\tout (0xbe), a\n"
"\tret\n"
);
#endif
}
/********************************************************************************
@ -104,19 +94,10 @@ void z80_lowputc(char ch) __naked
char z80_lowgetc(void) __naked
{
#ifdef CONFIG_SDCC_OLD
_asm
in a, (0xbe)
ld l, a
ld h, #0
ret
_endasm;
#else
__asm__ (
"\tin a, (0xbe)\n"
"\tld l, a\n"
"\tld h, #0\n"
"\tret\n"
);
#endif
}