From c2ddbd03d2d509d5fbd05af78604870224e56e8b Mon Sep 17 00:00:00 2001
From: Sergey Fedorov <vital.had@gmail.com>
Date: Wed, 4 Jan 2023 09:07:17 +0700
Subject: [PATCH 08/10] Makefile: fix dylib target for macOS

---
 Makefile | 47 ++++++++++++++++++++++++++++++-----------------
 1 file changed, 30 insertions(+), 17 deletions(-)

diff --git a/Makefile b/Makefile
index a816e03..2edfeca 100644
--- a/Makefile
+++ b/Makefile
@@ -1,8 +1,8 @@
-# 是否开启openmp 1 开启  0 不开启 单线程版本
+# 是否开启openmp，1 开启，0 不开启 单线程版本。
 OPENMP = 1
-# 是否生成汇编代码，生成的汇编代码在 asm 目录下。1 生成,0 不生成。
+# 是否生成汇编代码，生成的汇编代码在 asm 目录下。1 生成，0 不生成。
 ASM_COMPILE = 0
-# MKL_INT 和 ALPHA_INT 是否使用64位， 1 使用64位，0 使用32位。
+# MKL_INT 和 ALPHA_INT 是否使用64位，1 使用64位，0 使用32位。
 INT_64 = 0
 # 表示编不编译
 HIP_ON = $(shell echo $${HIP_ON:-0})
@@ -17,6 +17,7 @@ HYGON_ON = 0
 HAS_MKL = 0
 PLAIN_ON = 0
 ROOT = $(shell pwd)
+OS := $(shell uname -s)
 
 LIB_DIR = $(ROOT)/lib
 INC_DIR = $(ROOT)/include
@@ -24,25 +25,30 @@ OBJ_DIR = $(ROOT)/obj
 BIN_DIR = $(ROOT)/bin
 ASM_DIR = $(ROOT)/asm
 
-ifeq ($(DEBUG_ON),1)
+ifeq ($(DEBUG_ON), 1)
 CPPFLAGS += -ggdb
 endif
 
-ifeq ($(HIP_ON),1)
+ifeq ($(HIP_ON), 1)
 ROCM_DIR = /public/software/compiler/rocm/rocm-3.9.1
 ROCSP_DIR = /home/gcx/csparse
 endif
+
 LIBNAME = libalpha_spblas
 
 INC += -I$(INC_DIR)
 
-ifeq ($(HIP_ON),1)
+ifeq ($(HIP_ON), 1)
 INC += -I$(ROCM_DIR)/hip/include
 endif
 
 export ROOT LIB_DIR INC_DIR OBJ_DIR BIN_DIR ASM_DIR INC DEFINE LIBNAME OPENMP ASM_COMPILE INT_64 HIP_ON PLAIN_ON HAS_MKL ARM_ON HYGON_ON
 GCC_VERSION_GE9_3_1 := $(shell expr `gcc --version | awk -F" " '/^gcc/{print $$3}' |  tr -d '.' ` \>= 931)
+
+ifneq ($(OS), Darwin)
 CPUVENDOR := $(shell lscpu | awk -F"[ ;]" '/^Vendor/ {print $$NF}' )
+endif
+
 MAKE = make
 CC = gcc
 HCC= hipcc
@@ -70,19 +76,21 @@ CFLAGS += -fPIC
 # CFLAGS += -Wl,-z,relro -Wl,-z,noexecstack -Wl,-z,now
 
 ARCH = $(shell uname -m)
-ifeq ($(ARCH),aarch64)
+ifeq ($(ARCH), aarch64)
 CC = gcc
 DEFINE += -D__aarch64__
-ifeq ($(GCC_VERSION_GE9_3_1),1)
+ifeq ($(GCC_VERSION_GE9_3_1), 1)
 CFLAGS += -march=armv8.3-a
 DEFINE += -DCMLA
 endif
 endif
-ifeq ($(ARCH),x86_64)
+ifeq ($(ARCH), x86_64)
 CC = gcc
-ifeq ($(CPUVENDOR),GenuineIntel)
+ifneq ($(OS), Darwin)
+ifeq ($(CPUVENDOR), GenuineIntel)
 CC = icc
 endif
+endif
 CFLAGS += -m64
 CFLAGS += -march=native
 DEFINE += -D__x86_64__
@@ -90,13 +98,13 @@ ifeq ($(HAS_MKL), 1)
 DEFINE += -D__MKL__
 endif
 endif
-ifeq ($(ARCH),ppc)
+ifeq ($(ARCH), ppc)
 CC = gcc
 CFLAGS += -mtune=native
 CFLAGS += -arch ppc
 DEFINE += -Dppc
 endif
-ifeq ($(ARCH),ppc64)
+ifeq ($(ARCH), ppc64)
 CC = gcc
 CFLAGS += -mtune=native
 CFLAGS += -arch ppc64
@@ -112,27 +120,32 @@ DEFINE += -DMKL_ILP64
 DEFINE += -DALPHA_INT=int64_t
 endif
 
-ifeq ($(HIP_ON),1)
+ifeq ($(HIP_ON), 1)
 CEXTRAFLAGS += -lstdc++ -L$(ROCM_DIR)/hip/lib -L$(ROCM_DIR)/rocsparse/lib -lamdhip64 -lrocsparse
 LDFLAGS += $(CEXTRAFLAGS)
 DEFINE += -D__DCU__
 endif
 
-ifeq ($(PLAIN_ON),1)
+ifeq ($(PLAIN_ON), 1)
 DEFINE += -D__PLAIN__
 endif
 
 export MAKE CC HCC AR CFLAGS CPPFLAGS CEXTRAFLAGS ARCH LDFLAGS
 
-.PHONY : clean lib test tool
+.PHONY : clean lib so test
 
-all : lib test tool so
+all : lib so test
 
 lib :
 	$(MAKE) -C src $(@F)
 
-so : lib 
+so : lib
+# FIXME: This produces a dylib, but without symbols.
+# ifeq ($(OS), Darwin)
+#	$(CC) -shared -Wl,-force_load $(LIB_DIR)/$(LIBNAME).a -o $(LIB_DIR)/$(LIBNAME).dylib
+# else
 	$(CC) -shared -o $(LIB_DIR)/$(LIBNAME).so -Wl,--whole-archive $(LIB_DIR)/$(LIBNAME).a -Wl,--no-whole-archive
+# endif
 
 test : lib
 	$(MAKE) -C test $(@F)
-- 
2.39.0

