Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 4 additions & 5 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,13 @@ if(CCACHE_PROGRAM)
endif()

list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/utils")
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/dependencies")
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

# The CUDA standard is still C++14 to enable interopability with
# slightly older and still well-supported versions of CUDA/nvcc
# (e.g. CUDA < 11). This will be bumped to 17 once CUDA 11 is
# required.
set(CMAKE_CUDA_STANDARD 14)
set(CMAKE_CUDA_STANDARD 20)
set(CMAKE_CUDA_STANDARD_REQUIRED ON)

# no modules in this library
Expand Down
2 changes: 1 addition & 1 deletion CMakePresets.json
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@
"hidden": true,
"cacheVariables": {
"CMAKE_CUDA_COMPILER": "nvcc",
"FL_USE_CUDNN": false,
"FL_USE_CUDNN": true,
"CMAKE_CUDA_ARCHITECTURES": "native",
"CMAKE_CUDA_FLAGS": "-allow-unsupported-compiler",
"VCPKG_MANIFEST_FEATURES": "cuda"
Expand Down
8 changes: 8 additions & 0 deletions Folder.DotSettings
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<s:String x:Key="/Default/CodeStyle/Naming/CppNamingOptions/Rules/=0B233A6C23E887458E5DB7357199AE90/@EntryIndexedValue">&lt;NamingElement Priority="6" Title="Parameters"&gt;&lt;Descriptor Static="Indeterminate" Constexpr="Indeterminate" Const="Indeterminate" Volatile="Indeterminate" Accessibility="NOT_APPLICABLE"&gt;&lt;type Name="function parameter" /&gt;&lt;type Name="lambda parameter" /&gt;&lt;/Descriptor&gt;&lt;Policy Inspect="True" WarnAboutPrefixesAndSuffixes="False" Prefix="" Suffix="" Style="aaBb"&gt;&lt;ExtraRule Prefix="_" Suffix="" Style="aaBb" /&gt;&lt;/Policy&gt;&lt;/NamingElement&gt;</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CppNamingOptions/Rules/=2B232F1067F0324F8FF4B9D63ACECDB2/@EntryIndexedValue">&lt;NamingElement Priority="16" Title="Other constants"&gt;&lt;Descriptor Static="True" Constexpr="Indeterminate" Const="True" Volatile="Indeterminate" Accessibility="NOT_APPLICABLE"&gt;&lt;type Name="class field" /&gt;&lt;type Name="local variable" /&gt;&lt;type Name="struct field" /&gt;&lt;/Descriptor&gt;&lt;Policy Inspect="True" WarnAboutPrefixesAndSuffixes="False" Prefix="" Suffix="" Style="AA_BB"&gt;&lt;ExtraRule Prefix="" Suffix="" Style="aa_bb" /&gt;&lt;/Policy&gt;&lt;/NamingElement&gt;</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CppNamingOptions/Rules/=4203BE6F332C5149B409B4D5F7197E54/@EntryIndexedValue">&lt;NamingElement Priority="15" Title="Enumerators"&gt;&lt;Descriptor Static="Indeterminate" Constexpr="Indeterminate" Const="Indeterminate" Volatile="Indeterminate" Accessibility="NOT_APPLICABLE"&gt;&lt;type Name="scoped enumerator" /&gt;&lt;type Name="unscoped enumerator" /&gt;&lt;/Descriptor&gt;&lt;Policy Inspect="True" WarnAboutPrefixesAndSuffixes="False" Prefix="" Suffix="" Style="AA_BB"&gt;&lt;ExtraRule Prefix="" Suffix="" Style="aa_bb" /&gt;&lt;/Policy&gt;&lt;/NamingElement&gt;</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CppNamingOptions/Rules/=5A3A59A8A6E157428C465B5C06F8D8E0/@EntryIndexedValue">&lt;NamingElement Priority="3" Title="Enums"&gt;&lt;Descriptor Static="Indeterminate" Constexpr="Indeterminate" Const="Indeterminate" Volatile="Indeterminate" Accessibility="NOT_APPLICABLE"&gt;&lt;type Name="enum" /&gt;&lt;/Descriptor&gt;&lt;Policy Inspect="True" WarnAboutPrefixesAndSuffixes="False" Prefix="" Suffix="" Style="AaBb_AaBb"&gt;&lt;ExtraRule Prefix="" Suffix="" Style="aa_bb" /&gt;&lt;/Policy&gt;&lt;/NamingElement&gt;</s:String>
<s:Boolean x:Key="/Default/UserDictionary/Words/=arange/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=ndims/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Thomann/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>
11 changes: 7 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,13 @@ Please read the [todo list](TODO.md)


### Quirks
`FL_USE_CUDNN`:
- NOT WORKING ATM (v6-7 api from 2017 i gotta fix that first)
- requires `CUDNN_ROOT` to be set in the environment
- windows users: **do not** install CUDNN with the default **windows installer**. It will create: `CUDNN_ROOT/<include/bin>/<cuda-version>/`. Since i cannot anticipate the cuda version you use, i can't traverse this. **FIX:** install as **tarball** instead.
- `ArrayFire`
- Do not install via winget (for now), 3.9 has a critical bug.
- `FL_USE_CUDNN`:
- NOT WORKING ATM (v6-7 api from 2017 i gotta fix that first)
- requires `CUDNN_ROOT` to be set in the environment
- windows users: **do not** install CUDNN with the default **windows installer**. It will create: `CUDNN_ROOT/<include/bin>/<cuda-version>/`. Since i cannot anticipate the cuda version you use, i can't traverse this. **FIX:** install as **tarball** instead.


### Functional changes from Flashlight
- backends removed:
Expand Down
4 changes: 4 additions & 0 deletions cmake/dependencies/FindCUDNN.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -76,4 +76,8 @@ if(CUDNN_FOUND)
endif()
endif()

if (CUDNN_FOUND AND CUDNN_VERSION VERSION_LESS "8.0")
message(FATAL_ERROR "Flashlight requires cuDNN >= 8.0, found ${CUDNN_VERSION}")
endif()

mark_as_advanced(CUDNN_ROOT CUDNN_INCLUDE_DIR CUDNN_LIBRARY CUDNN_VERSION)
1 change: 1 addition & 0 deletions cmake/dependencies/FindFilesystem.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,7 @@ set(CMAKE_REQUIRED_QUIET ${Filesystem_FIND_QUIETLY})

# All of our tests required C++20 or later
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_EXTENSIONS OFF)

# Normalize and check the component list we were given
set(want_components ${Filesystem_FIND_COMPONENTS})
Expand Down
31 changes: 20 additions & 11 deletions cmake/utils/TestUtils.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -5,26 +5,32 @@ set(GTEST_IMPORTED_TARGETS "")

# Get or find Google Test and Google Mock
find_package(GTest 1.10.0)
if (NOT GTEST_FOUND)
if (NOT TARGET gtest)

if(NOT GTEST_FOUND)
if(NOT TARGET gtest)
message(STATUS "googletest not found - will download and build from source")

# Download and build googletest
include(${PROJECT_SOURCE_DIR}/cmake/BuildGoogleTest.cmake)
list(APPEND GTEST_IMPORTED_TARGETS GTest::gtest GTest::gtest_main GTest::gmock GTest::gmock_main)
endif()
else()
message(STATUS "gtest found: (include: ${GTEST_INCLUDE_DIRS}, lib: ${GTEST_BOTH_LIBRARIES}")
if (TARGET GTest::GTest)

if(TARGET GTest::GTest)
# We found the differently-named CMake targets from FindGTest
if (NOT TARGET GTest::Main)
if(NOT TARGET GTest::Main)
message(FATAL_ERROR "Google Test must be built with main")
endif()

list(APPEND GTEST_IMPORTED_TARGETS GTest::GTest GTest::Main)
endif()
if (NOT TARGET GTest::gmock)

if(NOT TARGET GTest::gmock)
find_package(GMock REQUIRED)
message(STATUS "gmock found: (include: ${GMOCK_INCLUDE_DIRS}, lib: ${GMOCK_BOTH_LIBRARIES})")
endif()

list(APPEND GTEST_IMPORTED_TARGETS GTest::gmock GTest::gmock_main)
message(STATUS "Found gtest and gmock on system.")
endif()
Expand All @@ -42,36 +48,39 @@ function(build_test)
get_filename_component(src_name ${build_test_SRC} NAME_WE)
set(target "${src_name}")
add_executable(${target} ${build_test_SRC})
if (TARGET gtest)

if(TARGET gtest)
add_dependencies(${target} gtest) # make sure gtest is built first
endif()

target_link_libraries(
${target}
PUBLIC
${GTEST_IMPORTED_TARGETS}
${build_test_LIBS}
${CMAKE_THREAD_LIBS_INIT}
)
)
target_include_directories(
${target}
PUBLIC
${PROJECT_SOURCE_DIR}
)
)
target_compile_definitions(
${target}
PUBLIC
${build_test_PREPROC}
)
)

if (CMAKE_SYSTEM_NAME STREQUAL "Windows")
if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
target_compile_definitions(
${target}
PUBLIC
GTEST_LINKED_AS_SHARED_LIBRARY=$<BOOL:${BUILD_SHARED_LIBS}>
GMOCK_LINKED_AS_SHARED_LIBRARY=$<BOOL:${BUILD_SHARED_LIBS}>
)
endif()
gtest_add_tests(TARGET ${target})

gtest_discover_tests(${target} DISCOVERY_MODE PRE_TEST)

if(WIN32)
fm_target_copy_dependencies(${target})
Expand Down
2 changes: 1 addition & 1 deletion cmake/utils/flashlightConfig.cmake.in
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ if (@FL_BUILD_STANDALONE@)
endif()
if (@FL_USE_CUDA@)
if (@FL_USE_CUDNN@)
find_dependency(CUDNN 7.1)
find_dependency(CUDNN 8)
endif()
if (@FL_BUILD_DISTRIBUTED@)
find_dependency(NCCL)
Expand Down
11 changes: 9 additions & 2 deletions cmake/utils/fm_target_utilities.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -53,10 +53,17 @@ function(fm_glob OUT_VAR)
set(GLOB_PATTERNS ${ARG_PATTERNS})
endif()

if(GLOB_PATTERNS)
# Normalize paths to prevent CONFIGURE_DEPENDS cache mismatch issues on Windows
set(NORMALIZED_PATTERNS "")
foreach(PATTERN IN LISTS GLOB_PATTERNS)
cmake_path(ABSOLUTE_PATH PATTERN NORMALIZE OUTPUT_VARIABLE NORMALIZED)
list(APPEND NORMALIZED_PATTERNS "${NORMALIZED}")
endforeach()

if(NORMALIZED_PATTERNS)
file(GLOB_RECURSE FOUND_FILES
CONFIGURE_DEPENDS
${GLOB_PATTERNS}
${NORMALIZED_PATTERNS}
)
set(${OUT_VAR} ${${OUT_VAR}} ${FOUND_FILES} PARENT_SCOPE)
endif()
Expand Down
Loading