Сборка без атомарных операций

Compilation and installation questions and stories
xander
Posts: 9
Joined: 05 Oct 2015, 14:36

Сборка без атомарных операций

Post by xander »

Здравствуйте! Мы работаем с платформой RLX (вариант MIPS Realtek). В GCC данной архитектуры нет поддержки атомарных операций. Соответственно, сборка валится, ругаясь несколько раз подобным образом:

Code: Select all

undefined reference to "__sync_sub_and_fetch_4"
При замене типов целевых переменных на uint_16 возникает такая же ошибка, но уже с двойкой (два байта). Возможно ли предусмотреть обходной вариант без использования этих функций?

P. S. Проверял на стабильной 1.9.0. С git то же самое.
Dmitry
Администратор
Posts: 954
Joined: 09 Oct 2014, 10:06

Re: Сборка без атомарных операций

Post by Dmitry »

эта платформа многоядерная/многопроцессорная ?
xander
Posts: 9
Joined: 05 Oct 2015, 14:36

Re: Сборка без атомарных операций

Post by xander »

Нет, одноядерный 32-битный MIPS в роутерах. Ищем реализацию PPTP/L2TP-серверов.

Code: Select all

# cat /proc/cpuinfo
system type             : RTL8672
processor               : 0
cpu model               : 56322
BogoMIPS                : 599.65
tlb_entries             : 64
mips16 implemented      : yes
Dmitry
Администратор
Posts: 954
Joined: 09 Oct 2014, 10:06

Re: Сборка без атомарных операций

Post by Dmitry »

тогда можно сделать функции-заглушки
xander
Posts: 9
Joined: 05 Oct 2015, 14:36

Re: Сборка без атомарных операций

Post by xander »

Можно подробнее? Я никогда не сталкивался с __sync_* операциями и не знаю, чем замещать их функционал.
Dmitry
Администратор
Posts: 954
Joined: 09 Oct 2014, 10:06

Re: Сборка без атомарных операций

Post by Dmitry »

патч приложен
в конфиге важно:
[core]
thread-count=1
Attachments
sync.patch.gz
(383 Bytes) Downloaded 107 times
xander
Posts: 9
Joined: 05 Oct 2015, 14:36

Re: Сборка без атомарных операций

Post by xander »

Отлично, благодарю!
xander
Posts: 9
Joined: 05 Oct 2015, 14:36

Re: Сборка без атомарных операций

Post by xander »

Удалось собрать утилиту, но при запуске ошибка:

Code: Select all

accel-pppd: can't load library 'libtriton.so'
Собираем так:

Code: Select all

ACCEL_PPP_CONF_OPT = -DCMAKE_EXE_LINKER_FLAGS="$(TARGET_LDFLAGS) -Wl,-rpath,/usr/lib/accel-ppp" -DKDIR=${LINUX26_DIR}

define ACCEL_PPP_CONFIGURE_CMDS
	(cd ${@D} && \
	rm -f CMakeCache.txt && \
	rm -rf build && mkdir build && cd build && \
	$(HOST_DIR)/usr/bin/cmake ${ACCEL_PPP_CONF_OPT} ${@D} \
		-DCMAKE_TOOLCHAIN_FILE="$(BASE_DIR)/toolchainfile_accel-ppp.cmake" \
		-DCMAKE_INSTALL_PREFIX="/usr" \
	)
endef

define ACCEL_PPP_BUILD_CMDS
	${MAKE} -C ${@D}/build
endef
Можно ли как-то локализовать проблему?
Dmitry
Администратор
Posts: 954
Joined: 09 Oct 2014, 10:06

Re: Сборка без атомарных операций

Post by Dmitry »

как установка осуществляется ?
xander
Posts: 9
Joined: 05 Oct 2015, 14:36

Re: Сборка без атомарных операций

Post by xander »

Code: Select all

${MAKE} -C ${@D}/build install DESTDIR=$(TARGET_DIR)
В итоге после установки на устройстве получаем следующую структуру файлов:

Code: Select all

/usr/bin/accel-cmd
/usr/sbin/accel-pppd
/usr/lib/accel-ppp/*.so
Пробовал менять порядок линковки, но ругается все равно именно на libtriton. LIB_SUFFIX тоже пробовал раздефайнить, не помогает. Открывал итоговый accel-pppd hex-редактором, там зашит нормальный путь "/usr/lib/accel-ppp".
Post Reply