Bernd Ulmann has graciously created a page containing FFTW installation instructions for OpenVMS, as well as a prepackaged version.
Another patch file for OpenVMS is posted at Jouk J.'s web page, including support for FFTW 3.0.
The following notes were for FFTW 1.2, and are not applicable to
later versions of FFTW. We leave them here for historical
purposes. (You will probably need to create your own
Makefile
; see the section of the FFTW manual on
installation on non-Unix systems.)
To get He also made the following changes to FFTW files:
fftw_test
working, he copied
GETOPT.C
from http://www.openvms.digital.com/cd/UUDECODE/SRC.
In
src/Makefile
:
# VMS
LIBFFT = libfftw.olb
HEADERS = fftw.h
INCLUDE = /include=[]
LIBDIR = sys$library
INCLUDEDIR =sys$library
RM = delete
CP = copy
MAKE = mms
AR = library
CC = cc
CFLAGS = /optimize$(INCLUDE)
NOTW_PREFIX=fn_
TWID_PREFIX=ftw_
NOTWI_PREFIX=fni_
TWIDI_PREFIX=ftwi_
NOTW_BLOCKS=$(NOTW_PREFIX)1.obj;,$(NOTW_PREFIX)2.obj;,$(NOTW_PREFIX)3.obj;, \
$(NOTW_PREFIX)4.obj;,$(NOTW_PREFIX)5.obj;,$(NOTW_PREFIX)6.obj;, \
$(NOTW_PREFIX)7.obj;,$(NOTW_PREFIX)8.obj;,$(NOTW_PREFIX)9.obj;, \
$(NOTW_PREFIX)10.obj;,$(NOTW_PREFIX)11.obj;,$(NOTW_PREFIX)12.obj;, \
$(NOTW_PREFIX)13.obj;,$(NOTW_PREFIX)14.obj;,$(NOTW_PREFIX)15.obj;, \
$(NOTW_PREFIX)16.obj;,$(NOTW_PREFIX)32.obj;,$(NOTW_PREFIX)64.obj;,
TWID_BLOCKS=$(TWID_PREFIX)2.obj;,$(TWID_PREFIX)3.obj;,$(TWID_PREFIX)4.obj;, \
$(TWID_PREFIX)5.obj;,$(TWID_PREFIX)6.obj;,$(TWID_PREFIX)7.obj;, \
$(TWID_PREFIX)8.obj;,$(TWID_PREFIX)9.obj;,$(TWID_PREFIX)10.obj;, \
$(TWID_PREFIX)16.obj;,$(TWID_PREFIX)32.obj;,$(TWID_PREFIX)64.obj;,
NOTWI_BLOCKS=$(NOTWI_PREFIX)1.obj;,$(NOTWI_PREFIX)2.obj;,$(NOTWI_PREFIX)3.obj;,\
$(NOTWI_PREFIX)4.obj;,$(NOTWI_PREFIX)5.obj;,$(NOTWI_PREFIX)6.obj;, \
$(NOTWI_PREFIX)7.obj;,$(NOTWI_PREFIX)8.obj;,$(NOTWI_PREFIX)9.obj;, \
$(NOTWI_PREFIX)10.obj;,$(NOTWI_PREFIX)11.obj;,$(NOTWI_PREFIX)12.obj;, \
$(NOTWI_PREFIX)13.obj;,$(NOTWI_PREFIX)14.obj;,$(NOTWI_PREFIX)15.obj;, \
$(NOTWI_PREFIX)16.obj;,$(NOTWI_PREFIX)32.obj;,$(NOTWI_PREFIX)64.obj;,
TWIDI_BLOCKS=$(TWIDI_PREFIX)2.obj;,$(TWIDI_PREFIX)3.obj;, \
$(TWIDI_PREFIX)4.obj;,$(TWIDI_PREFIX)5.obj;,$(TWIDI_PREFIX)6.obj;, \
$(TWIDI_PREFIX)7.obj;,$(TWIDI_PREFIX)8.obj;,$(TWIDI_PREFIX)9.obj;, \
$(TWIDI_PREFIX)10.obj;,$(TWIDI_PREFIX)16.obj;,$(TWIDI_PREFIX)32.obj;,\
$(TWIDI_PREFIX)64.obj;,
NOTW_SRC=$(NOTW_PREFIX)1.c $(NOTW_PREFIX)2.c $(NOTW_PREFIX)3.c \
$(NOTW_PREFIX)4.c $(NOTW_PREFIX)5.c $(NOTW_PREFIX)6.c \
$(NOTW_PREFIX)7.c $(NOTW_PREFIX)8.c $(NOTW_PREFIX)9.c \
$(NOTW_PREFIX)10.c $(NOTW_PREFIX)11.c $(NOTW_PREFIX)12.c \
$(NOTW_PREFIX)13.c $(NOTW_PREFIX)14.c $(NOTW_PREFIX)15.c \
$(NOTW_PREFIX)16.c $(NOTW_PREFIX)32.c $(NOTW_PREFIX)64.c
TWID_SRC=$(TWID_PREFIX)2.c $(TWID_PREFIX)3.c $(TWID_PREFIX)4.c \
$(TWID_PREFIX)5.c $(TWID_PREFIX)6.c $(TWID_PREFIX)7.c \
$(TWID_PREFIX)8.c $(TWID_PREFIX)9.c $(TWID_PREFIX)10.c \
$(TWID_PREFIX)16.c $(TWID_PREFIX)32.c $(TWID_PREFIX)64.c
NOTWI_SRC=$(NOTWI_PREFIX)1.c $(NOTWI_PREFIX)2.c $(NOTWI_PREFIX)3.c \
$(NOTWI_PREFIX)4.c $(NOTWI_PREFIX)5.c $(NOTWI_PREFIX)6.c \
$(NOTWI_PREFIX)7.c $(NOTWI_PREFIX)8.c $(NOTWI_PREFIX)9.c \
$(NOTWI_PREFIX)10.c $(NOTWI_PREFIX)11.c $(NOTWI_PREFIX)12.c \
$(NOTWI_PREFIX)13.c $(NOTWI_PREFIX)14.c $(NOTWI_PREFIX)15.c \
$(NOTWI_PREFIX)16.c $(NOTWI_PREFIX)32.c $(NOTWI_PREFIX)64.c
TWIDI_SRC=$(TWIDI_PREFIX)2.c $(TWIDI_PREFIX)3.c $(TWIDI_PREFIX)4.c \
$(TWIDI_PREFIX)5.c $(TWIDI_PREFIX)6.c $(TWIDI_PREFIX)7.c \
$(TWIDI_PREFIX)8.c $(TWIDI_PREFIX)9.c $(TWIDI_PREFIX)10.c \
$(TWIDI_PREFIX)16.c $(TWIDI_PREFIX)32.c $(TWIDI_PREFIX)64.c
OTHEROBJ = timer.obj;,config.obj;,planner.obj;,twiddle.obj;,executor.obj;,naive.obj;,\
generic.obj;,fftwnd.obj;,malloc.obj;,wisdom.obj;,common_io.obj;
BLOCKS = $(NOTW_BLOCKS) $(NOTWI_BLOCKS) $(TWID_BLOCKS) $(TWIDI_BLOCKS)
ALLOBJ = $(BLOCKS) $(OTHEROBJ)
all :
$(MAKE) $(LIBFFT)
install : $(LIBFFT)
$(CP) $(LIBFFT) $(LIBDIR)
$(RANLIB) $(LIBDIR)/$(LIBFFT)
$(CP) $(HEADERS) $(INCLUDEDIR)
$(LIBFFT) : $(ALLOBJ)
$(AR)/create $(LIBFFT) $(ALLOBJ)
sources :
$(MAKE) -f Makefile.sources $(NOTW_SRC) $(NOTWI_SRC) \
$(TWID_SRC) $(TWIDI_SRC) \
NOTW_PREFIX=$(NOTW_PREFIX) \
NOTWI_PREFIX=$(NOTWI_PREFIX) \
TWID_PREFIX=$(TWID_PREFIX) \
TWIDI_PREFIX=$(TWIDI_PREFIX)
realclean : clean
$(RM) $(LIBFFT) $(NOTW_SRC) $(NOTWI_SRC) $(TWID_SRC) $(TWIDI_SRC)
clean :
$(RM) -f *.obj;,*~ core a.out test gmon.objut mon.out *.zi *.zo *.s genfft
$(ALLOBJ) : $(HEADERS) konst.h
In
tests/Makefile
:
# VMS
FFTWDIR=[-.src]
LIBFFT = $(FFTWDIR)libfftw.olb
HEADERS = $(FFTWDIR)fftw.h
INCLUDE = /include=$(FFTWDIR)
# DECC
CC = cc
CFLAGS = /optimize$(INCLUDE)
all :
mms fftw_test
mms testnd
fftw_test :fftw_test.c $(LIBFFT)
$(CC) $(CFLAGS) fftw_test.c
$(CC) $(CFLAGS) getopt.c
link fftw_test,getopt,$(LIBFFT)/l
testnd :testnd.c go_fft.c $(LIBFFT)
$(CC) $(CFLAGS) testnd.c
$(CC) $(CFLAGS) go_fft.c
link testnd,go_fft,$(LIBFFT)/l
clean :
rm -f *.o *~ core a.out test testnd gmon.out mon.out *.s
In
Define the following global variable:
tests/fftw_test.c
:
char *__progname;
In the main()
subroutine, just before the "if (argc <= 1)
" line, insert:
__progname = argv[0];
Go back to the FFTW download page.