[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Discuss-gnuradio] mingw patch with working createfilemapping and resolv
From: |
Martin Dvh |
Subject: |
[Discuss-gnuradio] mingw patch with working createfilemapping and resolved backslash problems |
Date: |
Wed, 20 Jul 2005 04:04:20 +0200 |
User-agent: |
Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.5b) Gecko/20030823 |
Hi all,
I have been busy trying to get the mingw patches ready for integration with
gnuradio-core.
Here are the result(see attached patches).
I also wrote a new short readme because a lot of the required configure
parameters are not needed anymore.(see attached readme)
I have put in checks so the new mingw hacks are only executed on mingw.
We have to check if cross-compiling still works.
I added a working lib/runtime/gr_vmcircbuf_createfilemapping which searches for
a working second_copy like the gr_vmcircbuf_mmap_tmpfile.cc does.
(First it tries to use CreateMapOfFileEx with the adress of the wanted second copy as a parameter, if this doesn't work it tries several times without the
parameter and checks if the second copy is at the wanted adress.
I added some additional code to gr_python.m4 to get rid of all remaining
backslash problems in python pathnames.
I put it in a section which is only executed on mingw (case host_os in mingw*)
(No more python related patchnames required as ./configure parameters.)
I put a check for sys/resource.h in configure.ac and changed the timing code in
the benchmarks to work on mingw (added ifdef HAVE_SYS_RESOURCE_H code)
I added code in lib/swig/Makefile.am to change backslashes in forward slashes
in gnuradio_swig_python.d
This is only executed on ming32 (maybe someone knows of a better way to do this)
The only thing that still barkes at make check is gr_circular_file
I haven't changed gr_circular_file to use createfilemapping code, since it is
not used (at the moment)
so qa_gr_circular_file is the only thing which still fails at make check
(see make_check_stderr.log)
....... gr_vmcircbuf_createfilemapping_factory: OK
...................qa_gr_circular_file.data: file too small to be circular
buffer
Short build instructions for mingw:
All python/fftw/swig/cppunit executables AND dlls have to be on the PATH
Make sure NO cygwin executables are on the PATH (especially cygwins swig and
python)
Make sure you use latest libtool and its libtool.m4 macros
configure on msys/mingw with a commandline like:
./configure --with-md-cpu=generic --with-cppunit-prefix=/usr/local --with-boost-include-dir=/c/boost_1_32_0/include/boost-1_32
PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
Greetings,
Martin
? src/lib/runtime/gr_vmcircbuf_createfilemapping.cc
? src/lib/runtime/gr_vmcircbuf_createfilemapping.h
Index: configure.ac
===================================================================
RCS file: /cvsroot/gnuradio/gnuradio-core/configure.ac,v
retrieving revision 1.38
diff -u -r1.38 configure.ac
--- configure.ac 14 Jul 2005 01:41:55 -0000 1.38
+++ configure.ac 20 Jul 2005 01:13:12 -0000
@@ -81,6 +81,7 @@
AC_HEADER_SYS_WAIT
AC_CHECK_HEADERS(fcntl.h limits.h strings.h time.h sys/ioctl.h sys/time.h
unistd.h)
AC_CHECK_HEADERS(linux/ppdev.h sys/mman.h sys/select.h sys/types.h)
+AC_CHECK_HEADERS(sys/resource.h)
dnl Checks for typedefs, structures, and compiler characteristics.
AC_C_CONST
Index: config/gr_python.m4
===================================================================
RCS file: /cvsroot/gnuradio/gnuradio-core/config/gr_python.m4,v
retrieving revision 1.6
diff -u -r1.6 gr_python.m4
--- config/gr_python.m4 19 Jul 2005 01:11:19 -0000 1.6
+++ config/gr_python.m4 20 Jul 2005 01:13:13 -0000
@@ -25,6 +25,7 @@
# It provides the $(PYTHON_CPPFLAGS) output variable.
AC_DEFUN([PYTHON_DEVEL],[
AC_REQUIRE([AM_PATH_PYTHON])
+ AC_REQUIRE([AC_CANONICAL_HOST])
# Check for Python include path
AC_CACHE_CHECK([for Python include path],
@@ -35,6 +36,19 @@
fi
# ask distutils which include path we should use
+<<<<<<< gr_python.m4
+ python_cmd='
+import distutils.sysconfig
+import os
+path = distutils.sysconfig.get_python_inc(plat_specific=False)
+if os.sep == "\\":
+ path = path.replace("\\", "/")
+print path
+'
+ python_path=`$PYTHON -c "$python_cmd"`
+ AC_MSG_RESULT([$python_path])
+ if test -z "$python_path" ; then
+=======
python_cmd='
import distutils.sysconfig
import os
@@ -45,6 +59,7 @@
'
cv_python_path=`$PYTHON -c "$python_cmd"`
if test -z "$cv_python_path" ; then
+>>>>>>> 1.6
AC_MSG_ERROR([cannot find Python include path])
fi
])
@@ -60,8 +75,47 @@
# The block below is commented out because it breaks the x86-64 and
OS/X build.
- # set these to null for now
+ # Only set this on mingw target, (only implemented for mingw host, for
crosscompiling you need to trick this)
+ AC_MSG_CHECKING([for Python LDFLAGS])
PYTHON_LDFLAGS=""
+ case $host_os in
+ *mingw* )
+ python_cmd='
+import distutils.sysconfig
+import os
+path = distutils.sysconfig.PREFIX + "/libs"
+if os.sep == "\\":
+ path = path.replace("\\", "/")
+print path
+'
+ python_stdlib_path=`$PYTHON -c "$python_cmd"`
+ python_version_nodot=`echo $PYTHON_VERSION | sed "s,\.,,"`
+ libpython_name="python$PYTHON_VERSION"
+ # Standard install of python for win32 has libpython24.a in stead of
libpython2.4.a so we check for the library without the dot in the
versionnumber.
+ python_stdlib_filename=`find $python_stdlib_path -type f -name
libpython$python_version_nodot.* -print | sed "1q"`
+ if test -n "$python_stdlib_filename" ; then
+ libpython_name="python$python_version_nodot"
+ fi
+ PYTHON_LDFLAGS="-L$python_stdlib_path -l$libpython_name"
+ AC_MSG_RESULT($PYTHON_LDFLAGS)
+ # Replace all backslashes in PYTHON Paths with forward slashes
+ AC_MSG_CHECKING([for pythondir])
+ pythondir=`echo $pythondir |sed 's,\\\\,/,g'`
+ AC_MSG_RESULT($pythondir)
+ AC_SUBST([pythondir])
+ AC_MSG_CHECKING([for pkgpythondir])
+ pkgpythondir=`echo $pkgpythondir |sed 's,\\\\,/,g'`
+ AC_MSG_RESULT($pkgpythondir)
+ AC_SUBST([pkgpythondir])
+ AC_MSG_CHECKING([for pyexecdir])
+ pyexecdir=`echo $pyexecdir |sed 's,\\\\,/,g'`
+ AC_MSG_RESULT($pyexecdir)
+ AC_SUBST([pyexecdir])
+ AC_MSG_CHECKING([for pkgpyexecdir])
+ pkgpyexecdir=`echo $pkgpyexecdir |sed 's,\\\\,/,g'`
+ AC_MSG_RESULT($pkgpyexecdir)
+ AC_SUBST([pkgpyexecdir])
+ esac
AC_SUBST([PYTHON_LDFLAGS])
dnl # Check for Python library path
Index: src/lib/runtime/Makefile.am
===================================================================
RCS file: /cvsroot/gnuradio/gnuradio-core/src/lib/runtime/Makefile.am,v
retrieving revision 1.9
diff -u -r1.9 Makefile.am
--- src/lib/runtime/Makefile.am 16 Jun 2005 17:41:25 -0000 1.9
+++ src/lib/runtime/Makefile.am 20 Jul 2005 01:13:15 -0000
@@ -47,6 +47,7 @@
gr_vmcircbuf.cc \
gr_vmcircbuf_mmap_shm_open.cc \
gr_vmcircbuf_mmap_tmpfile.cc \
+ gr_vmcircbuf_createfilemapping.cc \
gr_vmcircbuf_sysv_shm.cc \
gr_select_handler.cc
@@ -83,6 +84,7 @@
gr_vmcircbuf_mmap_shm_open.h \
gr_vmcircbuf_mmap_tmpfile.h \
gr_vmcircbuf_sysv_shm.h \
+ gr_vmcircbuf_createfilemapping.h \
qa_gr_block.h \
qa_gr_buffer.h \
qa_gr_io_signature.h \
Index: src/lib/runtime/gr_vmcircbuf.cc
===================================================================
RCS file: /cvsroot/gnuradio/gnuradio-core/src/lib/runtime/gr_vmcircbuf.cc,v
retrieving revision 1.7
diff -u -r1.7 gr_vmcircbuf.cc
--- src/lib/runtime/gr_vmcircbuf.cc 9 May 2005 21:10:55 -0000 1.7
+++ src/lib/runtime/gr_vmcircbuf.cc 20 Jul 2005 01:13:15 -0000
@@ -31,6 +31,7 @@
#include <gr_local_sighandler.h>
// all the factories we know about
+#include <gr_vmcircbuf_createfilemapping.h>
#include <gr_vmcircbuf_sysv_shm.h>
#include <gr_vmcircbuf_mmap_shm_open.h>
#include <gr_vmcircbuf_mmap_tmpfile.h>
@@ -97,6 +98,7 @@
{
std::vector<gr_vmcircbuf_factory *> result;
+ result.push_back (gr_vmcircbuf_createfilemapping_factory::singleton ());
result.push_back (gr_vmcircbuf_sysv_shm_factory::singleton ());
result.push_back (gr_vmcircbuf_mmap_shm_open_factory::singleton ());
result.push_back (gr_vmcircbuf_mmap_tmpfile_factory::singleton ());
Index: src/lib/swig/Makefile.am
===================================================================
RCS file: /cvsroot/gnuradio/gnuradio-core/src/lib/swig/Makefile.am,v
retrieving revision 1.17
diff -u -r1.17 Makefile.am
--- src/lib/swig/Makefile.am 3 Jul 2005 05:52:24 -0000 1.17
+++ src/lib/swig/Makefile.am 20 Jul 2005 01:13:15 -0000
@@ -80,7 +80,10 @@
gnuradio_swig_python.cc gnuradio_swig_python.py : gnuradio.i
if $(SWIG) $(SWIGCPPPYTHONARGS) -MMD -MF "$*.Td" -module
gnuradio_swig_python -o gnuradio_swig_python.cc $< ;\
- then mv -f "$*.Td" "$*.d"; else rm -f "$*.Td"; exit 1; fi
+ then if test $host_os = mingw32; \
+ then cat "$*.Td" | sed 's,\\\\,/,g' >"$*.d"; rm -f "$*.Td"; \
+ else mv -f "$*.Td" "$*.d"; fi \
+ else rm -f "$*.Td"; exit 1; fi
gnuradio_swig_bug_workaround.h : gnuradio_swig_python.cc
$(srcdir)/gen-swig-bug-fix $< $@
Index: src/tests/benchmark_dotprod.cc
===================================================================
RCS file: /cvsroot/gnuradio/gnuradio-core/src/tests/benchmark_dotprod.cc,v
retrieving revision 1.1
diff -u -r1.1 benchmark_dotprod.cc
--- src/tests/benchmark_dotprod.cc 9 Nov 2004 00:29:51 -0000 1.1
+++ src/tests/benchmark_dotprod.cc 20 Jul 2005 01:13:15 -0000
@@ -1,28 +1,33 @@
/* -*- c++ -*- */
/*
* Copyright 2002 Free Software Foundation, Inc.
- *
+ *
* This file is part of GNU Radio
- *
+ *
* GNU Radio is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
- *
+ *
* GNU Radio is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
- *
+ *
* You should have received a copy of the GNU General Public License
* along with GNU Radio; see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
-
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
#include <stdio.h>
#include <sys/time.h>
+#ifdef HAVE_SYS_RESOURCE_H
#include <sys/resource.h>
+#endif
+
#include <unistd.h>
#include <gr_fir_util.h>
#include <gr_fir_fff.h>
@@ -55,10 +60,13 @@
float input[BLOCK_SIZE + NTAPS];
long n;
float result;
+#ifdef HAVE_SYS_RESOURCE_H
struct rusage rusage_start;
struct rusage rusage_stop;
-
-
+#else
+ double clock_start;
+ double clock_end;
+#endif
// setup coefficients and input data
for (i = 0; i < NTAPS; i++)
@@ -69,14 +77,16 @@
std::vector<float> taps (&coeffs[0], &coeffs[NTAPS]);
filter_t *f = filter_maker (taps);
-
- // get starting CPU usage
+ // get starting CPU usage
+#ifdef HAVE_SYS_RESOURCE_H
if (getrusage (RUSAGE_SELF, &rusage_start) < 0){
perror ("getrusage");
exit (1);
}
-
+#else
+clock_start= (double) clock () * (double)(1000000 / CLOCKS_PER_SEC);
+#endif
// do the actual work
for (n = 0; n < TOTAL_TEST_SIZE; n += BLOCK_SIZE){
@@ -85,9 +95,9 @@
result = f->filter (&input[j]);
}
}
-
- // get ending CPU usage
+ // get ending CPU usage
+#ifdef HAVE_SYS_RESOURCE_H
if (getrusage (RUSAGE_SELF, &rusage_stop) < 0){
perror ("getrusage");
exit (1);
@@ -104,7 +114,10 @@
- timeval_to_double (&rusage_start.ru_stime);
double total = user + sys;
-
+#else
+clock_end= (double) clock () * (double)(1000000 / CLOCKS_PER_SEC);
+double total = clock_end -clock_start;
+#endif
double macs = NTAPS * (double) TOTAL_TEST_SIZE;
printf ("%10s: taps: %4d input: %4g cpu: %6.3f taps/sec: %10.4g \n",
@@ -117,7 +130,7 @@
do_all ()
{
std::vector<gr_fir_fff_info> info;
- gr_fir_util::get_gr_fir_fff_info (&info); // get all known FFF
implementations
+ gr_fir_util::get_gr_fir_fff_info (&info); // get all known FFF
implementations
for (std::vector<gr_fir_fff_info>::iterator p = info.begin ();
p != info.end ();
@@ -127,7 +140,7 @@
}
}
-int
+int
main (int argc, char **argv)
{
do_all ();
Index: src/tests/benchmark_dotprod_ccc.cc
===================================================================
RCS file: /cvsroot/gnuradio/gnuradio-core/src/tests/benchmark_dotprod_ccc.cc,v
retrieving revision 1.2
diff -u -r1.2 benchmark_dotprod_ccc.cc
--- src/tests/benchmark_dotprod_ccc.cc 10 May 2005 01:11:33 -0000 1.2
+++ src/tests/benchmark_dotprod_ccc.cc 20 Jul 2005 01:13:16 -0000
@@ -1,28 +1,32 @@
/* -*- c++ -*- */
/*
* Copyright 2002 Free Software Foundation, Inc.
- *
+ *
* This file is part of GNU Radio
- *
+ *
* GNU Radio is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
- *
+ *
* GNU Radio is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
- *
+ *
* You should have received a copy of the GNU General Public License
* along with GNU Radio; see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
-
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
#include <stdio.h>
#include <sys/time.h>
+#ifdef HAVE_SYS_RESOURCE_H
#include <sys/resource.h>
+#endif
#include <unistd.h>
#include <gr_fir_util.h>
#include <gr_fir_ccc.h>
@@ -51,32 +55,39 @@
benchmark (fir_maker_t filter_maker, const char *implementation_name)
{
int i;
- gr_complex coeffs[NTAPS];
- gr_complex input[BLOCK_SIZE + NTAPS];
+ float coeffs[NTAPS];
+ float input[BLOCK_SIZE + NTAPS];
long n;
gr_complex result;
+#ifdef HAVE_SYS_RESOURCE_H
struct rusage rusage_start;
struct rusage rusage_stop;
-
+#else
+ double clock_start;
+ double clock_end;
+#endif
+
// setup coefficients and input data
for (i = 0; i < NTAPS; i++)
- coeffs[i] = gr_complex(random() - RANDOM_MAX/2, random() - RANDOM_MAX/2);
+ coeffs[i] = random() - RANDOM_MAX/2;
for (i = 0; i < BLOCK_SIZE + NTAPS; i++)
- input[i] = gr_complex(random() - RANDOM_MAX/2, random() - RANDOM_MAX/2);
+ input[i] = random() - RANDOM_MAX/2;
std::vector<gr_complex> taps (&coeffs[0], &coeffs[NTAPS]);
filter_t *f = filter_maker (taps);
-
- // get starting CPU usage
+ // get starting CPU usage
+#ifdef HAVE_SYS_RESOURCE_H
if (getrusage (RUSAGE_SELF, &rusage_start) < 0){
perror ("getrusage");
exit (1);
}
-
+#else
+clock_start= (double) clock () * (double)(1000000 / CLOCKS_PER_SEC);
+#endif
// do the actual work
for (n = 0; n < TOTAL_TEST_SIZE; n += BLOCK_SIZE){
@@ -85,9 +96,9 @@
result = f->filter ((gr_complex*)&input[j]);
}
}
-
- // get ending CPU usage
+ // get ending CPU usage
+#ifdef HAVE_SYS_RESOURCE_H
if (getrusage (RUSAGE_SELF, &rusage_stop) < 0){
perror ("getrusage");
exit (1);
@@ -104,6 +115,10 @@
- timeval_to_double (&rusage_start.ru_stime);
double total = user + sys;
+#else
+clock_end= (double) clock () * (double)(1000000 / CLOCKS_PER_SEC);
+double total = clock_end -clock_start;
+#endif
double macs = NTAPS * (double) TOTAL_TEST_SIZE;
@@ -117,7 +132,7 @@
do_all ()
{
std::vector<gr_fir_ccc_info> info;
- gr_fir_util::get_gr_fir_ccc_info (&info); // get all known CCC
implementations
+ gr_fir_util::get_gr_fir_ccc_info (&info); // get all known CCC
implementations
for (std::vector<gr_fir_ccc_info>::iterator p = info.begin ();
p != info.end () ;
@@ -126,7 +141,7 @@
}
}
-int
+int
main (int argc, char **argv)
{
do_all ();
Index: src/tests/benchmark_dotprod_ccf.cc
===================================================================
RCS file: /cvsroot/gnuradio/gnuradio-core/src/tests/benchmark_dotprod_ccf.cc,v
retrieving revision 1.1
diff -u -r1.1 benchmark_dotprod_ccf.cc
--- src/tests/benchmark_dotprod_ccf.cc 10 May 2005 01:38:19 -0000 1.1
+++ src/tests/benchmark_dotprod_ccf.cc 20 Jul 2005 01:13:16 -0000
@@ -1,28 +1,32 @@
/* -*- c++ -*- */
/*
* Copyright 2002 Free Software Foundation, Inc.
- *
+ *
* This file is part of GNU Radio
- *
+ *
* GNU Radio is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
- *
+ *
* GNU Radio is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
- *
+ *
* You should have received a copy of the GNU General Public License
* along with GNU Radio; see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
-
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
#include <stdio.h>
#include <sys/time.h>
+#ifdef HAVE_SYS_RESOURCE_H
#include <sys/resource.h>
+#endif
#include <unistd.h>
#include <gr_fir_util.h>
#include <gr_fir_ccf.h>
@@ -55,9 +59,14 @@
gr_complex input[BLOCK_SIZE + NTAPS];
long n;
gr_complex result;
+#ifdef HAVE_SYS_RESOURCE_H
struct rusage rusage_start;
struct rusage rusage_stop;
-
+#else
+ double clock_start;
+ double clock_end;
+#endif
+
// setup coefficients and input data
for (i = 0; i < NTAPS; i++)
@@ -68,13 +77,17 @@
std::vector<float> taps (&coeffs[0], &coeffs[NTAPS]);
filter_t *f = filter_maker (taps);
-
+
// get starting CPU usage
+#ifdef HAVE_SYS_RESOURCE_H
if (getrusage (RUSAGE_SELF, &rusage_start) < 0){
perror ("getrusage");
exit (1);
}
+#else
+ clock_start= (double) clock () * (double)(1000000 / CLOCKS_PER_SEC);
+#endif
// do the actual work
@@ -84,9 +97,10 @@
result = f->filter (&input[j]);
}
}
-
+
// get ending CPU usage
+#ifdef HAVE_SYS_RESOURCE_H
if (getrusage (RUSAGE_SELF, &rusage_stop) < 0){
perror ("getrusage");
exit (1);
@@ -103,6 +117,10 @@
- timeval_to_double (&rusage_start.ru_stime);
double total = user + sys;
+#else
+ clock_end= (double) clock () * (double)(1000000 / CLOCKS_PER_SEC);
+ double total = clock_end -clock_start;
+#endif
double macs = NTAPS * (double) TOTAL_TEST_SIZE;
@@ -116,7 +134,7 @@
do_all ()
{
std::vector<gr_fir_ccf_info> info;
- gr_fir_util::get_gr_fir_ccf_info (&info); // get all known CCF
implementations
+ gr_fir_util::get_gr_fir_ccf_info (&info); // get all known CCF
implementations
for (std::vector<gr_fir_ccf_info>::iterator p = info.begin ();
p != info.end () ;
@@ -125,7 +143,7 @@
}
}
-int
+int
main (int argc, char **argv)
{
do_all ();
Index: src/tests/benchmark_dotprod_fcc.cc
===================================================================
RCS file: /cvsroot/gnuradio/gnuradio-core/src/tests/benchmark_dotprod_fcc.cc,v
retrieving revision 1.2
diff -u -r1.2 benchmark_dotprod_fcc.cc
--- src/tests/benchmark_dotprod_fcc.cc 10 May 2005 01:11:33 -0000 1.2
+++ src/tests/benchmark_dotprod_fcc.cc 20 Jul 2005 01:13:16 -0000
@@ -1,28 +1,32 @@
/* -*- c++ -*- */
/*
* Copyright 2002 Free Software Foundation, Inc.
- *
+ *
* This file is part of GNU Radio
- *
+ *
* GNU Radio is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
- *
+ *
* GNU Radio is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
- *
+ *
* You should have received a copy of the GNU General Public License
* along with GNU Radio; see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
-
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
#include <stdio.h>
#include <sys/time.h>
+#ifdef HAVE_SYS_RESOURCE_H
#include <sys/resource.h>
+#endif
#include <unistd.h>
#include <gr_fir_util.h>
#include <gr_fir_fcc.h>
@@ -51,32 +55,39 @@
benchmark (fir_maker_t filter_maker, const char *implementation_name)
{
int i;
- gr_complex coeffs[NTAPS];
+ float coeffs[NTAPS];
float input[BLOCK_SIZE + NTAPS];
long n;
gr_complex result;
+#ifdef HAVE_SYS_RESOURCE_H
struct rusage rusage_start;
struct rusage rusage_stop;
-
+#else
+ double clock_start;
+ double clock_end;
+#endif
+
// setup coefficients and input data
for (i = 0; i < NTAPS; i++)
- coeffs[i] = gr_complex(random() - RANDOM_MAX/2, random() - RANDOM_MAX/2);
+ coeffs[i] = random() - RANDOM_MAX/2;
for (i = 0; i < BLOCK_SIZE + NTAPS; i++)
input[i] = random() - RANDOM_MAX/2;
std::vector<gr_complex> taps (&coeffs[0], &coeffs[NTAPS]);
filter_t *f = filter_maker (taps);
-
- // get starting CPU usage
+ // get starting CPU usage
+#ifdef HAVE_SYS_RESOURCE_H
if (getrusage (RUSAGE_SELF, &rusage_start) < 0){
perror ("getrusage");
exit (1);
}
-
+#else
+ clock_start= (double) clock () * (double)(1000000 / CLOCKS_PER_SEC);
+#endif
// do the actual work
for (n = 0; n < TOTAL_TEST_SIZE; n += BLOCK_SIZE){
@@ -85,9 +96,10 @@
result = f->filter (&input[j]);
}
}
-
+
// get ending CPU usage
+#ifdef HAVE_SYS_RESOURCE_H
if (getrusage (RUSAGE_SELF, &rusage_stop) < 0){
perror ("getrusage");
exit (1);
@@ -104,6 +116,10 @@
- timeval_to_double (&rusage_start.ru_stime);
double total = user + sys;
+#else
+ clock_end= (double) clock () * (double)(1000000 / CLOCKS_PER_SEC);
+ double total = clock_end -clock_start;
+#endif
double macs = NTAPS * (double) TOTAL_TEST_SIZE;
@@ -117,7 +133,7 @@
do_all ()
{
std::vector<gr_fir_fcc_info> info;
- gr_fir_util::get_gr_fir_fcc_info (&info); // get all known FCC
implementations
+ gr_fir_util::get_gr_fir_fcc_info (&info); // get all known FCC
implementations
for (std::vector<gr_fir_fcc_info>::iterator p = info.begin ();
p != info.end () ;
@@ -126,7 +142,7 @@
}
}
-int
+int
main (int argc, char **argv)
{
do_all ();
Index: src/tests/benchmark_dotprod_fsf.cc
===================================================================
RCS file: /cvsroot/gnuradio/gnuradio-core/src/tests/benchmark_dotprod_fsf.cc,v
retrieving revision 1.1
diff -u -r1.1 benchmark_dotprod_fsf.cc
--- src/tests/benchmark_dotprod_fsf.cc 10 May 2005 01:38:19 -0000 1.1
+++ src/tests/benchmark_dotprod_fsf.cc 20 Jul 2005 01:13:16 -0000
@@ -1,28 +1,32 @@
/* -*- c++ -*- */
/*
* Copyright 2002 Free Software Foundation, Inc.
- *
+ *
* This file is part of GNU Radio
- *
+ *
* GNU Radio is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
- *
+ *
* GNU Radio is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
- *
+ *
* You should have received a copy of the GNU General Public License
* along with GNU Radio; see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
-
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
#include <stdio.h>
#include <sys/time.h>
+#ifdef HAVE_SYS_RESOURCE_H
#include <sys/resource.h>
+#endif
#include <unistd.h>
#include <gr_fir_util.h>
#include <gr_fir_fsf.h>
@@ -55,9 +59,13 @@
float input[BLOCK_SIZE + NTAPS];
long n;
short result;
+#ifdef HAVE_SYS_RESOURCE_H
struct rusage rusage_start;
struct rusage rusage_stop;
-
+#else
+ double clock_start;
+ double clock_end;
+#endif
// setup coefficients and input data
@@ -69,13 +77,16 @@
std::vector<float> taps (&coeffs[0], &coeffs[NTAPS]);
filter_t *f = filter_maker (taps);
-
- // get starting CPU usage
+ // get starting CPU usage
+#ifdef HAVE_SYS_RESOURCE_H
if (getrusage (RUSAGE_SELF, &rusage_start) < 0){
perror ("getrusage");
exit (1);
}
+#else
+ clock_start= (double) clock () * (double)(1000000 / CLOCKS_PER_SEC);
+#endif
// do the actual work
@@ -85,9 +96,10 @@
result = f->filter (&input[j]);
}
}
-
+
// get ending CPU usage
+#ifdef HAVE_SYS_RESOURCE_H
if (getrusage (RUSAGE_SELF, &rusage_stop) < 0){
perror ("getrusage");
exit (1);
@@ -104,6 +116,10 @@
- timeval_to_double (&rusage_start.ru_stime);
double total = user + sys;
+#else
+ clock_end= (double) clock () * (double)(1000000 / CLOCKS_PER_SEC);
+ double total = clock_end -clock_start;
+#endif
double macs = NTAPS * (double) TOTAL_TEST_SIZE;
@@ -117,7 +133,7 @@
do_all ()
{
std::vector<gr_fir_fsf_info> info;
- gr_fir_util::get_gr_fir_fsf_info (&info); // get all known FFF
implementations
+ gr_fir_util::get_gr_fir_fsf_info (&info); // get all known FFF
implementations
for (std::vector<gr_fir_fsf_info>::iterator p = info.begin ();
p != info.end ();
@@ -127,7 +143,7 @@
}
}
-int
+int
main (int argc, char **argv)
{
do_all ();
Index: src/tests/benchmark_dotprod_scc.cc
===================================================================
RCS file: /cvsroot/gnuradio/gnuradio-core/src/tests/benchmark_dotprod_scc.cc,v
retrieving revision 1.2
diff -u -r1.2 benchmark_dotprod_scc.cc
--- src/tests/benchmark_dotprod_scc.cc 10 May 2005 01:11:33 -0000 1.2
+++ src/tests/benchmark_dotprod_scc.cc 20 Jul 2005 01:13:16 -0000
@@ -1,28 +1,32 @@
/* -*- c++ -*- */
/*
* Copyright 2002 Free Software Foundation, Inc.
- *
+ *
* This file is part of GNU Radio
- *
+ *
* GNU Radio is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
- *
+ *
* GNU Radio is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
- *
+ *
* You should have received a copy of the GNU General Public License
* along with GNU Radio; see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
-
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
#include <stdio.h>
#include <sys/time.h>
+#ifdef HAVE_SYS_RESOURCE_H
#include <sys/resource.h>
+#endif
#include <unistd.h>
#include <gr_fir_util.h>
#include <gr_fir_scc.h>
@@ -51,32 +55,38 @@
benchmark (fir_maker_t filter_maker, const char *implementation_name)
{
int i;
- gr_complex coeffs[NTAPS];
+ float coeffs[NTAPS];
short input[BLOCK_SIZE + NTAPS];
long n;
gr_complex result;
+#ifdef HAVE_SYS_RESOURCE_H
struct rusage rusage_start;
struct rusage rusage_stop;
-
+#else
+ double clock_start;
+ double clock_end;
+#endif
// setup coefficients and input data
for (i = 0; i < NTAPS; i++)
- coeffs[i] = gr_complex(random() - RANDOM_MAX/2, random() - RANDOM_MAX/2);
+ coeffs[i] = random() - RANDOM_MAX/2;
for (i = 0; i < BLOCK_SIZE + NTAPS; i++)
input[i] = random() - RANDOM_MAX/2;
std::vector<gr_complex> taps (&coeffs[0], &coeffs[NTAPS]);
filter_t *f = filter_maker (taps);
-
- // get starting CPU usage
+ // get starting CPU usage
+#ifdef HAVE_SYS_RESOURCE_H
if (getrusage (RUSAGE_SELF, &rusage_start) < 0){
perror ("getrusage");
exit (1);
}
-
+#else
+clock_start= (double) clock () * (double)(1000000 / CLOCKS_PER_SEC);
+#endif
// do the actual work
for (n = 0; n < TOTAL_TEST_SIZE; n += BLOCK_SIZE){
@@ -85,9 +95,9 @@
result = f->filter (&input[j]);
}
}
-
- // get ending CPU usage
+ // get ending CPU usage
+#ifdef HAVE_SYS_RESOURCE_H
if (getrusage (RUSAGE_SELF, &rusage_stop) < 0){
perror ("getrusage");
exit (1);
@@ -104,6 +114,10 @@
- timeval_to_double (&rusage_start.ru_stime);
double total = user + sys;
+#else
+clock_end= (double) clock () * (double)(1000000 / CLOCKS_PER_SEC);
+double total = clock_end -clock_start;
+#endif
double macs = NTAPS * (double) TOTAL_TEST_SIZE;
@@ -117,7 +131,7 @@
do_all ()
{
std::vector<gr_fir_scc_info> info;
- gr_fir_util::get_gr_fir_scc_info (&info); // get all known SCC
implementations
+ gr_fir_util::get_gr_fir_scc_info (&info); // get all known SCC
implementations
for (std::vector<gr_fir_scc_info>::iterator p = info.begin ();
p != info.end () ;
@@ -126,7 +140,7 @@
}
}
-int
+int
main (int argc, char **argv)
{
do_all ();
Index: src/tests/benchmark_nco.cc
===================================================================
RCS file: /cvsroot/gnuradio/gnuradio-core/src/tests/benchmark_nco.cc,v
retrieving revision 1.1
diff -u -r1.1 benchmark_nco.cc
--- src/tests/benchmark_nco.cc 19 Dec 2004 05:48:39 -0000 1.1
+++ src/tests/benchmark_nco.cc 20 Jul 2005 01:13:16 -0000
@@ -1,28 +1,32 @@
/* -*- c++ -*- */
/*
* Copyright 2002,2004 Free Software Foundation, Inc.
- *
+ *
* This file is part of GNU Radio
- *
+ *
* GNU Radio is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
- *
+ *
* GNU Radio is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
- *
+ *
* You should have received a copy of the GNU General Public License
* along with GNU Radio; see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
-
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
#include <stdio.h>
#include <sys/time.h>
+#ifdef HAVE_SYS_RESOURCE_H
#include <sys/resource.h>
+#endif
#include <unistd.h>
#include <gr_nco.h>
#include <gr_fxpt_nco.h>
@@ -39,23 +43,31 @@
static void
benchmark (void test (float *x, float *y), const char *implementation_name)
{
+#ifdef HAVE_SYS_RESOURCE_H
struct rusage rusage_start;
struct rusage rusage_stop;
+#else
+ double clock_start;
+ double clock_end;
+#endif
float x, y;
// get starting CPU usage
-
+#ifdef HAVE_SYS_RESOURCE_H
if (getrusage (RUSAGE_SELF, &rusage_start) < 0){
perror ("getrusage");
exit (1);
}
-
+#else
+clock_start= (double) clock () * (double)(1000000 / CLOCKS_PER_SEC);
+#endif
// do the actual work
test (&x, &y);
-
+
// get ending CPU usage
+#ifdef HAVE_SYS_RESOURCE_H
if (getrusage (RUSAGE_SELF, &rusage_stop) < 0){
perror ("getrusage");
exit (1);
@@ -72,6 +84,10 @@
- timeval_to_double (&rusage_start.ru_stime);
double total = user + sys;
+#else
+clock_end= (double) clock () * (double)(1000000 / CLOCKS_PER_SEC);
+double total = clock_end -clock_start;
+#endif
printf ("%16s: cpu: %6.3f steps/sec: %10.3e\n",
implementation_name, total, ITERATIONS / total);
@@ -82,9 +98,9 @@
void native_sincos (float *x, float *y)
{
gr_nco<float,float> nco;
-
+
nco.set_freq (2 * M_PI / 5003.123);
-
+
for (int i = 0; i < ITERATIONS; i++){
nco.sincos (x, y);
nco.step ();
@@ -94,9 +110,9 @@
void fxpt_sincos (float *x, float *y)
{
gr_fxpt_nco nco;
-
+
nco.set_freq (2 * M_PI / 5003.123);
-
+
for (int i = 0; i < ITERATIONS; i++){
nco.sincos (x, y);
nco.step ();
@@ -108,9 +124,9 @@
void native_sin (float *x, float *y)
{
gr_nco<float,float> nco;
-
+
nco.set_freq (2 * M_PI / 5003.123);
-
+
for (int i = 0; i < ITERATIONS; i++){
*x = nco.sin ();
nco.step ();
@@ -120,9 +136,9 @@
void fxpt_sin (float *x, float *y)
{
gr_fxpt_nco nco;
-
+
nco.set_freq (2 * M_PI / 5003.123);
-
+
for (int i = 0; i < ITERATIONS; i++){
*x = nco.sin ();
nco.step ();
@@ -142,7 +158,7 @@
}
}
-int
+int
main (int argc, char **argv)
{
benchmark (nop_loop, "nop loop");
diff -urN gnuradio-core-cvs/src/lib/runtime/gr_vmcircbuf_createfilemapping.cc
gnuradio-core-mingw/src/lib/runtime/gr_vmcircbuf_createfilemapping.cc
--- gnuradio-core-cvs/src/lib/runtime/gr_vmcircbuf_createfilemapping.cc Thu Jan
1 01:00:00 1970
+++ gnuradio-core-mingw/src/lib/runtime/gr_vmcircbuf_createfilemapping.cc
Wed Jul 20 02:09:26 2005
@@ -0,0 +1,221 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2003 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#include <gr_vmcircbuf_createfilemapping.h>
+#include <stdexcept>
+#include <assert.h>
+#include <unistd.h>
+#include <fcntl.h>
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_MMAN_H
+#include <sys/mman.h>
+#endif
+#include <errno.h>
+#include <stdio.h>
+#include <gr_pagesize.h>
+#include <gr_tmp_path.h>
+
+
+static int s_seg_counter = 0;
+
+gr_vmcircbuf_createfilemapping::gr_vmcircbuf_createfilemapping (int size)
+ : gr_vmcircbuf (size)
+{
+#if !defined(HAVE_CREATEFILEMAPPING)
+ fprintf (stderr, "%s: createfilemapping is not available\n",__FUNCTION__);
+ throw std::runtime_error ("gr_vmcircbuf_createfilemapping");
+#else
+ if (size <= 0 || (size % gr_pagesize ()) != 0)
+ {
+ fprintf (stderr, "gr_vmcircbuf_createfilemapping: invalid size = %d\n",
size);
+ throw std::runtime_error ("gr_vmcircbuf_createfilemapping");
+ }
+ char seg_name[1024];
+ snprintf (seg_name, sizeof (seg_name),
+ "/gnuradio-%d-%d", getpid (), s_seg_counter);
+ d_handle = CreateFileMapping(
+ INVALID_HANDLE_VALUE, // use paging file
+ NULL, // default security
+ PAGE_READWRITE, // read/write access
+ 0, // max. object size
+ size, // buffer size
+ seg_name); // name of mapping object
+
+ s_seg_counter++;
+ if (d_handle == NULL || d_handle == INVALID_HANDLE_VALUE)
+ {
+ char msg[1024];
+ snprintf (msg, sizeof (msg), "gr_vmcircbuf_mmap_createfilemapping:
CreateFileMapping [%s] :%d", seg_name,GetLastError());
+ perror (msg);
+ throw std::runtime_error ("gr_vmcircbuf_mmap_createfilemapping");
+ }
+ d_first_copy = MapViewOfFile((HANDLE)d_handle, // handle to map object
+ FILE_MAP_WRITE,//FILE_MAP_ALL_ACCESS, // read/write
permission
+ 0,
+ 0,
+ size);
+ if (d_first_copy == NULL)
+ {
+ CloseHandle(d_handle); // cleanup
+ char msg[1024];
+ snprintf (msg, sizeof (msg), "gr_vmcircbuf_mmap_createfilemapping:
MapViewOfFile (1) :%d", GetLastError());
+ perror (msg);
+ throw std::runtime_error ("gr_vmcircbuf_mmap_createfilemapping");
+ }
+ d_second_copy = MapViewOfFileEx((HANDLE)d_handle, // handle to map object
+ FILE_MAP_WRITE, // read/write permission
+ 0,
+ 0,
+ size,
+ (char *)d_first_copy + size);//(LPVOID) ((char
*)d_first_copy + size));
+ //CloseHandle(d_handle); // is d_handle still needed ? Is the mapping
retained if the handle is closed?
+ if (((char *) d_first_copy + size) != (char *)d_second_copy)
+ {
+ UnmapViewOfFile(d_first_copy);
+ if(d_second_copy!=NULL) UnmapViewOfFile(d_second_copy);
+ d_first_copy = MapViewOfFile((HANDLE)d_handle, // handle to map object
+ FILE_MAP_WRITE, // read/write permission
+ 0,
+ 0,
+ size);
+
+ if (d_first_copy == NULL)
+ {
+ CloseHandle(d_handle); // cleanup
+ char msg[1024];
+ snprintf (msg, sizeof (msg), "gr_vmcircbuf_mmap_createfilemapping:
MapViewOfFile (2) :%d", GetLastError());
+ perror (msg);
+ throw std::runtime_error ("gr_vmcircbuf_mmap_createfilemapping");
+ }
+ int i;
+
+ for (i=0; i<8; i++)
+ {
+ d_second_copy = MapViewOfFile((HANDLE)d_handle, // handle to map
object
+ FILE_MAP_WRITE, // read/write permission
+ 0,
+ 0,
+ size);
+
+ if (d_second_copy == NULL)
+ {
+ char msg[1024];
+ snprintf (msg, sizeof (msg), "gr_vmcircbuf_mmap_createfilemapping:
MapViewOfFile (3) :%d", GetLastError());
+ perror (msg);
+ fprintf (stderr,"gr_vmcircbuf_mmap_createfilemapping: %p %p %p %p\n",
+ (char *)d_first_copy, (char *)d_second_copy, size, (char
*)d_first_copy + size);
+ UnmapViewOfFile(d_first_copy);
+ CloseHandle(d_handle); // cleanup
+ throw std::runtime_error ("gr_vmcircbuf_mmap_createfilemapping");
+ }
+ if (((char *) d_first_copy + size) == (char *)d_second_copy)
+ break;
+
+ UnmapViewOfFile(d_first_copy);
+ d_first_copy = d_second_copy;
+ }
+
+ if (i!=0) fprintf (stderr,"gr_vmcircbuf_mmap_createfilemapping:
contiguous? mmap %p %p %p %p, %d\n",
+ (char *)d_first_copy, (char *)d_second_copy, size, (char
*)d_first_copy + size,i);
+
+ if (((char *) d_first_copy + size) != (char *)d_second_copy)
+ {
+ // cleanup
+ fprintf (stderr,"gr_vmcircbuf_mmap_createfilemapping: non contiguous
mmap %p %p %p %p\n",
+ (char *)d_first_copy, (char *)d_second_copy, size, (char
*)d_first_copy + size);
+ UnmapViewOfFile(d_first_copy);
+ UnmapViewOfFile(d_second_copy);
+ CloseHandle(d_handle); // cleanup
+ throw std::runtime_error ("gr_vmcircbuf_mmap_createfilemapping");
+ }
+ }
+ // Now remember the important stuff
+ d_base = (char *) d_first_copy;
+ //d_second =(char *) d_second_copy;
+ d_size = size;
+#endif /*HAVE_CREATEFILEMAPPING*/
+}
+
+gr_vmcircbuf_createfilemapping::~gr_vmcircbuf_createfilemapping ()
+{
+#ifdef HAVE_CREATEFILEMAPPING
+ if (UnmapViewOfFile(d_first_copy) == 0)
+ {
+ perror ("gr_vmcircbuf_createfilemapping: UnmapViewOfFile(d_first_copy)");
+ }
+ d_base=NULL;
+ if (UnmapViewOfFile(d_second_copy) == 0)
+ {
+ perror ("gr_vmcircbuf_createfilemapping: UnmapViewOfFile(d_second_copy)");
+ }
+ //d_second=NULL;
+ CloseHandle(d_handle);
+#endif
+}
+
+// ----------------------------------------------------------------
+// The factory interface
+// ----------------------------------------------------------------
+
+
+gr_vmcircbuf_factory *gr_vmcircbuf_createfilemapping_factory::s_the_factory =
0;
+
+gr_vmcircbuf_factory *
+gr_vmcircbuf_createfilemapping_factory::singleton ()
+{
+ if (s_the_factory)
+ return s_the_factory;
+ s_the_factory = new gr_vmcircbuf_createfilemapping_factory ();
+ return s_the_factory;
+}
+
+int
+gr_vmcircbuf_createfilemapping_factory::granularity ()
+{
+#ifdef HAVE_CREATEFILEMAPPING
+ // return 65536;//TODO, check, is this needed or can we just use
gr_pagesize()
+ SYSTEM_INFO system_info;
+ GetSystemInfo(&system_info);
+ //fprintf(stderr,"win32 AllocationGranularity
%p\n",(int)system_info.dwAllocationGranularity);
+ return (int)system_info.dwAllocationGranularity;
+#else
+ return gr_pagesize ();
+#endif
+}
+
+gr_vmcircbuf *
+gr_vmcircbuf_createfilemapping_factory::make (int size)
+{
+ try
+ {
+ return new gr_vmcircbuf_createfilemapping (size);
+ }
+ catch (...)
+ {
+ return 0;
+ }
+}
diff -urN gnuradio-core-cvs/src/lib/runtime/gr_vmcircbuf_createfilemapping.h
gnuradio-core-mingw/src/lib/runtime/gr_vmcircbuf_createfilemapping.h
--- gnuradio-core-cvs/src/lib/runtime/gr_vmcircbuf_createfilemapping.h Thu Jan
1 01:00:00 1970
+++ gnuradio-core-mingw/src/lib/runtime/gr_vmcircbuf_createfilemapping.h
Wed Jul 20 02:09:26 2005
@@ -0,0 +1,76 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2003 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef _GR_VMCIRCBUF_CREATEFILEMAPPING_H_
+#define _GR_VMCIRCBUF_CREATEFILEMAPPING_H_
+
+#include <gr_vmcircbuf.h>
+
+#ifdef HAVE_CREATEFILEMAPPING
+#include <windows.h>
+#include <stdio.h>
+#include <conio.h>
+#endif
+/*!
+ * \brief concrete class to implement circular buffers with mmap and shm_open
+ */
+class gr_vmcircbuf_createfilemapping : public gr_vmcircbuf
+{
+ public:
+ // CREATORS
+ gr_vmcircbuf_createfilemapping (int size);
+ virtual ~gr_vmcircbuf_createfilemapping ();
+#ifdef HAVE_CREATEFILEMAPPING
+ private:
+ HANDLE d_handle;
+ LPVOID d_first_copy;
+ LPVOID d_second_copy;
+#endif
+};
+
+/*!
+ * \brief concrete factory for circular buffers built using mmap and shm_open
+ */
+class gr_vmcircbuf_createfilemapping_factory : public gr_vmcircbuf_factory
+{
+ private:
+ static gr_vmcircbuf_factory *s_the_factory;
+
+ public:
+ static gr_vmcircbuf_factory *singleton ();
+
+ virtual const char *name () const { return
"gr_vmcircbuf_createfilemapping_factory"; }
+
+ /*!
+ * \brief return granularity of mapping, typically equal to page size
+ */
+ virtual int granularity ();
+
+ /*!
+ * \brief return a gr_vmcircbuf, or 0 if unable.
+ *
+ * Call this to create a doubly mapped circular buffer.
+ */
+ virtual gr_vmcircbuf *make (int size);
+};
+
+#endif /* _GR_VMCIRCBUF_CREATEFILEMAPPING_H_ */
Building and using gnuradio on windows (win32) using mingw
Required tools and libraries
MingW and Msys
Download the latest stable version from the mingw site oand follow their
installation instructions)
Python for windows version 2.4 (or higher)
You do not need to build this yourself.
You can just install the windows executable which you can find on the python
site.
I am not sure if it will work if you have speces in your python pathname.
I recommend installing it in C:\Python24 or D:\Python24
Libtool
If you are building from cvs you need a recent libtool
msys comes with libtool, but the version distributed with current mingw doesn't
work with gnuradio.
download, build and install a recent libtool
cppunit
Build and install cppunit
boost
build and install boost (maybe you can get away with only unpacking the source,
we only use the boost header files)
If you build boost, you first have to download jam (boost jam) for win32. (Do
not use build and use the cygwin version)
build environment:
You need to have the following files on your PATH:
python.exe python24.dll libcppunit-1-10-2.dll libfftw3f-3.dll fftwf-wisdom.exe
cppunit-config
If you have cygwin installed Make sure that NO cygwin executables are on your
path.
needed on PATH:
/usr/local/bin
/mingw/bin
/bin
/c/Python24/ python.exe
/c/Python24/libs python24.dll
/c/Python24/DLLs
/usr/local/bin or /mingw/bin or /my/special/installed/lib/folder/bin
libcppunit-1-10-2.dll
libfftw3f-3.dll
fftw-wisdom-to-conf
fftwf-wisdom.exe
cppunit-config
/c/WINNT/system32
/c/WINNT
I made a little script set_clean_path.sh to set my path for building gnuradio
where I just discard the original PATH (to get rid of the cygwin executables on
my default path) and just include what is needed:
#!/bin/sh
export
PATH=".:/usr/local/bin:/mingw/bin:/bin:/c/Python24:/c/Python24/DLLs:/c/Python24/libs:/my/special/installed/lib/folder/bin:/c/WINNT/system32:/c/WINNT:/c/WINNT/System32/Wbem:.
You need to source this script to set the PATH.
. ./set_clean_path.sh
(notice the extra dot and space in the beginning of the line, this means source
this file. Sourcing means execute it and remember all environment variables set
in this script)
If you are building from cvs it is recommended that you edit bootstrap to your
needs and use it
If you built a recent libtool and didn't overwrite the original libtool
(because you installed the new version in /usr/local) then you have to tell
aclocal to use the more recent libtool m4 macros.
You can do this by appending -I /usr/local/share/aclocal to the aclocal
commandline
I also changed the aclocal and automake invocations to use the most recent
version in my bootstrap script
Here follows the bootstrap script I use
#!/bin/sh
rm -fr config.cache autom4te*.cache
aclocal-1.8 -I config -I /usr/local/share/aclocal
autoconf
autoheader
libtoolize --automake
automake-1.8 --add-missing
If you run this script it will convert a clean cvs checkout to a version which
you can configure, build and install
So now you can configure gnuradio.
On win32 /mingw you need to give it a few parameters
You need to tell it where cppunit is installed
where boost include files are to be found
where the pkg-config of libfftw is to be found
to use a generic cpu (no 3Dnow,SSE,MMX) (This option will not be needed anymore
soon)
If you have boost installed in C:\boost_1_32_0 and cppunit and fftw in
/usr/local then you would need the following configur commandline
$ ./configure --with-md-cpu=generic --with-cppunit-prefix=/usr/local
--with-boost-include-dir=/c/boost_1_32_0/include/boost-1_32
PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
If everything went well you cannow do
make
make install
Now you have a working gnuradio-core
Now you can go on building and installing gr-audio-windows and windows usrp and
wxgui
remember that all gnuradio and python dlls need to be on your path to use
gnuradio
The gnuradio dlls are installed at
/c/Python24/Lib/site-packages:/c/Python24/Lib/site-packages/gnuradio:/c/Python24/Lib/site-packages/gnuradio/gr
.Testing gr_vmcircbuf_createfilemapping_factory...
gr_vmcircbuf_mmap_createfilemapping: contiguous? mmap 101C0000 105C0000
00400000 105C0000, 1
....... gr_vmcircbuf_createfilemapping_factory: OK
Testing gr_vmcircbuf_sysv_shm_factory...
gr_vmcircbuf_sysv_shm: sysv shared memory is not available
....... gr_vmcircbuf_sysv_shm_factory: Doesn't work
Testing gr_vmcircbuf_mmap_shm_open_factory...
gr_vmcircbuf_mmap_mkstemp: mmap or shm_open is not available
....... gr_vmcircbuf_mmap_shm_open_factory: Doesn't work
Testing gr_vmcircbuf_mmap_tmpfile_factory...
gr_vmcircbuf_mmap_tmpfile: mmap or mkstemp is not available
....... gr_vmcircbuf_mmap_tmpfile_factory: Doesn't work
...................qa_gr_circular_file.data: file too small to be circular
buffer
make[3]: *** [check-TESTS] Error 1
make[2]: *** [check-am] Error 2
make[1]: *** [check-recursive] Error 1
make: *** [check-recursive] Error 1
- [Discuss-gnuradio] mingw patch with working createfilemapping and resolved backslash problems,
Martin Dvh <=