@@ -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
287288gallery.c := $(wildcard gallery/* /ceed* .c)
288289libceed.c += $(gallery.c )
289290
@@ -487,9 +488,10 @@ MEMCHK_STATUS = Disabled
487488MEMCHK := $(shell echo "$(HASH ) include <valgrind/memcheck.h>" | $(CC ) $(CPPFLAGS ) -E - >/dev/null 2>&1 && echo 1)
488489MEMCHK_BACKENDS = /cpu/self/memcheck/serial /cpu/self/memcheck/blocked
489490ifeq ($(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"
493495endif
494496
495497# AVX Backeds
@@ -498,9 +500,10 @@ AVX_FLAG := $(if $(filter clang,$(CC_VENDOR)),+avx,-mavx)
498500AVX := $(filter $(AVX_FLAG ) ,$(shell $(CC ) $(CFLAGS:-M%= ) -v -E -x c /dev/null 2>&1) )
499501AVX_BACKENDS = /cpu/self/avx/serial /cpu/self/avx/blocked
500502ifneq ($(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"
504507endif
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"
530534endif
531535
532536# CUDA Backends
@@ -538,14 +542,15 @@ CUDA_LIB_DIR_STUBS := $(CUDA_LIB_DIR)/stubs
538542CUDA_BACKENDS = /gpu/cuda/ref /gpu/cuda/shared /gpu/cuda/gen
539543ifneq ($(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"
549554endif
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"
567573endif
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"
580587endif
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"
616624endif
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"
632641endif
633642
634643BACKENDS ?= $(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
669678libceed.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
0 commit comments