From 0a91e75a97d3d81d880cbdad0a40cdcb2e93da61 Mon Sep 17 00:00:00 2001 From: Kyle Mabee Date: Mon, 27 Jan 2025 17:59:46 +0000 Subject: [PATCH] LightMetal - Add Flatbuffers into cmake infra/build as cpm package (#17039) - Mostly unused here, used by light metal capture/replay coming in follow up PR - Add CMAKE_POSITION_INDEPENDENT_CODE=ON globally (-fPIC) following discussion (needed for flatbuffer to avoid linking errors when lifting to tt-mlir project. - Use -Wno-restrict for flatbuffers compile to supress warning in g++12 build, though don't know why they were fine previously with flatbuffers from UMD - Misc PR feedback about PUBLIC vs PRIVATE, etc. --- CMakeLists.txt | 1 + cmake/flatbuffers.cmake | 17 +++++++++++++++++ cmake/tracy.cmake | 2 -- dependencies/CMakeLists.txt | 21 +++++++++++++++++++++ tt_metal/impl/CMakeLists.txt | 13 +++++++++++++ 5 files changed, 52 insertions(+), 2 deletions(-) create mode 100644 cmake/flatbuffers.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index e205dbb31da..0a36f8d106d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -43,6 +43,7 @@ include(clang-tidy) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) +set(CMAKE_POSITION_INDEPENDENT_CODE TRUE) if(NOT ENABLE_LIBCXX) # required when linking with libstdc++ with clang and gcc diff --git a/cmake/flatbuffers.cmake b/cmake/flatbuffers.cmake new file mode 100644 index 00000000000..7285bdfeb31 --- /dev/null +++ b/cmake/flatbuffers.cmake @@ -0,0 +1,17 @@ +# Function to generate FlatBuffers C++ headers from schema files +function(GENERATE_FBS_HEADER FBS_FILE) + get_filename_component(FBS_FILE_NAME ${FBS_FILE} NAME_WE) + set(FBS_GENERATED_HEADER_DIR "${CMAKE_CURRENT_BINARY_DIR}/flatbuffers") + set(FBS_GENERATED_HEADER_FILE "${FBS_GENERATED_HEADER_DIR}/${FBS_FILE_NAME}_generated.h") + add_custom_command( + OUTPUT + ${FBS_GENERATED_HEADER_FILE} + COMMAND + flatc --cpp --scoped-enums -I ${CMAKE_CURRENT_SOURCE_DIR} -o "${FBS_GENERATED_HEADER_DIR}" ${FBS_FILE} + DEPENDS + flatc + ${FBS_FILE} + COMMENT "Building C++ header for ${FBS_FILE}" + ) + set(FBS_GENERATED_HEADER_FILE ${FBS_GENERATED_HEADER_FILE} PARENT_SCOPE) +endfunction() diff --git a/cmake/tracy.cmake b/cmake/tracy.cmake index 18f96a2f315..69a68a08fb4 100644 --- a/cmake/tracy.cmake +++ b/cmake/tracy.cmake @@ -20,8 +20,6 @@ set_target_properties( "${PROJECT_BINARY_DIR}/lib" ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib" - POSITION_INDEPENDENT_CODE - ON # this is equivalent to adding -fPIC OUTPUT_NAME "tracy" ) diff --git a/dependencies/CMakeLists.txt b/dependencies/CMakeLists.txt index 13f7465063a..ff114bab22e 100644 --- a/dependencies/CMakeLists.txt +++ b/dependencies/CMakeLists.txt @@ -173,3 +173,24 @@ CPMAddPackage( "CMAKE_MESSAGE_LOG_LEVEL NOTICE" # Taskflow's CMakeLists.txt is super noisy ) add_library(Taskflow::Taskflow ALIAS Taskflow) + +############################################################################################################################ +# flatbuffers : https://github.com/google/flatbuffers +############################################################################################################################ + +CPMAddPackage( + NAME flatbuffers + GITHUB_REPOSITORY google/flatbuffers + GIT_TAG v24.3.25 + OPTIONS + "FLATBUFFERS_BUILD_FLATC ON" + "FLATBUFFERS_BUILD_TESTS OFF" + "FLATBUFFERS_SKIP_MONSTER_EXTRA ON" + "FLATBUFFERS_STRICT_MODE ON" +) + +if(flatbuffers_ADDED) + # Few files including idl_gen_dart.cpp:175:18, Possibly related: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105329 + target_compile_options(flatc PRIVATE -Wno-restrict) + target_compile_options(flatbuffers PRIVATE -Wno-restrict) +endif() diff --git a/tt_metal/impl/CMakeLists.txt b/tt_metal/impl/CMakeLists.txt index b0c389e8e09..1a94c35f32e 100644 --- a/tt_metal/impl/CMakeLists.txt +++ b/tt_metal/impl/CMakeLists.txt @@ -45,6 +45,16 @@ set(IMPL_SRC ${CMAKE_CURRENT_SOURCE_DIR}/event/event.cpp ) +# Include helper functions and generate headers from flatbuffer schemas +include(flatbuffers) + +set(FLATBUFFER_SCHEMAS) # Empty to start, coming soon. + +foreach(FBS_FILE ${FLATBUFFER_SCHEMAS}) + GENERATE_FBS_HEADER(${FBS_FILE}) + list(APPEND IMPL_SRC ${FBS_GENERATED_HEADER_FILE}) +endforeach() + add_library(impl OBJECT ${IMPL_SRC}) add_library(Metalium::Metal::Impl ALIAS impl) @@ -60,6 +70,7 @@ target_link_libraries( Taskflow::Taskflow TT::Metalium::HostDevCommon Metalium::Metal::Hardware + FlatBuffers::FlatBuffers ) target_include_directories( @@ -68,6 +79,8 @@ target_include_directories( ${PROJECT_SOURCE_DIR}/tt_metal ${CMAKE_CURRENT_SOURCE_DIR} ${PROJECT_SOURCE_DIR}/tt_metal/include + PRIVATE + ${CMAKE_CURRENT_BINARY_DIR}/flatbuffers ) target_compile_options(impl PUBLIC -Wno-int-to-pointer-cast)