plzombie / depress

Program to create djvu from multiple files (using djvulibre)
https://depress.tech/
BSD 2-Clause "Simplified" License
4 stars 1 forks source link

1.6.1: -fopenmp #12

Closed zvezdochiot closed 1 year ago

zvezdochiot commented 1 year ago

Hi @plzombie .

UNIX_MAKEFILE: -fopenmp, gcc only, not g++.

make
gcc -c -O3 -Wall -pthread -fopenmp ../src/depress.c -o depress.o
gcc -c -O3 -Wall -pthread -fopenmp ../src/depress_converter.c -o depress_converter.o
gcc -c -O3 -Wall -pthread -fopenmp ../src/depress_document.c -o depress_document.o
gcc -c -O3 -Wall -pthread -fopenmp ../src/depress_image.c -o depress_image.o
gcc -c -O3 -Wall -pthread -fopenmp ../src/depress_maker_djvu.c -o depress_maker_djvu.o
gcc -c -O3 -Wall -pthread -fopenmp ../src/depress_outlines.c -o depress_outlines.o
gcc -c -O3 -Wall -pthread -fopenmp ../src/depress_paths.c -o depress_paths.o
gcc -c -O3 -Wall -pthread -fopenmp ../src/depress_tasks.c -o depress_tasks.o
gcc -c -O3 -Wall -pthread -fopenmp ../src/depress_threads.c -o depress_threads.o
gcc -c -O3 -Wall -pthread -fopenmp ../src/ppm_save.c -o ppm_save.o
gcc -c -O3 -Wall -pthread -fopenmp ../src/interlocked_ptr.c -o interlocked_ptr.o
gcc -c -O3 -Wall -pthread -fopenmp ../src/unixsupport/waccess.c -o waccess.o
gcc -c -O3 -Wall -pthread -fopenmp ../src/unixsupport/wfopen.c -o wfopen.o
gcc -c -O3 -Wall -pthread -fopenmp ../src/unixsupport/wmain_stdc.c -o wmain_stdc.o
gcc -c -O3 -Wall -pthread -fopenmp ../src/unixsupport/wmkdir.c -o wmkdir.o
gcc -c -O3 -Wall -pthread -fopenmp ../src/unixsupport/wpopen.c -o wpopen.o
gcc -c -O3 -Wall -pthread -fopenmp ../src/unixsupport/wremove.c -o wremove.o
gcc -c -O3 -Wall -pthread -fopenmp ../src/unixsupport/wrmdir.c -o wrmdir.o
gcc -c -O3 -Wall -pthread -fopenmp ../src/unixsupport/wtoi.c -o wtoi.o
gcc -c -O3 -Wall -pthread -fopenmp ../src/extclib/wcstombsl.c -o wcstombsl.o
gcc -c -O3 -Wall -pthread -fopenmp ../src/unixsupport/wgetcwd.c -o wgetcwd.o
gcc -c -O3 -Wall -pthread -fopenmp ../src/third_party/noteshrink.c -o noteshrink.o
gcc -O3 -Wall -pthread -fopenmp depress.o depress_converter.o depress_document.o depress_image.o depress_maker_djvu.o depress_outlines.o depress_paths.o depress_tasks.o depress_threads.o ppm_save.o interlocked_ptr.o waccess.o wfopen.o wmain_stdc.o wmkdir.o wpopen.o wremove.o wrmdir.o wtoi.o wcstombsl.o wgetcwd.o noteshrink.o -lm -o depress

See https://github.com/plzombie/depress/commit/0a9c7a3366be8496c74895bb65aef0b78254e76a

plzombie commented 1 year ago

Насколько я помню, если использовать gcc при линковке, там надо вручную перечислять все библиотеки, а ты только m добавил

zvezdochiot commented 1 year ago

Hi @plzombie .

Так ты же пользуешь djvulibre как внешние тулзы (и правильно делаешь) в разновидностях system(). А с libgomp сам чорт ногу сломит: под Mac оно эмулируется через какие то специфичные definition, в лине всё прикручивается через -fopenmp, а в винде проще архив обектников (стат. либу) подложить непосредственно, к тому же там их несколько. Так что хз какой именно рецепт здесь будет самым путёвым. Я пошёл по простому, топорному пути. Как то так.

Можно конечно сделать:

LDFLAGS = -lm -lgomp

В лине полёт нормальный, но как в винде - хз. В Mac точно нет.

plzombie commented 1 year ago

Обычно тупо g++ используют чтобы не перечислять руками glib (или как там её)

zvezdochiot commented 1 year ago

@plzombie say:

Обычно тупо g++ используют

Так я и говору, что хз какой рецепт менее плохой. В лине и то и то идентично.

Нашёл в закромах такой вот рецепт:

OS := $(shell uname)
...
# multithreading options
ifeq ($(OS),Darwin)
MTOPTS := -Xpreprocessor -fopenmp
else
MTOPTS := -fopenmp
endif
# path to save "libgomp.a"
LIBMINIOMP :=
ifeq ($(OS),Darwin)
LDFLAGS := -Wl,-dead_strip
ifeq ($(LIBMINIOMP),)
LDFLAGS += -lomp
endif
else
LDFLAGS := -Wl,--gc-sections -s
endif

Источник: https://github.com/ilyakurdyukov/jpeg-quantsmooth

PS: -lomp в лине не алё.