Skip to content

Commit f925a5d

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

29 files changed

+471
-300
lines changed

Makefile

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -487,9 +487,10 @@ MEMCHK_STATUS = Disabled
487487
MEMCHK := $(shell echo "$(HASH)include <valgrind/memcheck.h>" | $(CC) $(CPPFLAGS) -E - >/dev/null 2>&1 && echo 1)
488488
MEMCHK_BACKENDS = /cpu/self/memcheck/serial /cpu/self/memcheck/blocked
489489
ifeq ($(MEMCHK),1)
490-
MEMCHK_STATUS = Enabled
491-
libceed.c += $(ceedmemcheck.c)
490+
MEMCHK_STATUS = Enabled
491+
libceed.c += $(ceedmemcheck.c)
492492
BACKENDS_MAKE += $(MEMCHK_BACKENDS)
493+
CFLAGS += "-DCEED_USE_MEMCHECK"
493494
endif
494495

495496
# AVX Backeds
@@ -498,9 +499,10 @@ AVX_FLAG := $(if $(filter clang,$(CC_VENDOR)),+avx,-mavx)
498499
AVX := $(filter $(AVX_FLAG),$(shell $(CC) $(CFLAGS:-M%=) -v -E -x c /dev/null 2>&1))
499500
AVX_BACKENDS = /cpu/self/avx/serial /cpu/self/avx/blocked
500501
ifneq ($(AVX),)
501-
AVX_STATUS = Enabled
502-
libceed.c += $(avx.c)
502+
AVX_STATUS = Enabled
503+
libceed.c += $(avx.c)
503504
BACKENDS_MAKE += $(AVX_BACKENDS)
505+
CFLAGS += "-DCEED_USE_AVX"
504506
endif
505507

506508
# Collect list of libraries and paths for use in linking and pkg-config
@@ -523,10 +525,11 @@ ifneq ($(wildcard $(XSMM_DIR)/lib/libxsmm.*),)
523525
endif
524526
BLAS_LIB ?= $(MKL_LINK) -Wl,--push-state,--no-as-needed -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -lpthread -lm -ldl -Wl,--pop-state
525527
endif
526-
PKG_LIBS += $(BLAS_LIB)
528+
PKG_LIBS += $(BLAS_LIB)
527529
libceed.c += $(xsmm.c)
528530
$(xsmm.c:%.c=$(OBJDIR)/%.o) $(xsmm.c:%=%.tidy) : CPPFLAGS += -I$(XSMM_DIR)/include
529531
BACKENDS_MAKE += $(XSMM_BACKENDS)
532+
CFLAGS += "-DCEED_USE_XSMM"
530533
endif
531534

532535
# CUDA Backends
@@ -538,14 +541,15 @@ CUDA_LIB_DIR_STUBS := $(CUDA_LIB_DIR)/stubs
538541
CUDA_BACKENDS = /gpu/cuda/ref /gpu/cuda/shared /gpu/cuda/gen
539542
ifneq ($(CUDA_LIB_DIR),)
540543
$(libceeds) : CPPFLAGS += -I$(CUDA_DIR)/include
541-
PKG_LIBS += -L$(abspath $(CUDA_LIB_DIR)) -lcudart -lnvrtc -lcuda -lcublas
544+
PKG_LIBS += -L$(abspath $(CUDA_LIB_DIR)) -lcudart -lnvrtc -lcuda -lcublas
542545
PKG_STUBS_LIBS += -L$(CUDA_LIB_DIR_STUBS)
543546
LIBCEED_CONTAINS_CXX = 1
544547
libceed.c += interface/ceed-cuda.c
545548
libceed.c += $(cuda-all.c)
546549
libceed.cpp += $(cuda-all.cpp)
547550
libceed.cu += $(cuda-all.cu)
548551
BACKENDS_MAKE += $(CUDA_BACKENDS)
552+
CFLAGS += "-DCEED_USE_CUDA"
549553
endif
550554

551555
# HIP Backends
@@ -564,6 +568,7 @@ ifneq ($(HIP_LIB_DIR),)
564568
libceed.cpp += $(hip-all.cpp)
565569
libceed.hip += $(hip-all.hip)
566570
BACKENDS_MAKE += $(HIP_BACKENDS)
571+
CFLAGS += "-DCEED_USE_HIP"
567572
endif
568573

569574
# SYCL Backends
@@ -577,6 +582,7 @@ ifneq ($(SYCL_LIB_DIR),)
577582
LIBCEED_CONTAINS_CXX = 1
578583
libceed.sycl += $(sycl-core.cpp) $(sycl-ref.cpp) $(sycl-shared.cpp) $(sycl-gen.cpp)
579584
BACKENDS_MAKE += $(SYCL_BACKENDS)
585+
CFLAGS += "-DCEED_USE_SYCL"
580586
endif
581587

582588
# MAGMA Backends
@@ -613,6 +619,7 @@ ifneq ($(wildcard $(MAGMA_DIR)/lib/libmagma.*),)
613619
endif
614620
LIBCEED_CONTAINS_CXX = 1
615621
BACKENDS_MAKE += $(MAGMA_BACKENDS)
622+
CFLAGS += "-DCEED_USE_MAGMA"
616623
endif
617624

618625
# OCCA Backends
@@ -627,8 +634,9 @@ ifneq ($(wildcard $(OCCA_DIR)/lib/libocca.*),)
627634
$(libceeds) : CPPFLAGS += -I$(OCCA_DIR)/include
628635
PKG_LIBS += -L$(abspath $(OCCA_DIR))/lib -locca
629636
LIBCEED_CONTAINS_CXX = 1
630-
libceed.cpp += $(occa.cpp)
637+
libceed.cpp += $(occa.cpp)
631638
BACKENDS_MAKE += $(OCCA_BACKENDS)
639+
CFLAGS += "-DCEED_USE_OCCA"
632640
endif
633641

634642
BACKENDS ?= $(BACKENDS_MAKE)
@@ -662,17 +670,16 @@ endif
662670
# Building core library components
663671
# ------------------------------------------------------------
664672

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))
673+
FORCE:
674+
$(OBJDIR)/backends/ceed-backend-list.o: FORCE
668675

669676
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)
670677
$(filter %fortran.o,$(libceed.o)) : CPPFLAGS += $(if $(filter 1,$(UNDERSCORE)),-DUNDERSCORE)
671678
$(libceed.o): | info-backends
672-
$(libceed.so) : $(call weak_last,$(libceed.o)) | $$(@D)/.DIR
679+
$(libceed.so) : $(libceed.o) | $$(@D)/.DIR
673680
$(call quiet,LINK) $(LDFLAGS) $(CEED_LDFLAGS) -shared -o $@ $^ $(CEED_LDLIBS) $(LDLIBS)
674681

675-
$(libceed.a) : $(call weak_last,$(libceed.o)) | $$(@D)/.DIR
682+
$(libceed.a) : $(libceed.o) | $$(@D)/.DIR
676683
$(call quiet,AR) $(ARFLAGS) $@ $^
677684

678685
$(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)