-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
99 lines (82 loc) · 2.83 KB
/
Makefile
File metadata and controls
99 lines (82 loc) · 2.83 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#-----------------------------------------------------------------------
# ROCM_PATH: Defaults to /opt/rocm/llvm
# ROCM_GPU: Auto detected via rocm_agent_enumerator
# ROCM_GPUTARGET: Defaults to amdgcn-amd-amdhsa
#
# make run
#
# Run "make help" to see other options for this Makefile
TESTNAME = norm
TESTSRC = norm.c
UNAMEP = $(shell uname -p)
ROCM_CPUTARGET = $(UNAMEP)-pc-linux-gnu
ifeq ($(UNAMEP),ppc64le)
ROCM_CPUTARGET = ppc64le-linux-gnu
endif
ROCM_PATH ?= /opt/rocm/
ROCM_GPUTARGET ?= amdgcn-amd-amdhsa
INSTALLED_GPU = $(shell $(ROCM_PATH)/bin/rocm_agent_enumerator | grep -m 1 -E gfx[^0]{1})
ROCM_GPU ?= $(INSTALLED_GPU)
CC = $(ROCM_PATH)/llvm/bin/clang
# Sorry, clang openmp requires these complex options
CFLAGS = -O3 -target $(ROCM_CPUTARGET) -fopenmp -fopenmp-targets=$(ROCM_GPUTARGET) -Xopenmp-target=$(ROCM_GPUTARGET) -march=$(ROCM_GPU)
ifeq ($(OFFLOAD_DEBUG),1)
$(info DEBUG Mode ON)
CCENV = env LIBRARY_PATH=$(ROCM_PATH)/lib-debug
RUNENV = LIBOMPTARGET_DEBUG=1
endif
ifeq ($(VERBOSE),1)
$(info Compilation VERBOSE Mode ON)
CFLAGS += -v
endif
ifeq ($(TEMPS),1)
$(info Compilation and linking save-temp Mode ON)
CFLAGS += -save-temps
endif
CFLAGS += $(EXTRA_CFLAGS)
# LD flags to work with mpi, math and others libraries: -lmpi -lm -lstdc++
LFLAGS = -lmpi -lm
# ----- Demo compile and link in one step, no object code saved
$(TESTNAME): $(TESTSRC)
$(CCENV) $(CC) $(CFLAGS) $(LFLAGS) $^ -o $@
run: $(TESTNAME)
$(RUNENV) ./$(TESTNAME)
# ---- Demo compile and link in two steps, object saved
$(TESTNAME).o: $(TESTSRC)
$(CCENV) $(CC) -c $(CFLAGS) $^ -o $@
obin: $(TESTNAME).o
$(CCENV) $(CC) $(CFLAGS) $(LFLAGS) $^ -o $@
run_obin: obin
$(RUNENV) ./obin
help:
@echo
@echo "Source[s]: $(TESTSRC)"
@echo "Application binary: $(TESTNAME)"
@echo "Target GPU: $(ROCM_GPU)"
@echo "Target triple: $(ROCM_GPUTARGET)"
@echo "ROCM compiler: $(CC)"
@echo "Compile flags: $(CFLAGS)"
@echo
@echo "This Makefile supports these targets:"
@echo
@echo " make // Builds $(TESTNAME) "
@echo " make run // Executes $(TESTNAME) "
@echo
@echo " make $(TESTNAME).o // build object file "
@echo " make obin // Link object file to build binary "
@echo " make run_obin // Execute obin "
@echo
@echo " make clean"
@echo " make help"
@echo
@echo "Environment variables used by this Makefile:"
@echo " ROCM_GPU=<GPU> Target GPU, e.g gfx906"
@echo " ROCM_PATH=<dir> Where llvm bin is located"
@echo " EXTRA_CFLAGS=<args> extra arguments for compiler"
@echo " OFFLOAD_DEBUG=n if n=1, compile and run in Debug mode"
@echo " VERBOSE=n if n=1, add verbose output"
@echo " TEMPS=1 do not delete intermediate files"
@echo
# Cleanup anything this makefile can create
clean:
rm -f $(TESTNAME) obin *.i *.ii *.bc *.lk a.out-* *.ll *.s *.o *.cubin