1# -*- mode: makefile -*- 2# 3 4ifeq ($(RM),true) 5.SECONDARY: $(%.o) $(%f.o) $(%f90.o) 6endif 7 8LINK.c = $(CLINKER) $(CCPPFLAGS) $(LDFLAGS) $(EXEFLAGS) 9LINK.o = $(CLINKER) $(LDFLAGS) $(EXEFLAGS) 10LINK.F = $(FLINKER) $(FCPPFLAGS) $(LDFLAGS) 11LINK.cc = $(CXXLINKER) $(CXXCPPFLAGS) $(LDFLAGS) 12 13# make macros KOKKOS_USE_CUDA_COMPILER etc are defined in `${PETSC_DIR}/${PETSC_ARCH}/lib/petsc/conf/petscvariables` 14ifneq ($(KOKKOS_USE_CUDA_COMPILER),) 15 # Kokkos requires nvcc to be in PATH and the C++ compiler to be given in an environmental variable 16 # We prefer to use the Kokkos nvcc_wrapper compiler wrapper for compiling Kokkos files. The command is adapted from PETSC_COMPILE.kokkos.cxx 17 # in gmakefile.test, with additional "-o $*.o" to generate intended foo.o instead of foo.kokkos.o 18 KOKKOS_COMPILE_SINGLE = PATH=`dirname $(CUDAC)`:$(PATH) NVCC_WRAPPER_DEFAULT_COMPILER="$(CUDA_CXX)" $(KOKKOS_BIN)/nvcc_wrapper --expt-extended-lambda -c $(CUDAC_FLAGS) ${PETSC_CCPPFLAGS} $(CUDACPPFLAGS) $(CUDA_CXXFLAGS) $(MPICXX_INCLUDES) -o $*.o 19 20 LINK.kokkos.cxx = PATH=`dirname $(CUDAC)`:$(PATH) NVCC_WRAPPER_DEFAULT_COMPILER=$(CUDA_CXX) $(KOKKOS_BIN)/nvcc_wrapper --expt-extended-lambda $(CUDAC_FLAGS) $(MPICXX_INCLUDES) ${PETSC_CCPPFLAGS} $(CUDA_CXXFLAGS) $(CUDACPPFLAGS) $(CUDA_CXXLIBS) $(MPICXX_LIBS) $(LDFLAGS) 21else ifneq ($(KOKKOS_USE_HIP_COMPILER),) 22 KOKKOS_COMPILE_SINGLE = ${PETSC_HIPCOMPILE_SINGLE} 23 LINK.kokkos.cxx = $(HIPC) $(HIPC_FLAGS) $(HIPPP_FLAGS) $(HIPOPTFLAGS) $(CXXFLAGS) $(CXXCPPFLAGS) $(LDFLAGS) $(MPICXX_INCLUDES) $(MPICXX_LIBS) 24else ifneq ($(KOKKOS_USE_SYCL_COMPILER),) 25 KOKKOS_COMPILE_SINGLE = ${PETSC_SYCLCOMPILE_SINGLE} 26 LINK.kokkos.cxx = $(SYCLC) $(SYCLC_FLAGS) $(SYCLPP_FLAGS) $(SYCLOPTFLAGS) $(CXXFLAGS) $(CXXCPPFLAGS) $(LDFLAGS) $(MPICXX_INCLUDES) $(MPICXX_LIBS) 27else 28 KOKKOS_COMPILE_SINGLE = ${PETSC_CXXCOMPILE_SINGLE} 29 LINK.kokkos.cxx = $(CXXLINKER) $(CXX_FLAGS) $(CXXFLAGS) $(CXXCPPFLAGS) $(LDFLAGS) 30endif 31 32# Why do we filter out -fvisibility=hidden? See comments in gmakefile.test on PETSC_COMPILE.kokkos.cxx 33PETSC_KOKKOSCOMPILE_SINGLE = $(filter-out -fvisibility=hidden,$(KOKKOS_COMPILE_SINGLE)) 34 35LINK.hip.cpp = $(HIPC) $(HIPC_FLAGS) $(HIPPP_FLAGS) $(HIPOPTFLAGS) $(CXXFLAGS) $(CXXCPPFLAGS) $(LDFLAGS) $(MPICXX_INCLUDES) $(MPICXX_LIBS) 36 37ifneq ($(RAJA_USE_CUDA_COMPILER),) 38 PETSC_RAJACOMPILE_SINGLE = ${CUDAC} -o $*.o $(MPICXX_INCLUDES) ${CUDAC_FLAGS} -x cu -Xcudafe "--display_error_number" -c --compiler-options="${PETSC_CCPPFLAGS} ${PETSC_CC_INCLUDES} ${CUDA_CXXFLAGS}" --expt-extended-lambda --expt-relaxed-constexpr 39else 40 PETSC_RAJACOMPILE_SINGLE = ${CXX} -o $*.o -c ${CXX_FLAGS} ${CXXFLAGS} ${CXXCPPFLAGS} 41endif 42 43LDLIBS += $(PETSC_LIB) 44 45% : %.F90 46 $(LINK.F) $^ $(LOADLIBES) $(LDLIBS) -o $@ 47% : %.kokkos.cxx 48 $(LINK.kokkos.cxx) $^ $(LOADLIBES) $(LDLIBS) -o $@ 49% : %.cxx 50 $(LINK.cc) $^ $(LOADLIBES) $(LDLIBS) -o $@ 51% : %.hip.cpp 52 $(LINK.hip.cpp) $^ $(LOADLIBES) $(LDLIBS) -o $@ 53 54ifneq (,$(findstring -TP,$(PCC_FLAGS))) 55% : %.c 56 ${PETSC_COMPILE_SINGLE} `pwd`/$< 57 ${CLINKER} $(EXEFLAGS) -o $@ $@.o $(PETSC_LIB) 58endif 59 60# makes an Emscripten https://emscripten.org/ executable from a PETSc C main program 61# See config/examples/arch-ci-linux-emcc.py for an example of building the PETSc libraries with Emscripten 62# node drops a variety of silly crums that are not all trivially blockable 63# 64ifneq (,$(findstring emcc,$(CC))) 65% : %.c 66 ${PETSC_COMPILE_SINGLE} `pwd`/$< 67 ${CLINKER} -s MAIN_MODULE -s ASSERTIONS=2 -s SAFE_HEAP=1 -s STACK_OVERFLOW_CHECK=1 -s ALLOW_MEMORY_GROWTH $(EXEFLAGS) -o $@.js $@.o $(PETSC_LIB) 68 -@printf '#!/usr/bin/env sh\nnode --redirect-warnings=/dev/null $@.js $$* | grep -v "Heap resize call from" ' > $@ 69 -@chmod u+x $@ 70endif 71 72help: 73 -@echo "" 74 -@echo "make applicationname - compiles applicationname.[c,cxx,F,F90] file into an executable" 75 -@echo "make clean - delete any object files and executables in the current directory" 76 -@echo "make libs - rebuilds any needed changes to the PETSc libraries" 77 -@echo "" 78