diff options
author | gnieboer <gnieboer@corpcomm.net> | 2016-05-22 10:38:19 +0300 |
---|---|---|
committer | Johnathan Corgan <johnathan@corganlabs.com> | 2016-05-30 13:25:54 -0700 |
commit | 23460e36094ad85c559a538918c3b40e76b2fa37 (patch) | |
tree | de433fef9de1f71f80718b0ca81d87e9684de659 | |
parent | 25142dad0464bed59dc03672931aab637f82d376 (diff) |
MSVC-specific fixes for compatibility
* Changed dtv_viterbi_decoder to use __GR_ATTR_ALIGNED macro for
cross-compiler compatibility
* Replace usleep() with boost equivalent for cross-compiler
compatibility
* Includes windows-specific headers for portaudio
* Added macro to handle use of VLAs on non-C99 compilers (MSVC) using
alloca to declare variable length arrays
* Remove setting SO_LINGER option for the UDP source. SO_LINGER is
not an applicable option for a UDP socket. Windows will throw an
exception if set. Linux allows it to be set but does not use it.
* VS 2013+ supports round()
-rw-r--r-- | gnuradio-runtime/include/gnuradio/attributes.h | 11 | ||||
-rw-r--r-- | gr-audio/lib/portaudio/portaudio_sink.cc | 3 | ||||
-rw-r--r-- | gr-audio/lib/portaudio/portaudio_source.cc | 3 | ||||
-rw-r--r-- | gr-blocks/lib/udp_source_impl.cc | 3 | ||||
-rw-r--r-- | gr-dtv/lib/dvbt/dvbt_bit_inner_deinterleaver_impl.cc | 5 | ||||
-rw-r--r-- | gr-dtv/lib/dvbt/dvbt_bit_inner_interleaver_impl.cc | 3 | ||||
-rw-r--r-- | gr-dtv/lib/dvbt/dvbt_ofdm_sym_acquisition_impl.cc | 4 | ||||
-rw-r--r-- | gr-dtv/lib/dvbt/dvbt_reed_solomon.cc | 14 | ||||
-rw-r--r-- | gr-dtv/lib/dvbt/dvbt_viterbi_decoder_impl.cc | 24 | ||||
-rw-r--r-- | gr-vocoder/lib/codec2/fdmdv.c | 2 | ||||
-rw-r--r-- | gr-zeromq/lib/pull_msg_source_impl.cc | 4 | ||||
-rw-r--r-- | gr-zeromq/lib/req_msg_source_impl.cc | 4 | ||||
-rw-r--r-- | gr-zeromq/lib/sub_msg_source_impl.cc | 4 |
13 files changed, 53 insertions, 31 deletions
diff --git a/gnuradio-runtime/include/gnuradio/attributes.h b/gnuradio-runtime/include/gnuradio/attributes.h index 3d2e764cd5..0102c110c2 100644 --- a/gnuradio-runtime/include/gnuradio/attributes.h +++ b/gnuradio-runtime/include/gnuradio/attributes.h @@ -78,4 +78,15 @@ # pragma warning(disable: 4290) // C++ exception specification ignored except to indicate a function is not __declspec(nothrow) #endif +//////////////////////////////////////////////////////////////////////// +// implement cross-compiler VLA macros +//////////////////////////////////////////////////////////////////////// +#ifdef C99 +# define __GR_VLA(TYPE, buf, size) TYPE buf[size] +# define __GR_VLA2D(TYPE, buf, size, size2) TYPE buf[size][size2] +#else +# define __GR_VLA(TYPE, buf, size) TYPE * buf = (TYPE *) alloca(sizeof(TYPE) * (size)) +# define __GR_VLA2D(TYPE, buf, size, size2) TYPE ** buf = (TYPE **) alloca(sizeof(TYPE) * (size) * (size2)) +#endif + #endif /* INCLUDED_GNURADIO_ATTRIBUTES_H */ diff --git a/gr-audio/lib/portaudio/portaudio_sink.cc b/gr-audio/lib/portaudio/portaudio_sink.cc index 4a0a969895..2397b65442 100644 --- a/gr-audio/lib/portaudio/portaudio_sink.cc +++ b/gr-audio/lib/portaudio/portaudio_sink.cc @@ -34,6 +34,9 @@ #include <unistd.h> #include <stdexcept> #include <string.h> +#ifdef _MSC_VER +#include <io.h> +#endif namespace gr { namespace audio { diff --git a/gr-audio/lib/portaudio/portaudio_source.cc b/gr-audio/lib/portaudio/portaudio_source.cc index efbe2b6fc7..1e1bbfacbb 100644 --- a/gr-audio/lib/portaudio/portaudio_source.cc +++ b/gr-audio/lib/portaudio/portaudio_source.cc @@ -34,6 +34,9 @@ #include <unistd.h> #include <stdexcept> #include <string.h> +#ifdef _MSC_VER +#include <io.h> +#endif namespace gr { namespace audio { diff --git a/gr-blocks/lib/udp_source_impl.cc b/gr-blocks/lib/udp_source_impl.cc index e09ed43658..c3705d8f66 100644 --- a/gr-blocks/lib/udp_source_impl.cc +++ b/gr-blocks/lib/udp_source_impl.cc @@ -93,9 +93,6 @@ namespace gr { d_socket = new boost::asio::ip::udp::socket(d_io_service); d_socket->open(d_endpoint.protocol()); - boost::asio::socket_base::linger loption(true, 0); - d_socket->set_option(loption); - boost::asio::socket_base::reuse_address roption(true); d_socket->set_option(roption); diff --git a/gr-dtv/lib/dvbt/dvbt_bit_inner_deinterleaver_impl.cc b/gr-dtv/lib/dvbt/dvbt_bit_inner_deinterleaver_impl.cc index bf7613adae..9e45c81018 100644 --- a/gr-dtv/lib/dvbt/dvbt_bit_inner_deinterleaver_impl.cc +++ b/gr-dtv/lib/dvbt/dvbt_bit_inner_deinterleaver_impl.cc @@ -135,8 +135,9 @@ namespace gr { // First index of d_b is Bit interleaver number // Second index of d_b is the position inside Bit interleaver - unsigned char d_b[d_v][d_bsize]; - + // Linux: unsigned char d_b[d_v][d_bsize]; + __GR_VLA2D(unsigned char, d_b, d_v, d_bsize); + for (int bcount = 0; bcount < bmax; bcount++) { for (int w = 0; w < d_bsize; w++) { int c = in[(bcount * d_bsize) + w]; diff --git a/gr-dtv/lib/dvbt/dvbt_bit_inner_interleaver_impl.cc b/gr-dtv/lib/dvbt/dvbt_bit_inner_interleaver_impl.cc index 0ab3003d50..d2bfb3d9d2 100644 --- a/gr-dtv/lib/dvbt/dvbt_bit_inner_interleaver_impl.cc +++ b/gr-dtv/lib/dvbt/dvbt_bit_inner_interleaver_impl.cc @@ -136,7 +136,8 @@ namespace gr { // First index of d_b is Bit interleaver number // Second index of d_b is the position inside the Bit interleaver - unsigned char d_b[d_v][d_bsize]; + // Linux: unsigned char d_b[d_v][d_bsize]; + __GR_VLA2D(unsigned char, d_b, d_v, d_bsize); for (int bcount = 0; bcount < bmax; bcount++) { for (int i = 0; i < d_bsize; i++) { diff --git a/gr-dtv/lib/dvbt/dvbt_ofdm_sym_acquisition_impl.cc b/gr-dtv/lib/dvbt/dvbt_ofdm_sym_acquisition_impl.cc index 84b20f9ad4..6617c2c11f 100644 --- a/gr-dtv/lib/dvbt/dvbt_ofdm_sym_acquisition_impl.cc +++ b/gr-dtv/lib/dvbt/dvbt_ofdm_sym_acquisition_impl.cc @@ -109,8 +109,8 @@ namespace gr { int low, size; // Array to store peak positions - int peak_pos[d_fft_length]; - float d_phi[d_fft_length]; + __GR_VLA(int, peak_pos, d_fft_length); + __GR_VLA(float, d_phi, d_fft_length); // Calculate norm low = lookup_stop - (d_cp_length + d_fft_length - 1); diff --git a/gr-dtv/lib/dvbt/dvbt_reed_solomon.cc b/gr-dtv/lib/dvbt/dvbt_reed_solomon.cc index 6277350b42..7d67a0a81a 100644 --- a/gr-dtv/lib/dvbt/dvbt_reed_solomon.cc +++ b/gr-dtv/lib/dvbt/dvbt_reed_solomon.cc @@ -245,13 +245,13 @@ namespace gr { int dvbt_reed_solomon::rs_decode(unsigned char *data, unsigned char *eras, const int no_eras) { - unsigned char sigma[2 * d_t + 1]; - unsigned char b[2 * d_t + 1]; - unsigned char T[2 * d_t + 1]; - unsigned char reg[2 * d_t + 1]; - unsigned char root[2 * d_t + 1]; - unsigned char loc[2 * d_t + 1]; - unsigned char omega[2 * d_t]; + __GR_VLA(unsigned char, sigma, 2 * d_t + 1); + __GR_VLA(unsigned char, b, 2 * d_t + 1); + __GR_VLA(unsigned char, T, 2 * d_t + 1); + __GR_VLA(unsigned char, reg, 2 * d_t + 1); + __GR_VLA(unsigned char, root, 2 * d_t + 1); + __GR_VLA(unsigned char, loc, 2 * d_t + 1); + __GR_VLA(unsigned char, omega, 2 * d_t); // Compute erasure locator polynomial memset(sigma, 0, 2 * d_t + 1); diff --git a/gr-dtv/lib/dvbt/dvbt_viterbi_decoder_impl.cc b/gr-dtv/lib/dvbt/dvbt_viterbi_decoder_impl.cc index 8e22d8df5a..05554c55fa 100644 --- a/gr-dtv/lib/dvbt/dvbt_viterbi_decoder_impl.cc +++ b/gr-dtv/lib/dvbt/dvbt_viterbi_decoder_impl.cc @@ -71,25 +71,25 @@ namespace gr { }; #ifdef DTV_SSE2 - __m128i dvbt_viterbi_decoder_impl::d_metric0[4] __attribute__ ((aligned(16))); - __m128i dvbt_viterbi_decoder_impl::d_metric1[4] __attribute__ ((aligned(16))); - __m128i dvbt_viterbi_decoder_impl::d_path0[4] __attribute__ ((aligned(16))); - __m128i dvbt_viterbi_decoder_impl::d_path1[4] __attribute__ ((aligned(16))); + __GR_ATTR_ALIGNED(16) __m128i dvbt_viterbi_decoder_impl::d_metric0[4]; + __GR_ATTR_ALIGNED(16) __m128i dvbt_viterbi_decoder_impl::d_metric1[4]; + __GR_ATTR_ALIGNED(16) __m128i dvbt_viterbi_decoder_impl::d_path0[4]; + __GR_ATTR_ALIGNED(16) __m128i dvbt_viterbi_decoder_impl::d_path1[4]; #else - unsigned char dvbt_viterbi_decoder_impl::d_metric0_generic[64] __attribute__ ((aligned(16))); - unsigned char dvbt_viterbi_decoder_impl::d_metric1_generic[64] __attribute__ ((aligned(16))); - unsigned char dvbt_viterbi_decoder_impl::d_path0_generic[64] __attribute__ ((aligned(16))); - unsigned char dvbt_viterbi_decoder_impl::d_path1_generic[64] __attribute__ ((aligned(16))); + __GR_ATTR_ALIGNED(16) unsigned char dvbt_viterbi_decoder_impl::d_metric0_generic[64]; + __GR_ATTR_ALIGNED(16) unsigned char dvbt_viterbi_decoder_impl::d_metric1_generic[64]; + __GR_ATTR_ALIGNED(16) unsigned char dvbt_viterbi_decoder_impl::d_path0_generic[64]; + __GR_ATTR_ALIGNED(16) unsigned char dvbt_viterbi_decoder_impl::d_path1_generic[64]; #endif #ifdef DTV_SSE2 - branchtab27 dvbt_viterbi_decoder_impl::Branchtab27_sse2[2] __attribute__ ((aligned(16))); + __GR_ATTR_ALIGNED(16) branchtab27 dvbt_viterbi_decoder_impl::Branchtab27_sse2[2]; #else - branchtab27 dvbt_viterbi_decoder_impl::Branchtab27_generic[2] __attribute__ ((aligned(16))); + __GR_ATTR_ALIGNED(16) branchtab27 dvbt_viterbi_decoder_impl::Branchtab27_generic[2]; #endif - unsigned char dvbt_viterbi_decoder_impl::mmresult[64] __attribute__((aligned(16))); - unsigned char dvbt_viterbi_decoder_impl::ppresult[TRACEBACK_MAX][64] __attribute__((aligned(16))); + __GR_ATTR_ALIGNED(16) unsigned char dvbt_viterbi_decoder_impl::mmresult[64]; + __GR_ATTR_ALIGNED(16) unsigned char dvbt_viterbi_decoder_impl::ppresult[TRACEBACK_MAX][64]; #ifdef DTV_SSE2 void diff --git a/gr-vocoder/lib/codec2/fdmdv.c b/gr-vocoder/lib/codec2/fdmdv.c index 8855f76ae5..51d6bef544 100644 --- a/gr-vocoder/lib/codec2/fdmdv.c +++ b/gr-vocoder/lib/codec2/fdmdv.c @@ -25,7 +25,7 @@ along with this program; if not, see <http://www.gnu.org/licenses/>. */ -#ifdef _MSC_VER +#if defined(_MSC_VER) && (_MSC_VER < 1800) // round() not available before VS 2013 #define round(number) number < 0.0 ? ceil(number - 0.5) : floor(number + 0.5) #endif diff --git a/gr-zeromq/lib/pull_msg_source_impl.cc b/gr-zeromq/lib/pull_msg_source_impl.cc index ca496ef216..9d00cdfd74 100644 --- a/gr-zeromq/lib/pull_msg_source_impl.cc +++ b/gr-zeromq/lib/pull_msg_source_impl.cc @@ -25,6 +25,8 @@ #endif #include <gnuradio/io_signature.h> +#include <boost/thread/thread.hpp> +#include <boost/date_time/posix_time/posix_time.hpp> #include "pull_msg_source_impl.h" #include "tag_headers.h" @@ -102,7 +104,7 @@ namespace gr { message_port_pub(pmt::mp("out"), m); } else { - usleep(100); + boost::this_thread::sleep(boost::posix_time::microseconds(100)); } } } diff --git a/gr-zeromq/lib/req_msg_source_impl.cc b/gr-zeromq/lib/req_msg_source_impl.cc index b30ef2679d..e231a31962 100644 --- a/gr-zeromq/lib/req_msg_source_impl.cc +++ b/gr-zeromq/lib/req_msg_source_impl.cc @@ -25,6 +25,8 @@ #endif #include <gnuradio/io_signature.h> +#include <boost/thread/thread.hpp> +#include <boost/date_time/posix_time/posix_time.hpp> #include "req_msg_source_impl.h" #include "tag_headers.h" @@ -114,7 +116,7 @@ namespace gr { message_port_pub(pmt::mp("out"), m); } else { - usleep(100); + boost::this_thread::sleep(boost::posix_time::microseconds(100)); } } } diff --git a/gr-zeromq/lib/sub_msg_source_impl.cc b/gr-zeromq/lib/sub_msg_source_impl.cc index b016405d40..0a11ea77f0 100644 --- a/gr-zeromq/lib/sub_msg_source_impl.cc +++ b/gr-zeromq/lib/sub_msg_source_impl.cc @@ -25,6 +25,8 @@ #endif #include <gnuradio/io_signature.h> +#include <boost/thread/thread.hpp> +#include <boost/date_time/posix_time/posix_time.hpp> #include "sub_msg_source_impl.h" #include "tag_headers.h" @@ -101,7 +103,7 @@ namespace gr { message_port_pub(pmt::mp("out"), m); } else { - usleep(100); + boost::this_thread::sleep(boost::posix_time::microseconds(100)); } } } |