Index: combblas/CMakeLists.txt
===================================================================
--- combblas.orig/CMakeLists.txt	2025-09-28 01:20:56.595566436 +0200
+++ combblas/CMakeLists.txt	2025-09-28 01:25:22.941315193 +0200
@@ -1,46 +1,39 @@
-cmake_minimum_required(VERSION 3.3)
+cmake_minimum_required(VERSION 3.20...4.0)
 project(CombBLAS VERSION 2.0.0 LANGUAGES C CXX)
 
-# require c++14
-set(CMAKE_CXX_STANDARD 14)
+# require c++17
+set(CMAKE_CXX_STANDARD 17)
 set(CMAKE_CXX_STANDARD_REQUIRED YES)
 set(CMAKE_CXX_EXTENSIONS OFF)
 
+include(GNUInstallDirs)
+
 # Main CombBLAS library
 add_library(CombBLAS src/CommGrid.cpp src/mmio.c src/MPIType.cpp src/MPIOp.cpp src/MemoryPool.cpp src/hash.cpp)
 
-# require c++14 in CombBLAS interface
-if("cxx_std_14" IN_LIST CMAKE_CXX_COMPILE_FEATURES) # Use language feature if available (CMake >= 3.8)
-  target_compile_features(CombBLAS PUBLIC cxx_std_14)
-else()
-  # Use C++14-specific features for CMake >= 3.3, which will force the appropriate language level flags.
-  target_compile_features(CombBLAS PUBLIC cxx_return_type_deduction)
-endif()
-
 # set include directories
-target_include_directories(CombBLAS PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> $<INSTALL_INTERFACE:include>)
-target_include_directories(CombBLAS PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/psort-1.0/include> $<INSTALL_INTERFACE:include>)
-target_include_directories(CombBLAS PRIVATE include/CombBLAS)
+target_include_directories(CombBLAS PUBLIC
+        $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+        $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/psort-1.0/include>
+        $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
+        PRIVATE include/CombBLAS
+)
 
-# MPI and OpenMP dependencies
+# MPI dependencies
 find_package(MPI REQUIRED)
+if(TARGET MPI::MPI_CXX)
+    target_link_libraries(CombBLAS PUBLIC MPI::MPI_CXX)
+endif()
+
+# OpenMP dependencies
 find_package(OpenMP)
+option(USE_OPENMP "default on, but can be turned off by users" ON)
 
-if(TARGET MPI::MPI_CXX) # Use target if available (CMake >= 3.9)
-  target_link_libraries(CombBLAS PUBLIC MPI::MPI_CXX)
-else()
-  target_compile_options(CombBLAS PUBLIC "${MPI_CXX_COMPILE_FLAGS}")
-  target_link_libraries(CombBLAS PUBLIC "${MPI_CXX_LIBRARIES}" "${MPI_CXX_LINKFLAGS}")
-  target_include_directories(CombBLAS PUBLIC "${MPI_CXX_INCLUDE_PATH}")
+if(TARGET OpenMP::OpenMP_CXX)
+if(USE_OPENMP)
+    target_compile_definitions(CombBLAS PUBLIC THREADED)
+    target_link_libraries(CombBLAS PUBLIC OpenMP::OpenMP_CXX)
 endif()
-
-if(TARGET OpenMP::OpenMP_CXX) # Use target if available (CMake >= 3.9)
-  target_compile_definitions(CombBLAS PUBLIC THREADED)
-  target_link_libraries(CombBLAS PUBLIC OpenMP::OpenMP_CXX)
-elseif(OPENMP_FOUND)
-  target_compile_definitions(CombBLAS PUBLIC THREADED)
-  target_compile_options(CombBLAS PUBLIC "${OpenMP_CXX_FLAGS}")
-  target_link_libraries(CombBLAS PUBLIC "${OpenMP_CXX_FLAGS}")
 endif()
 
 add_subdirectory(usort)
@@ -56,7 +49,7 @@
 #      modifications to CombBLAS and have the changes automatically recompiled for
 #      dependent projects.
 # Either way, we need to create a CombBLASConfig.cmake.
-set(ConfigPackageLocation lib/cmake/CombBLAS)
+set(ConfigPackageLocation ${CMAKE_INSTALL_LIBDIR}/cmake/CombBLAS)
 
 # Generate version number header
 include(GenerateExportHeader)
@@ -64,34 +57,21 @@
 set_target_properties(CombBLAS PROPERTIES VERSION ${CombBLAS_VERSION})
 
 # installation
-install(DIRECTORY include/ DESTINATION include)
-install(DIRECTORY psort-1.0/include/ DESTINATION include)
-install(TARGETS CombBLAS EXPORT CombBLASTargets
-        LIBRARY DESTINATION lib
-        ARCHIVE DESTINATION lib
-        RUNTIME DESTINATION bin
-        INCLUDES DESTINATION include
-        )
+install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
+install(DIRECTORY psort-1.0/include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
+install(TARGETS CombBLAS EXPORT CombBLASTargets)
 
 include(CMakePackageConfigHelpers)
 
+configure_package_config_file(cmake/CombBLASConfig.cmake
+        "${CMAKE_CURRENT_BINARY_DIR}/CombBLAS/CombBLASConfig.cmake"
+        INSTALL_DESTINATION ${ConfigPackageLocation}
+)
 write_basic_package_version_file(
     "${CMAKE_CURRENT_BINARY_DIR}/CombBLAS/CombBLASConfigVersion.cmake"
     VERSION ${CombBLAS_VERSION}
     COMPATIBILITY AnyNewerVersion
 )
-
-# The following commands allow for option 2.
-export(EXPORT CombBLASTargets
-       FILE "${CMAKE_CURRENT_BINARY_DIR}/CombBLAS/CombBLASTargets.cmake"
-       NAMESPACE CombBLAS::
-       )
-configure_file(cmake/CombBLASConfig.cmake
-               "${CMAKE_CURRENT_BINARY_DIR}/CombBLAS/CombBLASConfig.cmake"
-               COPYONLY
-               )
-
-# Allow for option 2
 install(EXPORT CombBLASTargets
         FILE
         CombBLASTargets.cmake
@@ -99,11 +79,16 @@
         CombBLAS::
         DESTINATION
         ${ConfigPackageLocation}
-        )
-export(PACKAGE CombBLAS)
+)
+
+# The following command allow for option 2.
+export(EXPORT CombBLASTargets
+       FILE "${CMAKE_CURRENT_BINARY_DIR}/CombBLAS/CombBLASTargets.cmake"
+       NAMESPACE CombBLAS::
+       )
 install(
     FILES
-    cmake/CombBLASConfig.cmake
+    "${CMAKE_CURRENT_BINARY_DIR}/CombBLAS/CombBLASConfig.cmake"
     "${CMAKE_CURRENT_BINARY_DIR}/CombBLAS/CombBLASConfigVersion.cmake"
     DESTINATION
     ${ConfigPackageLocation}
Index: combblas/ReleaseTests/CMakeLists.txt
===================================================================
--- combblas.orig/ReleaseTests/CMakeLists.txt	2025-09-28 01:20:56.595566436 +0200
+++ combblas/ReleaseTests/CMakeLists.txt	2025-09-28 01:20:56.589928273 +0200
@@ -40,7 +40,16 @@
 
 ADD_TEST(NAME GenMMWrite_Test COMMAND ${MPIEXEC} ${MPIEXEC_NUMPROC_FLAG} 4 $<TARGET_FILE:GenWrMat> 20 16 1 scale20_ef16_symmetric.mtx)
 ADD_TEST(NAME Multiplication_Test COMMAND ${MPIEXEC} ${MPIEXEC_NUMPROC_FLAG} 4 $<TARGET_FILE:MultTest> ../TESTDATA/rmat_scale16_A.mtx ../TESTDATA/rmat_scale16_B.mtx ../TESTDATA/rmat_scale16_productAB.mtx ../TESTDATA/x_65536_halfdense.txt ../TESTDATA/y_65536_halfdense.txt )
-ADD_TEST(NAME SpGEMM3D_Test COMMAND ${MPIEXEC} ${MPIEXEC_NUMPROC_FLAG} 16 $<TARGET_FILE:SpGEMM3DTest> ../TESTDATA/rmat_scale16_A.mtx ../TESTDATA/rmat_scale16_B.mtx ../TESTDATA/rmat_scale16_productAB.mtx )
+
+# Set number of processes based on platform
+if(APPLE) # osx usually has less cores, so make it 4 for just correctness check
+    set(TEST_PROCS 4)
+else()
+    set(TEST_PROCS 16)
+endif()
+ADD_TEST(NAME SpGEMM3D_Test COMMAND ${MPIEXEC} ${MPIEXEC_NUMPROC_FLAG} ${TEST_PROCS} $<TARGET_FILE:SpGEMM3DTest> ../TESTDATA/rmat_scale16_A.mtx ../TESTDATA/rmat_scale16_B.mtx ../TESTDATA/rmat_scale16_productAB.mtx )
+
+
 ADD_TEST(NAME HashSpGEMMTest COMMAND ${MPIEXEC} ${MPIEXEC_NUMPROC_FLAG} 1 $<TARGET_FILE:HashSpGEMMTest> ../TESTDATA/rmat_scale16_A.mtx ../TESTDATA/rmat_scale16_B.mtx ../TESTDATA/rmat_scale16_productAB.mtx )
 ADD_TEST(NAME Reduction_Test COMMAND ${MPIEXEC} ${MPIEXEC_NUMPROC_FLAG} 4 $<TARGET_FILE:ReduceTest> ../TESTDATA/sprand10000 ../TESTDATA/sprand10000_sumcols ../TESTDATA/sprand10000_sumrows)
 ADD_TEST(NAME Iterator_Test COMMAND ${MPIEXEC} ${MPIEXEC_NUMPROC_FLAG} 4 $<TARGET_FILE:IteratorTest> ../TESTDATA sprand10000)
Index: combblas/ReleaseTests/SpGEMM3DTest.cpp
===================================================================
--- combblas.orig/ReleaseTests/SpGEMM3DTest.cpp	2025-09-28 01:20:56.595566436 +0200
+++ combblas/ReleaseTests/SpGEMM3DTest.cpp	2025-09-28 01:20:56.590431101 +0200
@@ -71,7 +71,12 @@
         
         // Increase number of layers 1 -> 4 -> 16
         for(int layers = 1; layers <= 16; layers = layers * 4){
-            
+            if(layers > nprocs){
+                if(myrank == 0){
+                    printf("we only have %d mpi processes, skip layer %d test \n", nprocs, layers);
+                }
+                continue;
+            }
             if(myrank == 0) fprintf(stderr, "Trying %d layers\n", layers);
 
             // Convert 2D matrices to 3D
Index: combblas/graph500-1.2/generator/CMakeLists.txt
===================================================================
--- combblas.orig/graph500-1.2/generator/CMakeLists.txt	2025-09-28 01:20:56.595566436 +0200
+++ combblas/graph500-1.2/generator/CMakeLists.txt	2025-09-28 01:20:56.590849920 +0200
@@ -1,16 +1,14 @@
 # Top level directory has the include files
 
 ADD_LIBRARY( GraphGenlib btrd_binomial_distribution.c splittable_mrg.c mrg_transitions.c graph_generator.c permutation_gen.c make_graph.c utils.c scramble_edges.c)
-target_include_directories(GraphGenlib PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> $<INSTALL_INTERFACE:include>)
-target_include_directories(GraphGenlib PRIVATE include/graph500/generator)
+target_include_directories(GraphGenlib PUBLIC
+        $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+        $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
+        PRIVATE include/graph500/generator
+)
 if(CMAKE_C_COMPILER_ID STREQUAL "Intel")
   target_compile_options(GraphGenlib PRIVATE "-restrict")
 endif()
 
-install(DIRECTORY include/ DESTINATION include)
-install(TARGETS GraphGenlib EXPORT CombBLASTargets
-  LIBRARY DESTINATION lib
-  ARCHIVE DESTINATION lib
-  RUNTIME DESTINATION bin
-  INCLUDES DESTINATION include
-)
+install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
+install(TARGETS GraphGenlib EXPORT CombBLASTargets)
Index: combblas/usort/CMakeLists.txt
===================================================================
--- combblas.orig/usort/CMakeLists.txt	2025-09-28 01:20:56.595566436 +0200
+++ combblas/usort/CMakeLists.txt	2025-09-28 01:20:56.591421998 +0200
@@ -1,8 +1,11 @@
 # Top level directory has the include files
 
 add_library(Usortlib src/parUtils.cpp src/binUtils.cpp)
-target_include_directories(Usortlib PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> $<INSTALL_INTERFACE:include>)
-target_include_directories(Usortlib PRIVATE include/usort)
+target_include_directories(Usortlib PUBLIC
+        $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+        $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
+        PRIVATE include/usort
+)
 
 if(TARGET MPI::MPI_CXX) # Use target if available (CMake >= 3.9)
   target_link_libraries(Usortlib PUBLIC MPI::MPI_CXX)
@@ -12,11 +15,6 @@
   target_include_directories(Usortlib PUBLIC "${MPI_CXX_INCLUDE_PATH}")
 endif()
 
-install(DIRECTORY include/ DESTINATION include)
-install(TARGETS Usortlib EXPORT CombBLASTargets
-        LIBRARY DESTINATION lib
-        ARCHIVE DESTINATION lib
-        RUNTIME DESTINATION bin
-        INCLUDES DESTINATION include
-        )
+install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
+install(TARGETS Usortlib EXPORT CombBLASTargets)
 
