Skip to content

Commit

Permalink
[libc] Allows cross compilation of membenchmarks
Browse files Browse the repository at this point in the history
This patch makes sure:
 - we pass the correct compiler options when building Google benchmarks,
 - we only import the C++ version of the memory functions.

The change in libc/cmake/modules/LLVMLibCTestRules.cmake is here to make sure CMake can generate the right command line in the presence of the CMAKE_CROSSCOMPILING_EMULATOR option.

Relevant documentation:
https://cmake.org/cmake/help/latest/variable/CMAKE_CROSSCOMPILING_EMULATOR.html
https://cmake.org/cmake/help/latest/command/add_custom_command.html#command:add_custom_command
"
If COMMAND specifies an executable target name (created by the `add_executable()` command), it will automatically be replaced by the location of the executable created at build time if either of the following is true:
 - The target is not being cross-compiled (i.e. the CMAKE_CROSSCOMPILING variable is not set to true).
 - New in version 3.6: The target is being cross-compiled and an emulator is provided (i.e. its CROSSCOMPILING_EMULATOR target property is set). In this case, the contents of CROSSCOMPILING_EMULATOR will be prepended to the command before the location of the target executable.
"

Reviewed By: gchatelet

Differential Revision: https://reviews.llvm.org/D150200
  • Loading branch information
gchatelet committed May 11, 2023
1 parent abacd36 commit b51e6bf
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 9 deletions.
25 changes: 17 additions & 8 deletions libc/benchmarks/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -59,10 +59,18 @@ ExternalProject_Add(google-benchmark-libc
-DBENCHMARK_ENABLE_WERROR:BOOL=${LLVM_ENABLE_WERROR}
-DBENCHMARK_FORCE_WERROR:BOOL=OFF
-DBENCHMARK_USE_LIBCXX:BOOL=OFF
-DCMAKE_BUILD_TYPE:STRING=RELEASE
-DCMAKE_BUILD_TYPE:STRING=Release

-DCMAKE_SYSTEM_NAME:STRING=${CMAKE_SYSTEM_NAME}
-DCMAKE_SYSTEM_PROCESSOR:STRING=${CMAKE_SYSTEM_PROCESSOR}
-DCMAKE_C_COMPILER:STRING=${CMAKE_C_COMPILER}
-DCMAKE_CXX_COMPILER:STRING=${CMAKE_CXX_COMPILER}
-DCMAKE_CXX_FLAGS:STRING=${BENCHMARK_LIBC_COMPILE_FLAGS}
-DCMAKE_CXX_FLAGS:STRING=${CMAKE_CXX_FLAGS}
-DCMAKE_FIND_ROOT_PATH:STRING=${CMAKE_FIND_ROOT_PATH}

-DBUILD_SHARED_LIBS:BOOL=OFF
-DCMAKE_EXE_LINKER_FLAGS:STRING=-static

-DCMAKE_CXX_STANDARD:STRING=14
-DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
)
Expand Down Expand Up @@ -181,13 +189,14 @@ add_executable(libc.benchmarks.memory_functions.opt_host
target_link_libraries(libc.benchmarks.memory_functions.opt_host
PRIVATE
libc-memory-benchmark
libc.src.string.memcmp_opt_host
libc.src.string.bcmp_opt_host
libc.src.string.memcpy_opt_host
libc.src.string.memset_opt_host
libc.src.string.bzero_opt_host
libc.src.string.memmove_opt_host
libc.src.string.memcmp_opt_host.__internal__
libc.src.string.bcmp_opt_host.__internal__
libc.src.string.memcpy_opt_host.__internal__
libc.src.string.memset_opt_host.__internal__
libc.src.string.bzero_opt_host.__internal__
libc.src.string.memmove_opt_host.__internal__
benchmark_main
-static
)
llvm_update_compile_flags(libc.benchmarks.memory_functions.opt_host)

Expand Down
2 changes: 1 addition & 1 deletion libc/cmake/modules/LLVMLibCTestRules.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,7 @@ function(create_libc_unittest fq_target_name)
if(NOT LIBC_UNITTEST_NO_RUN_POSTBUILD)
add_custom_target(
${fq_target_name}
COMMAND $<TARGET_FILE:${fq_build_target_name}>
COMMAND ${fq_build_target_name}
COMMENT "Running unit test ${fq_target_name}"
)
endif()
Expand Down

0 comments on commit b51e6bf

Please sign in to comment.