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_SDCCL=y : SDCC for Linux, MAC OSX or Cygwin (see below)
CONFIG_Z80_TOOLCHAIN_SDCCW=y : SDCC for Win32 CONFIG_Z80_TOOLCHAIN_SDCCW=y : SDCC for Win32
SDCC versions 3.2.0 or higher are recommended.
Building the SDCC toolchain Building the SDCC toolchain
^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -128,62 +130,3 @@ and install SDCC:
sudo make install 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 = CROSSDEV =
CC = sdcc CC = sdcc
CPP = sdcpp CPP = sdcpp
LD = sdldz80
ifeq ($(CONFIG_SDCC_OLD),y) AS = sdasz80
LD = link-z80 AR = sdar -r
AS = as-z80 ARCHCPUFLAGS = -mz80
AR = sdcclib -a
ARCHCPUFLAGS = -mz80 --stack-auto --int-long-reent --float-reent
else
LD = sdldz80
AS = sdasz80
AR = sdar -r
ARCHCPUFLAGS = -mz80
endif
ifeq ($(CONFIG_DEBUG_SYMBOLS),y) ifeq ($(CONFIG_DEBUG_SYMBOLS),y)
ARCHOPTIMIZATION = --debug ARCHOPTIMIZATION = --debug
@ -84,7 +76,7 @@ ARCHINCLUDES = -I. -I$(TOPDIR)$(DELIM)include
CFLAGS = $(ARCHWARNINGS) $(ARCHOPTIMIZATION) $(ARCHCPUFLAGS) $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRADEFINES) CFLAGS = $(ARCHWARNINGS) $(ARCHOPTIMIZATION) $(ARCHCPUFLAGS) $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRADEFINES)
CPPFLAGS = $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRADEFINES) CPPFLAGS = $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRADEFINES)
AFLAGS = -x -a -l -o -s AFLAGS = -x -a -l -o -s -g
SDCCLIB = z80.lib SDCCLIB = z80.lib

View File

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

View File

@ -58,18 +58,10 @@ endif
CROSSDEV = CROSSDEV =
CC = sdcc CC = sdcc
CPP = sdcpp CPP = sdcpp
LD = sdldz80
ifeq ($(CONFIG_SDCC_OLD),y) AS = sdasz80
LD = link-z80 AR = sdar -r
AS = as-z80 ARCHCPUFLAGS = -mz80
AR = sdcclib -a
ARCHCPUFLAGS = -mz80 --stack-auto --int-long-reent --float-reent
else
LD = sdldz80
AS = sdasz80
AR = sdar -r
ARCHCPUFLAGS = -mz80
endif
ifeq ($(CONFIG_DEBUG_SYMBOLS),y) ifeq ($(CONFIG_DEBUG_SYMBOLS),y)
ARCHOPTIMIZATION = --debug ARCHOPTIMIZATION = --debug
@ -84,7 +76,7 @@ ARCHINCLUDES = -I. -I$(TOPDIR)$(DELIM)include
CFLAGS = $(ARCHWARNINGS) $(ARCHOPTIMIZATION) $(ARCHCPUFLAGS) $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRADEFINES) CFLAGS = $(ARCHWARNINGS) $(ARCHOPTIMIZATION) $(ARCHCPUFLAGS) $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRADEFINES)
CPPFLAGS = $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRADEFINES) CPPFLAGS = $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRADEFINES)
AFLAGS = -x -a -l -o -s AFLAGS = -x -a -l -o -s -g
SDCCLIB = z80.lib 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. reconfiguration process.
2. The default setup for this configuration uses a windows native build. 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 As of this writing, the native Windows build still does not work.
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.
This configuration was last verified sucessfully prior to the This configuration was last verified sucessfully prior to the
the configure to Kconfig/mconf tool using SDCC 2.6.0 built to run 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_SDCCL=y : SDCC for Linux, MAC OSX or Cygwin (see below)
CONFIG_Z80_TOOLCHAIN_SDCCW=y : SDCC for Win32 CONFIG_Z80_TOOLCHAIN_SDCCW=y : SDCC for Win32
SDCC versions 3.2.0 or higher are recommended.
Building the SDCC toolchain Building the SDCC toolchain
^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -120,12 +119,6 @@ compatible with this build. First start with the usual steps
cd sdcc cd sdcc
./configure ./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 Then make the SDCC binaries
cd sdcc cd sdcc
@ -135,62 +128,3 @@ and install SDCC:
sudo make install 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 = CROSSDEV =
CC = sdcc CC = sdcc
CPP = sdcpp CPP = sdcpp
LD = sdldz80
ifeq ($(CONFIG_SDCC_OLD),y) AS = sdasz80
LD = link-z80 AR = sdar -r
AS = as-z80 ARCHCPUFLAGS = -mz80
AR = sdcclib -a
ARCHCPUFLAGS = -mz80 --stack-auto --int-long-reent --float-reent
else
LD = sdldz80
AS = sdasz80
AR = sdar -r
ARCHCPUFLAGS = -mz80
endif
ifeq ($(CONFIG_DEBUG_SYMBOLS),y) ifeq ($(CONFIG_DEBUG_SYMBOLS),y)
ARCHOPTIMIZATION = --debug ARCHOPTIMIZATION = --debug
@ -84,7 +76,7 @@ ARCHINCLUDES = -I. -I$(TOPDIR)$(DELIM)include
CFLAGS = $(ARCHWARNINGS) $(ARCHOPTIMIZATION) $(ARCHCPUFLAGS) $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRADEFINES) CFLAGS = $(ARCHWARNINGS) $(ARCHOPTIMIZATION) $(ARCHCPUFLAGS) $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRADEFINES)
CPPFLAGS = $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRADEFINES) CPPFLAGS = $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRADEFINES)
AFLAGS = -x -a -l -o -s AFLAGS = -x -a -l -o -s -g
SDCCLIB = z80.lib SDCCLIB = z80.lib

View File

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

View File

@ -58,18 +58,10 @@ endif
CROSSDEV = CROSSDEV =
CC = sdcc CC = sdcc
CPP = sdcpp CPP = sdcpp
LD = sdldz80
ifeq ($(CONFIG_SDCC_OLD),y) AS = sdasz80
LD = link-z80 AR = sdar -r
AS = as-z80 ARCHCPUFLAGS = -mz80
AR = sdcclib -a
ARCHCPUFLAGS = -mz80 --stack-auto --int-long-reent --float-reent
else
LD = sdldz80
AS = sdasz80
AR = sdar -r
ARCHCPUFLAGS = -mz80
endif
ifeq ($(CONFIG_DEBUG_SYMBOLS),y) ifeq ($(CONFIG_DEBUG_SYMBOLS),y)
ARCHOPTIMIZATION = --debug ARCHOPTIMIZATION = --debug
@ -84,7 +76,7 @@ ARCHINCLUDES = -I. -I$(TOPDIR)$(DELIM)include
CFLAGS = $(ARCHWARNINGS) $(ARCHOPTIMIZATION) $(ARCHCPUFLAGS) $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRADEFINES) CFLAGS = $(ARCHWARNINGS) $(ARCHOPTIMIZATION) $(ARCHCPUFLAGS) $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRADEFINES)
CPPFLAGS = $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRADEFINES) CPPFLAGS = $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRADEFINES)
AFLAGS = -x -a -l -o -s AFLAGS = -x -a -l -o -s -g
SDCCLIB = z80.lib 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 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__ ( __asm__ (
"\tld hl, #2\n" "\tld hl, #2\n"
"\tadd hl, sp\n" "\tadd hl, sp\n"
@ -92,7 +83,6 @@ void z80_lowputc(char ch) __naked
"\tout (0xbe), a\n" "\tout (0xbe), a\n"
"\tret\n" "\tret\n"
); );
#endif
} }
/******************************************************************************** /********************************************************************************
@ -104,19 +94,10 @@ void z80_lowputc(char ch) __naked
char z80_lowgetc(void) __naked char z80_lowgetc(void) __naked
{ {
#ifdef CONFIG_SDCC_OLD
_asm
in a, (0xbe)
ld l, a
ld h, #0
ret
_endasm;
#else
__asm__ ( __asm__ (
"\tin a, (0xbe)\n" "\tin a, (0xbe)\n"
"\tld l, a\n" "\tld l, a\n"
"\tld h, #0\n" "\tld h, #0\n"
"\tret\n" "\tret\n"
); );
#endif
} }