From e501d20927ad1b036e939ba1c204c1481424e324 Mon Sep 17 00:00:00 2001 From: Sam Edwards Date: Thu, 6 Sep 2018 00:26:13 -0600 Subject: [PATCH] CMake: Don't compile Interrogate runtime code into interrogatedb This should obviate the need for pystub as well. Note that it's currently a little bit hacky; the source will have to be moved to make the CMake dependencies work better. --- cmake/macros/Interrogate.cmake | 4 +-- dtool/src/dtoolbase/CMakeLists.txt | 3 -- dtool/src/dtoolutil/CMakeLists.txt | 3 -- dtool/src/interrogatedb/CMakeLists.txt | 39 ++++++++++++++++++++------ dtool/src/prc/CMakeLists.txt | 3 -- panda/src/ode/CMakeLists.txt | 2 +- 6 files changed, 34 insertions(+), 20 deletions(-) diff --git a/cmake/macros/Interrogate.cmake b/cmake/macros/Interrogate.cmake index 324650b028..dc87547c9d 100644 --- a/cmake/macros/Interrogate.cmake +++ b/cmake/macros/Interrogate.cmake @@ -219,6 +219,7 @@ function(interrogate_sources target output database language_flags) ${language_flags} ${define_flags} -S "${PROJECT_BINARY_DIR}/include" + -S "${PROJECT_SOURCE_DIR}/dtool/src/interrogatedb" -S "${PROJECT_SOURCE_DIR}/dtool/src/parser-inc" -S "${PYTHON_INCLUDE_DIRS}" ${include_flags} @@ -291,8 +292,7 @@ function(add_python_module module) ) add_python_target(panda3d.${module} "${module}_module.cxx" ${sources}) - target_link_libraries(panda3d.${module} - ${link_targets} p3dtool) + target_link_libraries(panda3d.${module} ${link_targets} p3igateruntime) list(APPEND ALL_INTERROGATE_MODULES "${module}") set(ALL_INTERROGATE_MODULES "${ALL_INTERROGATE_MODULES}" CACHE INTERNAL "Internal variable") diff --git a/dtool/src/dtoolbase/CMakeLists.txt b/dtool/src/dtoolbase/CMakeLists.txt index e61ea4f8cb..f957c30645 100644 --- a/dtool/src/dtoolbase/CMakeLists.txt +++ b/dtool/src/dtoolbase/CMakeLists.txt @@ -85,9 +85,6 @@ composite_sources(p3dtoolbase P3DTOOLBASE_SOURCES) add_component_library(p3dtoolbase NOINIT SYMBOL BUILDING_DTOOL_DTOOLBASE ${P3DTOOLBASE_HEADERS} ${P3DTOOLBASE_SOURCES}) -# The extensions need py_panda.h and extension.h from interrogatedb -target_include_directories(p3dtoolbase PUBLIC - $) # Help other libraries find the autogenerated version headers target_include_directories(p3dtoolbase PUBLIC ${CMAKE_CURRENT_BINARY_DIR}) target_use_packages(p3dtoolbase THREADS EIGEN) diff --git a/dtool/src/dtoolutil/CMakeLists.txt b/dtool/src/dtoolutil/CMakeLists.txt index 872eab7b1d..9ee7961987 100644 --- a/dtool/src/dtoolutil/CMakeLists.txt +++ b/dtool/src/dtoolutil/CMakeLists.txt @@ -66,9 +66,6 @@ composite_sources(p3dtoolutil P3DTOOLUTIL_SOURCES) add_component_library(p3dtoolutil SYMBOL BUILDING_DTOOL_DTOOLUTIL ${P3DTOOLUTIL_HEADERS} ${P3DTOOLUTIL_SOURCES}) -# The extensions need py_panda.h and extension.h from interrogatedb -target_include_directories(p3dtoolutil PUBLIC - $) target_link_libraries(p3dtoolutil p3dtoolbase ${CMAKE_DL_LIBS}) target_interrogate(p3dtoolutil ALL EXTENSIONS ${P3DTOOLUTIL_IGATEEXT}) diff --git a/dtool/src/interrogatedb/CMakeLists.txt b/dtool/src/interrogatedb/CMakeLists.txt index f17021d849..ace718342c 100644 --- a/dtool/src/interrogatedb/CMakeLists.txt +++ b/dtool/src/interrogatedb/CMakeLists.txt @@ -9,12 +9,13 @@ set(P3INTERROGATEDB_HEADERS interrogateManifest.I interrogateManifest.h interrogateType.I interrogateType.h interrogate_datafile.I interrogate_datafile.h - interrogate_interface.h interrogate_request.h + interrogate_interface.h interrogate_request.h) + +set(P3IGATERUNTIME_HEADERS extension.h py_compat.h py_panda.h py_wrappers.h) set(P3INTERROGATEDB_SOURCES config_interrogatedb.cxx - dtool_super_base.cxx indexRemapper.cxx interrogateComponent.cxx interrogateDatabase.cxx interrogateElement.cxx interrogateFunction.cxx @@ -22,28 +23,50 @@ set(P3INTERROGATEDB_SOURCES interrogateMakeSeq.cxx interrogateManifest.cxx interrogateType.cxx interrogate_datafile.cxx - interrogate_interface.cxx interrogate_request.cxx + interrogate_interface.cxx interrogate_request.cxx) + +set(P3IGATERUNTIME_SOURCES + dtool_super_base.cxx py_compat.cxx - py_panda.cxx + ${CMAKE_CURRENT_BINARY_DIR}/py_panda.cxx py_wrappers.cxx) set(P3INTERROGATEDB_IGATE interrogate_interface.h - interrogate_request.h -) + interrogate_request.h) composite_sources(p3interrogatedb P3INTERROGATEDB_SOURCES) add_component_library(p3interrogatedb NOINIT SYMBOL BUILDING_INTERROGATEDB ${P3INTERROGATEDB_HEADERS} ${P3INTERROGATEDB_SOURCES}) target_link_libraries(p3interrogatedb p3dconfig) -target_use_packages(p3interrogatedb PYTHON) if(NOT BUILD_METALIBS) install(TARGETS p3interrogatedb DESTINATION lib RUNTIME DESTINATION bin) endif() install(FILES ${P3INTERROGATEDB_HEADERS} DESTINATION include/panda3d) +# Now we need to build the Interrogate runtime code; this should eventually be +# split out into its own subdirectory. + +# HACK: igateruntime doesn't have its own BUILDING_IGATERUNTIME symbol yet; +# it's still using BUILDING_INTERROGATEDB. + +# py_panda.cxx can't rely on anything from interrogatedb, so: +file(READ ${CMAKE_CURRENT_SOURCE_DIR}/py_panda.cxx _py_panda) +string(REGEX REPLACE "interrogatedb" "prc" _py_panda "${_py_panda}") +file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/py_panda.cxx "${_py_panda}") + +add_library(p3igateruntime + ${P3IGATERUNTIME_HEADERS} ${P3IGATERUNTIME_SOURCES}) +set_target_properties(p3igateruntime PROPERTIES + DEFINE_SYMBOL BUILDING_INTERROGATEDB) # HACK +target_link_libraries(p3igateruntime p3dtoolconfig) +target_use_packages(p3igateruntime PYTHON) + +install(TARGETS p3igateruntime DESTINATION lib RUNTIME DESTINATION bin) +install(FILES ${P3IGATERUNTIME_HEADERS} DESTINATION include/panda3d) + # ALSO: This has an Interrogate binding! Take care of that if we want it. # Note we don't use the regular Interrogate macros; this has some custom flags # that would make it not worthwhile. @@ -69,4 +92,4 @@ add_custom_command( add_python_target(panda3d.interrogatedb "${CMAKE_CURRENT_BINARY_DIR}/interrogatedb_module.cxx") -target_link_libraries(panda3d.interrogatedb p3dtoolconfig) +target_link_libraries(panda3d.interrogatedb p3igateruntime) diff --git a/dtool/src/prc/CMakeLists.txt b/dtool/src/prc/CMakeLists.txt index 8ba005115e..dbeceacb55 100644 --- a/dtool/src/prc/CMakeLists.txt +++ b/dtool/src/prc/CMakeLists.txt @@ -73,9 +73,6 @@ composite_sources(p3prc P3PRC_SOURCES) add_component_library(p3prc NOINIT SYMBOL BUILDING_DTOOL_PRC ${P3PRC_HEADERS} ${P3PRC_SOURCES}) target_include_directories(p3prc PUBLIC ${CMAKE_CURRENT_BINARY_DIR}) -# The extensions need py_panda.h and extension.h from interrogatedb -target_include_directories(p3prc PUBLIC - $) target_link_libraries(p3prc p3dtool) target_use_packages(p3prc OPENSSL) target_interrogate(p3prc ALL EXTENSIONS ${P3PRC_IGATEEXT}) diff --git a/panda/src/ode/CMakeLists.txt b/panda/src/ode/CMakeLists.txt index a71c83a22a..dab81d57cb 100644 --- a/panda/src/ode/CMakeLists.txt +++ b/panda/src/ode/CMakeLists.txt @@ -87,7 +87,7 @@ composite_sources(p3ode P3ODE_SOURCES) add_library(p3ode ${P3ODE_SOURCES} ${P3ODE_HEADERS}) set_target_properties(p3ode PROPERTIES DEFINE_SYMBOL BUILDING_PANDAODE) target_compile_definitions(p3ode PUBLIC dSINGLE) -target_link_libraries(p3ode panda) +target_link_libraries(p3ode p3igateruntime panda) target_use_packages(p3ode ODE) target_interrogate(p3ode ${P3ODE_IGATE_SOURCES} EXTENSIONS ${P3ODE_IGATEEXT})