mirror of
https://github.com/WerWolv/ImHex.git
synced 2026-03-28 07:47:03 -05:00
build: Fix external plugins linking with plugin libraries
This commit is contained in:
@@ -36,106 +36,125 @@ macro(add_imhex_plugin)
|
|||||||
# Define new project for plugin
|
# Define new project for plugin
|
||||||
project(${IMHEX_PLUGIN_NAME})
|
project(${IMHEX_PLUGIN_NAME})
|
||||||
|
|
||||||
# Create a new shared library for the plugin source code
|
if (IMHEX_PLUGIN_IMPORTED)
|
||||||
add_library(${IMHEX_PLUGIN_NAME} ${IMHEX_PLUGIN_LIBRARY_TYPE} ${IMHEX_PLUGIN_SOURCES})
|
add_library(${IMHEX_PLUGIN_NAME} SHARED IMPORTED GLOBAL)
|
||||||
|
|
||||||
# Add include directories and link libraries
|
if (WIN32)
|
||||||
target_include_directories(${IMHEX_PLUGIN_NAME} PUBLIC ${IMHEX_PLUGIN_INCLUDES})
|
set_target_properties(${IMHEX_PLUGIN_NAME} PROPERTIES
|
||||||
target_link_libraries(${IMHEX_PLUGIN_NAME} PUBLIC ${IMHEX_PLUGIN_LIBRARIES})
|
IMPORTED_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}/../../../plugins/${IMHEX_PLUGIN_NAME}${IMHEX_PLUGIN_SUFFIX}"
|
||||||
target_link_libraries(${IMHEX_PLUGIN_NAME} PRIVATE libimhex ${FMT_LIBRARIES} imgui_all_includes libwolv)
|
IMPORTED_IMPLIB "${CMAKE_CURRENT_SOURCE_DIR}/../lib${IMHEX_PLUGIN_NAME}.dll.a"
|
||||||
addIncludesFromLibrary(${IMHEX_PLUGIN_NAME} libpl)
|
INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}/include/include")
|
||||||
addIncludesFromLibrary(${IMHEX_PLUGIN_NAME} libpl-gen)
|
elseif (APPLE)
|
||||||
|
set_target_properties(${IMHEX_PLUGIN_NAME} PROPERTIES
|
||||||
precompileHeaders(${IMHEX_PLUGIN_NAME} "${CMAKE_CURRENT_SOURCE_DIR}/include")
|
IMPORTED_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}/../../../../MacOS/plugins/${IMHEX_PLUGIN_NAME}${IMHEX_PLUGIN_SUFFIX}"
|
||||||
|
INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}/include/include")
|
||||||
# Add IMHEX_PROJECT_NAME and IMHEX_VERSION define
|
else()
|
||||||
target_compile_definitions(${IMHEX_PLUGIN_NAME} PRIVATE IMHEX_PROJECT_NAME="${IMHEX_PLUGIN_NAME}")
|
set_target_properties(${IMHEX_PLUGIN_NAME} PROPERTIES
|
||||||
target_compile_definitions(${IMHEX_PLUGIN_NAME} PRIVATE IMHEX_VERSION="${IMHEX_VERSION_STRING}")
|
IMPORTED_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}/../../../plugins/${IMHEX_PLUGIN_NAME}${IMHEX_PLUGIN_SUFFIX}"
|
||||||
target_compile_definitions(${IMHEX_PLUGIN_NAME} PRIVATE IMHEX_PLUGIN_NAME=${IMHEX_PLUGIN_NAME})
|
INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}/include/include")
|
||||||
|
|
||||||
# Enable required compiler flags
|
|
||||||
enableUnityBuild(${IMHEX_PLUGIN_NAME})
|
|
||||||
setupCompilerFlags(${IMHEX_PLUGIN_NAME})
|
|
||||||
addCppCheck(${IMHEX_PLUGIN_NAME})
|
|
||||||
|
|
||||||
# Configure build properties
|
|
||||||
set_target_properties(${IMHEX_PLUGIN_NAME}
|
|
||||||
PROPERTIES
|
|
||||||
RUNTIME_OUTPUT_DIRECTORY "${IMHEX_MAIN_OUTPUT_DIRECTORY}/plugins"
|
|
||||||
CXX_STANDARD 23
|
|
||||||
PREFIX ""
|
|
||||||
SUFFIX ${IMHEX_PLUGIN_SUFFIX}
|
|
||||||
)
|
|
||||||
|
|
||||||
# Set rpath of plugin libraries to the plugins folder
|
|
||||||
if (WIN32)
|
|
||||||
if (IMHEX_PLUGIN_LIBRARY_PLUGIN)
|
|
||||||
set_target_properties(${IMHEX_PLUGIN_NAME} PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS TRUE)
|
|
||||||
endif()
|
endif()
|
||||||
elseif (APPLE)
|
else()
|
||||||
set_target_properties(${IMHEX_PLUGIN_NAME} PROPERTIES BUILD_RPATH "@executable_path/../Frameworks;@executable_path/plugins")
|
# Create a new shared library for the plugin source code
|
||||||
endif()
|
add_library(${IMHEX_PLUGIN_NAME} ${IMHEX_PLUGIN_LIBRARY_TYPE} ${IMHEX_PLUGIN_SOURCES})
|
||||||
|
|
||||||
# Setup a romfs for the plugin
|
# Add include directories and link libraries
|
||||||
list(APPEND LIBROMFS_RESOURCE_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/romfs)
|
target_include_directories(${IMHEX_PLUGIN_NAME} PUBLIC ${IMHEX_PLUGIN_INCLUDES})
|
||||||
set(LIBROMFS_PROJECT_NAME ${IMHEX_PLUGIN_NAME})
|
target_link_libraries(${IMHEX_PLUGIN_NAME} PUBLIC ${IMHEX_PLUGIN_LIBRARIES})
|
||||||
add_subdirectory(${IMHEX_BASE_FOLDER}/lib/external/libromfs ${CMAKE_CURRENT_BINARY_DIR}/libromfs)
|
target_link_libraries(${IMHEX_PLUGIN_NAME} PRIVATE libimhex ${FMT_LIBRARIES} imgui_all_includes libwolv)
|
||||||
target_link_libraries(${IMHEX_PLUGIN_NAME} PRIVATE ${LIBROMFS_LIBRARY})
|
addIncludesFromLibrary(${IMHEX_PLUGIN_NAME} libpl)
|
||||||
|
addIncludesFromLibrary(${IMHEX_PLUGIN_NAME} libpl-gen)
|
||||||
|
|
||||||
set(FEATURE_DEFINE_CONTENT)
|
precompileHeaders(${IMHEX_PLUGIN_NAME} "${CMAKE_CURRENT_SOURCE_DIR}/include")
|
||||||
|
|
||||||
if (IMHEX_PLUGIN_FEATURES)
|
# Add IMHEX_PROJECT_NAME and IMHEX_VERSION define
|
||||||
list(LENGTH IMHEX_PLUGIN_FEATURES IMHEX_FEATURE_COUNT)
|
target_compile_definitions(${IMHEX_PLUGIN_NAME} PRIVATE IMHEX_PROJECT_NAME="${IMHEX_PLUGIN_NAME}")
|
||||||
math(EXPR IMHEX_FEATURE_COUNT "${IMHEX_FEATURE_COUNT} - 1" OUTPUT_FORMAT DECIMAL)
|
target_compile_definitions(${IMHEX_PLUGIN_NAME} PRIVATE IMHEX_VERSION="${IMHEX_VERSION_STRING}")
|
||||||
foreach(index RANGE 0 ${IMHEX_FEATURE_COUNT} 2)
|
target_compile_definitions(${IMHEX_PLUGIN_NAME} PRIVATE IMHEX_PLUGIN_NAME=${IMHEX_PLUGIN_NAME})
|
||||||
list(SUBLIST IMHEX_PLUGIN_FEATURES ${index} 2 IMHEX_PLUGIN_FEATURE)
|
|
||||||
list(GET IMHEX_PLUGIN_FEATURE 0 feature_define)
|
|
||||||
list(GET IMHEX_PLUGIN_FEATURE 1 feature_description)
|
|
||||||
|
|
||||||
string(TOUPPER ${feature_define} feature_define)
|
# Enable required compiler flags
|
||||||
add_definitions(-DIMHEX_PLUGIN_${IMHEX_PLUGIN_NAME}_FEATURE_${feature_define}=0)
|
enableUnityBuild(${IMHEX_PLUGIN_NAME})
|
||||||
set(FEATURE_DEFINE_CONTENT "${FEATURE_DEFINE_CONTENT}{ \"${feature_description}\", IMHEX_FEATURE_ENABLED(${feature_define}) },")
|
setupCompilerFlags(${IMHEX_PLUGIN_NAME})
|
||||||
endforeach()
|
addCppCheck(${IMHEX_PLUGIN_NAME})
|
||||||
endif()
|
|
||||||
|
|
||||||
target_compile_options(${IMHEX_PLUGIN_NAME} PRIVATE -DIMHEX_PLUGIN_FEATURES_CONTENT=${FEATURE_DEFINE_CONTENT})
|
# Configure build properties
|
||||||
|
set_target_properties(${IMHEX_PLUGIN_NAME}
|
||||||
# Add the new plugin to the main dependency list so it gets built by default
|
|
||||||
if (TARGET imhex_all)
|
|
||||||
add_dependencies(imhex_all ${IMHEX_PLUGIN_NAME})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (IMHEX_EXTERNAL_PLUGIN_BUILD)
|
|
||||||
install(TARGETS ${IMHEX_PLUGIN_NAME} DESTINATION ".")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Fix rpath
|
|
||||||
if (APPLE)
|
|
||||||
set_target_properties(
|
|
||||||
${IMHEX_PLUGIN_NAME}
|
|
||||||
PROPERTIES
|
PROPERTIES
|
||||||
INSTALL_RPATH "@executable_path/../Frameworks;@executable_path/plugins"
|
RUNTIME_OUTPUT_DIRECTORY "${IMHEX_MAIN_OUTPUT_DIRECTORY}/plugins"
|
||||||
|
CXX_STANDARD 23
|
||||||
|
PREFIX ""
|
||||||
|
SUFFIX ${IMHEX_PLUGIN_SUFFIX}
|
||||||
)
|
)
|
||||||
elseif (UNIX)
|
|
||||||
set(PLUGIN_RPATH "")
|
|
||||||
list(APPEND PLUGIN_RPATH "$ORIGIN")
|
|
||||||
|
|
||||||
if (IMHEX_PLUGIN_ADD_INSTALL_PREFIX_TO_RPATH)
|
# Set rpath of plugin libraries to the plugins folder
|
||||||
list(APPEND PLUGIN_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
|
if (WIN32)
|
||||||
|
if (IMHEX_PLUGIN_LIBRARY_PLUGIN)
|
||||||
|
set_target_properties(${IMHEX_PLUGIN_NAME} PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS TRUE)
|
||||||
|
endif()
|
||||||
|
elseif (APPLE)
|
||||||
|
set_target_properties(${IMHEX_PLUGIN_NAME} PROPERTIES BUILD_RPATH "@executable_path/../Frameworks;@executable_path/plugins")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set_target_properties(
|
# Setup a romfs for the plugin
|
||||||
${IMHEX_PLUGIN_NAME}
|
list(APPEND LIBROMFS_RESOURCE_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/romfs)
|
||||||
PROPERTIES
|
set(LIBROMFS_PROJECT_NAME ${IMHEX_PLUGIN_NAME})
|
||||||
|
add_subdirectory(${IMHEX_BASE_FOLDER}/lib/external/libromfs ${CMAKE_CURRENT_BINARY_DIR}/libromfs)
|
||||||
|
target_link_libraries(${IMHEX_PLUGIN_NAME} PRIVATE ${LIBROMFS_LIBRARY})
|
||||||
|
|
||||||
|
set(FEATURE_DEFINE_CONTENT)
|
||||||
|
|
||||||
|
if (IMHEX_PLUGIN_FEATURES)
|
||||||
|
list(LENGTH IMHEX_PLUGIN_FEATURES IMHEX_FEATURE_COUNT)
|
||||||
|
math(EXPR IMHEX_FEATURE_COUNT "${IMHEX_FEATURE_COUNT} - 1" OUTPUT_FORMAT DECIMAL)
|
||||||
|
foreach(index RANGE 0 ${IMHEX_FEATURE_COUNT} 2)
|
||||||
|
list(SUBLIST IMHEX_PLUGIN_FEATURES ${index} 2 IMHEX_PLUGIN_FEATURE)
|
||||||
|
list(GET IMHEX_PLUGIN_FEATURE 0 feature_define)
|
||||||
|
list(GET IMHEX_PLUGIN_FEATURE 1 feature_description)
|
||||||
|
|
||||||
|
string(TOUPPER ${feature_define} feature_define)
|
||||||
|
add_definitions(-DIMHEX_PLUGIN_${IMHEX_PLUGIN_NAME}_FEATURE_${feature_define}=0)
|
||||||
|
set(FEATURE_DEFINE_CONTENT "${FEATURE_DEFINE_CONTENT}{ \"${feature_description}\", IMHEX_FEATURE_ENABLED(${feature_define}) },")
|
||||||
|
endforeach()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
target_compile_options(${IMHEX_PLUGIN_NAME} PRIVATE -DIMHEX_PLUGIN_FEATURES_CONTENT=${FEATURE_DEFINE_CONTENT})
|
||||||
|
|
||||||
|
# Add the new plugin to the main dependency list so it gets built by default
|
||||||
|
if (TARGET imhex_all)
|
||||||
|
add_dependencies(imhex_all ${IMHEX_PLUGIN_NAME})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (IMHEX_EXTERNAL_PLUGIN_BUILD)
|
||||||
|
install(TARGETS ${IMHEX_PLUGIN_NAME} DESTINATION ".")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Fix rpath
|
||||||
|
if (APPLE)
|
||||||
|
set_target_properties(
|
||||||
|
${IMHEX_PLUGIN_NAME}
|
||||||
|
PROPERTIES
|
||||||
|
INSTALL_RPATH "@executable_path/../Frameworks;@executable_path/plugins"
|
||||||
|
)
|
||||||
|
elseif (UNIX)
|
||||||
|
set(PLUGIN_RPATH "")
|
||||||
|
list(APPEND PLUGIN_RPATH "$ORIGIN")
|
||||||
|
|
||||||
|
if (IMHEX_PLUGIN_ADD_INSTALL_PREFIX_TO_RPATH)
|
||||||
|
list(APPEND PLUGIN_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set_target_properties(
|
||||||
|
${IMHEX_PLUGIN_NAME}
|
||||||
|
PROPERTIES
|
||||||
INSTALL_RPATH_USE_ORIGIN ON
|
INSTALL_RPATH_USE_ORIGIN ON
|
||||||
INSTALL_RPATH "${PLUGIN_RPATH}"
|
INSTALL_RPATH "${PLUGIN_RPATH}"
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/tests/CMakeLists.txt AND IMHEX_ENABLE_UNIT_TESTS AND IMHEX_ENABLE_PLUGIN_TESTS)
|
if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/tests/CMakeLists.txt AND IMHEX_ENABLE_UNIT_TESTS AND IMHEX_ENABLE_PLUGIN_TESTS)
|
||||||
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/tests)
|
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/tests)
|
||||||
target_link_libraries(${IMHEX_PLUGIN_NAME} PUBLIC ${IMHEX_PLUGIN_NAME}_tests)
|
target_link_libraries(${IMHEX_PLUGIN_NAME} PUBLIC ${IMHEX_PLUGIN_NAME}_tests)
|
||||||
target_compile_definitions(${IMHEX_PLUGIN_NAME}_tests PRIVATE IMHEX_PROJECT_NAME="${IMHEX_PLUGIN_NAME}-tests")
|
target_compile_definitions(${IMHEX_PLUGIN_NAME}_tests PRIVATE IMHEX_PROJECT_NAME="${IMHEX_PLUGIN_NAME}-tests")
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
endmacro()
|
endmacro()
|
||||||
|
|
||||||
|
|||||||
@@ -38,8 +38,14 @@ add_subdirectory(lib/external/libwolv EXCLUDE_FROM_ALL)
|
|||||||
set(LIBPL_ENABLE_CLI OFF CACHE BOOL "" FORCE)
|
set(LIBPL_ENABLE_CLI OFF CACHE BOOL "" FORCE)
|
||||||
add_subdirectory(lib/external/pattern_language EXCLUDE_FROM_ALL)
|
add_subdirectory(lib/external/pattern_language EXCLUDE_FROM_ALL)
|
||||||
|
|
||||||
|
set(IMHEX_PLUGIN_IMPORTED ON)
|
||||||
|
|
||||||
add_subdirectory(lib/libimhex)
|
add_subdirectory(lib/libimhex)
|
||||||
add_subdirectory(lib/trace)
|
add_subdirectory(lib/trace)
|
||||||
|
add_subdirectory(lib/fonts)
|
||||||
|
add_subdirectory(lib/ui)
|
||||||
|
|
||||||
|
set(IMHEX_PLUGIN_IMPORTED OFF)
|
||||||
|
|
||||||
if (WIN32)
|
if (WIN32)
|
||||||
set_target_properties(libimhex PROPERTIES
|
set_target_properties(libimhex PROPERTIES
|
||||||
|
|||||||
Reference in New Issue
Block a user