Skip to content

Commit 480f15b

Browse files
committed
backends - use defines over weak
1 parent 7b3ff06 commit 480f15b

28 files changed

+475
-279
lines changed

Makefile

Lines changed: 23 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -283,7 +283,8 @@ $(libceed.so) : CEED_LDFLAGS += $(if $(DARWIN), -install_name @rpath/$(notdir $(
283283
# ------------------------------------------------------------
284284

285285
# Interface and gallery
286-
libceed.c := $(filter-out interface/ceed-cuda.c interface/ceed-hip.c interface/ceed-jit-source-root-$(if $(for_install),default,install).c, $(wildcard interface/ceed*.c backends/*.c gallery/*.c))
286+
libceed.c := $(filter-out backends/ceed-backends.c interface/ceed-cuda.c interface/ceed-hip.c interface/ceed-jit-source-root-$(if $(for_install),default,install).c, $(wildcard interface/ceed*.c backends/*.c gallery/*.c))
287+
libceed-backend-list.c: backends/ceed-backend-list.c
287288
gallery.c := $(wildcard gallery/*/ceed*.c)
288289
libceed.c += $(gallery.c)
289290

@@ -487,9 +488,10 @@ MEMCHK_STATUS = Disabled
487488
MEMCHK := $(shell echo "$(HASH)include <valgrind/memcheck.h>" | $(CC) $(CPPFLAGS) -E - >/dev/null 2>&1 && echo 1)
488489
MEMCHK_BACKENDS = /cpu/self/memcheck/serial /cpu/self/memcheck/blocked
489490
ifeq ($(MEMCHK),1)
490-
MEMCHK_STATUS = Enabled
491-
libceed.c += $(ceedmemcheck.c)
491+
MEMCHK_STATUS = Enabled
492+
libceed.c += $(ceedmemcheck.c)
492493
BACKENDS_MAKE += $(MEMCHK_BACKENDS)
494+
CFLAGS += "-DCEED_USE_MEMCHECK"
493495
endif
494496

495497
# AVX Backeds
@@ -498,9 +500,10 @@ AVX_FLAG := $(if $(filter clang,$(CC_VENDOR)),+avx,-mavx)
498500
AVX := $(filter $(AVX_FLAG),$(shell $(CC) $(CFLAGS:-M%=) -v -E -x c /dev/null 2>&1))
499501
AVX_BACKENDS = /cpu/self/avx/serial /cpu/self/avx/blocked
500502
ifneq ($(AVX),)
501-
AVX_STATUS = Enabled
502-
libceed.c += $(avx.c)
503+
AVX_STATUS = Enabled
504+
libceed.c += $(avx.c)
503505
BACKENDS_MAKE += $(AVX_BACKENDS)
506+
CFLAGS += "-DCEED_USE_AVX"
504507
endif
505508

506509
# Collect list of libraries and paths for use in linking and pkg-config
@@ -523,10 +526,11 @@ ifneq ($(wildcard $(XSMM_DIR)/lib/libxsmm.*),)
523526
endif
524527
BLAS_LIB ?= $(MKL_LINK) -Wl,--push-state,--no-as-needed -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -lpthread -lm -ldl -Wl,--pop-state
525528
endif
526-
PKG_LIBS += $(BLAS_LIB)
529+
PKG_LIBS += $(BLAS_LIB)
527530
libceed.c += $(xsmm.c)
528531
$(xsmm.c:%.c=$(OBJDIR)/%.o) $(xsmm.c:%=%.tidy) : CPPFLAGS += -I$(XSMM_DIR)/include
529532
BACKENDS_MAKE += $(XSMM_BACKENDS)
533+
CFLAGS += "-DCEED_USE_XSMM"
530534
endif
531535

532536
# CUDA Backends
@@ -538,14 +542,15 @@ CUDA_LIB_DIR_STUBS := $(CUDA_LIB_DIR)/stubs
538542
CUDA_BACKENDS = /gpu/cuda/ref /gpu/cuda/shared /gpu/cuda/gen
539543
ifneq ($(CUDA_LIB_DIR),)
540544
$(libceeds) : CPPFLAGS += -I$(CUDA_DIR)/include
541-
PKG_LIBS += -L$(abspath $(CUDA_LIB_DIR)) -lcudart -lnvrtc -lcuda -lcublas
545+
PKG_LIBS += -L$(abspath $(CUDA_LIB_DIR)) -lcudart -lnvrtc -lcuda -lcublas
542546
PKG_STUBS_LIBS += -L$(CUDA_LIB_DIR_STUBS)
543547
LIBCEED_CONTAINS_CXX = 1
544548
libceed.c += interface/ceed-cuda.c
545549
libceed.c += $(cuda-all.c)
546550
libceed.cpp += $(cuda-all.cpp)
547551
libceed.cu += $(cuda-all.cu)
548552
BACKENDS_MAKE += $(CUDA_BACKENDS)
553+
CFLAGS += "-DCEED_USE_CUDA"
549554
endif
550555

551556
# HIP Backends
@@ -564,6 +569,7 @@ ifneq ($(HIP_LIB_DIR),)
564569
libceed.cpp += $(hip-all.cpp)
565570
libceed.hip += $(hip-all.hip)
566571
BACKENDS_MAKE += $(HIP_BACKENDS)
572+
CFLAGS += "-DCEED_USE_HIP"
567573
endif
568574

569575
# SYCL Backends
@@ -577,6 +583,7 @@ ifneq ($(SYCL_LIB_DIR),)
577583
LIBCEED_CONTAINS_CXX = 1
578584
libceed.sycl += $(sycl-core.cpp) $(sycl-ref.cpp) $(sycl-shared.cpp) $(sycl-gen.cpp)
579585
BACKENDS_MAKE += $(SYCL_BACKENDS)
586+
CFLAGS += "-DCEED_USE_SYCL"
580587
endif
581588

582589
# MAGMA Backends
@@ -613,6 +620,7 @@ ifneq ($(wildcard $(MAGMA_DIR)/lib/libmagma.*),)
613620
endif
614621
LIBCEED_CONTAINS_CXX = 1
615622
BACKENDS_MAKE += $(MAGMA_BACKENDS)
623+
CFLAGS += "-DCEED_USE_MAGMA"
616624
endif
617625

618626
# OCCA Backends
@@ -627,8 +635,9 @@ ifneq ($(wildcard $(OCCA_DIR)/lib/libocca.*),)
627635
$(libceeds) : CPPFLAGS += -I$(OCCA_DIR)/include
628636
PKG_LIBS += -L$(abspath $(OCCA_DIR))/lib -locca
629637
LIBCEED_CONTAINS_CXX = 1
630-
libceed.cpp += $(occa.cpp)
638+
libceed.cpp += $(occa.cpp)
631639
BACKENDS_MAKE += $(OCCA_BACKENDS)
640+
CFLAGS += "-DCEED_USE_OCCA"
632641
endif
633642

634643
BACKENDS ?= $(BACKENDS_MAKE)
@@ -662,17 +671,17 @@ endif
662671
# Building core library components
663672
# ------------------------------------------------------------
664673

665-
# File names *-weak.c contain weak symbol definitions, which must be listed last
666-
# when creating shared or static libraries.
667-
weak_last = $(filter-out %-weak.o,$(1)) $(filter %-weak.o,$(1))
674+
libceed-backend-list.o = $(libceed-backend-list.c:%.c=$(OBJDIR)/%.o)
675+
.PHONY: libceed-backend-list
676+
libceed-backend-list: $(OBJDIR)/backends/ceed-backend-list.o
668677

669678
libceed.o = $(libceed.c:%.c=$(OBJDIR)/%.o) $(libceed.cpp:%.cpp=$(OBJDIR)/%.o) $(libceed.cu:%.cu=$(OBJDIR)/%.o) $(libceed.hip:%.hip.cpp=$(OBJDIR)/%.o) $(libceed.sycl:%.sycl.cpp=$(OBJDIR)/%.o)
670679
$(filter %fortran.o,$(libceed.o)) : CPPFLAGS += $(if $(filter 1,$(UNDERSCORE)),-DUNDERSCORE)
671-
$(libceed.o): | info-backends
672-
$(libceed.so) : $(call weak_last,$(libceed.o)) | $$(@D)/.DIR
680+
$(libceed.o): | libceed-backend-list info-backends
681+
$(libceed.so) : $(libceed.o) | $$(@D)/.DIR
673682
$(call quiet,LINK) $(LDFLAGS) $(CEED_LDFLAGS) -shared -o $@ $^ $(CEED_LDLIBS) $(LDLIBS)
674683

675-
$(libceed.a) : $(call weak_last,$(libceed.o)) | $$(@D)/.DIR
684+
$(libceed.a) : $(libceed.o) | $$(@D)/.DIR
676685
$(call quiet,AR) $(ARFLAGS) $@ $^
677686

678687
$(OBJDIR)/%.o : $(CURDIR)/%.c | $$(@D)/.DIR

backends/avx/ceed-avx-blocked.c

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,13 @@
1010
#include <stdbool.h>
1111
#include <string.h>
1212

13+
#include "../ceed-backend-init.h"
1314
#include "ceed-avx.h"
1415

1516
//------------------------------------------------------------------------------
1617
// Backend Init
1718
//------------------------------------------------------------------------------
18-
static int CeedInit_Avx(const char *resource, Ceed ceed) {
19+
CEED_INTERN int CeedInit_Avx_Blocked(const char *resource, Ceed ceed) {
1920
Ceed ceed_ref;
2021

2122
CeedCheck(!strcmp(resource, "/cpu/self") || !strcmp(resource, "/cpu/self/avx") || !strcmp(resource, "/cpu/self/avx/blocked"), ceed,
@@ -32,8 +33,3 @@ static int CeedInit_Avx(const char *resource, Ceed ceed) {
3233
}
3334

3435
//------------------------------------------------------------------------------
35-
// Backend Register
36-
//------------------------------------------------------------------------------
37-
CEED_INTERN int CeedRegister_Avx_Blocked(void) { return CeedRegister("/cpu/self/avx/blocked", CeedInit_Avx, 30); }
38-
39-
//------------------------------------------------------------------------------

backends/avx/ceed-avx-serial.c

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,13 @@
1010
#include <stdbool.h>
1111
#include <string.h>
1212

13+
#include "../ceed-backend-init.h"
1314
#include "ceed-avx.h"
1415

1516
//------------------------------------------------------------------------------
1617
// Backend Init
1718
//------------------------------------------------------------------------------
18-
static int CeedInit_Avx(const char *resource, Ceed ceed) {
19+
CEED_INTERN int CeedInit_Avx_Serial(const char *resource, Ceed ceed) {
1920
Ceed ceed_ref;
2021

2122
CeedCheck(!strcmp(resource, "/cpu/self") || !strcmp(resource, "/cpu/self/avx/serial"), ceed, CEED_ERROR_BACKEND,
@@ -32,8 +33,3 @@ static int CeedInit_Avx(const char *resource, Ceed ceed) {
3233
}
3334

3435
//------------------------------------------------------------------------------
35-
// Backend Register
36-
//------------------------------------------------------------------------------
37-
CEED_INTERN int CeedRegister_Avx_Serial(void) { return CeedRegister("/cpu/self/avx/serial", CeedInit_Avx, 35); }
38-
39-
//------------------------------------------------------------------------------

backends/blocked/ceed-blocked.c

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,18 @@
55
//
66
// This file is part of CEED: http://github.com/ceed
77

8-
#include "ceed-blocked.h"
9-
108
#include <ceed.h>
119
#include <ceed/backend.h>
1210
#include <stdbool.h>
1311
#include <string.h>
1412

13+
#include "../ceed-backend-init.h"
14+
#include "ceed-blocked.h"
15+
1516
//------------------------------------------------------------------------------
1617
// Backend Init
1718
//------------------------------------------------------------------------------
18-
static int CeedInit_Blocked(const char *resource, Ceed ceed) {
19+
CEED_INTERN int CeedInit_Ref_Blocked(const char *resource, Ceed ceed) {
1920
Ceed ceed_ref;
2021

2122
CeedCheck(!strcmp(resource, "/cpu/self") || !strcmp(resource, "/cpu/self/ref/blocked"), ceed, CEED_ERROR_BACKEND,
@@ -32,8 +33,3 @@ static int CeedInit_Blocked(const char *resource, Ceed ceed) {
3233
}
3334

3435
//------------------------------------------------------------------------------
35-
// Backend Register
36-
//------------------------------------------------------------------------------
37-
CEED_INTERN int CeedRegister_Ref_Blocked(void) { return CeedRegister("/cpu/self/ref/blocked", CeedInit_Blocked, 55); }
38-
39-
//------------------------------------------------------------------------------

backends/ceed-backend-init.h

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
// Copyright (c) 2017-2025, Lawrence Livermore National Security, LLC and other CEED contributors.
2+
// All Rights Reserved. See the top-level LICENSE and NOTICE files for details.
3+
//
4+
// SPDX-License-Identifier: BSD-2-Clause
5+
//
6+
// This file is part of CEED: http://github.com/ceed
7+
#pragma once
8+
9+
#include <ceed/backend.h>
10+
11+
#undef CEED_BACKEND
12+
#define CEED_BACKEND(name) CEED_INTERN int CeedInit_##name(const char *resource, Ceed ceed);
13+
#include "../backends/ceed-backend-list.h"
14+
#undef CEED_BACKEND

0 commit comments

Comments
 (0)