Message ID | 20240305115451.210807-1-sebastian.wick@redhat.com |
---|---|
State | New |
Headers | show |
Series | [v2] edid-decode: build: add support for building with meson | expand |
Hi Hans, On Tue, Apr 2, 2024 at 6:35 PM Hans Verkuil <hverkuil@xs4all.nl> wrote: > > Hi Sebastian, > > Sorry for the delay, I was on vacation. > > I still need to look at this since I have to be certain that it doesn't break > installation (esp. the emscripten part). I hope to find the time for that later > this week. Great! Send out a new version as well because I forgot to make the executable available when used as a subproject. > I am also considering moving edid-decode into https://git.linuxtv.org/v4l-utils.git/ > That way it is actually part of proper releases with a version number and tarballs, > which is something that has been requested a few times. > > What is your opinion on that? Or would that just make life harder for you? It should be fine for us. We can use get_variable() on the subproject to get to edid-decode even if there are other things being built. Might have to change the meson files to support building just edid-decode but that should be doable as well. > Regards, > > Hans > > On 05/03/2024 12:54, Sebastian Wick wrote: > > This also removes the old Makefile based build-system. > > > > The immediate reason for adding support for meson is that this allows us > > to include edid-decode as a subproject in libdisplay-info. > > > > v2: > > * Remove the make build-system > > * Adjust the README on how to build/install with meson > > * Fix installing for the wasm-build > > > > Signed-off-by: Sebastian Wick <sebastian.wick@redhat.com> > > --- > > Makefile | 50 --------------------------- > > README | 28 +++++++++------ > > emscripten/wasm-crossfile.txt | 14 ++++++++ > > meson.build | 65 +++++++++++++++++++++++++++++++++++ > > 4 files changed, 96 insertions(+), 61 deletions(-) > > delete mode 100644 Makefile > > create mode 100644 emscripten/wasm-crossfile.txt > > create mode 100644 meson.build > > > > diff --git a/Makefile b/Makefile > > deleted file mode 100644 > > index 375fedb..0000000 > > --- a/Makefile > > +++ /dev/null > > @@ -1,50 +0,0 @@ > > -ifeq ($(OS),Windows_NT) > > - bindir ?= /usr/bin > > - mandir ?= /usr/share/man > > -else > > - UNAME_S := $(shell uname -s) > > - ifeq ($(UNAME_S),Darwin) > > - bindir ?= /usr/local/sbin > > - mandir ?= /usr/local/share/man > > - else > > - bindir ?= /usr/bin > > - mandir ?= /usr/share/man > > - endif > > -endif > > - > > -EMXX ?= em++ > > - > > -SOURCES = $(wildcard *.cpp) > > -OBJECTS := $(patsubst %.cpp, %.o, $(SOURCES)) > > -EMOBJECTS := $(patsubst %.cpp, emscripten/%.o, $(SOURCES)) > > - > > -WARN_FLAGS = -Wall -Wextra -Wno-missing-field-initializers -Wno-unused-parameter -Wimplicit-fallthrough > > - > > -all: edid-decode > > - > > -sha = -DSHA=$(shell if test -d .git ; then git rev-parse --short=12 HEAD ; fi) > > -date = -DDATE=$(shell if test -d .git ; then TZ=UTC git show --quiet --date='format-local:"%F %T"' --format='%cd'; fi) > > - > > -edid-decode: $(OBJECTS) > > - $(CXX) $(LDFLAGS) -g -o $@ $(OBJECTS) -lm > > - > > -edid-decode.js: emscripten/edid-decode.js > > - > > -emscripten/edid-decode.js: $(EMOBJECTS) > > - $(EMXX) $(LDFLAGS) -s EXPORTED_FUNCTIONS='["_parse_edid"]' -s EXPORTED_RUNTIME_METHODS='["ccall", "cwrap"]' -o $@ $(EMOBJECTS) -lm > > - > > -%.o: %.cpp edid-decode.h oui.h Makefile > > - $(CXX) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) $(WARN_FLAGS) -g $(sha) $(date) -o $@ -c $< > > - > > -emscripten/%.o: %.cpp edid-decode.h oui.h Makefile > > - $(EMXX) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) $(WARN_FLAGS) $(sha) $(date) -o $@ -c $< > > - > > -clean: > > - rm -f *.o emscripten/*.o > > - rm -f edid-decode emscripten/edid-decode.js emscripten/edid-decode.wasm > > - > > -install: > > - mkdir -p $(DESTDIR)$(bindir) > > - install -m 0755 edid-decode $(DESTDIR)$(bindir) > > - mkdir -p $(DESTDIR)$(mandir)/man1 > > - install -m 0644 edid-decode.1 $(DESTDIR)$(mandir)/man1 > > diff --git a/README b/README > > index 4c2b7fe..bf4e668 100644 > > --- a/README > > +++ b/README > > @@ -6,8 +6,9 @@ To build this do: > > > > git clone git://linuxtv.org/edid-decode.git > > cd edid-decode > > -make > > -make install > > +meson setup _build > > +meson compile -C _build > > +meson install -C _build > > > > Patches and bug reports can be sent to the linux-media@vger.kernel.org > > mailinglist (see https://www.linuxtv.org/lists.php). Please make sure > > @@ -46,15 +47,20 @@ https://hverkuil.home.xs4all.nl/edid-decode/edid-decode.html > > > > This is updated regularly with the latest edid-decode. It uses emscripten > > and the html file is maintained in the emscripten directory of edid-decode. > > -To build edid-decode.js/wasm run 'make edid-decode.js'. This assumes > > -that emscripten is installed, of course. > > - > > -You can use the konqueror browser to run it locally: > > - > > - konqueror emscripten/edid-decode.html > > - > > -For other browsers you need to serve the files using a local webserver. > > -See also https://emscripten.org/docs/getting_started/Tutorial.html > > +To build it, set the project up using the provided crossfile: > > + > > + meson setup _build-wasm \ > > + --cross-file ./emscripten/wasm-crossfile.txt \ > > + --prefix=$(pwd)/_install-wasm > > + meson install _build-wasm > > + # serve the files using a local webserver > > + cd _install-wasm/bin > > + python3 -m http.server > > + > > +This assumes that emscripten is installed, of course. The location of the > > +toolchain can be adjusted in emscripten/wasm-crossfile.txt. > > +See also https://emscripten.org/docs/getting_started/Tutorial.html and > > +https://mesonbuild.com/Cross-compilation.html. > > > > You can find a very large collection of EDIDs here: > > https://github.com/linuxhw/EDID > > diff --git a/emscripten/wasm-crossfile.txt b/emscripten/wasm-crossfile.txt > > new file mode 100644 > > index 0000000..a41f46c > > --- /dev/null > > +++ b/emscripten/wasm-crossfile.txt > > @@ -0,0 +1,14 @@ > > +[binaries] > > +c = '/usr/lib/emscripten/emcc' > > +cpp = '/usr/lib/emscripten/em++' > > +ar = '/usr/lib/emscripten/emar' > > +strip = '/usr/lib/emscripten/emstrip' > > + > > +[built-in options] > > +default_library = 'static' > > + > > +[host_machine] > > +system = 'emscripten' > > +cpu_family = 'wasm32' > > +cpu = 'wasm32' > > +endian = 'little' > > \ No newline at end of file > > diff --git a/meson.build b/meson.build > > new file mode 100644 > > index 0000000..3a5bc71 > > --- /dev/null > > +++ b/meson.build > > @@ -0,0 +1,65 @@ > > +project( > > + 'edid-decode', > > + 'cpp', > > +) > > + > > +edid_decode_args = [ > > + '-Wno-missing-field-initializers', > > + '-Wno-unused-parameter', > > + '-Wimplicit-fallthrough', > > +] > > +edid_decode_link_args = [] > > + > > +git = find_program('git', native: true, required: false) > > +if git.found() > > + git_commit = run_command( > > + [git, 'rev-parse', '--short=12', 'HEAD'], > > + check: false, > > + ) > > + git_date = run_command( > > + [git, 'show', '--quiet', '--date=format-local:%F %T', '--format=%cd'], > > + env: {'TZ': 'UTC'}, > > + check: false, > > + ) > > + > > + if git_commit.returncode() == 0 > > + edid_decode_args += ['-DSHA=' + git_commit.stdout().strip()] > > + endif > > + if git_date.returncode() == 0 > > + edid_decode_args += ['-DDATE=' + git_date.stdout().strip()] > > + endif > > +endif > > + > > +if target_machine.system() == 'emscripten' > > + edid_decode_link_args += [ > > + '-sEXPORTED_FUNCTIONS=_parse_edid', > > + '-sEXPORTED_RUNTIME_METHODS=ccall,cwrap' > > + ] > > + > > + fs = import('fs') > > + foreach filename : ['edid-decode.html', 'edid-decode.ico'] > > + fs.copyfile( > > + 'emscripten' / filename, > > + install: true, > > + install_dir: 'bin', > > + ) > > + endforeach > > +endif > > + > > +executable( > > + 'edid-decode', > > + 'calc-gtf-cvt.cpp', > > + 'calc-ovt.cpp', > > + 'edid-decode.cpp', > > + 'parse-base-block.cpp', > > + 'parse-cta-block.cpp', > > + 'parse-di-ext-block.cpp', > > + 'parse-displayid-block.cpp', > > + 'parse-ls-ext-block.cpp', > > + 'parse-vtb-ext-block.cpp', > > + cpp_args : edid_decode_args, > > + link_args: edid_decode_link_args, > > + install : true, > > +) > > + > > +install_man('edid-decode.1') > > \ No newline at end of file >
diff --git a/Makefile b/Makefile deleted file mode 100644 index 375fedb..0000000 --- a/Makefile +++ /dev/null @@ -1,50 +0,0 @@ -ifeq ($(OS),Windows_NT) - bindir ?= /usr/bin - mandir ?= /usr/share/man -else - UNAME_S := $(shell uname -s) - ifeq ($(UNAME_S),Darwin) - bindir ?= /usr/local/sbin - mandir ?= /usr/local/share/man - else - bindir ?= /usr/bin - mandir ?= /usr/share/man - endif -endif - -EMXX ?= em++ - -SOURCES = $(wildcard *.cpp) -OBJECTS := $(patsubst %.cpp, %.o, $(SOURCES)) -EMOBJECTS := $(patsubst %.cpp, emscripten/%.o, $(SOURCES)) - -WARN_FLAGS = -Wall -Wextra -Wno-missing-field-initializers -Wno-unused-parameter -Wimplicit-fallthrough - -all: edid-decode - -sha = -DSHA=$(shell if test -d .git ; then git rev-parse --short=12 HEAD ; fi) -date = -DDATE=$(shell if test -d .git ; then TZ=UTC git show --quiet --date='format-local:"%F %T"' --format='%cd'; fi) - -edid-decode: $(OBJECTS) - $(CXX) $(LDFLAGS) -g -o $@ $(OBJECTS) -lm - -edid-decode.js: emscripten/edid-decode.js - -emscripten/edid-decode.js: $(EMOBJECTS) - $(EMXX) $(LDFLAGS) -s EXPORTED_FUNCTIONS='["_parse_edid"]' -s EXPORTED_RUNTIME_METHODS='["ccall", "cwrap"]' -o $@ $(EMOBJECTS) -lm - -%.o: %.cpp edid-decode.h oui.h Makefile - $(CXX) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) $(WARN_FLAGS) -g $(sha) $(date) -o $@ -c $< - -emscripten/%.o: %.cpp edid-decode.h oui.h Makefile - $(EMXX) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) $(WARN_FLAGS) $(sha) $(date) -o $@ -c $< - -clean: - rm -f *.o emscripten/*.o - rm -f edid-decode emscripten/edid-decode.js emscripten/edid-decode.wasm - -install: - mkdir -p $(DESTDIR)$(bindir) - install -m 0755 edid-decode $(DESTDIR)$(bindir) - mkdir -p $(DESTDIR)$(mandir)/man1 - install -m 0644 edid-decode.1 $(DESTDIR)$(mandir)/man1 diff --git a/README b/README index 4c2b7fe..bf4e668 100644 --- a/README +++ b/README @@ -6,8 +6,9 @@ To build this do: git clone git://linuxtv.org/edid-decode.git cd edid-decode -make -make install +meson setup _build +meson compile -C _build +meson install -C _build Patches and bug reports can be sent to the linux-media@vger.kernel.org mailinglist (see https://www.linuxtv.org/lists.php). Please make sure @@ -46,15 +47,20 @@ https://hverkuil.home.xs4all.nl/edid-decode/edid-decode.html This is updated regularly with the latest edid-decode. It uses emscripten and the html file is maintained in the emscripten directory of edid-decode. -To build edid-decode.js/wasm run 'make edid-decode.js'. This assumes -that emscripten is installed, of course. - -You can use the konqueror browser to run it locally: - - konqueror emscripten/edid-decode.html - -For other browsers you need to serve the files using a local webserver. -See also https://emscripten.org/docs/getting_started/Tutorial.html +To build it, set the project up using the provided crossfile: + + meson setup _build-wasm \ + --cross-file ./emscripten/wasm-crossfile.txt \ + --prefix=$(pwd)/_install-wasm + meson install _build-wasm + # serve the files using a local webserver + cd _install-wasm/bin + python3 -m http.server + +This assumes that emscripten is installed, of course. The location of the +toolchain can be adjusted in emscripten/wasm-crossfile.txt. +See also https://emscripten.org/docs/getting_started/Tutorial.html and +https://mesonbuild.com/Cross-compilation.html. You can find a very large collection of EDIDs here: https://github.com/linuxhw/EDID diff --git a/emscripten/wasm-crossfile.txt b/emscripten/wasm-crossfile.txt new file mode 100644 index 0000000..a41f46c --- /dev/null +++ b/emscripten/wasm-crossfile.txt @@ -0,0 +1,14 @@ +[binaries] +c = '/usr/lib/emscripten/emcc' +cpp = '/usr/lib/emscripten/em++' +ar = '/usr/lib/emscripten/emar' +strip = '/usr/lib/emscripten/emstrip' + +[built-in options] +default_library = 'static' + +[host_machine] +system = 'emscripten' +cpu_family = 'wasm32' +cpu = 'wasm32' +endian = 'little' \ No newline at end of file diff --git a/meson.build b/meson.build new file mode 100644 index 0000000..3a5bc71 --- /dev/null +++ b/meson.build @@ -0,0 +1,65 @@ +project( + 'edid-decode', + 'cpp', +) + +edid_decode_args = [ + '-Wno-missing-field-initializers', + '-Wno-unused-parameter', + '-Wimplicit-fallthrough', +] +edid_decode_link_args = [] + +git = find_program('git', native: true, required: false) +if git.found() + git_commit = run_command( + [git, 'rev-parse', '--short=12', 'HEAD'], + check: false, + ) + git_date = run_command( + [git, 'show', '--quiet', '--date=format-local:%F %T', '--format=%cd'], + env: {'TZ': 'UTC'}, + check: false, + ) + + if git_commit.returncode() == 0 + edid_decode_args += ['-DSHA=' + git_commit.stdout().strip()] + endif + if git_date.returncode() == 0 + edid_decode_args += ['-DDATE=' + git_date.stdout().strip()] + endif +endif + +if target_machine.system() == 'emscripten' + edid_decode_link_args += [ + '-sEXPORTED_FUNCTIONS=_parse_edid', + '-sEXPORTED_RUNTIME_METHODS=ccall,cwrap' + ] + + fs = import('fs') + foreach filename : ['edid-decode.html', 'edid-decode.ico'] + fs.copyfile( + 'emscripten' / filename, + install: true, + install_dir: 'bin', + ) + endforeach +endif + +executable( + 'edid-decode', + 'calc-gtf-cvt.cpp', + 'calc-ovt.cpp', + 'edid-decode.cpp', + 'parse-base-block.cpp', + 'parse-cta-block.cpp', + 'parse-di-ext-block.cpp', + 'parse-displayid-block.cpp', + 'parse-ls-ext-block.cpp', + 'parse-vtb-ext-block.cpp', + cpp_args : edid_decode_args, + link_args: edid_decode_link_args, + install : true, +) + +install_man('edid-decode.1') \ No newline at end of file
This also removes the old Makefile based build-system. The immediate reason for adding support for meson is that this allows us to include edid-decode as a subproject in libdisplay-info. v2: * Remove the make build-system * Adjust the README on how to build/install with meson * Fix installing for the wasm-build Signed-off-by: Sebastian Wick <sebastian.wick@redhat.com> --- Makefile | 50 --------------------------- README | 28 +++++++++------ emscripten/wasm-crossfile.txt | 14 ++++++++ meson.build | 65 +++++++++++++++++++++++++++++++++++ 4 files changed, 96 insertions(+), 61 deletions(-) delete mode 100644 Makefile create mode 100644 emscripten/wasm-crossfile.txt create mode 100644 meson.build