add_library(infra.util ${EMIL_EXCLUDE_FROM_ALL} STATIC) target_include_directories(infra.util PUBLIC "$" "$" ) target_compile_options(infra.util PUBLIC $<$: /Zc:__cplusplus /wd4068 # Disable unknown pragma warning > ) target_sources(infra.util PRIVATE Aligned.hpp Allocator.hpp AllocatorFixedSpace.hpp AllocatorHeap.hpp AutoResetFunction.hpp AutoResetMultiFunction.hpp Base64.cpp Base64.hpp BitLogic.hpp BoundedDeque.hpp BoundedForwardList.hpp BoundedList.hpp BoundedPriorityQueue.hpp BoundedString.cpp BoundedString.hpp BoundedVector.hpp ByteRange.hpp CompareMembers.hpp Compatibility.hpp ConstructBin.cpp ConstructBin.hpp Crc.hpp CrcCcittCalculator.hpp CyclicBuffer.hpp Endian.hpp EnumCast.hpp FixedPoint.hpp Function.cpp Function.hpp IntegerNormalization.hpp InterfaceConnector.hpp IntrusiveBinarySearchTree.hpp IntrusiveForwardList.hpp IntrusiveList.hpp IntrusivePriorityQueue.hpp IntrusiveSet.hpp IntrusiveUnorderedSet.hpp LogAndAbort.cpp LogAndAbort.hpp MemoryRange.hpp MultiFunction.hpp Observer.hpp Overloaded.hpp PolymorphicVariant.hpp PostAssign.hpp ProxyCreator.hpp ReallyAssert.cpp ReallyAssert.hpp ReferenceCountedSingleton.hpp ReverseRange.hpp Sequencer.cpp Sequencer.hpp SharedObjectAllocator.hpp SharedObjectAllocatorFixedSize.hpp SharedObjectAllocatorHeap.hpp SharedOptional.cpp SharedOptional.hpp SharedOwnedObserver.hpp SharedPtr.cpp SharedPtr.hpp StaticStorage.hpp Tokenizer.cpp Tokenizer.hpp Unit.hpp VariadicTemplates.hpp WithStorage.hpp ) if (EMIL_BUILD_WIN) target_sources(infra.util PRIVATE infra.util.natvis ) endif() set(conditional_compile_definitions EMIL_HOST_BUILD # Enable the logging hooks for LogAndAbort and ReallyAssert EMIL_ENABLE_LOG_AND_ABORT_LOGGING EMIL_ENABLE_REALLY_ASSERT_LOGGING # Optionally enable logging file paths (or only filenames) upon LOG_AND_ABORT or really_assert EMIL_ENABLE_LOGGING_FILE_UPON_ABORT EMIL_ENABLE_LOGGING_ONLY_FILENAMES_UPON_ABORT ) foreach(var IN LISTS conditional_compile_definitions) if (${var}) target_compile_definitions(infra.util PUBLIC ${var}) message(STATUS "infra.util: Enabled compile definition ${var}") endif() endforeach() add_subdirectory(test) add_subdirectory(test_helper) function(emil_transform_file_to_string input name namespace output) add_custom_command( OUTPUT "generated/${namespace}/${output}.cpp" "generated/${namespace}/${output}.hpp" COMMAND ${CMAKE_COMMAND} -D script_dir="${CMAKE_CURRENT_FUNCTION_LIST_DIR}" -D list_dir="${CMAKE_CURRENT_LIST_DIR}" -D input="${input}" -D name=${name} -D namespace=${namespace} -D output="${output}" -P "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/transform_file_to_string.cmake" DEPENDS ${input} ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/transform_file_to_string.cmake ) endfunction() function(emil_target_string_source target input name namespace output) emil_transform_file_to_string("${input}" ${name} ${namespace} "${output}") target_sources(${target} PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/generated/${namespace}/${output}.cpp ${CMAKE_CURRENT_BINARY_DIR}/generated/${namespace}/${output}.hpp) target_include_directories(${target} PRIVATE ${CMAKE_CURRENT_BINARY_DIR}) endfunction() function(emil_transform_file_to_range input name namespace output) add_custom_command( OUTPUT "generated/${namespace}/${output}.cpp" "generated/${namespace}/${output}.hpp" COMMAND ${CMAKE_COMMAND} -D script_dir="${CMAKE_CURRENT_FUNCTION_LIST_DIR}" -D list_dir="${CMAKE_CURRENT_LIST_DIR}" -D input="${input}" -D name=${name} -D namespace=${namespace} -D output="${output}" -P "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/transform_file_to_range.cmake" DEPENDS ${input} ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/transform_file_to_range.cmake ) endfunction() function(emil_target_range_source target input name namespace output) emil_transform_file_to_range("${input}" ${name} ${namespace} "${output}") target_sources(${target} PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/generated/${namespace}/${output}.cpp ${CMAKE_CURRENT_BINARY_DIR}/generated/${namespace}/${output}.hpp) target_include_directories(${target} PRIVATE ${CMAKE_CURRENT_BINARY_DIR}) endfunction()