Skip to content

Commit

Permalink
build: update minimum required CMake to 3.13
Browse files Browse the repository at this point in the history
  • Loading branch information
spalicki committed Dec 16, 2024
1 parent f4fcbb6 commit 72b577b
Show file tree
Hide file tree
Showing 15 changed files with 72 additions and 168 deletions.
72 changes: 37 additions & 35 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -14,29 +14,41 @@
# limitations under the License.
#===============================================================================

cmake_minimum_required(VERSION 2.8.12)
cmake_minimum_required(VERSION 3.13)

# Use INTERFACE_LINK_LIBRARIES as the source of the link interface
if(POLICY CMP0022)
cmake_policy(SET CMP0022 NEW)
endif()

# Do not mix INTERFACE_LINK_LIBRARIES signatures
if(POLICY CMP0023)
cmake_policy(SET CMP0023 NEW)
endif()

# Compiler id for Apple's Clang is now AppleClang
if(POLICY CMP0025)
cmake_policy(SET CMP0025 NEW)
endif()

# Foo::Bar always refers to an IMPORTED target
if(POLICY CMP0028)
cmake_policy(SET CMP0028 NEW)
endif()

if(POLICY CMP0054)
cmake_policy(SET CMP0054 NEW)
endif()

# Enable RPATH on MacOS/OSX
if(POLICY CMP0042)
cmake_policy(SET CMP0042 NEW)
endif()

# Do not export symbols from executables
if(POLICY CMP0065)
cmake_policy(SET CMP0065 NEW)
# The project() command manages VERSION variables
if(POLICY CMP0042)
cmake_policy(SET CMP0048 NEW)
endif()

# Interpret unquoted if() arguments as variables or keywords
if(POLICY CMP0054)
cmake_policy(SET CMP0054 NEW)
endif()

# Pass linker flags to try_compile
Expand All @@ -49,6 +61,11 @@ if(POLICY CMP0060)
cmake_policy(SET CMP0060 NEW)
endif()

# Do not export symbols from executables
if(POLICY CMP0065)
cmake_policy(SET CMP0065 NEW)
endif()

# Pass compiler flags to try_compile
if(POLICY CMP0066)
cmake_policy(SET CMP0066 NEW)
Expand Down Expand Up @@ -82,12 +99,7 @@ set(PROJECT_NAME "oneDNN")
set(PROJECT_FULL_NAME "oneAPI Deep Neural Network Library (oneDNN)")
set(PROJECT_VERSION "3.7.0")

if (CMAKE_VERSION VERSION_LESS 3.0)
project(${PROJECT_NAME} C CXX)
else()
cmake_policy(SET CMP0048 NEW)
project(${PROJECT_NAME} VERSION "${PROJECT_VERSION}" LANGUAGES C CXX)
endif()
project(${PROJECT_NAME} VERSION "${PROJECT_VERSION}" LANGUAGES C CXX)

if (NOT CMAKE_SIZEOF_VOID_P EQUAL 8)
message(FATAL_ERROR "oneDNN supports 64 bit platforms only")
Expand Down Expand Up @@ -141,28 +153,18 @@ include("cmake/host_compiler.cmake")
include("cmake/configuring_primitive_list.cmake")

if(UNIX OR MINGW)
if(CMAKE_VERSION VERSION_LESS "3.1.0")
# No CMAKE_<lang>_STANDARD, so add directly to CMAKE_<lang>_FLAGS
# (prepended so the user can override)
set(CMAKE_C_FLAGS "-std=c99 ${CMAKE_C_FLAGS}")
# Let SYCL to choose the C++ standard it needs.
if(NOT DNNL_WITH_SYCL)
set(CMAKE_CXX_FLAGS "-std=c++11 ${CMAKE_CXX_FLAGS}")
endif()
else()
# CMAKE_<lang>_STANDARD support, so set it to our defaults, unless
# overridden by the user
if(NOT DEFINED CMAKE_C_STANDARD)
set(CMAKE_C_STANDARD 99)
endif()
if(NOT DEFINED CMAKE_CXX_STANDARD AND NOT DNNL_WITH_SYCL)
set(CMAKE_CXX_STANDARD 11)
endif()

# Disable -std=gnuXX and -std=gnu++XX
set(CMAKE_C_EXTENSIONS OFF)
set(CMAKE_CXX_EXTENSIONS OFF)
# CMAKE_<lang>_STANDARD support, so set it to our defaults, unless
# overridden by the user
if(NOT DEFINED CMAKE_C_STANDARD)
set(CMAKE_C_STANDARD 99)
endif()
if(NOT DEFINED CMAKE_CXX_STANDARD AND NOT DNNL_WITH_SYCL)
set(CMAKE_CXX_STANDARD 11)
endif()

# Disable -std=gnuXX and -std=gnu++XX
set(CMAKE_C_EXTENSIONS OFF)
set(CMAKE_CXX_EXTENSIONS OFF)
endif()

# Handle cases when OpenMP runtime is requested but not found: override CPU
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ The library is optimized for the following GPUs:
oneDNN supports systems meeting the following requirements:
* Operating system with Intel 64 / Arm 64 / Power / IBMz architecture support
* C++ compiler with C++11 standard support
* [CMake] 2.8.12 or later
* [CMake] 3.13 or later

The following tools are required to build oneDNN documentation:
* [Doxygen] 1.8.5 or later
Expand Down
18 changes: 1 addition & 17 deletions cmake/OpenMP.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -23,38 +23,22 @@ endif()
set(OpenMP_cmake_included true)
include("cmake/Threading.cmake")

if (APPLE AND CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
if (APPLE AND CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")
# OSX Clang doesn't have OpenMP by default.
# But we still want to build the library.
set(_omp_severity "WARNING")
else()
set(_omp_severity "FATAL_ERROR")
endif()

macro(set_openmp_values_for_old_cmake)
#newer version for findOpenMP (>= v. 3.9)
if(CMAKE_VERSION VERSION_LESS "3.9" AND OPENMP_FOUND)
if(${CMAKE_MAJOR_VERSION} VERSION_LESS "3" AND ${CMAKE_CXX_COMPILER_ID} STREQUAL "Intel")
# Override FindOpenMP flags for Intel Compiler (otherwise deprecated)
set(OpenMP_CXX_FLAGS "-fopenmp")
set(OpenMP_C_FLAGS "-fopenmp")
endif()
set(OpenMP_C_FOUND true)
set(OpenMP_CXX_FOUND true)
endif()
endmacro()

if(DPCPP_HOST_COMPILER_KIND STREQUAL "DEFAULT")
# XXX: workaround: when -fsycl is specified the compiler doesn't define
# _OPENMP macro causing `find_package(OpenMP)` to fail.
# Use -fno-sycl option to disable SYCL. The rationale: dpcpp driver sets
# the -fsycl option by default so it has to be explicitly disabled.
set(_omp_original_cmake_cxx_flags "${CMAKE_CXX_FLAGS}")
string(REGEX REPLACE "-fsycl" "-fno-sycl" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")

find_package(OpenMP)
set_openmp_values_for_old_cmake()

set(CMAKE_CXX_FLAGS "${_omp_original_cmake_cxx_flags}")
endif()

Expand Down
8 changes: 4 additions & 4 deletions cmake/SDL.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ if(UNIX)
sdl_gnu_common_ccxx_flags(ONEDNN_SDL_COMPILER_FLAGS CMAKE_CXX_COMPILER_VERSION)
sdl_gnu_src_ccxx_flags(CMAKE_SRC_CCXX_FLAGS)
sdl_gnu_example_ccxx_flags(CMAKE_EXAMPLE_CCXX_FLAGS)
elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
elseif(CMAKE_CXX_COMPILER_ID MATCHES "(Apple)?[Cc]lang")
get_filename_component(CXX_CMD_NAME ${CMAKE_CXX_COMPILER} NAME)
# Fujitsu CXX compiler does not support "-fstack-protector-all".
if(NOT CXX_CMD_NAME STREQUAL "FCC")
Expand All @@ -85,13 +85,13 @@ if(UNIX)
append(ONEDNN_SDL_LINKER_FLAGS "-Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now")
endif()
elseif(WIN32)
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
append(ONEDNN_SDL_COMPILER_FLAGS "/GS /Gy /guard:cf /DYNAMICBASE /sdl")
append(ONEDNN_SDL_LINKER_FLAGS "/NXCOMPAT /LTCG")
elseif(CMAKE_BASE_NAME STREQUAL "icx")
append(ONEDNN_SDL_COMPILER_FLAGS "/GS /Gy /guard:cf /Wformat /Wformat-security")
append(ONEDNN_SDL_LINKER_FLAGS "/link /NXCOMPAT")
elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
append(ONEDNN_SDL_COMPILER_FLAGS "-Wformat -Wformat-security")
if(UPPERCASE_CMAKE_BUILD_TYPE STREQUAL "RELEASE")
append(ONEDNN_SDL_COMPILER_FLAGS "-D_FORTIFY_SOURCE=2")
Expand All @@ -113,7 +113,7 @@ elseif(WIN32)
if(CMAKE_BASE_NAME STREQUAL "icx")
# add ICX-style linker flags
append(ONEDNN_SDL_LINKER_FLAGS "/link /DEPENDENTLOADFLAG:0x2000")
elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
# add Clang-style linker flags
append(ONEDNN_SDL_LINKER_FLAGS "-Xlinker /DEPENDENTLOADFLAG:0x2000")
else()
Expand Down
9 changes: 1 addition & 8 deletions cmake/SYCL.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -136,14 +136,7 @@ endif()
# #pragma message("The Intel extensions have been moved into cl_ext.h.
# Please include cl_ext.h directly.")
if(NOT WIN32)
if(${CMAKE_VERSION} VERSION_LESS "3.1.0")
# Prior to CMake 3.1 the Makefile generators did not escape # correctly
# inside make variable assignments used in generated makefiles, causing
# them to be treated as comments. This is a workaround.
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-\\#pragma-messages")
else()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-#pragma-messages")
endif()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-#pragma-messages")
endif()

add_definitions_with_host_compiler("-DCL_TARGET_OPENCL_VERSION=300")
Expand Down
2 changes: 1 addition & 1 deletion cmake/coverage.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ if("${DNNL_CODE_COVERAGE}" STREQUAL "GCOV")
message(FATAL_ERROR "GCOV not found in path")
endif()

if("${CMAKE_CXX_COMPILER_ID}" MATCHES "(Apple)?[Cc]lang")
if(CMAKE_CXX_COMPILER_ID MATCHES "(Apple)?[Cc]lang")
if("${CMAKE_CXX_COMPILER_VERSION}" VERSION_LESS 3)
message(FATAL_ERROR "Clang version must be 3.0.0 or greater! Aborting...")
endif()
Expand Down
10 changes: 4 additions & 6 deletions cmake/platform.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,7 @@ if(MSVC)
# disable: icpc deprecation notice
append(CMAKE_CXX_FLAGS_DEBUG "-Qdiag-disable:10441")
endif()
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
if(CMAKE_CXX_COMPILER_ID MATCHES "(Apple)?[Cc]lang")
append(CMAKE_CCXX_NOEXCEPT_FLAGS "-fno-exceptions")
# Clang cannot vectorize some loops with #pragma omp simd and gets
# very upset. Tell it that it's okay and that we love it
Expand Down Expand Up @@ -237,7 +237,7 @@ elseif(UNIX OR MINGW)
platform_unix_and_mingw_common_cxx_flags(CMAKE_CXX_FLAGS)
platform_unix_and_mingw_noexcept_ccxx_flags(CMAKE_CMAKE_CCXX_NOEXCEPT_FLAGS)
# compiler specific settings
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
if(CMAKE_CXX_COMPILER_ID MATCHES "(Apple)?[Cc]lang")
if(DNNL_TARGET_ARCH STREQUAL "AARCH64")
if (NOT CMAKE_BUILD_TYPE STREQUAL "Debug")
set(DEF_ARCH_OPT_FLAGS "-O3")
Expand Down Expand Up @@ -313,9 +313,7 @@ elseif(UNIX OR MINGW)
"-fsanitize-blacklist=${PROJECT_SOURCE_DIR}/.clang-ignorelist")
endif()

if (DNNL_USE_CLANG_TIDY MATCHES "(CHECK|FIX)" AND ${CMAKE_VERSION} VERSION_LESS "3.6.0")
message(FATAL_ERROR "Using clang-tidy requires CMake 3.6.0 or newer")
elseif(DNNL_USE_CLANG_TIDY MATCHES "(CHECK|FIX)")
if(DNNL_USE_CLANG_TIDY MATCHES "(CHECK|FIX)")
find_program(CLANG_TIDY NAMES clang-tidy)
if(NOT CLANG_TIDY)
message(FATAL_ERROR "Clang-tidy not found")
Expand Down Expand Up @@ -462,7 +460,7 @@ if (DNNL_TARGET_ARCH STREQUAL "RV64")
endif()

# Old compiler versions do not support warnings available on newer compilers.
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 8.0.0)
if(CMAKE_CXX_COMPILER_ID MATCHES "(Apple)?[Cc]lang" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 8.0.0)
append(CMAKE_CCXX_FLAGS "-Wno-unknown-warning-option")
endif()

Expand Down
29 changes: 1 addition & 28 deletions cmake/utils.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -142,35 +142,8 @@ macro(append_to_windows_path_list path_list path)
endif()
endmacro()

function(target_link_libraries_build target list)
# Foreach is required for compatibility with 2.8.11 ways
foreach(lib ${list})
target_link_libraries(${target} LINK_PUBLIC
"$<BUILD_INTERFACE:${lib}>")
endforeach(lib)
endfunction()

function(target_link_libraries_install target list)
# Foreach is required for compatibility with 2.8.11 ways
foreach(lib ${list})
get_filename_component(base "${lib}" NAME)
target_link_libraries(${target} LINK_PUBLIC
"$<INSTALL_INTERFACE:${base}>")
endforeach(lib)
endfunction()

function(find_libm var)
# This is to account for the linker cache in OSX11. might work
# with lower than 3.9.4, but was not able to test with anything
# between 2.8 and 3.9. See here for more details:
# https://gitlab.kitware.com/cmake/cmake/-/issues/20863
if (APPLE AND (${CMAKE_HOST_SYSTEM_VERSION} VERSION_GREATER "20.0.0")
AND (${CMAKE_VERSION} VERSION_LESS "3.9.4"))
message(INFO "Using OSX11 and above with CMAKE older than 3.18 can cause linking issues.")
set(OSX11_AND_OLDER_CMAKE TRUE)
endif()

if(UNIX AND (NOT (APPLE AND OSX11_AND_OLDER_CMAKE)))
if(UNIX)
find_library(${var} m REQUIRED)
endif()
endfunction()
45 changes: 5 additions & 40 deletions examples/CMakeLists.txt.in
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
# limitations under the License.
#===============================================================================

cmake_minimum_required(VERSION 2.8.12)
cmake_minimum_required(VERSION 3.13)

if("${CMAKE_BUILD_TYPE}" STREQUAL "")
message(STATUS "CMAKE_BUILD_TYPE is unset, defaulting to Release")
Expand All @@ -28,6 +28,7 @@ project (DNNL_EXAMPLES)
set(DNNL_CPU_RUNTIME "@DNNL_CPU_RUNTIME@")
set(DNNL_GPU_RUNTIME "@DNNL_GPU_RUNTIME@")

# link_directories() are relative to the source dir
if(POLICY CMP0015)
cmake_policy(SET CMP0015 NEW)
endif()
Expand Down Expand Up @@ -84,25 +85,8 @@ if(CMAKE_BASE_NAME MATCHES "^(icx|icpx)$")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-recommended-option -Wno-unknown-warning-option")
endif()

function(find_libm var)
# This is to account for the linker cache in OSX11. might work
# with lower than 3.9.4, but was not able to test with anything
# between 2.8 and 3.9. See here for more details:
# https://gitlab.kitware.com/cmake/cmake/-/issues/20863
if (APPLE AND (${CMAKE_HOST_SYSTEM_VERSION} VERSION_GREATER "20.0.0")
AND (${CMAKE_VERSION} VERSION_LESS "3.9.4"))
message(INFO "Using OSX11 and above with CMAKE older than 3.18 can cause linking issues.")
set(OSX11_AND_OLDER_CMAKE TRUE)
endif()

if(UNIX AND (NOT (APPLE AND OSX11_AND_OLDER_CMAKE)))
find_library(${var} m REQUIRED)
endif()
endfunction()


if(UNIX OR MINGW)
find_libm(LIBM)
find_library(LIBM m REQUIRED)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99")

if(NOT DNNL_WITH_SYCL)
Expand All @@ -116,22 +100,11 @@ if(UNIX OR MINGW)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -w")
endif()

if(WIN32 AND ${CMAKE_CXX_COMPILER_ID} STREQUAL MSVC)
if(${CMAKE_CXX_COMPILER_ID} STREQUAL MSVC)
add_definitions(/Qpar)
add_definitions(/openmp)
else()
find_package(OpenMP)
#newer version for findOpenMP (>= v. 3.9)
if(CMAKE_VERSION VERSION_LESS "3.9" AND OPENMP_FOUND)
if(${CMAKE_MAJOR_VERSION} VERSION_LESS "3" AND
${CMAKE_CXX_COMPILER_ID} STREQUAL "Intel")
# Override FindOpenMP flags for Intel Compiler (otherwise deprecated)
set(OpenMP_CXX_FLAGS "-fopenmp")
set(OpenMP_C_FLAGS "-fopenmp")
endif()
set(OpenMP_C_FOUND true)
set(OpenMP_CXX_FOUND true)
endif()
if(OpenMP_C_FOUND)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
endif()
Expand Down Expand Up @@ -190,22 +163,14 @@ elseif(APPLE)
set(CTESTCONFIG_PATH "${DNNLROOT}/lib")
endif()

# Common configuration for tests / test cases on Windows and Apple
# Configuration for tests / test cases on Windows
function(maybe_configure_test name kind)
if(WIN32)
string(REPLACE ";" "\;" PATH "${CTESTCONFIG_PATH};$ENV{PATH}")
set_property(${kind} ${name} PROPERTY ENVIRONMENT "PATH=${PATH}")
if(CMAKE_GENERATOR MATCHES "Visual Studio")
configure_file(template.vcxproj.user ${name}.vcxproj.user @ONLY)
endif()
elseif(APPLE)
# When LIBRARY_PATH is set (e.g. when using compiler env. scripts)
# cmake may stop passing `rpath` linker option. The hack below adds the
# LIBRARY_PATH to DYLD_LIBRARY_PATH to make the executable find its
# dependencies.
# TODO: the problem may be in older version of cmake (2.8.11), revisit.
set_property(${kind} ${name} PROPERTY ENVIRONMENT
"DYLD_LIBRARY_PATH=${CTESTCONFIG_PATH}:$ENV{LIBRARY_PATH}:$ENV{DYLD_LIBRARY_PATH}")
endif()
endfunction()

Expand Down
Loading

0 comments on commit 72b577b

Please sign in to comment.