mirror of
https://github.com/Rockbox/rockbox.git
synced 2026-01-22 01:30:35 -05:00
This maps the numerical IDs contained within the binary .vstrings files to their logical LANG_* and VOICE_* names. While not strictly needed to produce voice files, it adds the final piece to be able to use vstrings files to produce the same voice files as the existing 'make voice' flow that directly parses the language files. The 'make voice' flow intentionally divert a few of the generated clips into standalone files: * "invalid voice file" * <spoken language name> * <short pause> For this to be possible, we need to know which specific entries in vstrings map to the ones we care about, and without this enumeration (which can change on a per-target or even per-build basis) this is effectively impossible. The produced lang-enum.txt is simple, with one entry per line of the format: number:name Note that nothing uses this new file yet; that will come in subsequent commits. Change-Id: Iec3fccbb6d503dd7e2d529aad318009a489b1d77
70 lines
4 KiB
Makefile
70 lines
4 KiB
Makefile
# __________ __ ___.
|
|
# Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
|
# Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
|
# Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
|
# Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
|
# \/ \/ \/ \/ \/
|
|
# $Id$
|
|
#
|
|
|
|
LANGS := $(call preprocess, $(APPSDIR)/lang/SOURCES)
|
|
LANGOBJ := $(LANGS:$(ROOTDIR)/%.lang=$(BUILDDIR)/%.lng)
|
|
VOICEOBJ := $(LANGS:$(ROOTDIR)/%.lang=$(BUILDDIR)/%.vstrings)
|
|
LANG_O = $(BUILDDIR)/lang/lang_core.o
|
|
ENGLISH := english
|
|
|
|
CLEANOBJS += $(BUILDDIR)/lang/max_language_size.h $(BUILDDIR)/lang/lang*
|
|
|
|
# $(BUILDDIR)/apps/lang must exist before we create dependencies on it,
|
|
# otherwise make will simply ignore those dependencies.
|
|
# Therefore we create it here.
|
|
#DUMMY := $(shell mkdir -p $(BUILDDIR)/apps/lang)
|
|
|
|
# Calculate the maximum language size. Currently based on the file size
|
|
# of the largest lng file. Subtract 10 due to HEADER_SIZE and
|
|
# SUBHEADER_SIZE.
|
|
# TODO: In the future generate this file within genlang or another script
|
|
# in order to only calculate the maximum size based on the core strings.
|
|
$(BUILDDIR)/lang/max_language_size.h: $(LANGOBJ) $(BUILDDIR)/apps/lang/voicestrings.zip
|
|
$(call PRINTS,GEN $(subst $(BUILDDIR)/,,$@))
|
|
$(SILENT)echo "#define MAX_LANGUAGE_SIZE `ls -ln $(BUILDDIR)/apps/lang/*.lng | awk '{print $$5-10}' | sort -n | tail -1`" > $@
|
|
|
|
$(BUILDDIR)/lang/lang_core.o: $(BUILDDIR)/lang/lang.h $(BUILDDIR)/lang/lang_core.c
|
|
$(call PRINTS,CC lang_core.c)$(CC) $(CFLAGS) -c $(BUILDDIR)/lang/lang_core.c -o $@
|
|
|
|
# genlang creates *both* lang.c and lang.h but in Make there is no wat to express this rule
|
|
# (multiple target rules DO NOT express that, they are a simple shortcut for multiple rules)
|
|
# instead we pretend that genlang create lang_core.c and that lang.c depends from lang.h
|
|
# it will work fine as long as one never manually removes lang.c and not lang.h, and it will avoid
|
|
# race conditions such as running genlang twice or worse in parallel with other things!
|
|
$(BUILDDIR)/lang/lang.h: $(APPSDIR)/lang/$(ENGLISH).lang $(BUILDDIR)/apps/genlang-features $(TOOLSDIR)/genlang
|
|
$(call PRINTS,GEN lang.h)
|
|
$(SILENT)$(TOOLSDIR)/genlang -e=$(APPSDIR)/lang/$(ENGLISH).lang -p=$(BUILDDIR)/lang -t=$(MODELNAME):`cat $(BUILDDIR)/apps/genlang-features` $<
|
|
$(BUILDDIR)/lang/lang_core.c: $(BUILDDIR)/lang/lang.h $(TOOLSDIR)/genlang
|
|
|
|
$(BUILDDIR)/lang_enum.h: $(BUILDDIR)/lang/lang.h $(TOOLSDIR)/genlang
|
|
|
|
# NOTE: for some weird reasons in GNU make, multi targets rules WITH patterns actually express
|
|
# the fact that the two files are created as the result of one invocation of the rule
|
|
$(BUILDDIR)/%.lng $(BUILDDIR)/%.vstrings: $(ROOTDIR)/%.lang $(APPSDIR)/lang/$(ENGLISH).lang $(BUILDDIR)/apps/genlang-features $(TOOLSDIR)/genlang $(TOOLSDIR)/updatelang
|
|
$(call PRINTS,GENLANG $(subst $(ROOTDIR)/,,$<))
|
|
$(SILENT)mkdir -p $(dir $@)
|
|
$(SILENT)$(TOOLSDIR)/updatelang $(APPSDIR)/lang/$(ENGLISH).lang $< $@.tmp
|
|
$(SILENT)$(TOOLSDIR)/genlang -e=$(APPSDIR)/lang/$(ENGLISH).lang -t=$(MODELNAME):`cat $(BUILDDIR)/apps/genlang-features` -i=$(TARGET_ID) -b=$*.lng -c=$*.vstrings $@.tmp
|
|
$(SILENT)rm -f $@.tmp
|
|
|
|
$(BUILDDIR)/apps/lang/voice-corrections.txt: $(ROOTDIR)/tools/voice-corrections.txt
|
|
$(SILENT)mkdir -p $(dir $@)
|
|
$(call PRINTS,CP $(subst $(ROOTDIR)/,,$<))cp $< $@
|
|
|
|
$(BUILDDIR)/apps/lang/lang-enum.txt: $(BUILDDIR)/lang_enum.h
|
|
$(SILENT)mkdir -p $(dir $@)
|
|
$(call PRINTS,GEN $(subst $(BUILDDIR)/,,$@))perl -ne 'print if s|\s+(.*), /\* (\w+).*|$$2:$$1|' < $< |grep -v 'this:' > $@
|
|
|
|
$(BUILDDIR)/apps/lang/voicestrings.zip: $(VOICEOBJ) $(wildcard $(BUILDDIR)/apps/lang/*.talk) $(BUILDDIR)/apps/lang/voice-corrections.txt $(BUILDDIR)/apps/lang/lang-enum.txt
|
|
$(call PRINTS,ZIP $(subst $(BUILDDIR)/,,$@))
|
|
$(SILENT)zip -9 -q $@ $(subst $(BUILDDIR)/,,$^)
|
|
|
|
#copy any included talk files to the /lang directory
|
|
$(BUILDDIR)/apps/lang/%.talk: $(ROOTDIR)/apps/lang/%.talk
|
|
$(call PRINTS,CP $(subst $(ROOTDIR)/,,$<))cp $< $(BUILDDIR)/apps/lang
|