ru_tts-for-nvda
107 строк · 4.2 Кб
1# Makefile for ru_tts for NVDA
2#
3# Copyright (C) 2023 Alexander Linkov <kvark128@yandex.ru>
4
5TARGET = i686-w64-mingw32
6CC = gcc
7EXTROOT = extroot
8TARGET_CC = $(TARGET)-$(CC)
9TARGET_EXTROOT = $(EXTROOT)/$(TARGET)
10
11SRC_PREFIX = $(EXTROOT)/src
12CFLAGS = -Wall -Wextra -Werror -Wno-unused-parameter -Wno-sign-compare -Wno-implicit-fallthrough -O3 -DPCRE2_STATIC
13LDFLAGS = -static -s
14RULEX_LIBS = -ldb -lpthread -lpcre2-posix -lpcre2-8
15RU_TTS_OBJS = utterance.o transcription.o time_planner.o text2speech.o synth.o speechrate_control.o soundproducer.o sink.o numerics.o male.o intonator.o female.o
16LEXHOLDER = $(EXTROOT)/bin/lexholder
17PO_FILES = $(wildcard locale/*/LC_MESSAGES/nvda.po)
18MO_FILES = $(addsuffix .mo, $(basename $(PO_FILES)))
19MANIFESTS = manifest.ini $(wildcard locale/*/manifest.ini)
20SYNTH_DIR = synthDrivers/ru_tts
21PY_FILES = $(wildcard $(SYNTH_DIR)/*.py)
22LICENSES = $(wildcard $(SYNTH_DIR)/LICENSES/*.txt) $(SYNTH_DIR)/COPYING.txt
23ADDON_FILES = ru_tts.dll config.spec $(MANIFESTS) $(PY_FILES) $(PO_FILES) $(MO_FILES) $(LICENSES)
24
25EXT_DIR = ../external
26LEXICON_DIR = $(EXT_DIR)/rulex/data
27LEXICON_DATA = $(addprefix $(LEXICON_DIR)/, explicit.dict implicit.dict general.rules lexicon.rules prefix.rules correction.rules)
28VPATH = $(EXT_DIR)/ru_tts/src $(EXT_DIR)/sonic $(EXT_DIR)/rulex/src $(SYNTH_DIR)
29
30ifdef WITH_RULEX
31override ADDON_FILES += rulex.dll rulex.db
32endif
33
34all: ru_tts.nvda-addon
35
36pot: ru_tts.pot
37
38.SILENT: clean
39clean:
40rm -f *.o *.nvda-addon *.pot
41cd $(SYNTH_DIR) && rm -f *.dll *.db
42rm -f $(MO_FILES)
43
44clean-all: clean
45rm -rf $(EXTROOT) $(TARGET_EXTROOT)
46
47%.o: %.c
48$(TARGET_CC) -c -I$(EXT_DIR)/ru_tts/src -I$(EXT_DIR)/sonic -I$(TARGET_EXTROOT)/include $(CFLAGS) -o $@ $<
49
50%.mo: %.po
51msgfmt -o $@ $<
52
53ru_tts.pot: $(PY_FILES)
54xgettext --package-name ru_tts -o $@ $^
55
56$(TARGET_EXTROOT)/done:
57$(MAKE) PREFIX=$(CURDIR)/$(TARGET_EXTROOT) TARGET=$(TARGET) MINGW=true CC=$(TARGET_CC) CFLAGS="-Wno-implicit-function-declaration -O3" SRC_PREFIX=$(CURDIR)/$(SRC_PREFIX) -C db
58$(MAKE) PREFIX=$(CURDIR)/$(TARGET_EXTROOT) TARGET=$(TARGET) CC=$(TARGET_CC) CFLAGS="-O3" SRC_PREFIX=$(CURDIR)/$(SRC_PREFIX) -C pcre2
59touch $@
60
61$(EXTROOT)/done:
62$(MAKE) PREFIX=$(CURDIR)/$(EXTROOT) CC=$(CC) CFLAGS="-Wno-implicit-function-declaration -O3" SRC_PREFIX=$(CURDIR)/$(SRC_PREFIX) -C db
63$(MAKE) PREFIX=$(CURDIR)/$(EXTROOT) CC=$(CC) CFLAGS="-O3" SRC_PREFIX=$(CURDIR)/$(SRC_PREFIX) -C pcre2
64touch $@
65
66$(LEXHOLDER): lexholder.c lexdb.c coder.c $(EXTROOT)/done
67mkdir -p $(dir $@)
68$(CC) $(CFLAGS) -I$(EXTROOT)/include -o $@ $(filter %.c,$^) -L$(EXTROOT)/lib $(LDFLAGS) $(RULEX_LIBS)
69
70$(SYNTH_DIR)/ru_tts.dll: ru_tts_nvda.o sonic.o $(RU_TTS_OBJS)
71$(TARGET_CC) -shared -o $@ $^ $(LDFLAGS)
72
73$(SYNTH_DIR)/rulex.dll: lexdb.c coder.c $(TARGET_EXTROOT)/done
74$(TARGET_CC) $(CFLAGS) -I$(TARGET_EXTROOT)/include -shared -o $@ $(filter %.c,$^) -L$(TARGET_EXTROOT)/lib $(LDFLAGS) $(RULEX_LIBS)
75
76$(SYNTH_DIR)/rulex.db: $(LEXHOLDER) $(LEXICON_DATA)
77@rm -f $@
78@echo "Inserting explicit dictionary:"
79$(LEXHOLDER) -f $(LEXICON_DIR)/explicit.dict -X $@
80@echo "Inserting implicit dictionary:"
81$(LEXHOLDER) -f $(LEXICON_DIR)/implicit.dict -M $@
82@echo "Inserting lexical classifiers:"
83$(LEXHOLDER) -f $(LEXICON_DIR)/lexicon.rules -L $@
84@echo "Inserting general rules:"
85$(LEXHOLDER) -f $(LEXICON_DIR)/general.rules -G $@
86@echo "Inserting prefix rules:"
87$(LEXHOLDER) -f $(LEXICON_DIR)/prefix.rules -P $@
88@echo "Inserting correction rules:"
89$(LEXHOLDER) -f $(LEXICON_DIR)/correction.rules -C $@
90
91ru_tts.nvda-addon: $(ADDON_FILES)
927z a -tzip -mx=7 $@ $^
93
94synth.o: synth.c synth.h transcription.h soundscript.h ru_tts.h
95numerics.o: numerics.c numerics.h transcription.h sink.h synth.h ru_tts.h
96transcription.o: transcription.c transcription.h numerics.h sink.h
97utterance.o: utterance.c soundscript.h transcription.h
98time_planner.o: time_planner.c soundscript.h transcription.h
99speechrate_control.o: speechrate_control.c timing.h soundscript.h transcription.h
100intonator.o: intonator.c transcription.h soundscript.h modulation.h
101soundproducer.o: soundproducer.c sink.h soundscript.h voice.h
102sink.o: sink.c sink.h ru_tts.h
103male.o: male.c voice.h
104female.o: female.c voice.h
105text2speech.o: text2speech.c ru_tts.h sink.h transcription.h synth.h timing.h modulation.h
106sonic.o: sonic.c sonic.h
107ru_tts_nvda.o: ru_tts_nvda.c ru_tts_nvda.h
108