From: Thomas Petazzoni thomas.petazzoni@free-electrons.com
The configure script currently tests the availability of libatomic_ops by checking the presence of atomic_ops.h. While this is good enough as an availability test, it is not sufficient as on some platforms, libatomic_ops provides an actual shared library against which we should be linked to access libatomic_ops functionality.
Therefore, we instead use PKG_CHECK_MODULES() to test the availability of libatomic_ops. Besides testing its availability, this also fills in the ATOMIC_OPS_LIBS variable with the list of libraries we need to link with to use libatomic_ops.
All Mesa drivers that include xf86atomic.h have been updated to link against ATOMIC_OPS_LIBS.
Of course, if we're not using libatomic_ops, ATOMIC_OPS_LIBS is empty, and we don't link against it.
Signed-off-by: Thomas Petazzoni thomas.petazzoni@free-electrons.com Signed-off-by: Peter Seiderer ps.report@gmx.net [Bernd: PKG_CHECK_MODULES should not fail when libatomic_ops is missing] Signed-off-by: Bernd Kuhls bernd.kuhls@t-online.de --- amdgpu/Makefile.am | 2 +- configure.ac | 2 +- etnaviv/Makefile.am | 3 ++- freedreno/Makefile.am | 3 ++- intel/Makefile.am | 3 ++- nouveau/Makefile.am | 2 +- omap/Makefile.am | 2 +- radeon/Makefile.am | 2 +- tegra/Makefile.am | 2 +- 9 files changed, 12 insertions(+), 9 deletions(-)
diff --git a/amdgpu/Makefile.am b/amdgpu/Makefile.am index a1b0d05c..b2bcceff 100644 --- a/amdgpu/Makefile.am +++ b/amdgpu/Makefile.am @@ -36,7 +36,7 @@ AM_CPPFLAGS = -DAMDGPU_ASIC_ID_TABLE="${libdrmdatadir}/amdgpu.ids" libdrm_amdgpu_la_LTLIBRARIES = libdrm_amdgpu.la libdrm_amdgpu_ladir = $(libdir) libdrm_amdgpu_la_LDFLAGS = -version-number 1:0:0 -no-undefined -libdrm_amdgpu_la_LIBADD = ../libdrm.la @PTHREADSTUBS_LIBS@ +libdrm_amdgpu_la_LIBADD = ../libdrm.la @PTHREADSTUBS_LIBS@ @ATOMIC_OPS_LIBS@
libdrm_amdgpu_la_SOURCES = $(LIBDRM_AMDGPU_FILES) amdgpu_asic_id.lo: $(top_srcdir)/data/amdgpu.ids diff --git a/configure.ac b/configure.ac index 321ab2c0..1386d15c 100644 --- a/configure.ac +++ b/configure.ac @@ -247,7 +247,7 @@ AC_CACHE_CHECK([for native atomic primitives], drm_cv_atomic_primitives, [ ]],[[]])], [drm_cv_atomic_primitives="Intel"],[])
if test "x$drm_cv_atomic_primitives" = "xnone"; then - AC_CHECK_HEADER([atomic_ops.h], drm_cv_atomic_primitives="libatomic-ops") + PKG_CHECK_MODULES(ATOMIC_OPS, [atomic_ops], drm_cv_atomic_primitives="libatomic-ops", true) fi
# atomic functions defined in <atomic.h> & libc on Solaris diff --git a/etnaviv/Makefile.am b/etnaviv/Makefile.am index be96ba86..669cf14f 100644 --- a/etnaviv/Makefile.am +++ b/etnaviv/Makefile.am @@ -12,7 +12,8 @@ libdrm_etnaviv_la_LDFLAGS = -version-number 1:0:0 -no-undefined libdrm_etnaviv_la_LIBADD = \ ../libdrm.la \ @PTHREADSTUBS_LIBS@ \ - @CLOCK_LIB@ + @CLOCK_LIB@ \ + @ATOMIC_OPS_LIBS@
libdrm_etnaviv_la_SOURCES = $(LIBDRM_ETNAVIV_FILES)
diff --git a/freedreno/Makefile.am b/freedreno/Makefile.am index cbb0d031..238407e3 100644 --- a/freedreno/Makefile.am +++ b/freedreno/Makefile.am @@ -14,7 +14,8 @@ libdrm_freedreno_la_LDFLAGS = -version-number 1:0:0 -no-undefined libdrm_freedreno_la_LIBADD = \ ../libdrm.la \ @PTHREADSTUBS_LIBS@ \ - @CLOCK_LIB@ + @CLOCK_LIB@ \ + @ATOMIC_OPS_LIBS@
libdrm_freedreno_la_SOURCES = $(LIBDRM_FREEDRENO_FILES) if HAVE_FREEDRENO_KGSL diff --git a/intel/Makefile.am b/intel/Makefile.am index c52e8c08..f3635a64 100644 --- a/intel/Makefile.am +++ b/intel/Makefile.am @@ -38,7 +38,8 @@ libdrm_intel_la_LDFLAGS = -version-number 1:0:0 -no-undefined libdrm_intel_la_LIBADD = ../libdrm.la \ @PTHREADSTUBS_LIBS@ \ @PCIACCESS_LIBS@ \ - @CLOCK_LIB@ + @CLOCK_LIB@ \ + @ATOMIC_OPS_LIBS@
libdrm_intel_la_SOURCES = $(LIBDRM_INTEL_FILES)
diff --git a/nouveau/Makefile.am b/nouveau/Makefile.am index 344a8445..a4e6a78b 100644 --- a/nouveau/Makefile.am +++ b/nouveau/Makefile.am @@ -10,7 +10,7 @@ AM_CFLAGS = \ libdrm_nouveau_la_LTLIBRARIES = libdrm_nouveau.la libdrm_nouveau_ladir = $(libdir) libdrm_nouveau_la_LDFLAGS = -version-number 2:0:0 -no-undefined -libdrm_nouveau_la_LIBADD = ../libdrm.la @PTHREADSTUBS_LIBS@ +libdrm_nouveau_la_LIBADD = ../libdrm.la @PTHREADSTUBS_LIBS@ @ATOMIC_OPS_LIBS@
libdrm_nouveau_la_SOURCES = $(LIBDRM_NOUVEAU_FILES)
diff --git a/omap/Makefile.am b/omap/Makefile.am index 599bb9de..524afee3 100644 --- a/omap/Makefile.am +++ b/omap/Makefile.am @@ -7,7 +7,7 @@ AM_CFLAGS = \ libdrm_omap_la_LTLIBRARIES = libdrm_omap.la libdrm_omap_ladir = $(libdir) libdrm_omap_la_LDFLAGS = -version-number 1:0:0 -no-undefined -libdrm_omap_la_LIBADD = ../libdrm.la @PTHREADSTUBS_LIBS@ +libdrm_omap_la_LIBADD = ../libdrm.la @PTHREADSTUBS_LIBS@ @ATOMIC_OPS_LIBS@
libdrm_omap_la_SOURCES = omap_drm.c
diff --git a/radeon/Makefile.am b/radeon/Makefile.am index e2415314..c27d3c75 100644 --- a/radeon/Makefile.am +++ b/radeon/Makefile.am @@ -33,7 +33,7 @@ AM_CFLAGS = \ libdrm_radeon_la_LTLIBRARIES = libdrm_radeon.la libdrm_radeon_ladir = $(libdir) libdrm_radeon_la_LDFLAGS = -version-number 1:0:1 -no-undefined -libdrm_radeon_la_LIBADD = ../libdrm.la @PTHREADSTUBS_LIBS@ +libdrm_radeon_la_LIBADD = ../libdrm.la @PTHREADSTUBS_LIBS@ @ATOMIC_OPS_LIBS@
libdrm_radeon_la_SOURCES = $(LIBDRM_RADEON_FILES)
diff --git a/tegra/Makefile.am b/tegra/Makefile.am index fb40be55..12abe8c4 100644 --- a/tegra/Makefile.am +++ b/tegra/Makefile.am @@ -9,7 +9,7 @@ AM_CFLAGS = \ libdrm_tegra_ladir = $(libdir) libdrm_tegra_la_LTLIBRARIES = libdrm_tegra.la libdrm_tegra_la_LDFLAGS = -version-number 0:0:0 -no-undefined -libdrm_tegra_la_LIBADD = ../libdrm.la @PTHREADSTUBS_LIBS@ +libdrm_tegra_la_LIBADD = ../libdrm.la @PTHREADSTUBS_LIBS@ @ATOMIC_OPS_LIBS@
libdrm_tegra_la_SOURCES = \ private.h \
Signed-off-by: Eric Engestrom eric.engestrom@imgtec.com --- amdgpu/meson.build | 2 +- etnaviv/meson.build | 2 +- freedreno/meson.build | 2 +- intel/meson.build | 2 +- meson.build | 3 ++- nouveau/meson.build | 2 +- omap/meson.build | 2 +- radeon/meson.build | 2 +- tegra/meson.build | 2 +- 9 files changed, 10 insertions(+), 9 deletions(-)
diff --git a/amdgpu/meson.build b/amdgpu/meson.build index 8b0452056e2513892c2c..7040ebab86e271022323 100644 --- a/amdgpu/meson.build +++ b/amdgpu/meson.build @@ -37,7 +37,7 @@ libdrm_amdgpu = shared_library( ], include_directories : [inc_root, inc_drm], link_with : libdrm, - dependencies : dep_pthread_stubs, + dependencies : [dep_pthread_stubs, dep_atomic_ops], version : '1.0.0', install : true, ) diff --git a/etnaviv/meson.build b/etnaviv/meson.build index 1767733bd510efdaad86..ca2aa544c58924a15d8b 100644 --- a/etnaviv/meson.build +++ b/etnaviv/meson.build @@ -31,7 +31,7 @@ libdrm_etnaviv = shared_library( include_directories : [inc_root, inc_drm], link_with : libdrm, c_args : warn_c_args, - dependencies : [dep_pthread_stubs, dep_rt], + dependencies : [dep_pthread_stubs, dep_rt, dep_atomic_ops], version : '1.0.0', install : true, ) diff --git a/freedreno/meson.build b/freedreno/meson.build index de6a413fa93e63c0ad4a..da993c10355578838f29 100644 --- a/freedreno/meson.build +++ b/freedreno/meson.build @@ -44,7 +44,7 @@ libdrm_freedreno = shared_library( [files_freedreno, config_file], c_args : warn_c_args, include_directories : [inc_root, inc_drm], - dependencies : [dep_valgrind, dep_pthread_stubs, dep_rt], + dependencies : [dep_valgrind, dep_pthread_stubs, dep_rt, dep_atomic_ops], link_with : libdrm, version : '1.0.0', install : true, diff --git a/intel/meson.build b/intel/meson.build index ad877274f8d488a80d54..42402f60e38cd5e7359f 100644 --- a/intel/meson.build +++ b/intel/meson.build @@ -29,7 +29,7 @@ libdrm_intel = shared_library( ], include_directories : [inc_root, inc_drm], link_with : libdrm, - dependencies : [dep_pciaccess, dep_pthread_stubs, dep_rt, dep_valgrind], + dependencies : [dep_pciaccess, dep_pthread_stubs, dep_rt, dep_valgrind, dep_atomic_ops], c_args : warn_c_args, version : '1.0.0', install : true, diff --git a/meson.build b/meson.build index a19e600c7475b2578e2d..f45c14a70baa2456582d 100644 --- a/meson.build +++ b/meson.build @@ -51,6 +51,7 @@ cc = meson.get_compiler('c') intel_atomics = false lib_atomics = false
+dep_atomic_ops = dependency('atomic_ops', required : false) if cc.compiles(''' int atomic_add(int *i) { return __sync_add_and_fetch (i, 1); } int atomic_cmpxchg(int *i, int j, int k) { return __sync_val_compare_and_swap (i, j, k); } @@ -58,7 +59,7 @@ if cc.compiles(''' name : 'Intel Atomics') intel_atomics = true with_atomics = true -elif cc.has_header('atomic_ops.h') +elif dep_atomic_ops.found() lib_atomics = true with_atomics = true elif cc.has_function('atomic_cas_uint') diff --git a/nouveau/meson.build b/nouveau/meson.build index f031cd63b71bab9f7e7a..b8affd9ef776c99ba896 100644 --- a/nouveau/meson.build +++ b/nouveau/meson.build @@ -25,7 +25,7 @@ libdrm_nouveau = shared_library( c_args : warn_c_args, include_directories : [inc_root, inc_drm], link_with : libdrm, - dependencies : dep_threads, + dependencies : [dep_threads, dep_atomic_ops], version : '2.0.0', install : true, ) diff --git a/omap/meson.build b/omap/meson.build index 1881087fb0d180b668d3..f89436f0e99970b381aa 100644 --- a/omap/meson.build +++ b/omap/meson.build @@ -24,7 +24,7 @@ libdrm_omap = shared_library( include_directories : [inc_root, inc_drm], c_args : warn_c_args, link_with : libdrm, - dependencies : [dep_pthread_stubs], + dependencies : [dep_pthread_stubs, dep_atomic_ops], version : '1.0.0', install : true, ) diff --git a/radeon/meson.build b/radeon/meson.build index b02166fe87ea27470e4b..557a878042bb78df4096 100644 --- a/radeon/meson.build +++ b/radeon/meson.build @@ -31,7 +31,7 @@ libdrm_radeon = shared_library( c_args : warn_c_args, include_directories : [inc_root, inc_drm], link_with : libdrm, - dependencies : [dep_pthread_stubs], + dependencies : [dep_pthread_stubs, dep_atomic_ops], version : '1.0.1', install : true, ) diff --git a/tegra/meson.build b/tegra/meson.build index 99fdd194f50aceb6858b..7ac815177718d301b76c 100644 --- a/tegra/meson.build +++ b/tegra/meson.build @@ -23,7 +23,7 @@ libdrm_tegra = shared_library( [files('tegra.c'), config_file], include_directories : [inc_root, inc_drm], link_with : libdrm, - dependencies : [dep_pthread_stubs], + dependencies : [dep_pthread_stubs, dep_atomic_ops], c_args : warn_c_args, version : '0.0.0', install : true,
Ping? :) Both for this patch and the equivalent autotools patch it replies to.
On Wednesday, 2018-02-07 14:24:33 +0000, Eric Engestrom wrote:
Signed-off-by: Eric Engestrom eric.engestrom@imgtec.com
amdgpu/meson.build | 2 +- etnaviv/meson.build | 2 +- freedreno/meson.build | 2 +- intel/meson.build | 2 +- meson.build | 3 ++- nouveau/meson.build | 2 +- omap/meson.build | 2 +- radeon/meson.build | 2 +- tegra/meson.build | 2 +- 9 files changed, 10 insertions(+), 9 deletions(-)
diff --git a/amdgpu/meson.build b/amdgpu/meson.build index 8b0452056e2513892c2c..7040ebab86e271022323 100644 --- a/amdgpu/meson.build +++ b/amdgpu/meson.build @@ -37,7 +37,7 @@ libdrm_amdgpu = shared_library( ], include_directories : [inc_root, inc_drm], link_with : libdrm,
- dependencies : dep_pthread_stubs,
- dependencies : [dep_pthread_stubs, dep_atomic_ops], version : '1.0.0', install : true,
) diff --git a/etnaviv/meson.build b/etnaviv/meson.build index 1767733bd510efdaad86..ca2aa544c58924a15d8b 100644 --- a/etnaviv/meson.build +++ b/etnaviv/meson.build @@ -31,7 +31,7 @@ libdrm_etnaviv = shared_library( include_directories : [inc_root, inc_drm], link_with : libdrm, c_args : warn_c_args,
- dependencies : [dep_pthread_stubs, dep_rt],
- dependencies : [dep_pthread_stubs, dep_rt, dep_atomic_ops], version : '1.0.0', install : true,
) diff --git a/freedreno/meson.build b/freedreno/meson.build index de6a413fa93e63c0ad4a..da993c10355578838f29 100644 --- a/freedreno/meson.build +++ b/freedreno/meson.build @@ -44,7 +44,7 @@ libdrm_freedreno = shared_library( [files_freedreno, config_file], c_args : warn_c_args, include_directories : [inc_root, inc_drm],
- dependencies : [dep_valgrind, dep_pthread_stubs, dep_rt],
- dependencies : [dep_valgrind, dep_pthread_stubs, dep_rt, dep_atomic_ops], link_with : libdrm, version : '1.0.0', install : true,
diff --git a/intel/meson.build b/intel/meson.build index ad877274f8d488a80d54..42402f60e38cd5e7359f 100644 --- a/intel/meson.build +++ b/intel/meson.build @@ -29,7 +29,7 @@ libdrm_intel = shared_library( ], include_directories : [inc_root, inc_drm], link_with : libdrm,
- dependencies : [dep_pciaccess, dep_pthread_stubs, dep_rt, dep_valgrind],
- dependencies : [dep_pciaccess, dep_pthread_stubs, dep_rt, dep_valgrind, dep_atomic_ops], c_args : warn_c_args, version : '1.0.0', install : true,
diff --git a/meson.build b/meson.build index a19e600c7475b2578e2d..f45c14a70baa2456582d 100644 --- a/meson.build +++ b/meson.build @@ -51,6 +51,7 @@ cc = meson.get_compiler('c') intel_atomics = false lib_atomics = false
+dep_atomic_ops = dependency('atomic_ops', required : false) if cc.compiles(''' int atomic_add(int *i) { return __sync_add_and_fetch (i, 1); } int atomic_cmpxchg(int *i, int j, int k) { return __sync_val_compare_and_swap (i, j, k); } @@ -58,7 +59,7 @@ if cc.compiles(''' name : 'Intel Atomics') intel_atomics = true with_atomics = true
Change added here locally; there's no need to link again `dep_atomic_ops` in this branch, although it doesn't hurt:
+ dep_atomic_ops = []
-elif cc.has_header('atomic_ops.h') +elif dep_atomic_ops.found() lib_atomics = true with_atomics = true elif cc.has_function('atomic_cas_uint') diff --git a/nouveau/meson.build b/nouveau/meson.build index f031cd63b71bab9f7e7a..b8affd9ef776c99ba896 100644 --- a/nouveau/meson.build +++ b/nouveau/meson.build @@ -25,7 +25,7 @@ libdrm_nouveau = shared_library( c_args : warn_c_args, include_directories : [inc_root, inc_drm], link_with : libdrm,
- dependencies : dep_threads,
- dependencies : [dep_threads, dep_atomic_ops], version : '2.0.0', install : true,
) diff --git a/omap/meson.build b/omap/meson.build index 1881087fb0d180b668d3..f89436f0e99970b381aa 100644 --- a/omap/meson.build +++ b/omap/meson.build @@ -24,7 +24,7 @@ libdrm_omap = shared_library( include_directories : [inc_root, inc_drm], c_args : warn_c_args, link_with : libdrm,
- dependencies : [dep_pthread_stubs],
- dependencies : [dep_pthread_stubs, dep_atomic_ops], version : '1.0.0', install : true,
) diff --git a/radeon/meson.build b/radeon/meson.build index b02166fe87ea27470e4b..557a878042bb78df4096 100644 --- a/radeon/meson.build +++ b/radeon/meson.build @@ -31,7 +31,7 @@ libdrm_radeon = shared_library( c_args : warn_c_args, include_directories : [inc_root, inc_drm], link_with : libdrm,
- dependencies : [dep_pthread_stubs],
- dependencies : [dep_pthread_stubs, dep_atomic_ops], version : '1.0.1', install : true,
) diff --git a/tegra/meson.build b/tegra/meson.build index 99fdd194f50aceb6858b..7ac815177718d301b76c 100644 --- a/tegra/meson.build +++ b/tegra/meson.build @@ -23,7 +23,7 @@ libdrm_tegra = shared_library( [files('tegra.c'), config_file], include_directories : [inc_root, inc_drm], link_with : libdrm,
- dependencies : [dep_pthread_stubs],
- dependencies : [dep_pthread_stubs, dep_atomic_ops], c_args : warn_c_args, version : '0.0.0', install : true,
-- Cheers, Eric
On 5 March 2018 at 12:03, Eric Engestrom eric.engestrom@imgtec.com wrote:
Ping? :) Both for this patch and the equivalent autotools patch it replies to.
The autotools one needs the CFLAGS added - meson does it automatically for us.
On Wednesday, 2018-02-07 14:24:33 +0000, Eric Engestrom wrote:
Signed-off-by: Eric Engestrom eric.engestrom@imgtec.com
amdgpu/meson.build | 2 +- etnaviv/meson.build | 2 +- freedreno/meson.build | 2 +- intel/meson.build | 2 +- meson.build | 3 ++- nouveau/meson.build | 2 +- omap/meson.build | 2 +- radeon/meson.build | 2 +- tegra/meson.build | 2 +- 9 files changed, 10 insertions(+), 9 deletions(-)
diff --git a/amdgpu/meson.build b/amdgpu/meson.build index 8b0452056e2513892c2c..7040ebab86e271022323 100644 --- a/amdgpu/meson.build +++ b/amdgpu/meson.build @@ -37,7 +37,7 @@ libdrm_amdgpu = shared_library( ], include_directories : [inc_root, inc_drm], link_with : libdrm,
- dependencies : dep_pthread_stubs,
- dependencies : [dep_pthread_stubs, dep_atomic_ops], version : '1.0.0', install : true,
) diff --git a/etnaviv/meson.build b/etnaviv/meson.build index 1767733bd510efdaad86..ca2aa544c58924a15d8b 100644 --- a/etnaviv/meson.build +++ b/etnaviv/meson.build @@ -31,7 +31,7 @@ libdrm_etnaviv = shared_library( include_directories : [inc_root, inc_drm], link_with : libdrm, c_args : warn_c_args,
- dependencies : [dep_pthread_stubs, dep_rt],
- dependencies : [dep_pthread_stubs, dep_rt, dep_atomic_ops], version : '1.0.0', install : true,
) diff --git a/freedreno/meson.build b/freedreno/meson.build index de6a413fa93e63c0ad4a..da993c10355578838f29 100644 --- a/freedreno/meson.build +++ b/freedreno/meson.build @@ -44,7 +44,7 @@ libdrm_freedreno = shared_library( [files_freedreno, config_file], c_args : warn_c_args, include_directories : [inc_root, inc_drm],
- dependencies : [dep_valgrind, dep_pthread_stubs, dep_rt],
- dependencies : [dep_valgrind, dep_pthread_stubs, dep_rt, dep_atomic_ops], link_with : libdrm, version : '1.0.0', install : true,
diff --git a/intel/meson.build b/intel/meson.build index ad877274f8d488a80d54..42402f60e38cd5e7359f 100644 --- a/intel/meson.build +++ b/intel/meson.build @@ -29,7 +29,7 @@ libdrm_intel = shared_library( ], include_directories : [inc_root, inc_drm], link_with : libdrm,
- dependencies : [dep_pciaccess, dep_pthread_stubs, dep_rt, dep_valgrind],
- dependencies : [dep_pciaccess, dep_pthread_stubs, dep_rt, dep_valgrind, dep_atomic_ops], c_args : warn_c_args, version : '1.0.0', install : true,
diff --git a/meson.build b/meson.build index a19e600c7475b2578e2d..f45c14a70baa2456582d 100644 --- a/meson.build +++ b/meson.build @@ -51,6 +51,7 @@ cc = meson.get_compiler('c') intel_atomics = false lib_atomics = false
+dep_atomic_ops = dependency('atomic_ops', required : false) if cc.compiles(''' int atomic_add(int *i) { return __sync_add_and_fetch (i, 1); } int atomic_cmpxchg(int *i, int j, int k) { return __sync_val_compare_and_swap (i, j, k); } @@ -58,7 +59,7 @@ if cc.compiles(''' name : 'Intel Atomics') intel_atomics = true with_atomics = true
Change added here locally; there's no need to link again `dep_atomic_ops` in this branch, although it doesn't hurt:
dep_atomic_ops = []
The dummy dep_atomic_ops is needed for almost all cases in the if/else ladder. The exception being the .found() case.
With that Reviewed-by: Emil Velikov emil.velikov@collabora.com
-Emil
On Thursday, 2018-03-08 18:10:03 +0000, Emil Velikov wrote:
On 5 March 2018 at 12:03, Eric Engestrom eric.engestrom@imgtec.com wrote:
Ping? :) Both for this patch and the equivalent autotools patch it replies to.
The autotools one needs the CFLAGS added - meson does it automatically for us.
I'll let Peter re-spin his patch, but I might push the meson one before his lands.
On Wednesday, 2018-02-07 14:24:33 +0000, Eric Engestrom wrote:
Signed-off-by: Eric Engestrom eric.engestrom@imgtec.com
amdgpu/meson.build | 2 +- etnaviv/meson.build | 2 +- freedreno/meson.build | 2 +- intel/meson.build | 2 +- meson.build | 3 ++- nouveau/meson.build | 2 +- omap/meson.build | 2 +- radeon/meson.build | 2 +- tegra/meson.build | 2 +- 9 files changed, 10 insertions(+), 9 deletions(-)
diff --git a/amdgpu/meson.build b/amdgpu/meson.build index 8b0452056e2513892c2c..7040ebab86e271022323 100644 --- a/amdgpu/meson.build +++ b/amdgpu/meson.build @@ -37,7 +37,7 @@ libdrm_amdgpu = shared_library( ], include_directories : [inc_root, inc_drm], link_with : libdrm,
- dependencies : dep_pthread_stubs,
- dependencies : [dep_pthread_stubs, dep_atomic_ops], version : '1.0.0', install : true,
) diff --git a/etnaviv/meson.build b/etnaviv/meson.build index 1767733bd510efdaad86..ca2aa544c58924a15d8b 100644 --- a/etnaviv/meson.build +++ b/etnaviv/meson.build @@ -31,7 +31,7 @@ libdrm_etnaviv = shared_library( include_directories : [inc_root, inc_drm], link_with : libdrm, c_args : warn_c_args,
- dependencies : [dep_pthread_stubs, dep_rt],
- dependencies : [dep_pthread_stubs, dep_rt, dep_atomic_ops], version : '1.0.0', install : true,
) diff --git a/freedreno/meson.build b/freedreno/meson.build index de6a413fa93e63c0ad4a..da993c10355578838f29 100644 --- a/freedreno/meson.build +++ b/freedreno/meson.build @@ -44,7 +44,7 @@ libdrm_freedreno = shared_library( [files_freedreno, config_file], c_args : warn_c_args, include_directories : [inc_root, inc_drm],
- dependencies : [dep_valgrind, dep_pthread_stubs, dep_rt],
- dependencies : [dep_valgrind, dep_pthread_stubs, dep_rt, dep_atomic_ops], link_with : libdrm, version : '1.0.0', install : true,
diff --git a/intel/meson.build b/intel/meson.build index ad877274f8d488a80d54..42402f60e38cd5e7359f 100644 --- a/intel/meson.build +++ b/intel/meson.build @@ -29,7 +29,7 @@ libdrm_intel = shared_library( ], include_directories : [inc_root, inc_drm], link_with : libdrm,
- dependencies : [dep_pciaccess, dep_pthread_stubs, dep_rt, dep_valgrind],
- dependencies : [dep_pciaccess, dep_pthread_stubs, dep_rt, dep_valgrind, dep_atomic_ops], c_args : warn_c_args, version : '1.0.0', install : true,
diff --git a/meson.build b/meson.build index a19e600c7475b2578e2d..f45c14a70baa2456582d 100644 --- a/meson.build +++ b/meson.build @@ -51,6 +51,7 @@ cc = meson.get_compiler('c') intel_atomics = false lib_atomics = false
+dep_atomic_ops = dependency('atomic_ops', required : false) if cc.compiles(''' int atomic_add(int *i) { return __sync_add_and_fetch (i, 1); } int atomic_cmpxchg(int *i, int j, int k) { return __sync_val_compare_and_swap (i, j, k); } @@ -58,7 +59,7 @@ if cc.compiles(''' name : 'Intel Atomics') intel_atomics = true with_atomics = true
Change added here locally; there's no need to link again `dep_atomic_ops` in this branch, although it doesn't hurt:
dep_atomic_ops = []
The dummy dep_atomic_ops is needed for almost all cases in the if/else ladder. The exception being the .found() case.
Actually, because of the way the `if` chain is written, the dep_atomic_ops has to be created before the list; in the `if` cases before this one, that dep might exist, but we don't need it. In the branch that uses it, if we got in the branch then it exists, and we need it. In the branches after that, it doesn't exist and we don't need it either.
That means that only up to that branch can it contain anything; afterwards, it's empty anyway.
And like I said, it only has the effect of maybe on the branches before adding unused flags to the compiler & linker, which shouldn't have any effect anyway.
With that Reviewed-by: Emil Velikov emil.velikov@collabora.com
With the explanation, does your r-b stand for the current version?
On 9 March 2018 at 11:47, Eric Engestrom eric.engestrom@imgtec.com wrote:
dep_atomic_ops = []
The dummy dep_atomic_ops is needed for almost all cases in the if/else ladder. The exception being the .found() case.
Actually, because of the way the `if` chain is written, the dep_atomic_ops has to be created before the list; in the `if` cases before this one, that dep might exist, but we don't need it. In the branch that uses it, if we got in the branch then it exists, and we need it. In the branches after that, it doesn't exist and we don't need it either.
That means that only up to that branch can it contain anything; afterwards, it's empty anyway.
And like I said, it only has the effect of maybe on the branches before adding unused flags to the compiler & linker, which shouldn't have any effect anyway.
Let me see if I get this right:
You're saying that when dep_atomic_ops.found() == false, the dep_atomic_ops dependency listed in the respective will expand to no-op. I wasn't quite sure if that's the case, hence my pedantic suggestion ;-)
Makes sense though, rb still stands.
Thanks Eric!
-Emil
On Friday, 2018-03-09 15:48:51 +0000, Emil Velikov wrote:
On 9 March 2018 at 11:47, Eric Engestrom eric.engestrom@imgtec.com wrote:
dep_atomic_ops = []
The dummy dep_atomic_ops is needed for almost all cases in the if/else ladder. The exception being the .found() case.
Actually, because of the way the `if` chain is written, the dep_atomic_ops has to be created before the list; in the `if` cases before this one, that dep might exist, but we don't need it. In the branch that uses it, if we got in the branch then it exists, and we need it. In the branches after that, it doesn't exist and we don't need it either.
That means that only up to that branch can it contain anything; afterwards, it's empty anyway.
And like I said, it only has the effect of maybe on the branches before adding unused flags to the compiler & linker, which shouldn't have any effect anyway.
Let me see if I get this right:
You're saying that when dep_atomic_ops.found() == false, the dep_atomic_ops dependency listed in the respective will expand to no-op. I wasn't quite sure if that's the case, hence my pedantic suggestion ;-)
Exactly :)
Makes sense though, rb still stands.
OK, pushing in a minute
Thanks Eric!
-Emil
On 6 February 2018 at 21:19, Peter Seiderer ps.report@gmx.net wrote:
From: Thomas Petazzoni thomas.petazzoni@free-electrons.com
The configure script currently tests the availability of libatomic_ops by checking the presence of atomic_ops.h. While this is good enough as an availability test, it is not sufficient as on some platforms, libatomic_ops provides an actual shared library against which we should be linked to access libatomic_ops functionality.
Therefore, we instead use PKG_CHECK_MODULES() to test the availability of libatomic_ops. Besides testing its availability, this also fills in the ATOMIC_OPS_LIBS variable with the list of libraries we need to link with to use libatomic_ops.
All Mesa drivers that include xf86atomic.h have been updated to link against ATOMIC_OPS_LIBS.
Of course, if we're not using libatomic_ops, ATOMIC_OPS_LIBS is empty, and we don't link against it.
Signed-off-by: Thomas Petazzoni thomas.petazzoni@free-electrons.com Signed-off-by: Peter Seiderer ps.report@gmx.net [Bernd: PKG_CHECK_MODULES should not fail when libatomic_ops is missing] Signed-off-by: Bernd Kuhls bernd.kuhls@t-online.de
amdgpu/Makefile.am | 2 +- configure.ac | 2 +- etnaviv/Makefile.am | 3 ++- freedreno/Makefile.am | 3 ++- intel/Makefile.am | 3 ++- nouveau/Makefile.am | 2 +- omap/Makefile.am | 2 +- radeon/Makefile.am | 2 +- tegra/Makefile.am | 2 +-
You're adding ATOMIC_OPS_LIBS to all the correct places, although ATOMIC_OPS_CFLAGS seems to be missing. Can you re-spin with that one added?
Thanks Emil
dri-devel@lists.freedesktop.org