From fe472f2e955ffe3f4a3766888e8adfec8b85f087 Mon Sep 17 00:00:00 2001 From: Christos Choutouridis Date: Mon, 11 Nov 2024 19:13:34 +0200 Subject: [PATCH] Initialize makefile and report --- homework_1/Makefile | 261 ++++++++++++++++++++++++ homework_1/report/.gitignore | 7 + homework_1/report/homework_1_report.pdf | Bin 0 -> 52212 bytes homework_1/report/homework_1_report.tex | 50 +++++ homework_1/src/main.cpp | 6 + 5 files changed, 324 insertions(+) create mode 100644 homework_1/Makefile create mode 100644 homework_1/report/.gitignore create mode 100644 homework_1/report/homework_1_report.pdf create mode 100644 homework_1/report/homework_1_report.tex create mode 100644 homework_1/src/main.cpp diff --git a/homework_1/Makefile b/homework_1/Makefile new file mode 100644 index 0000000..7bfadec --- /dev/null +++ b/homework_1/Makefile @@ -0,0 +1,261 @@ +# +# PDS homework_1 Makefile +# +# Copyright (C) 2024 Christos Choutouridis +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as +# published by the Free Software Foundation, either version 3 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see . +# + +# ============== Project settings ============== +# Project's name +PROJECT := PDS_homework_1 +# Excecutable's name +TARGET := knnsearch +# Source directories list(space seperated). Makefile-relative path, UNDER current directory. +SRC_DIR_LIST := src +# Include directories list(space seperated). Makefile-relative path. +INC_DIR_LIST := src inc +# Exclude files list(space seperated). Filenames only. +# EXC_FILE_LIST := bad.cpp old.cpp + +# Build directories +BUILD_DIR := bin +OBJ_DIR := $(BUILD_DIR)/obj +DEP_DIR := $(BUILD_DIR)/.dep + + +# ========== Compiler settings ========== +# Compiler flags for debug and release +DEB_CFLAGS := -DDEBUG -g3 -Wall -Wextra -std=c11 +REL_CFLAGS := -Wall -Wextra -O3 -std=c11 +DEB_CXXFLAGS := -DDEBUG -g3 -Wall -Wextra -std=c++17 +REL_CXXFLAGS := -Wall -Wextra -O3 -std=c++17 + +# Pre-defines +# PRE_DEFS := MYCAB=1729 SUPER_MODE +PRE_DEFS := + +# ============== Linker settings ============== +# Linker flags (example: -pthread -lm) +LDFLAGS := -pthread +# Map output file +MAP_FILE := output.map +MAP_FLAG := -Xlinker -Map=$(BUILD_DIR)/$(MAP_FILE) + +# ============== Docker settings ============== +# We need: +# - Bind the entire project directory(the dir that icludes all the code) as volume. +# - In docker instance, change to working directory(where the makefile is). +DOCKER_VOL_DIR := $${PWD} +DOCKER_WRK_DIR := +DOCKER_RUN := docker run --rm +DOCKER_FLAGS := -v $(DOCKER_VOL_DIR):/usr/src/$(PROJECT) -w /usr/src/$(PROJECT)/$(DOCKER_WRK_DIR) + +# docker invoke mechanism (edit with care) +# note: +# Here, `DOCKER` variable is empty. Rules can assign `DOCKER := DOCKER_CMD` when docker +# functionality is needed. +DOCKER_CMD = $(DOCKER_RUN) $(DOCKER_FLAGS) $(IMAGE) +DOCKER := + +# ============== Tool selection ============== +# compiler and compiler flags. +CSIZE := size +CFLAGS := $(DEB_CFLAGS) +CXXFLAGS := $(DEB_CXXFLAGS) +CXX := g++ + + +# +# =========== Main body and Patterns =========== +# + +#ifeq ($(OS), Windows_NT) +# TARGET := $(TARGET).exe +#endif +INC := $(foreach dir,$(INC_DIR_LIST),-I$(dir)) +DEF := $(foreach def,$(PRE_DEFS),-D$(def)) +EXC := $(foreach fil,$(EXC_FILE_LIST), \ + $(foreach dir,$(SRC_DIR_LIST),$(wildcard $(dir)/$(fil))) \ + ) +# source files. object and dependencies list +# recursive search into current and source directories +SRC := $(wildcard *.cpp) +SRC += $(foreach dir,$(SRC_DIR_LIST),$(wildcard $(dir)/*.cpp)) +SRC += $(foreach dir,$(SRC_DIR_LIST),$(wildcard $(dir)/**/*.cpp)) +SRC := $(filter-out $(EXC),$(SRC)) +#SRC := $(abspath $(SRC)) + +OBJ := $(foreach file,$(SRC:%.cpp=%.o),$(OBJ_DIR)/$(file)) +DEP := $(foreach file,$(SRC:%.cpp=%.d),$(DEP_DIR)/$(file)) + + +# Make Dependencies pattern. +# This little trick enables recompilation only when dependencies change +# and it does so for changes both in source AND header files ;) +# +# It is based on Tom Tromey's method. +# +# Invoke cpp to create makefile rules with dependencies for each source file +$(DEP_DIR)/%.d: %.c + @mkdir -p $(@D) + @$(DOCKER) $(CC) -E $(CFLAGS) $(INC) $(DEF) -MM -MT $(OBJ_DIR)/$(<:.c=.o) -MF $@ $< + +# c file objects depent on .c AND dependency files, which have an empty recipe +$(OBJ_DIR)/%.o: %.c $(DEP_DIR)/%.d + @mkdir -p $(@D) + $(DOCKER) $(CC) -c $(CFLAGS) $(INC) $(DEF) -o $@ $< + +$(DEP_DIR)/%.d: %.cpp + @mkdir -p $(@D) + @$(DOCKER) $(CXX) -E $(CXXFLAGS) $(INC) $(DEF) -MM -MT $(OBJ_DIR)/$(<:.cpp=.o) -MF $@ $< + +# cpp file objects depent on .cpp AND dependency files, which have an empty recipe +$(OBJ_DIR)/%.o: %.cpp $(DEP_DIR)/%.d + @mkdir -p $(@D) + $(DOCKER) $(CXX) -c $(CXXFLAGS) $(INC) $(DEF) -o $@ $< + +# empty recipe for dependency files. This prevents make errors +$(DEP): + +# now include all dependencies +# After all they are makefile dependency rules ;) +include $(wildcard $(DEP)) + +# main target rule +$(BUILD_DIR)/$(TARGET): $(OBJ) + @mkdir -p $(@D) + @echo Linking to target: $(TARGET) + @echo $(DOCKER) $(CXX) $(LDFLAGS) $(MAP_FLAG) -o $(@D)/$(TARGET) '$$(OBJ)' + @$(DOCKER) $(CXX) $(LDFLAGS) $(MAP_FLAG) -o $(@D)/$(TARGET) $(OBJ) + @echo + @echo Print size information + @$(CSIZE) $(@D)/$(TARGET) + @echo Done + +.PHONY: clean +clean: + @echo Cleaning build directories + @rm -rf $(OBJ_DIR) + @rm -rf $(DEP_DIR) + @rm -rf $(BUILD_DIR) + +# +# ================ Local build rules ================= +# example: +# make debug + +debug: CFLAGS := $(DEB_CFLAGS) +debug: $(BUILD_DIR)/$(TARGET) + +release: CFLAGS := $(REL_CFLAGS) +release: $(BUILD_DIR)/$(TARGET) + +all: release + +hpc-results/post: + $(CXX) $(CFLAGS) -o $@ hpc-results/main.cpp + +hpc-clean: + rm hpc-results/post + +# +# ================ Local via docker build rules ================= +# +# examples: +# make IMAGE=hpcimage v0 +# make IMAGE=hpcimage v1_cilk +# +local_v0: CFLAGS := $(DEB_CFLAGS) -DCODE_VERSION=0 +local_v0: CXXFLAGS := $(DEB_CXXFLAGS) -DCODE_VERSION=0 +local_v0: TARGET := local_v0 +local_v0: $(BUILD_DIR)/$(TARGET) + cp $(BUILD_DIR)/$(TARGET) out/$(TARGET) + +local_v1: CFLAGS := $(DEB_CFLAGS) -DCODE_VERSION=4 +local_v1: CXXFLAGS := $(DEB_CXXFLAGS) -DCODE_VERSION=4 +local_v1: TARGET := local_v1 +local_v1: $(BUILD_DIR)/$(TARGET) + cp $(BUILD_DIR)/$(TARGET) out/$(TARGET) + +v0: DOCKER := $(DOCKER_CMD) +v0: CFLAGS := $(REL_CFLAGS) -DCODE_VERSION=0 +v0: CXXFLAGS := $(REL_CXXFLAGS) -DCODE_VERSION=0 +v0: TARGET := knnsearch_v0 +v0: $(BUILD_DIR)/$(TARGET) + cp $(BUILD_DIR)/$(TARGET) out/$(TARGET) + +v1_cilk: DOCKER := $(DOCKER_CMD) +v1_cilk: CXX := /usr/local/OpenCilk-9.0.1-Linux/bin/clang++ +v1_cilk: CFLAGS := $(REL_CFLAGS) -fcilkplus -DCODE_VERSION=1 -DCILK +v1_cilk: CXXFLAGS := $(REL_CXXFLAGS) -fcilkplus -DCODE_VERSION=1 -DCILK +v1_cilk: LDFLAGS += -fcilkplus +v1_cilk: TARGET := knnsearch_cilkv1 +v1_cilk: $(BUILD_DIR)/$(TARGET) + cp $(BUILD_DIR)/$(TARGET) out/$(TARGET) + +v1_omp: DOCKER := $(DOCKER_CMD) +v1_omp: CFLAGS := $(REL_CFLAGS) -fopenmp -DCODE_VERSION=1 -DOMP +v1_omp: CXXFLAGS := $(REL_CXXFLAGS) -fopenmp -DCODE_VERSION=1 -DOMP +v1_omp: LDFLAGS += -fopenmp +v1_omp: TARGET := knnsearch_ompv1 +v1_omp: $(BUILD_DIR)/$(TARGET) + cp $(BUILD_DIR)/$(TARGET) out/$(TARGET) + +v1: DOCKER := $(DOCKER_CMD) +v1: CFLAGS := $(REL_CFLAGS) -DCODE_VERSION=1 +v1: CXXFLAGS := $(REL_CXXFLAGS) -DCODE_VERSION=1 +v1: TARGET := knnsearch_v1 +v1: $(BUILD_DIR)/$(TARGET) + cp $(BUILD_DIR)/$(TARGET) out/$(TARGET) + + + +# +# ========= Inside CSAL Image build rules =========== +# +# 1) first jump into image (make sure you are in the directory where Makefile is): +# > docker run -it -v ${PWD}:/usr/src/exercise_1 -w /usr/src/exercise_1/ hpcimage +# 2) Clean binaries first **important** +# > make clean +# 3) for v4 cilk for example: +# > make csal_v4_cilk +# 4) run executables from `bin/`. Examples: +# > ./bin/tcount_ompv3 -i mtx/NACA0015.mtx --timing -r 3 -o /dev/null +# > ./bin/tcount_pthv4 -i mtx/com_Youtube.mtx --timing --dynamic --print_count + +csal_v0: CFLAGS := $(REL_CFLAGS) -DCODE_VERSION=0 +csal_v0: TARGET := knnsearch_v0 +csal_v0: $(BUILD_DIR)/$(TARGET) + +csal_v1_cilk: CXX := /usr/local/OpenCilk-9.0.1-Linux/bin/clang++ +csal_v1_cilk: CFLAGS := $(REL_CFLAGS) -fcilkplus -DCODE_VERSION=1 -DCILK +csal_v1_cilk: CXXFLAGS := $(REL_CXXFLAGS) -fcilkplus -DCODE_VERSION=1 -DCILK +csal_v1_cilk: LDFLAGS += -fcilkplus +csal_v1_cilk: TARGET := knnsearch_cilkv1 +csal_v1_cilk: $(BUILD_DIR)/$(TARGET) + +csal_v1_omp: CFLAGS := $(REL_CFLAGS) -fopenmp -DCODE_VERSION=1 -DOMP +csal_v1_omp: CXXFLAGS := $(REL_CXXFLAGS) -fopenmp -DCODE_VERSION=1 -DOMP +csal_v1_omp: LDFLAGS += -fopenmp +csal_v1_omp: TARGET := knnsearch_ompv1 +csal_v1_omp: $(BUILD_DIR)/$(TARGET) + +csal_v1: CFLAGS := $(REL_CFLAGS) -DCODE_VERSION=1 +csal_v1: CXXFLAGS := $(REL_CXXFLAGS) -DCODE_VERSION=1 +csal_v1: TARGET := knnsearch_v1 +csal_v1: $(BUILD_DIR)/$(TARGET) + + + diff --git a/homework_1/report/.gitignore b/homework_1/report/.gitignore new file mode 100644 index 0000000..77ec3e4 --- /dev/null +++ b/homework_1/report/.gitignore @@ -0,0 +1,7 @@ +# Texstudio +*.out +*.aux +*.log +*.toc +*.synctex.gz + diff --git a/homework_1/report/homework_1_report.pdf b/homework_1/report/homework_1_report.pdf new file mode 100644 index 0000000000000000000000000000000000000000..f88d8e4eed950b34dad455c88088753cdf141b3c GIT binary patch literal 52212 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
t$#92SJXaYDA6=)-$qhQ7!=z@rryFr^;%* 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 literal 0 HcmV?d00001 diff --git a/homework_1/report/homework_1_report.tex b/homework_1/report/homework_1_report.tex new file mode 100644 index 0000000..dc64304 --- /dev/null +++ b/homework_1/report/homework_1_report.tex @@ -0,0 +1,50 @@ +% +% Network programming Lab sum report +% +% authors: +% Χρήστος Χουτουρίδης ΑΕΜ 8997 +% cchoutou@ece.auth.gr + + +\documentclass[a4paper, 11pt]{AUTHReport} + +% Document configuration +\AuthorName{Χρήστος Χουτουρίδης} +\AuthorMail{cchoutou@ece.auth.gr} +\AuthorAEM{8997} + +%\CoAuthorName{asdf} +%\CoAuthorMail{asdf} +%\CoAuthorAEM{9874} + +%\WorkGroup{Ομάδα 3} + +\DocTitle{Εργασία 1: knnsearch} +\DocSubTitle{Συστήματα με κοινή μνήμη} +\Department{Τμημα ΗΜΜΥ. Τομεάς Ηλεκτρονικής} +\ClassName{Παράλληλα και Διανεμημένα Συστήματα} + +\InstructorName{Νικόλαος Πιτσιάνης} +\InstructorMail{nikos.pitsianis@eng.auth.gr} +\CurrentDate{\today} + + +\usepackage{capt-of} +\usepackage{enumitem} +\usepackage{tabularx} +\usepackage{array} + +\begin{document} + +\setlist[itemize]{topsep=0pt, partopsep=0pt, itemsep=3pt, parsep=3pt} + +\InsertTitle + +%\tableofcontents + +\sloppy + +\section{Εισαγωγή} + + +\end{document} diff --git a/homework_1/src/main.cpp b/homework_1/src/main.cpp new file mode 100644 index 0000000..4af4fc0 --- /dev/null +++ b/homework_1/src/main.cpp @@ -0,0 +1,6 @@ +#include + +int main(){ + std::cout << "Hello from knnsearch\n"; + return 0; +}