-
Notifications
You must be signed in to change notification settings - Fork 159
Porting
Table of Contents
- 1 What we have
- 2 Port existing Projects to use OpenWatcom
- 3 Port existing Projects to use OpenWatcom as cross compiler
- 4 Porting OpenWatcom to run on a known OS and cross compile for a known Architecture
- 5 Porting OpenWatcom to cross compile for a different OS with a known Architecture
- 6 Porting OpenWatcom to [cross] compile for a known OS with a new Architecture
- 7 Suggestions to port OpenWatcom to a new Platform
OpenWatcom has a long History. The commandline options differ from other compiler toolchains.
In addition, the supported language standards are old.
-
Building OpenWatcom is only supported on:
- x86: DOS (with a 32 bit DOS Extender)
- x86 and x86_64: Windows
- x86 and x86_64: Linux
- x86: OS/2
-
OpenWatcom runs on various Architecture / OS combinations and can
compile / cross compile for all supported Architecture / OS combinations:- DOS (with a 32 bit DOS Extender)
- Windows (32 bit x86 and 64 bit x86_64)
- Linux (32 bit x86 and 64 bit x86_64)
- OS/2 (32 bit x86)
- RDOS (32 bit x86)
-
OpenWatcom supports various Languages:
- Assembler (Support for newer Processor instruction set extensions unknown)
- C (
C99 support
incomplete) -
C++
(C++98: Language and Library incomplete) - Fortran (F77 status unknown)
-
OpenWatcom can build Programs/libraries for various Processor Architectures:
- 16 bit x86 Family (8088, 80286)
- 32 bit x86 Family (i386, i486, i586, i686)
- 32 bit Alpha/AXP
- 32 bit Mips (R3000)
- 32 bit PowerPC
-
OpenWatcom can compile / cross compile for various Architecture / OS combinations:
- 16 bit DOS
- 16 bit Windows (x86)
- 16 bit OS/2 (x86)
- 32 bit DOS
- 32 bit Windows (x86)
- 32 bit Linux (x86)
- 32 bit OS/2 (x86)
- 32 bit RDOS (x86)
- 32 bit Netware (x86) (Needs Netware SDK)
-
OpenWatcom should be able to cross compile for more Architecture / OS combinations,
but the needed libraries are not build by default and they are incomplete.- 32 bit Windows NT (Alpha)
- 32 bit Windows NT (Mips)
- 32 bit Windows NT (PowerPC)
- 32 bit Linux (Alpha)
- 32 bit Linux (Mips)
- 32 bit Linux (PowerPC)
-
OpenWatcom has code for more Architecture / OS combinations,
but support is incomplete. Needed includes/libraries are incomplete or missing.- Read the source in
bld/
(Hints: _HAIKU, _BSD / _NETBSD / _FREEBSD , _OSX / _APPLE, _QNX, _SOLARIS / _SUN)
- Read the source in
The POSIX style command line driver owcc
works for simple tasks.
In addition to set the compiler, it is sometimes useful to use the flag -v
for owcc
(print commandline parameter for the subtasks).
Many OpenWatcom programs support an environment variable for additional parameter (Read the docs).
Example for a C Autotools Project.
CC=owcc CFLAGS="-v" configure
make
Example for a C++ Autotools Project.
CXX=owcc CXXFLAGS="-v" configure
make
You probably also want to use -std=c99
for owcc
to activate the incomplete C99 support
in OpenWatcom.
Or force all C compiler to activate the incomplete C99
support:
export WCC=" -zastd=c99 "
export WCC386=" -zastd=c99 "
export WCCMPS=" -zastd=c99 "
export WCCPPC=" -zastd=c99 "
export WCCAXP=" -zastd=c99 "
-aa
activates an additional C99 feature
-
OpenWatcom uses different commandline parameter
- Projects activate Multithreading support with
-pthread
(or -Wpthread)
owcc
need-mthreads
here - Projects activate additional warnings with
-Wextra
(or the old variant:-W
)
Not supported byowcc
- Projects activate extensive warnings with
-pedantic
Not supported byowcc
: Remove this option - Projects activate a specific memory model for DOS targets (ia16-gcc) with
-mcmodel
owcc
supports-mcmodel
, but with different arguments
- Projects activate Multithreading support with
-
OpenWatcom has different Predefined Macros (but you can use the
-D
commandline option)- Projects expect
__unix__
or__linux__
(or the variants with fewer underscore).
OpenWatcom defines__UNIX__
and__LINUX__
- Projects expect
__i386__
or__i686__
(or the variants with fewer underscore).
OpenWatcom defines__386__
and_M_IX86
(and others) - Projects expect
_REENTRANT
, when multithreading is activated with-pthread
.
OpenWatcom defines_MT
, when multithreading is activated with-mthreads
- Projects expect
Autotools projects do not detect owcc
as cross compiler.
Some simple shell scripts can help:
i686-win32-owcc
#!/bin/sh
owcc -march=i386 -mtune=i686 -bwin32 -I$WATCOM/h -I$WATCOM/h/nt ${1+"$@"}
i686-linux-owcc
#!/bin/sh
owcc -march=i386 -mtune=i686 -blinux -I$WATCOM/lh ${1+"$@"}
- Run on x86_64 Windows (Supported, completation status unknown)
- Run on x86_64 Linux (Supported, GUI-Tools are missing, completation status unknown)
- Cross compile for Windows NT/Mips (Some patches committed recently)
- Cross compile for Linux/Mips (started)
- Cross compile for Linux/PPC (started)
- Run on PPC Linux (started)
- cross compile for BSD running on x86
- cross compile for BSD running on PowerPC or Mips
- MacOS on PowerPC (MacOS no longer uses PowerPC)
- MacOS on x86 (MacOS no longer uses x86)
These are the hardest ports, affecting all projects in bld/
- Compile for x86_64 on Linux, Windows NT (x86_64 on MacOS was replaced by aarch64)
- Compile for aarch64 on Linux, Windows NT (or MacOS)
- Compile for arm / thumb on Linux, Windows CE
- Compile for RISCV 32Bit on Linux (RV32I has only 47 assembler commands)
- Compile for RISCV 64Bit on Linux
You might find it easier to start with these steps, before working on the collection from the Mailing List
- Port wdump (handles executables/libraries/object files without ORL)
- Port the ORL
- Port tools based on ORL
Collected from the OpenWatcom Mailing list: https://narkive.com/gGQXWm2h.22
- Write the disassembler
- Port the debugger
- Port the assembler
- Port the C front end
- Now comes the really hard part, the codegen
- Port the clib
- Port the linker
- Run (and pass) tests
- Optionally continue with the C++ and perhaps F77 compiler and other tools
- Welcome
- Building
- Open Watcom Documentation
- Notes
- Relicensing effort
- Debugging
- OW tools usage Overview
- OW tools usage with CMake
- OW tools usage with Visual Studio Code
- Open Watcom 1.9 Wiki
OW Development
WGML Development
- WGML
- Augmented Devices
- Binary Device Files
- Common File Blocks
- COP Files
- Device File Blocks
- Device Function Language
- Device Function Notes
- Device Functions
- Directory File Format
- Drawing Boxes
- Driver File Blocks
- File and Directory Names
- Font File Blocks
- Fonts
- GML Tag Notes
- Keyword Statistics
- Macros and User Defined Tags
- Meta Data
- Page Layout Subsystem
- Search Paths
- Sequencing
- System Symbol Notes
- Tabs and Tabbing
- whpcvt Utility interaction