diff mbox series

[v2] edid-decode: build: add support for building with meson

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

Commit Message

Sebastian Wick March 5, 2024, 11:54 a.m. UTC
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

Comments

Sebastian Wick April 2, 2024, 8:18 p.m. UTC | #1
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 mbox series

Patch

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