Add install targets for gtest
authorTom Stellard <tstellar@redhat.com>
Sat, 11 Mar 2023 01:22:14 +0000 (17:22 -0800)
committerTom Stellard <tstellar@redhat.com>
Sat, 11 Mar 2023 01:22:33 +0000 (17:22 -0800)
Stand-alone builds need an installed version of gtest in order to run
the unittests.

Reviewed By: mgorny, kwk

Differential Revision: https://reviews.llvm.org/D137890

llvm/CMakeLists.txt
llvm/lib/Testing/Annotations/CMakeLists.txt
llvm/lib/Testing/Support/CMakeLists.txt
third-party/unittest/CMakeLists.txt

index ba73eba..bd23d66 100644 (file)
@@ -720,6 +720,10 @@ option(LLVM_BUILD_TESTS
   "Build LLVM unit tests. If OFF, just generate build targets." OFF)
 option(LLVM_INCLUDE_TESTS "Generate build targets for the LLVM unit tests." ON)
 
+option(LLVM_INSTALL_GTEST
+  "Install the llvm gtest library.  This should be on if you want to do
+   stand-alone builds of the other projects and run their unit tests." OFF)
+
 option(LLVM_BUILD_BENCHMARKS "Add LLVM benchmark targets to the list of default
 targets. If OFF, benchmarks still could be built using Benchmarks target." OFF)
 option(LLVM_INCLUDE_BENCHMARKS "Generate benchmark targets. If OFF, benchmarks can't be built." ON)
index 75e0062..1d8dba8 100644 (file)
@@ -1,11 +1,14 @@
 # Do not build unittest libraries automatically, they will be pulled in
 # by unittests if these are built.
-set(EXCLUDE_FROM_ALL ON)
+if (NOT ${LLVM_INSTALL_GTEST})
+  set (BUILDTREE_ONLY BUILDTREE_ONLY)
+  set(EXCLUDE_FROM_ALL ON)
+endif()
 
 add_llvm_library(LLVMTestingAnnotations
   Annotations.cpp
 
-  BUILDTREE_ONLY
+  ${BUILDTREE_ONLY}
 
   ADDITIONAL_HEADER_DIRS
   ${LLVM_MAIN_INCLUDE_DIR}/llvm/Testing/Support
index 766c64b..6955271 100644 (file)
@@ -1,12 +1,15 @@
 # Do not build unittest libraries automatically, they will be pulled in
 # by unittests if these are built.
-set(EXCLUDE_FROM_ALL ON)
+if (NOT ${LLVM_INSTALL_GTEST})
+  set (BUILDTREE_ONLY BUILDTREE_ONLY)
+  set(EXCLUDE_FROM_ALL ON)
+endif()
 
 add_llvm_library(LLVMTestingSupport
   Error.cpp
   SupportHelpers.cpp
 
-  BUILDTREE_ONLY
+  ${BUILDTREE_ONLY}
 
   ADDITIONAL_HEADER_DIRS
   ${LLVM_MAIN_INCLUDE_DIR}/llvm/Testing/Support
index 302e9e0..74a523b 100644 (file)
@@ -40,7 +40,13 @@ endif()
 
 # Do not build unittest libraries automatically, they will be pulled in
 # by unittests if these are built.
+
+set(BUILDTREE_ONLY BUILDTREE_ONLY)
 set(EXCLUDE_FROM_ALL ON)
+if (LLVM_INSTALL_GTEST)
+  set(EXCLUDE_FROM_ALL OFF)
+  set(BUILDTREE_ONLY "")
+endif ()
 
 add_llvm_library(llvm_gtest
   googletest/src/gtest-all.cc
@@ -53,7 +59,7 @@ add_llvm_library(llvm_gtest
   Support # Depends on llvm::raw_ostream
 
   # This is a library meant only for the build tree.
-  BUILDTREE_ONLY
+  ${BUILDTREE_ONLY}
 )
 
 # The googletest and googlemock sources don't presently use the 'override'
@@ -69,12 +75,22 @@ if (NOT LLVM_ENABLE_THREADS)
 endif ()
 
 target_include_directories(llvm_gtest
-  PUBLIC googletest/include googlemock/include
+  PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/googletest/include>
+         $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/googlemock/include>
+         $<INSTALL_INTERFACE:include/llvm-gtest/>
+         $<INSTALL_INTERFACE:include/llvm-gmock/>
   PRIVATE googletest googlemock
   )
 
 add_subdirectory(UnitTestMain)
 
+if (LLVM_INSTALL_GTEST)
+  install(TARGETS llvm_gtest llvm_gtest_main LLVMTestingSupport LLVMTestingAnnotations
+         ARCHIVE DESTINATION "lib${LLVM_LIBDIR_SUFFIX}" COMPONENT llvm_gtest)
+  install(DIRECTORY googletest/include/gtest/ DESTINATION include/llvm-gtest/gtest/ COMPONENT llvm_gtest)
+  install(DIRECTORY googlemock/include/gmock/ DESTINATION include/llvm-gmock/gmock/ COMPONENT llvm_gtest)
+endif()
+
 # When LLVM_LINK_LLVM_DYLIB is enabled, libLLVM.so is added to the interface
 # link libraries for gtest and gtest_main.  This means that any target, like
 # unittests for example, that links against gtest will be forced to link