Compiling EPICS and Building IOC Applications on WIN32 (Windows95/NT) --------------------------------------------------------------------- Original port of EPICS base to WIN32 (Windows95/NT) was done by Kay-Uwe Kasemir 11/96 please mail questions, comments, corrections, additional examples, etc to johill@lanl.gov 0) what you will get -------------------- Right now this port of EPICS to WIN32 should allow you to * compile almost all of EPICS base using {Tornado, MS Visual C, perl, GNU make} (only {MS Visual C, perl, GNU make} if you prefer to compile only the host portions of EPICS base). * load EPICS on an IOC (486, pentium, 68k, ...), load databases (no drivers/devices for real I/O available, yet. Some Greenspring IP support [Relay, Dig, ADC, DAC] is in progress) * build and use ca.dll on NT or Win95 to access all IOCs, as well as the Com-library, gdd-library, cas-library, and all other EPICS base libraries as DLLs. * build gdd, cas and a demo of the new portable CA server on WIN32. 1) see what you have -------------------- To compile EPICS on WIN32, we need WindRiver System's Tornado (used: 1.0) (not required if host only build) Microsoft's Visual C/C++ (used: 4.0) (borland C++ rumored to work also) and some tools: gnu make - www.gnu.org (we used 3.76) perl - www.perl.org (we used 5.003) The perl interpreter and gnu make are available 'on the net' as sources which compile with MS Visual C++. If you cannot/don't want to find them, contact me, please! 2) set environment variables (Setting env. vars. is different: for NT, use Settings/System, for Win95 use autoexec.bat) When setting paths in the EPICS CONFIG files for WIN32: ** Note that that each "\" in any path variables must be replaced with a "\\" (this is because GNU make treats all "\" characters as line continuation) ** Note that that each space in any file name or path name variable must be replaced with a "\ " (this is because GNU make treats all " " separated input as independent tokens in the input stream. ** WIN32 will generally allow "/" and "\" interchangeably in file paths, but the DOS shell appears to only accept "\". Your path should include: - The EPICS-binaries that we are about to build in base/bin/WIN32 - The System (for me it's in NT40...) - The MS Visual C compiler binaries Check with e.g.: >echo %Path% C:\WINNT35.0\system32; C:\WINNT35.0; c:\msdev\bin; c:\perl5\bin; c:\make-3.75\WinRel; c:\epics\base\bin\win32 (really where INSTALL_LOCATION specifies) On NT, "Path" is defined by the operating system, on Win95, it's "PATH" instead. MS Visual C and Tornado should be installed properly with these env. variables set: WIND_BASE=c:\Tornado (required for cross development only) WIND_HOST_TYPE=x86-win32 (required for cross development only) This way the EPICS makesystem can locate Tornado without any changes to the files in base/config. So for pc486 the settings in CONFIG_SITE where you specify the location of VxWorks are ignored, this information is taken from WIND_BASE and _HOST_TYPE!! MSDevDir=C:\MSDEV include=c:\msdev\include;c:\msdev\mfc\include lib=c:\msdev\lib;c:\msdev\mfc\lib Select host arch to build: HOST_ARCH=WIN32 (used by the make system) Set the "TMP" environment variable if you need to specify where temporary files are created. Directory Used For Temporary Files Conditions ---------------------------------- ---------- Directory specified by TMP TMP environment variable is set, and directory specified by TMP exists. dir argument to _tempnam TMP environment variable is not set, or directory specified by TMP does not exist. P_tmpdir in STDIO.H dir argument is NULL, or dir is name of nonexistent directory. Current working directory P_tmpdir does not exist. On my system I see in stdio.h that _P_tmpdir is "/". Here is a common setting for "TMP" (the C:\TEMP directory must exist). TMP=C:\TEMP 3) building EPICS ----------------- Prepare apx. 2 ltr. Tee and type: cd /base make (use gnu make) Watch for errors and send them to me. Known problems: * gnumake seems to be faster than WIN32 sometimes which results in warnings/errors like "file has modification date in the future" for newly created things. Very seldom this is fatal, so you have to stop gnumake and restart it. * This is strange because Windows95/NT doesn't care about upper/lower case: WIN32 is WIN32, not win32. Gnumake fails if e.g. base/src/include/os/WIN32 is ...win32. 4) Creating EPICS IOC applications under WIN32 o create application development folder o start a DOS window and change your working directory to the folder created above (with the DOS "cd" command) o to create an example application type: "perl c:\epics\bin\win32\makeBaseApp.pl -b c:\\epics -e ** Note that that each "\" above in any path arguments to makeBaseApp.pl must be replaced with a "\\" (this is because GNU make treats all "\" characters as line continuation) ** Note that that each space in any file name or path name argument to makeBaseApp.pl must be replaced with a "\ " (this is because GNU make treats all " " separated input as independent tokens in the input stream. ** Note that c:\epics above must be replaced by the path to your epics source installation (or where INSTALL_LOCATION specifies) o General information on EPICS IOC application development can be found in the "EPICS IOC Application Developers Guide". To see all of the options supported by makeBaseApp.pl type "perl c:\epics\bin\win32\makeBaseApp.pl" 5) EPICS GNU make makefiles can be executed from within a Visual C++ "makefile" style project. This allows EPICS programs to be developed directly inside of the visual C++ environment. To do this create a "makefile" project and place your gnu make command in the build configuration (accessed from the project/settings menu). You will also need to add GNU make and /bin/win32 into the Visual C++ executable search path (from the tools/options menu). I have not so far determined how to configure visual C++ so that it is possible to double click on the compiler error messages generated within an EPICS "makefile" style project and have visual C++ immediately position the cursor on the corresponding line in the source (as is normally the case in the visual C++ environment). If you solve this problem please forward the details to johill@lanl.gov. Good luck ! -Kay