Learning Porting to Aarch64: cxxtools(2)
Today I take a look at the cxxtools, which is a set of libraries including a lot of functionality.
First of all download and prep, get everything in the rpmbuild directory.
Taking a look at the source code, we can find it has a separate file to code the assembly for arm.
Looks like everything is there?
When I build the project, it throws a lot of warnings:
/bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I../src -I../include -I../include -Wno-long-long -Wall -pedantic -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -grecord-gcc-switches -fno-stack-protector -c -o csvformatter.lo csvformatter.cpp
libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../src -I../include -I../include -Wno-long-long -Wall -pedantic -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -grecord-gcc-switches -fno-stack-protector -c csvformatter.cpp -fPIC -DPIC -o .libs/csvformatter.o
In file included from ../include/cxxtools/string.h:34:0,
from ../include/cxxtools/formatter.h:32,
from ../include/cxxtools/csvformatter.h:32,
from csvformatter.cpp:29:
../include/cxxtools/char.h: In function 'bool cxxtools::operator==(const cxxtools::Char&, wchar_t)':
../include/cxxtools/char.h:143:35: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
{ return a.value() == b; }
^
../include/cxxtools/char.h: In function 'bool cxxtools::operator==(wchar_t, const cxxtools::Char&)':
../include/cxxtools/char.h:145:35: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
{ return a == b.value(); }
^
../include/cxxtools/char.h: In function 'bool cxxtools::operator!=(const cxxtools::Char&, wchar_t)':
../include/cxxtools/char.h:156:35: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
{ return a.value() != b; }
^
../include/cxxtools/char.h: In function 'bool cxxtools::operator!=(wchar_t, const cxxtools::Char&)':
../include/cxxtools/char.h:158:35: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
{ return a != b.value(); }
^
../include/cxxtools/char.h: In function 'bool cxxtools::operator<(const cxxtools::Char&, wchar_t)':
../include/cxxtools/char.h:169:34: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
{ return a.value() < b; }
^
../include/cxxtools/char.h: In function 'bool cxxtools::operator<(wchar_t, const cxxtools::Char&)':
../include/cxxtools/char.h:171:34: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
{ return a < b.value(); }
^
libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../src -I../include -I../include -Wno-long-long -Wall -pedantic -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -grecord-gcc-switches -fno-stack-protector -c csvformatter.cpp -fPIC -DPIC -o .libs/csvformatter.o
In file included from ../include/cxxtools/string.h:34:0,
from ../include/cxxtools/formatter.h:32,
from ../include/cxxtools/csvformatter.h:32,
from csvformatter.cpp:29:
../include/cxxtools/char.h: In function 'bool cxxtools::operator==(const cxxtools::Char&, wchar_t)':
../include/cxxtools/char.h:143:35: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
{ return a.value() == b; }
^
../include/cxxtools/char.h: In function 'bool cxxtools::operator==(wchar_t, const cxxtools::Char&)':
../include/cxxtools/char.h:145:35: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
{ return a == b.value(); }
^
../include/cxxtools/char.h: In function 'bool cxxtools::operator!=(const cxxtools::Char&, wchar_t)':
../include/cxxtools/char.h:156:35: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
{ return a.value() != b; }
^
../include/cxxtools/char.h: In function 'bool cxxtools::operator!=(wchar_t, const cxxtools::Char&)':
../include/cxxtools/char.h:158:35: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
{ return a != b.value(); }
^
../include/cxxtools/char.h: In function 'bool cxxtools::operator<(const cxxtools::Char&, wchar_t)':
../include/cxxtools/char.h:169:34: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
{ return a.value() < b; }
^
../include/cxxtools/char.h: In function 'bool cxxtools::operator<(wchar_t, const cxxtools::Char&)':
../include/cxxtools/char.h:171:34: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
{ return a < b.value(); }
^
......
And then stuck.
I was thinking about how to fix this, until I take a look at their latest patch:
....
- else if (ch == L'\n' || ch == L'\r')
+ else if ( (int) ch == (int) L'\n' || (int) ch == (int) L'\r')
{
log_debug("title=\"" << _titles.back() << '"');
_noColumns = 1;
- _state = (ch == L'\r' ? state_cr : state_rowstart);
+ _state = ( (int) ch == (int) L'\r' ? state_cr : state_rowstart);
}
- else if (ch == L'\'' || ch == L'"')
+ else if ( (int) ch == (int) L'\'' || (int) ch == (int) L'"')
+ else if ( (int) ch == (int) L'\n' || (int) ch == (int) L'\r')
{
log_debug("title=\"" << _titles.back() << '"');
_noColumns = 1;
- _state = (ch == L'\r' ? state_cr : state_rowstart);
+ _state = ( (int) ch == (int) L'\r' ? state_cr : state_rowstart);
}
- else if (ch == L'\'' || ch == L'"')
+ else if ( (int) ch == (int) L'\'' || (int) ch == (int) L'"')
.....
They fixed similar issue by force casting the variables to int and make the comparison safe.
I will do same thing for the char.h and try building again.
No comments:
Post a Comment