2016-06-01 04:21:44 +08:00
cmake_minimum_required ( VERSION 3.4.3 )
2015-07-17 23:50:48 +08:00
2017-04-28 00:04:26 +08:00
# Add path for custom modules
set ( CMAKE_MODULE_PATH
$ { C M A K E _ M O D U L E _ P A T H }
" $ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / c m a k e "
" $ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / c m a k e / m o d u l e s "
)
include ( LLDBStandalone )
include ( LLDBConfig )
include ( AddLLDB )
2014-05-29 01:06:04 +08:00
2017-10-05 04:23:56 +08:00
# Define the LLDB_CONFIGURATION_xxx matching the build type
if ( uppercase_CMAKE_BUILD_TYPE STREQUAL "DEBUG" )
add_definitions ( -DLLDB_CONFIGURATION_DEBUG )
else ( )
add_definitions ( -DLLDB_CONFIGURATION_RELEASE )
endif ( )
2015-10-07 06:21:08 +08:00
if ( LLDB_DISABLE_LIBEDIT )
add_definitions ( -DLLDB_DISABLE_LIBEDIT )
2018-05-23 07:24:46 +08:00
else ( )
find_package ( LibEdit REQUIRED )
2015-10-07 06:21:08 +08:00
endif ( )
2017-07-28 23:39:50 +08:00
if ( APPLE )
add_definitions ( -DLLDB_USE_OS_LOG )
endif ( )
2013-09-25 18:37:32 +08:00
add_subdirectory ( docs )
2015-04-07 23:30:23 +08:00
if ( NOT LLDB_DISABLE_PYTHON )
2014-07-04 14:43:47 +08:00
add_subdirectory ( scripts )
endif ( )
2013-09-25 18:37:32 +08:00
add_subdirectory ( source )
add_subdirectory ( tools )
2017-10-07 06:21:36 +08:00
option ( LLDB_INCLUDE_TESTS "Generate build targets for the LLDB unit tests."
$ { L L V M _ I N C L U D E _ T E S T S } )
2018-02-21 08:05:51 +08:00
option ( LLDB_TEST_USE_CUSTOM_C_COMPILER "Use the C compiler provided via LLDB_TEST_C_COMPILER for building test inferiors (instead of the just-built compiler). Defaults to OFF." OFF )
option ( LLDB_TEST_USE_CUSTOM_CXX_COMPILER "Use the C++ compiler provided via LLDB_TEST_CXX_COMPILER for building test inferiors (instead of the just-built compiler). Defaults to OFF." OFF )
2017-10-07 06:21:36 +08:00
if ( LLDB_INCLUDE_TESTS )
2018-07-04 21:59:25 +08:00
2018-09-19 03:31:47 +08:00
# Set the path to the default lldb test executable. Make the path relative to
# LLVM_RUNTIME_OUTPUT_INTDIR: this will be correct even when LLVM and LLDB
# have separate binary directories.
2018-07-04 22:38:21 +08:00
set ( LLDB_DEFAULT_TEST_EXECUTABLE "${LLVM_RUNTIME_OUTPUT_INTDIR}/lldb${CMAKE_EXECUTABLE_SUFFIX}" )
2018-09-19 03:31:47 +08:00
# Set the paths to default llvm tools. Make these paths relative to the LLVM
# binary directory.
2018-07-04 21:59:25 +08:00
set ( LLDB_DEFAULT_TEST_DSYMUTIL "${LLVM_BINARY_DIR}/${CMAKE_CFG_INTDIR}/bin/dsymutil${CMAKE_EXECUTABLE_SUFFIX}" )
2018-09-19 03:31:47 +08:00
set ( LLDB_DEFAULT_TEST_FILECHECK "${LLVM_BINARY_DIR}/${CMAKE_CFG_INTDIR}/bin/FileCheck${CMAKE_EXECUTABLE_SUFFIX}" )
2018-07-04 21:59:25 +08:00
2018-02-21 08:05:51 +08:00
if ( NOT LLDB_TEST_USE_CUSTOM_C_COMPILER AND TARGET clang )
2018-02-08 10:13:48 +08:00
set ( LLDB_DEFAULT_TEST_C_COMPILER "${LLVM_BINARY_DIR}/${CMAKE_CFG_INTDIR}/bin/clang${CMAKE_EXECUTABLE_SUFFIX}" )
2017-10-27 10:24:04 +08:00
else ( )
set ( LLDB_DEFAULT_TEST_C_COMPILER "" )
2018-02-21 08:05:51 +08:00
endif ( )
if ( NOT LLDB_TEST_USE_CUSTOM_CXX_COMPILER AND TARGET clang )
set ( LLDB_DEFAULT_TEST_CXX_COMPILER "${LLVM_BINARY_DIR}/${CMAKE_CFG_INTDIR}/bin/clang++${CMAKE_EXECUTABLE_SUFFIX}" )
else ( )
2017-10-27 10:24:04 +08:00
set ( LLDB_DEFAULT_TEST_CXX_COMPILER "" )
endif ( )
2018-07-04 21:59:25 +08:00
set ( LLDB_TEST_EXECUTABLE "${LLDB_DEFAULT_TEST_EXECUTABLE}" CACHE PATH "lldb executable used for testing" )
2017-10-27 10:24:04 +08:00
set ( LLDB_TEST_C_COMPILER "${LLDB_DEFAULT_TEST_C_COMPILER}" CACHE PATH "C Compiler to use for building LLDB test inferiors" )
set ( LLDB_TEST_CXX_COMPILER "${LLDB_DEFAULT_TEST_CXX_COMPILER}" CACHE PATH "C++ Compiler to use for building LLDB test inferiors" )
2018-07-04 21:59:25 +08:00
set ( LLDB_TEST_DSYMUTIL "${LLDB_DEFAULT_TEST_DSYMUTIL}" CACHE PATH "dsymutil used for generating dSYM bundles" )
2018-09-19 03:31:47 +08:00
set ( LLDB_TEST_FILECHECK "${LLDB_DEFAULT_TEST_FILECHECK}" CACHE PATH "FileCheck used for testing purposes" )
2017-10-27 10:24:04 +08:00
if ( ( "${LLDB_TEST_C_COMPILER}" STREQUAL "" ) OR
( " $ { L L D B _ T E S T _ C X X _ C O M P I L E R } " S T R E Q U A L " " ) )
message ( FATAL_ERROR "LLDB test compilers not specified. Tests will not run" )
endif ( )
2018-05-04 00:54:10 +08:00
set ( LLDB_TEST_DEPS lldb )
# darwin-debug is an hard dependency for the testsuite.
if ( CMAKE_SYSTEM_NAME MATCHES "Darwin" )
list ( APPEND LLDB_TEST_DEPS darwin-debug )
endif ( )
if ( TARGET lldb-server )
list ( APPEND LLDB_TEST_DEPS lldb-server )
endif ( )
if ( TARGET debugserver )
[CMake] Streamline code signing for debugserver #2
Summary:
Major fixes after D54476 (use Diff1 as base for comparison to see only recent changes):
* In standalone builds target directory for debugserver must be LLDB's bin, not LLVM's bin
* Default identity for code signing must not force-override LLVM_CODESIGNING_IDENTITY globally
We have a lot of cases, make them explicit:
* ID used for code signing (debugserver and in tests):
** `LLDB_CODESIGN_IDENTITY` if set explicitly, or otherwise
** `LLVM_CODESIGNING_IDENTITY` if set explicitly, or otherwise
** `lldb_codesign` as the default
* On Darwin we have a debugserver target that:
* On other systems, the debugserver target is not defined, which is equivalent to **[3A]**
Common configurations on Darwin:
* **[1A]** `cmake -GNinja ../llvm` builds debugserver from source and signs with `lldb_codesign`, no code signing for other binaries (prints status: //lldb debugserver: /path/to/bin/debugserver//)
* **[1A]** `cmake -GNinja -DLLVM_CODESIGNING_IDENTITY=- -DLLDB_CODESIGN_IDENTITY=lldb_codesign ../llvm` builds debugserver from source and signs with `lldb_codesign`, ad-hoc code signing for other binaries (prints status: //lldb debugserver: /path/to/bin/debugserver//)
* **[2A]** `cmake -GNinja -DLLVM_CODESIGNING_IDENTITY=- -DLLDB_USE_SYSTEM_DEBUGSERVER=ON ../llvm` copies debugserver from system, ad-hoc code signing for other binaries (prints status: //Copy system debugserver from: /path/to/system/debugserver//)
* **[2B]** `cmake -GNinja -DLLVM_CODESIGNING_IDENTITY=- ../llvm` same, but prints additional warning: //Cannot code sign debugserver with identity '-'. Will fall back to system's debugserver. Pass -DLLDB_CODESIGN_IDENTITY=lldb_codesign to override the LLVM value for debugserver.//
* **[3A]** `cmake -GNinja -DLLVM_CODESIGNING_IDENTITY=- -DLLDB_NO_DEBUGSERVER=ON ../llvm` debugserver not available (prints status: //lldb debugserver will not be available)//
Reviewers: JDevlieghere, beanz, davide, vsk, aprantl, labath
Reviewed By: JDevlieghere, labath
Subscribers: mgorny, #lldb, lldb-commits
Differential Revision: https://reviews.llvm.org/D55013
llvm-svn: 350388
2019-01-04 20:46:30 +08:00
list ( APPEND LLDB_TEST_DEPS debugserver )
2018-05-04 00:54:10 +08:00
endif ( )
if ( TARGET lldb-mi )
list ( APPEND LLDB_TEST_DEPS lldb-mi )
endif ( )
if ( NOT LLDB_BUILT_STANDALONE )
2018-07-04 21:59:25 +08:00
list ( APPEND LLDB_TEST_DEPS yaml2obj )
2018-05-04 00:54:10 +08:00
endif ( )
if ( TARGET liblldb )
list ( APPEND LLDB_TEST_DEPS liblldb )
endif ( )
2019-01-10 00:25:31 +08:00
# Add dependencies if we test with the in-tree clang.
# This works with standalone builds as they import the clang target.
2018-05-04 00:54:10 +08:00
if ( TARGET clang )
list ( APPEND LLDB_TEST_DEPS clang )
2018-12-19 04:59:23 +08:00
if ( APPLE )
2019-01-10 00:25:31 +08:00
# If we build clang, we should build libcxx.
# FIXME: Standalone builds should import the cxx target as well.
if ( LLDB_BUILT_STANDALONE )
# For now check that the include directory exists.
2019-01-10 00:25:37 +08:00
set ( cxx_dir "${LLVM_BINARY_DIR}/include/c++" )
2019-01-10 00:25:31 +08:00
if ( NOT EXISTS ${ cxx_dir } )
message ( WARNING "LLDB test suite requires libc++ in llvm/projects/libcxx or an existing build symlinked to ${cxx_dir}" )
endif ( )
else ( )
list ( APPEND LLDB_TEST_DEPS cxx )
endif ( )
2018-12-19 04:59:23 +08:00
endif ( )
2018-05-04 00:54:10 +08:00
endif ( )
2018-07-04 21:59:25 +08:00
if ( TARGET dsymutil )
list ( APPEND LLDB_TEST_DEPS dsymutil )
endif ( )
2017-10-07 06:21:36 +08:00
add_subdirectory ( test )
add_subdirectory ( unittests )
add_subdirectory ( lit )
2018-05-04 00:54:10 +08:00
add_subdirectory ( utils/lldb-dotest )
2017-10-07 06:21:36 +08:00
endif ( )
2015-02-18 06:20:29 +08:00
2015-09-08 13:00:22 +08:00
if ( NOT LLDB_DISABLE_PYTHON )
[CMake] Revised LLDB.framework builds
Summary:
Add features to LLDB CMake builds that have so far only been available in Xcode. Clean up a few inconveniences and prepare further improvements.
Options:
* `LLDB_FRAMEWORK_BUILD_DIR` determines target directory (in build-tree)
* `LLDB_FRAMEWORK_INSTALL_DIR` **only** determines target directory in install-tree
* `LLVM_EXTERNALIZE_DEBUGINFO` allows externalized debug info (dSYM on Darwin, emitted to `bin`)
* `LLDB_FRAMEWORK_TOOLS` determines which executables will be copied to the framework's Resources (dropped symlinking, removed INCLUDE_IN_SUITE, removed dummy targets)
Other changes:
* clean up `add_lldb_executable()`
* include `LLDBFramework.cmake` from `source/API/CMakeLists.txt`
* use `*.plist.in` files, which are typical for CMake and independent from Xcode
* add clang headers to the framework bundle
Reviewers: xiaobai, JDevlieghere, aprantl, davide, beanz, stella.stamenova, clayborg, labath
Reviewed By: aprantl
Subscribers: friss, mgorny, lldb-commits, #lldb
Differential Revision: https://reviews.llvm.org/D55328
llvm-svn: 350391
2019-01-04 20:46:50 +08:00
if ( NOT LLDB_BUILD_FRAMEWORK )
set ( use_python_wrapper_from_src_dir -m )
endif ( )
if ( LLDB_USE_SYSTEM_SIX )
set ( use_six_py_from_system --useSystemSix )
endif ( )
2019-01-04 20:47:02 +08:00
get_target_property ( lldb_scripts_dir swig_wrapper BINARY_DIR )
get_target_property ( liblldb_build_dir liblldb LIBRARY_OUTPUT_DIRECTORY )
[CMake] Revised LLDB.framework builds
Summary:
Add features to LLDB CMake builds that have so far only been available in Xcode. Clean up a few inconveniences and prepare further improvements.
Options:
* `LLDB_FRAMEWORK_BUILD_DIR` determines target directory (in build-tree)
* `LLDB_FRAMEWORK_INSTALL_DIR` **only** determines target directory in install-tree
* `LLVM_EXTERNALIZE_DEBUGINFO` allows externalized debug info (dSYM on Darwin, emitted to `bin`)
* `LLDB_FRAMEWORK_TOOLS` determines which executables will be copied to the framework's Resources (dropped symlinking, removed INCLUDE_IN_SUITE, removed dummy targets)
Other changes:
* clean up `add_lldb_executable()`
* include `LLDBFramework.cmake` from `source/API/CMakeLists.txt`
* use `*.plist.in` files, which are typical for CMake and independent from Xcode
* add clang headers to the framework bundle
Reviewers: xiaobai, JDevlieghere, aprantl, davide, beanz, stella.stamenova, clayborg, labath
Reviewed By: aprantl
Subscribers: friss, mgorny, lldb-commits, #lldb
Differential Revision: https://reviews.llvm.org/D55328
llvm-svn: 350391
2019-01-04 20:46:50 +08:00
2016-12-17 00:38:25 +08:00
# Add a Post-Build Event to copy over Python files and create the symlink
# to liblldb.so for the Python API(hardlink on Windows)
add_custom_target ( finish_swig ALL
C O M M A N D
2019-01-04 20:47:02 +08:00
$ { P Y T H O N _ E X E C U T A B L E } $ { L L D B _ S O U R C E _ D I R } / s c r i p t s / f i n i s h S w i g W r a p p e r C l a s s e s . p y
2016-12-17 00:38:25 +08:00
- - s r c R o o t = $ { L L D B _ S O U R C E _ D I R }
2019-01-04 20:47:02 +08:00
- - t a r g e t D i r = $ { l i b l l d b _ b u i l d _ d i r }
- - c f g B l d D i r = $ { l l d b _ s c r i p t s _ d i r }
2016-12-17 00:38:25 +08:00
- - p r e f i x = $ { C M A K E _ B I N A R Y _ D I R }
- - c m a k e B u i l d C o n f i g u r a t i o n = $ { C M A K E _ C F G _ I N T D I R }
- - l l d b L i b D i r = l i b $ { L L V M _ L I B D I R _ S U F F I X }
[CMake] Revised LLDB.framework builds
Summary:
Add features to LLDB CMake builds that have so far only been available in Xcode. Clean up a few inconveniences and prepare further improvements.
Options:
* `LLDB_FRAMEWORK_BUILD_DIR` determines target directory (in build-tree)
* `LLDB_FRAMEWORK_INSTALL_DIR` **only** determines target directory in install-tree
* `LLVM_EXTERNALIZE_DEBUGINFO` allows externalized debug info (dSYM on Darwin, emitted to `bin`)
* `LLDB_FRAMEWORK_TOOLS` determines which executables will be copied to the framework's Resources (dropped symlinking, removed INCLUDE_IN_SUITE, removed dummy targets)
Other changes:
* clean up `add_lldb_executable()`
* include `LLDBFramework.cmake` from `source/API/CMakeLists.txt`
* use `*.plist.in` files, which are typical for CMake and independent from Xcode
* add clang headers to the framework bundle
Reviewers: xiaobai, JDevlieghere, aprantl, davide, beanz, stella.stamenova, clayborg, labath
Reviewed By: aprantl
Subscribers: friss, mgorny, lldb-commits, #lldb
Differential Revision: https://reviews.llvm.org/D55328
llvm-svn: 350391
2019-01-04 20:46:50 +08:00
$ { u s e _ p y t h o n _ w r a p p e r _ f r o m _ s r c _ d i r }
$ { u s e _ s i x _ p y _ f r o m _ s y s t e m }
2016-12-17 00:38:25 +08:00
V E R B A T I M
2019-01-04 20:47:02 +08:00
D E P E N D S $ { L L D B _ S O U R C E _ D I R } / s c r i p t s / f i n i s h S w i g W r a p p e r C l a s s e s . p y
D E P E N D S $ { l l d b _ s c r i p t s _ d i r } / l l d b . p y
2015-02-18 06:20:29 +08:00
C O M M E N T " P y t h o n s c r i p t s y m - l i n k i n g L L D B P y t h o n A P I " )
2018-06-19 02:27:16 +08:00
2015-10-04 09:28:51 +08:00
if ( TARGET readline )
[CMake] Revised LLDB.framework builds
Summary:
Add features to LLDB CMake builds that have so far only been available in Xcode. Clean up a few inconveniences and prepare further improvements.
Options:
* `LLDB_FRAMEWORK_BUILD_DIR` determines target directory (in build-tree)
* `LLDB_FRAMEWORK_INSTALL_DIR` **only** determines target directory in install-tree
* `LLVM_EXTERNALIZE_DEBUGINFO` allows externalized debug info (dSYM on Darwin, emitted to `bin`)
* `LLDB_FRAMEWORK_TOOLS` determines which executables will be copied to the framework's Resources (dropped symlinking, removed INCLUDE_IN_SUITE, removed dummy targets)
Other changes:
* clean up `add_lldb_executable()`
* include `LLDBFramework.cmake` from `source/API/CMakeLists.txt`
* use `*.plist.in` files, which are typical for CMake and independent from Xcode
* add clang headers to the framework bundle
Reviewers: xiaobai, JDevlieghere, aprantl, davide, beanz, stella.stamenova, clayborg, labath
Reviewed By: aprantl
Subscribers: friss, mgorny, lldb-commits, #lldb
Differential Revision: https://reviews.llvm.org/D55328
llvm-svn: 350391
2019-01-04 20:46:50 +08:00
set ( readline_dep readline )
2015-10-04 09:28:51 +08:00
endif ( )
[CMake] Revised LLDB.framework builds
Summary:
Add features to LLDB CMake builds that have so far only been available in Xcode. Clean up a few inconveniences and prepare further improvements.
Options:
* `LLDB_FRAMEWORK_BUILD_DIR` determines target directory (in build-tree)
* `LLDB_FRAMEWORK_INSTALL_DIR` **only** determines target directory in install-tree
* `LLVM_EXTERNALIZE_DEBUGINFO` allows externalized debug info (dSYM on Darwin, emitted to `bin`)
* `LLDB_FRAMEWORK_TOOLS` determines which executables will be copied to the framework's Resources (dropped symlinking, removed INCLUDE_IN_SUITE, removed dummy targets)
Other changes:
* clean up `add_lldb_executable()`
* include `LLDBFramework.cmake` from `source/API/CMakeLists.txt`
* use `*.plist.in` files, which are typical for CMake and independent from Xcode
* add clang headers to the framework bundle
Reviewers: xiaobai, JDevlieghere, aprantl, davide, beanz, stella.stamenova, clayborg, labath
Reviewed By: aprantl
Subscribers: friss, mgorny, lldb-commits, #lldb
Differential Revision: https://reviews.llvm.org/D55328
llvm-svn: 350391
2019-01-04 20:46:50 +08:00
add_dependencies ( finish_swig swig_wrapper liblldb lldb-argdumper ${ readline_dep } )
2015-10-04 09:28:51 +08:00
2015-09-16 23:34:06 +08:00
# Ensure we do the python post-build step when building lldb.
add_dependencies ( lldb finish_swig )
2015-10-01 15:55:44 +08:00
[CMake] Revised LLDB.framework builds
Summary:
Add features to LLDB CMake builds that have so far only been available in Xcode. Clean up a few inconveniences and prepare further improvements.
Options:
* `LLDB_FRAMEWORK_BUILD_DIR` determines target directory (in build-tree)
* `LLDB_FRAMEWORK_INSTALL_DIR` **only** determines target directory in install-tree
* `LLVM_EXTERNALIZE_DEBUGINFO` allows externalized debug info (dSYM on Darwin, emitted to `bin`)
* `LLDB_FRAMEWORK_TOOLS` determines which executables will be copied to the framework's Resources (dropped symlinking, removed INCLUDE_IN_SUITE, removed dummy targets)
Other changes:
* clean up `add_lldb_executable()`
* include `LLDBFramework.cmake` from `source/API/CMakeLists.txt`
* use `*.plist.in` files, which are typical for CMake and independent from Xcode
* add clang headers to the framework bundle
Reviewers: xiaobai, JDevlieghere, aprantl, davide, beanz, stella.stamenova, clayborg, labath
Reviewed By: aprantl
Subscribers: friss, mgorny, lldb-commits, #lldb
Differential Revision: https://reviews.llvm.org/D55328
llvm-svn: 350391
2019-01-04 20:46:50 +08:00
if ( LLDB_BUILD_FRAMEWORK )
add_dependencies ( lldb-framework finish_swig )
2016-12-16 02:19:10 +08:00
endif ( )
2015-10-01 15:55:44 +08:00
# Add a Post-Build Event to copy the custom Python DLL to the lldb binaries dir so that Windows can find it when launching
# lldb.exe or any other executables that were linked with liblldb.
if ( WIN32 AND NOT "${PYTHON_DLL}" STREQUAL "" )
# When using the Visual Studio CMake generator the lldb binaries end up in Release/bin, Debug/bin etc.
file ( TO_NATIVE_PATH "${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/bin" LLDB_BIN_DIR )
file ( TO_NATIVE_PATH "${PYTHON_DLL}" PYTHON_DLL_NATIVE_PATH )
add_custom_command (
T A R G E T f i n i s h _ s w i g
P O S T _ B U I L D
2016-12-17 00:38:25 +08:00
C O M M A N D $ { C M A K E _ C O M M A N D } - E c o p y $ { P Y T H O N _ D L L _ N A T I V E _ P A T H } $ { L L D B _ B I N _ D I R } V E R B A T I M
2015-10-01 15:55:44 +08:00
C O M M E N T " C o p y i n g P y t h o n D L L t o L L D B b i n a r i e s d i r e c t o r y . " )
endif ( )
2015-02-18 06:20:29 +08:00
endif ( )