Following is the list of platforms supported by PCC.
- __Microsoft Windows__ *(stable)*
More information available [[here|build-windows]].
- __Fedora Core 8__ *(stable)*
You must build and install the [[pcc-libs|pcc-libs]] module which contains libpcc.a and runtime startup code.
- __Debian GNU/Linux 4.0r0__
You must build and install the [[pcc-libs|pcc-libs]] module which contains libpcc.a and runtime startup code.
- __SuSE Linux Enterprise Server 10__
You must build and install the [[pcc-libs|pcc-libs]] module which contains libpcc.a and runtime startup codes.
- __Mandriva Corporate Server 4.0__
You must build and install the [[pcc-libs|pcc-libs]] module which contains libpcc.a and runtime startup code.
- __Red Hat Enterprise Linux 5__
You must build and install the [[pcc-libs|pcc-libs]] module which contains libpcc.a and runtime startup code.
- __Ubuntu Linux 8.04__ *(stable)*
More information available [[here|build-ubuntu-804]].
- __Ubuntu Linux: Intrepid Ibex 8.10__
You must build and install the [[pcc-libs|pcc-libs]] module which contains libpcc.a and runtime startup code.
me@MY-BOX:~$ cvs -d :pserver:anonymous@pcc.ludd.ltu.se:/cvsroot co pcc-libs
me@MY-BOX:~$ cd pcc-libs
me@MY-BOX:~/pcc-libs$ ./configure
me@MY-BOX:~/pcc-libs$ make
me@MY-BOX:~/pcc-libs$ sudo make install
Then build and install pcc
me@MY-BOX:~$ cvs -d :pserver:anonymous@pcc.ludd.ltu.se:/cvsroot co pcc
me@MY-BOX:~$ cd pcc
me@MY-BOX:~/pcc$ ./configure
me@MY-BOX:~/pcc$ gedit cc/cpp/Makefile cc/ccom/Makefile&
Delete the "-Werror" from the "CFLAGS =" line in both files and save
me@MY-BOX:~/pcc$ make
me@MY-BOX:~/pcc$ sudo make install
- __MidnightBSD-current (i386/sparc64)__
Unless you're using the MirPorts Framework to install pcc, you must build and install the [[pcc-libs|pcc-libs]] module.
- __MirBSD-current (i386)__ *(stable)*
The MirPorts Framework contains a tested snapshot in lang/pcc, which works without the [[pcc-libs|pcc-libs]] module, as the required quad functions are all part of libc.
Building pcc from source (including bootstrapping) is possible as well.
The necessary header changes are integrated starting MirBSD #10. It is, however, not possible yet to compile MirBSD itself with pcc; using it as ports compiler is planned.
- __NetBSD-current (i386/mips/arm/powerpc)__ *(i386 stable, mips/arm/powerpc experimental)*
NetBSD 5.0 should contain support for PCC to build applications.
Currently it is not possible to build the complete NetBSD operating system with build.sh using PCC.
- __NetBSD 4.0 (i386/mips/arm/powerpc)__
NetBSD 4.0 needs at least this change:
--- sys/sys/cdefs.h 13 Nov 2006 05:44:37 -0000 1.64
+++ sys/sys/cdefs.h 12 Apr 2008 13:30:29 -0000
@@ -245,7 +245,7 @@
#endif /* _KERNEL */
#if !defined(_STANDALONE)&& !defined(_KERNEL)
-#ifdef __GNUC__
+#if defined(__GNUC__) || defined(__PCC__)
#define __RENAME(x) ___RENAME(x)
#else
#ifdef __lint__
and for varargs to work on arm:
--- sys/arch/arm/include/stdarg.h 11 Dec 2005 12:16:47 -0000 1.9
+++ sys/arch/arm/include/stdarg.h 12 Apr 2008 13:36:13 -0000
@@ -46,7 +46,7 @@
#define __builtin_va_copy(d, s) ((d) = (s))
#endif
-#if __GNUC_PREREQ__(2, 96)
+#if (__GNUC_PREREQ__(2, 96) || defined(__PCC__))
#define va_start(ap, last) __builtin_stdarg_start((ap), (last))
#define va_arg __builtin_va_arg
#define va_end __builtin_va_end
A similar change may be required for other platforms as well.
- __NetBSD 3.0 (i386/mips/arm/powerpc)__
The following patch is required:
--- cdefs.h.orig 2007-12-02 16:45:11.000000000 -0300
+++ cdefs.h 2007-11-27 02:09:52.000000000 -0300
@@ -92,7 +92,7 @@
#define __const const /* define reserved names to standard */
#define __signed signed
#define __volatile volatile
-#if defined(__cplusplus)
+#if defined(__cplusplus) || defined(__PCC__)
#define __inline inline /* convert to C++ keyword */
#else
#if !defined(__GNUC__)&& !defined(__lint__)
@@ -201,6 +201,10 @@
#define __packed __attribute__((__packed__))
#define __aligned(x) __attribute__((__aligned__(x)))
#define __section(x) __attribute__((__section__(x)))
+#elif defined(__PCC__)
+#define __packed /* not yet */
+#define __aligned(x) /* not yet */
+#define __section(x) /* not yet */
#elif defined(__lint__)
#define __packed /* delete */
#define __aligned(x) /* delete */
@@ -245,7 +249,7 @@
#endif /* _KERNEL */
#if !defined(_STANDALONE)&& !defined(_KERNEL)
-#if defined(__GNUC__)
+#if defined(__GNUC__) || defined(__PCC__)
#define __RENAME(x) ___RENAME(x)
#else
#ifdef __lint__
--- stdlib.h.orig 2007-12-02 16:47:42.000000000 -0300
+++ stdlib.h 2007-11-30 19:48:58.000000000 -0300
@@ -237,6 +237,8 @@
#if defined(alloca)&& (alloca == __builtin_alloca)
&& defined(__GNUC__) && (__GNUC__ < 2)
void *alloca(int); /* built-in for gcc */
+#elif defined(__PCC__)
+#define alloca(size) __builtin_alloca(size)
#else
void *alloca(size_t);
#endif /* __GNUC__ */
Additionally, for stdargs to work properly, changes to the machine-dependent stdargs.h is required (something like this):
--- mips/stdarg.h.orig 2007-12-02 17:02:55.000000000 -0300
+++ mips/stdarg.h 2007-12-02 17:01:59.000000000 -0300
@@ -59,6 +59,13 @@
#define va_end(ap) __builtin_va_end((ap))
#define __va_copy(dest, src) __builtin_va_copy((dest), (src))
+#elif defined(__PCC__)
+
+#define va_start(ap, last) __builtin_stdarg_start((ap), last)
+#define va_arg(ap, type) __builtin_va_arg((ap), type)
+#define va_end(ap) __builtin_va_end((ap))
+#define __va_copy(dest, src) __builtin_va_copy((dest), (src))
+
#else
#define va_start(ap, last) \
- __NetBSD 1.6.2 (i386)__
pcc can be built on NetBSD 1.6.2. Since the system compiler is gcc 2.95 and not fully c99 compliant, a slight modification to pcc is required. In pass1.h the flexible array should be replaced with the gcc-specified "zero-length" array. The build will continue to completion and work fine.
You'll also need to modify the cdefs.h, stdarg.h and stdlib.h as for more recent NetBSD releases.
- __OpenBSD 4.6 and later... (i386 stable, other under development)__
pcc should compile and run just fine. Note that -Werror must be removed from some parts of the system Makefiles since pcc does more type correctness checks than the gcc version that follows the system.
- __Mac OS X 10.4 (powerpc)__ *(experimental)*
You must build and install the [[pcc-libs|pcc-libs]] module which contains libpcc.a and runtime startup code.
Additionally, stdargs.h only works with gcc. Paste the following lines into /usr/local/lib/pcc/stdarg.h:
#ifndef _STDARG_H_
#define _STDARG_H_
#define va_list char *
#define _VA_LIST
#define va_start(ap, last) __builtin_stdarg_start((ap), last)
#define va_arg(ap, type) __builtin_va_arg((ap), type)
#define va_end(ap) __builtin_va_end((ap))
#define va_copy(dest, src) __builtin_va_copy((dest), (src))
#endif
- __Mac OS X 10.5 (powerpc)__ *(experimental)*
You must build and install the [[pcc-libs|pcc-libs]] module which contains libpcc.a and runtime startup code.
Some of the issues may apply from OS X 10.4 discussed above.
- __Mac OS X 10.5 (intel)__ *(stable)*
You must build and install the [[pcc-libs|pcc-libs]] module which contains libpcc.a and runtime startup code.
OS X on intel has a bug in /usr/include/libkern/_OSByteOrder.h for non-GNU compilers.
uint16\_t, uint32\_t and uint64\_t are not defined in this case. Copy the file to /usr/local/include/pcc/libkern and replace the undefined types with
\_\_uint16\_t, \_\_uint32\_t and \_\_uint64\_t respectively.
Some of the issues may apply from OS X 10.4 discussed above.
- __FreeBSD 7__
You must build and install the [[pcc-libs|pcc-libs]] module which contains libpcc.a for C99 long long math support.
You probably want to add something like this to sys/cdefs.h.
--- cdefs.h.orig 2009-01-05 13:34:21.000000000 +0100
+++ cdefs.h 2009-01-05 13:35:39.000000000 +0100
@@ -221,6 +221,15 @@
#define __aligned(x) __attribute__((__aligned__(x)))
#define __section(x) __attribute__((__section__(x)))
#endif
+#if defined(__PCC__)
+#define __dead2 __attribute__((__noreturn__))
+#define __pure2 __attribute__((__const__))
+#define __unused __attribute__((__unused__))
+#define __used __attribute__((__used__))
+#define __packed __attribute__((__packed__))
+#define __aligned(x) __attribute__((__aligned__(x)))
+#define __section(x) __attribute__((__section__(x)))
+#endif
#endif
#if __GNUC_PREREQ__(2, 96)
This patch only works if you have pcc compiled with GCC_COMPAT (which is the default). Otherwise you want to use the _Pragmas() as shown in patches for other operating systems.
- __Solaris 10 x86__ *(stable)*
It's possible to cross-build pcc to a fresh solaris 10 installation. Although solaris 10 has a toolchain in /usr/ccs/bin, there isn't a cc compiler. To cross-build pcc for solaris 10:
- tar /usr/include and /lib on the solaris system and transfer these directories to /usr/local/i386-solaris on the build system
- build a pcc cross-compiler on the build system: ./configure --target=i386-solaris&& make&& make install
- build GNU binutils on the build system: ./configure --target=i386-solaris&& make&& make install
Now you have a full solaris development system on your build machine. The next step is to build pcc to run on the solaris system:
- cross-build pcc for the solaris host: CC=i386-solaris-pcc ./configure --host=i386-solaris --target=i386-solaris
- cross-build libpcc for the solaris host: CC=i386-solaris-pcc ./configure --target=i386-solaris
Now you have pcc compiled to run on the Solaris system. Transfer these files to the Solaris system:
- transfer pcc (/usr/local/bin), cpp (/usr/local/libexec), ccom (/usr/local/libexec), libpcc.a (/usr/local/lib/pcc/i386-solaris/0.9.9/lib/) to solaris system
- ensure /usr/ccs is in the path on the solaris system
- pcc should now run as the system compiler - you will need to update some solaris header files (see below)
The pcc compiler can now be used on the solaris system to build itself:
- download m4-1.4.1.tar.gz, configure and install
- download flex-2.5.34, configure and install
- download pcc, configure and install
You must build and install the [[pcc-libs|pcc-libs]] module which contains libpcc.a and runtime startup code.
Additionally, stdargs.h doesn't work correctly. Paste the following lines into /usr/local/lib/pcc/stdarg.h:
#ifndef _STDARG_H_
#define _STDARG_H_
#define va_list char *
#define _VA_LIST
#define va_start(ap, last) __builtin_stdarg_start((ap), last)
#define va_arg(ap, type) __builtin_va_arg((ap), type)
#define va_end(ap) __builtin_va_end((ap))
#define va_copy(dest, src) __builtin_va_copy((dest), (src))
#endif
Powered by rcshistory.cgi 0.3