# -*- Makefile -*- # SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. # SPDX-License-Identifier: Apache-2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. arch = UNKNOWN setup_file = setup/Make.$(arch) include $(setup_file) bin_name='bin/xhpcg' ifeq ($(USE_CUDA), 0) ifneq ($(USE_GRACE), 0) bin_name='bin/xhpcg-cpu' endif endif HPCG_DEPS = src/CG.o \ src/CG_ref.o \ src/TestCG.o \ src/ComputeResidual.o \ src/ExchangeHalo.o \ src/GenerateGeometry.o \ src/GenerateProblem.o \ src/GenerateProblem_ref.o \ src/CheckProblem.o \ src/MixedBaseCounter.o \ src/OptimizeProblem.o \ src/ReadHpcgDat.o \ src/ReportResults.o \ src/SetupHalo.o \ src/SetupHalo_ref.o \ src/TestSymmetry.o \ src/TestNorms.o \ src/WriteProblem.o \ src/YAML_Doc.o \ src/YAML_Element.o \ src/ComputeDotProduct.o \ src/ComputeDotProduct_ref.o \ src/mytimer.o \ src/ComputeOptimalShapeXYZ.o \ src/ComputeSPMV.o \ src/ComputeSPMV_ref.o \ src/ComputeSYMGS.o \ src/ComputeSYMGS_ref.o \ src/ComputeWAXPBY.o \ src/ComputeWAXPBY_ref.o \ src/ComputeMG_ref.o \ src/ComputeMG.o \ src/ComputeProlongation_ref.o \ src/ComputeRestriction_ref.o \ src/ComputeProlongation.o \ src/ComputeRestriction.o \ src/CheckAspectRatio.o \ src/OutputFile.o \ src/GenerateCoarseProblem.o \ src/init.o \ src/finalize.o \ src/CudaKernels.o \ src/CpuKernels.o # These header files are included in many source files, so we recompile every file if one or more of these header is modified. PRIMARY_HEADERS = HPCG_SRC_PATH/src/Geometry.hpp HPCG_SRC_PATH/src/SparseMatrix.hpp HPCG_SRC_PATH/src/Vector.hpp HPCG_SRC_PATH/src/CGData.hpp \ HPCG_SRC_PATH/src/MGData.hpp HPCG_SRC_PATH/src/hpcg.hpp all: $(bin_name) $(bin_name): src/main.o $(HPCG_DEPS) $(LINKER) $(LINKFLAGS) src/main.o $(HPCG_DEPS) $(HPCG_LIBS) -o $(bin_name) install: cp $(bin_name) ../bin/ clean: rm -f src/*.o $(bin_name) .PHONY: all clean src/main.o: HPCG_SRC_PATH/src/main.cpp $(PRIMARY_HEADERS) $(CXX) -c $(CXXFLAGS) -IHPCG_SRC_PATH/src $< -o $@ src/CG.o: HPCG_SRC_PATH/src/CG.cpp HPCG_SRC_PATH/src/CG.hpp $(PRIMARY_HEADERS) $(CXX) -c $(CXXFLAGS) -IHPCG_SRC_PATH/src $< -o $@ src/CG_ref.o: HPCG_SRC_PATH/src/CG_ref.cpp HPCG_SRC_PATH/src/CG_ref.hpp $(PRIMARY_HEADERS) $(CXX) -c $(CXXFLAGS) -IHPCG_SRC_PATH/src $< -o $@ src/TestCG.o: HPCG_SRC_PATH/src/TestCG.cpp HPCG_SRC_PATH/src/TestCG.hpp $(PRIMARY_HEADERS) $(CXX) -c $(CXXFLAGS) -IHPCG_SRC_PATH/src $< -o $@ src/ComputeResidual.o: HPCG_SRC_PATH/src/ComputeResidual.cpp HPCG_SRC_PATH/src/ComputeResidual.hpp $(PRIMARY_HEADERS) $(CXX) -c $(CXXFLAGS) -IHPCG_SRC_PATH/src $< -o $@ src/ExchangeHalo.o: HPCG_SRC_PATH/src/ExchangeHalo.cpp HPCG_SRC_PATH/src/ExchangeHalo.hpp $(PRIMARY_HEADERS) $(CXX) -c $(CXXFLAGS) -IHPCG_SRC_PATH/src $< -o $@ src/GenerateGeometry.o: HPCG_SRC_PATH/src/GenerateGeometry.cpp HPCG_SRC_PATH/src/GenerateGeometry.hpp $(PRIMARY_HEADERS) $(CXX) -c $(CXXFLAGS) -IHPCG_SRC_PATH/src $< -o $@ src/GenerateProblem.o: HPCG_SRC_PATH/src/GenerateProblem.cpp HPCG_SRC_PATH/src/GenerateProblem.hpp $(PRIMARY_HEADERS) $(CXX) -c $(CXXFLAGS) -IHPCG_SRC_PATH/src $< -o $@ src/GenerateProblem_ref.o: HPCG_SRC_PATH/src/GenerateProblem_ref.cpp HPCG_SRC_PATH/src/GenerateProblem_ref.hpp $(PRIMARY_HEADERS) $(CXX) -c $(CXXFLAGS) -IHPCG_SRC_PATH/src $< -o $@ src/CheckProblem.o: HPCG_SRC_PATH/src/CheckProblem.cpp HPCG_SRC_PATH/src/CheckProblem.hpp $(PRIMARY_HEADERS) $(CXX) -c $(CXXFLAGS) -IHPCG_SRC_PATH/src $< -o $@ src/MixedBaseCounter.o: HPCG_SRC_PATH/src/MixedBaseCounter.cpp HPCG_SRC_PATH/src/MixedBaseCounter.hpp $(PRIMARY_HEADERS) $(CXX) -c $(CXXFLAGS) -IHPCG_SRC_PATH/src $< -o $@ src/OptimizeProblem.o: HPCG_SRC_PATH/src/OptimizeProblem.cpp HPCG_SRC_PATH/src/OptimizeProblem.hpp $(PRIMARY_HEADERS) $(CXX) -c $(CXXFLAGS) -IHPCG_SRC_PATH/src $< -o $@ src/ReadHpcgDat.o: HPCG_SRC_PATH/src/ReadHpcgDat.cpp HPCG_SRC_PATH/src/ReadHpcgDat.hpp $(PRIMARY_HEADERS) $(CXX) -c $(CXXFLAGS) -IHPCG_SRC_PATH/src $< -o $@ src/ReportResults.o: HPCG_SRC_PATH/src/ReportResults.cpp HPCG_SRC_PATH/src/ReportResults.hpp $(PRIMARY_HEADERS) $(CXX) -c $(CXXFLAGS) -IHPCG_SRC_PATH/src $< -o $@ src/SetupHalo.o: HPCG_SRC_PATH/src/SetupHalo.cpp HPCG_SRC_PATH/src/SetupHalo.hpp $(PRIMARY_HEADERS) $(CXX) -c $(CXXFLAGS) -IHPCG_SRC_PATH/src $< -o $@ src/SetupHalo_ref.o: HPCG_SRC_PATH/src/SetupHalo_ref.cpp HPCG_SRC_PATH/src/SetupHalo_ref.hpp $(PRIMARY_HEADERS) $(CXX) -c $(CXXFLAGS) -IHPCG_SRC_PATH/src $< -o $@ src/TestSymmetry.o: HPCG_SRC_PATH/src/TestSymmetry.cpp HPCG_SRC_PATH/src/TestSymmetry.hpp $(PRIMARY_HEADERS) $(CXX) -c $(CXXFLAGS) -IHPCG_SRC_PATH/src $< -o $@ src/TestNorms.o: HPCG_SRC_PATH/src/TestNorms.cpp HPCG_SRC_PATH/src/TestNorms.hpp $(PRIMARY_HEADERS) $(CXX) -c $(CXXFLAGS) -IHPCG_SRC_PATH/src $< -o $@ src/WriteProblem.o: HPCG_SRC_PATH/src/WriteProblem.cpp HPCG_SRC_PATH/src/WriteProblem.hpp $(PRIMARY_HEADERS) $(CXX) -c $(CXXFLAGS) -IHPCG_SRC_PATH/src $< -o $@ src/YAML_Doc.o: HPCG_SRC_PATH/src/YAML_Doc.cpp HPCG_SRC_PATH/src/YAML_Doc.hpp $(PRIMARY_HEADERS) $(CXX) -c $(CXXFLAGS) -IHPCG_SRC_PATH/src $< -o $@ src/YAML_Element.o: HPCG_SRC_PATH/src/YAML_Element.cpp HPCG_SRC_PATH/src/YAML_Element.hpp $(PRIMARY_HEADERS) $(CXX) -c $(CXXFLAGS) -IHPCG_SRC_PATH/src $< -o $@ src/ComputeDotProduct.o: HPCG_SRC_PATH/src/ComputeDotProduct.cpp HPCG_SRC_PATH/src/ComputeDotProduct.hpp $(PRIMARY_HEADERS) $(CXX) -c $(CXXFLAGS) -IHPCG_SRC_PATH/src $< -o $@ src/ComputeDotProduct_ref.o: HPCG_SRC_PATH/src/ComputeDotProduct_ref.cpp HPCG_SRC_PATH/src/ComputeDotProduct_ref.hpp $(PRIMARY_HEADERS) $(CXX) -c $(CXXFLAGS) -IHPCG_SRC_PATH/src $< -o $@ src/finalize.o: HPCG_SRC_PATH/src/finalize.cpp $(PRIMARY_HEADERS) $(CXX) -c $(CXXFLAGS) -IHPCG_SRC_PATH/src $< -o $@ src/init.o: HPCG_SRC_PATH/src/init.cpp $(PRIMARY_HEADERS) $(CXX) -c $(CXXFLAGS) -IHPCG_SRC_PATH/src $< -o $@ src/mytimer.o: HPCG_SRC_PATH/src/mytimer.cpp HPCG_SRC_PATH/src/mytimer.hpp $(PRIMARY_HEADERS) $(CXX) -c $(CXXFLAGS) -IHPCG_SRC_PATH/src $< -o $@ src/ComputeOptimalShapeXYZ.o: HPCG_SRC_PATH/src/ComputeOptimalShapeXYZ.cpp HPCG_SRC_PATH/src/ComputeOptimalShapeXYZ.hpp $(PRIMARY_HEADERS) $(CXX) -c $(CXXFLAGS) -IHPCG_SRC_PATH/src $< -o $@ src/ComputeSPMV.o: HPCG_SRC_PATH/src/ComputeSPMV.cpp HPCG_SRC_PATH/src/ComputeSPMV.hpp $(PRIMARY_HEADERS) $(CXX) -c $(CXXFLAGS) -IHPCG_SRC_PATH/src $< -o $@ src/ComputeSPMV_ref.o: HPCG_SRC_PATH/src/ComputeSPMV_ref.cpp HPCG_SRC_PATH/src/ComputeSPMV_ref.hpp $(PRIMARY_HEADERS) $(CXX) -c $(CXXFLAGS) -IHPCG_SRC_PATH/src $< -o $@ src/ComputeSYMGS.o: HPCG_SRC_PATH/src/ComputeSYMGS.cpp HPCG_SRC_PATH/src/ComputeSYMGS.hpp $(PRIMARY_HEADERS) $(CXX) -c $(CXXFLAGS) -IHPCG_SRC_PATH/src $< -o $@ src/ComputeSYMGS_ref.o: HPCG_SRC_PATH/src/ComputeSYMGS_ref.cpp HPCG_SRC_PATH/src/ComputeSYMGS_ref.hpp $(PRIMARY_HEADERS) $(CXX) -c $(CXXFLAGS) -IHPCG_SRC_PATH/src $< -o $@ src/ComputeWAXPBY.o: HPCG_SRC_PATH/src/ComputeWAXPBY.cpp HPCG_SRC_PATH/src/ComputeWAXPBY.hpp $(PRIMARY_HEADERS) $(CXX) -c $(CXXFLAGS) -IHPCG_SRC_PATH/src $< -o $@ src/ComputeWAXPBY_ref.o: HPCG_SRC_PATH/src/ComputeWAXPBY_ref.cpp HPCG_SRC_PATH/src/ComputeWAXPBY_ref.hpp $(PRIMARY_HEADERS) $(CXX) -c $(CXXFLAGS) -IHPCG_SRC_PATH/src $< -o $@ src/ComputeMG_ref.o: HPCG_SRC_PATH/src/ComputeMG_ref.cpp HPCG_SRC_PATH/src/ComputeMG_ref.hpp $(PRIMARY_HEADERS) $(CXX) -c $(CXXFLAGS) -IHPCG_SRC_PATH/src $< -o $@ src/ComputeMG.o: HPCG_SRC_PATH/src/ComputeMG.cpp HPCG_SRC_PATH/src/ComputeMG.hpp $(PRIMARY_HEADERS) $(CXX) -c $(CXXFLAGS) -IHPCG_SRC_PATH/src $< -o $@ src/ComputeProlongation_ref.o: HPCG_SRC_PATH/src/ComputeProlongation_ref.cpp HPCG_SRC_PATH/src/ComputeProlongation_ref.hpp $(PRIMARY_HEADERS) $(CXX) -c $(CXXFLAGS) -IHPCG_SRC_PATH/src $< -o $@ src/ComputeRestriction_ref.o: HPCG_SRC_PATH/src/ComputeRestriction_ref.cpp HPCG_SRC_PATH/src/ComputeRestriction_ref.hpp $(PRIMARY_HEADERS) $(CXX) -c $(CXXFLAGS) -IHPCG_SRC_PATH/src $< -o $@ src/ComputeProlongation.o: HPCG_SRC_PATH/src/ComputeProlongation.cpp HPCG_SRC_PATH/src/ComputeProlongation.hpp $(PRIMARY_HEADERS) $(CXX) -c $(CXXFLAGS) -IHPCG_SRC_PATH/src $< -o $@ src/ComputeRestriction.o: HPCG_SRC_PATH/src/ComputeRestriction.cpp HPCG_SRC_PATH/src/ComputeRestriction.hpp $(PRIMARY_HEADERS) $(CXX) -c $(CXXFLAGS) -IHPCG_SRC_PATH/src $< -o $@ src/GenerateCoarseProblem.o: HPCG_SRC_PATH/src/GenerateCoarseProblem.cpp HPCG_SRC_PATH/src/GenerateCoarseProblem.hpp $(PRIMARY_HEADERS) $(CXX) -c $(CXXFLAGS) -IHPCG_SRC_PATH/src $< -o $@ src/CheckAspectRatio.o: HPCG_SRC_PATH/src/CheckAspectRatio.cpp HPCG_SRC_PATH/src/CheckAspectRatio.hpp $(PRIMARY_HEADERS) $(CXX) -c $(CXXFLAGS) -IHPCG_SRC_PATH/src $< -o $@ src/OutputFile.o: HPCG_SRC_PATH/src/OutputFile.cpp HPCG_SRC_PATH/src/OutputFile.hpp $(PRIMARY_HEADERS) $(CXX) -c $(CXXFLAGS) -IHPCG_SRC_PATH/src $< -o $@ src/CpuKernels.o: HPCG_SRC_PATH/src/CpuKernels.cpp HPCG_SRC_PATH/src/CpuKernels.hpp $(PRIMARY_HEADERS) $(CXX) -c $(CXXFLAGS) -IHPCG_SRC_PATH/src $< -o $@ src/CudaKernels.o: HPCG_SRC_PATH/src/CudaKernels.cu nvcc -c -O3 $(CUDA_ARCH) $(HPCG_DEFS) -IHPCG_SRC_PATH/src -I$(CUDA_HOME)/include -I$(CUBLASROOT)/include -I$(MPdir)/include $< -o $@