[РЕШЕНО] Ошибка сборки TWRP - ТОЛЬКО на Arch Linux

Xts
только правка исходников
Это уже понятно, только где и как? Хотя конечно можно и забить, и собирать на Дебиане, в конце концов уже через полгода аппаратов на 5-м андроиде станет исчезающе мало...
Вы Makefile показать можете? Флаг компиляции -Werror заставляет компилятор воспринимать все предупреждения как ошибки. Попробуйте или убрать его вовсе, или заменить на -Wall. Это позволит видеть все предупреждения, но не прерывать компиляцию.
alexandr05
Вы Makefile показать можете? Флаг компиляции -Werror заставляет компилятор воспринимать все предупреждения как ошибки. Попробуйте или убрать его вовсе, или заменить на -Wall. Это позволит видеть все предупреждения, но не прерывать компиляцию.
О каком Makefile речь, ведь их много? Если из корня андроид-исходников, то там почти ничего нет:

### DO NOT EDIT THIS FILE ###
include build/core/main.mk
### DO NOT EDIT THIS FILE ###

Вообще, был бы благодарен, если бы прозвучала наконец конкретика - где этот флаг "-Werror" смотреть (в системе или в исходниках), что с ним делать? Потому что grep только по андроид-исходникам выдал такое количество текста "-Werror", что голова кружится.
alexandr05
-Werror заставляет компилятор воспринимать все предупреждения как ошибки.
Совершенно верно .... Прочитал и понял, что как всегда по невнимательности допустил промах - описался насчет флага -Werror=stringop-truncation - нужно пробовать -Wno-stringop-truncation, но из опыта и это помогает не всегда.

UPD - Как же стал часто допускать промахи.
Ошибки не исчезают с опытом - они просто умнеют
К сожалению, я не могу конкретно указать на место где надо править. Для этого надо знать проект.
Бегло просмотрев Ваши сообщения в теме, на гитхабе нашёл проект(надеюсь это он). В нём Makefile. В стоке № 18
CXXFLAGS += -std=c++11 -O3 -Wall -Werror
удалите последний флаг и попробуйте собрать.
alexandr05, если не трудно, проясни, почему нельзя попробовать конкретное отрицание -Wno-error=, если компилятор указывает явно варнинг, считающийся ошибкой
UPD - обычно рекомендуют не убирать полностью -Werror
Ошибки не исчезают с опытом - они просто умнеют
alexandr05
CXXFLAGS += -std=c++11 -O3 -Wall -Werror
удалите последний флаг и попробуйте собрать.

Ну что сказать, уже получше, ошибок только одна. Взял я этот Makefile (он, правда, для исхов 8.1), скопировал из него текст, и вставил его в так сказать "основной" Makefile, находящийся в корне исходников (а куда ещё - мэйкфайлов в исходниках не менее 50 штук в самых разных директориях). Вот как выглядит сейчас Мэйкфайл:

### DO NOT EDIT THIS FILE ###
include build/core/main.mk
### DO NOT EDIT THIS FILE ###

CPPFLAGS += -iquote.. -Iinclude
CXXFLAGS += -std=c++11 -O3 -Wall -Wno-error=implicit-fallthrough -Wno-error=stringop-truncation # -Werror
LDLIBS += -lbz2 -lz

.PHONY: all clean

all: imgdiff libimgpatch.a

clean:
	rm -f *.o imgdiff libimgpatch.a

imgdiff: imgdiff.o bsdiff.o utils.o
	$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(LDLIBS) -o [email protected] $^

libimgpatch.a utils.o: CXXFLAGS += -fPIC
libimgpatch.a: imgpatch.o bspatch.o utils.o
	${AR} rcs [email protected] $^

А вот подобные флаги в BoardConfig.mk (тоже внёс на всякий случай, потому что непонятные флаги при компиляции TWRP просто игнорируются, так что не страшно, если они неверные):

TARGET_GLOBAL_CFLAGS += -Wno-error=implicit-fallthrough -Wno-error=stringop-truncation
TARGET_GLOBAL_CPPFLAGS += -Wno-error=implicit-fallthrough -Wno-error=stringop-truncation

И, наконец, сама ошибка, которую выдал компилятор:

system/core/mkbootimg/mkbootimg.c: In function 'main':
system/core/mkbootimg/mkbootimg.c:212:9: error: 'strncpy' specified bound 1024 equals destination size [-Werror=stringop-truncation]
         strncpy((char *)hdr.extra_cmdline, cmdline, BOOT_EXTRA_ARGS_SIZE);
         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cc1: all warnings being treated as errors
make: *** [build/core/binary.mk:700: /home/yurius/omni/out/host/linux-x86/obj32/EXECUTABLES/mkbootimg_intermediates/mkbootimg.o] Error 1
make: *** Waiting for unfinished jobs....

#### make failed to build some targets (6 seconds) ####

Кажется, мы немного приблизились к успеху )
yurius
strncpy((char *)hdr.extra_cmdline, cmdline, BOOT_EXTRA_ARGS_SIZE);
Погуглил и, насколько понял, использование strncpy() неэффективно и склонно к ошибкам. Встречаются варианты более правильного использования этой функции или замены ее на другую функцию.
То есть более правильный вариант - подправить исходники в этой части. Но вот чтоб подправить нужно четко представлять эту кухню. Может кто из спецов и предложит вариант.
UPD - но не понятно почему опять этот варнинг считается ошибкой - вроде ведь убрал? или не везде?
Ошибки не исчезают с опытом - они просто умнеют
vasek
UPD - но не понятно почему опять этот варнинг считается ошибкой - вроде ведь убрал? или не везде?
Так в том и дело, что непонятно, где "везде", в каких конкретно файлах надо убирать. Выше же сказал, что grep Werror и find Makefile выдают сотни результатов. Я до пенсии с этой комбинаторикой не справлюсь, надо точно знать, где отключить, а гадать можно до бесконечности. А может вообще где-то в системе в каких-то конфиг-файлах самого gcc8 отключать надо, а не (только) в исходниках - хрен же его знает.
"Продолжение банкета". После всех преобразований с Мэйкфайлом применил таки данный выше совет vasek, и в файле ...system/core/mkbootimg/mkbootimg.c заменил

vasek
strncpy на memcpy

- сборка успешно прошла наконец ошибку

system/core/mkbootimg/mkbootimg.c: In function 'main':
system/core/mkbootimg/mkbootimg.c:212:9: error: 'strncpy' specified bound 1024 equals destination size [-Werror=stringop-truncation]
         strncpy((char *)hdr.extra_cmdline, cmdline, BOOT_EXTRA_ARGS_SIZE);
         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

- однако, остановилась на другой ошибке:

host Executable: mkbootimg (/home/yurius/omni/out/host/linux-x86/obj32/EXECUTABLES/mkbootimg_intermediates/mkbootimg)
In function 'rule_map_new',
    inlined from 'parse' at external/sepolicy/tools/check_seapp.c:970:17:
external/sepolicy/tools/check_seapp.c:580:5: error: 'strncat' output truncated before terminating nul copying as many bytes from a string as its length [-Werror=stringop-truncation]
     strncat(new_map->key, k->key, key_len);
     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
external/sepolicy/tools/check_seapp.c: In function 'parse':
external/sepolicy/tools/check_seapp.c:565:19: note: length computed here
     int key_len = strlen(k->key);
                   ^~~~~~~~~~~~~~
In function 'rule_map_new',
    inlined from 'parse' at external/sepolicy/tools/check_seapp.c:970:17:
external/sepolicy/tools/check_seapp.c:581:5: error: 'strncat' output truncated before terminating nul copying as many bytes from a string as its length [-Werror=stringop-truncation]
     strncat(new_map->key, k->value, val_len);
     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
external/sepolicy/tools/check_seapp.c: In function 'parse':
external/sepolicy/tools/check_seapp.c:566:19: note: length computed here
     int val_len = strlen(k->value);
                   ^~~~~~~~~~~~~~~~
cc1: all warnings being treated as errors
make: *** [build/core/binary.mk:700: /home/yurius/omni/out/host/linux-x86/obj32/EXECUTABLES/checkseapp_intermediates/check_seapp.o] Error 1
make: *** Waiting for unfinished jobs....

#### make failed to build some targets (01:15 (mm:ss)) ####

- то есть теперь ругается на какой-то "strncat". На что теперь ЕГО менять? ))
 
Зарегистрироваться или войдите чтобы оставить сообщение.