@@ -88,29 +88,35 @@ find_package(glog CONFIG REQUIRED)
8888set (GFLAGS_USE_TARGET_NAMESPACE ON )
8989find_package (gflags CONFIG REQUIRED )
9090
91+ option (REMILL_FETCH_SLEIGH "Fetch and build sleigh as part of remill" ON )
92+
9193# Sleigh
92- file (GLOB sleigh_patches "${CMAKE_CURRENT_SOURCE_DIR} /patches/sleigh/*.patch" )
93- set (sleigh_ADDITIONAL_PATCHES "${sleigh_patches} " CACHE STRING "" FORCE )
94- set (sleigh_ENABLE_TESTS OFF CACHE BOOL "" FORCE )
95- set (sleigh_RELEASE_TYPE "HEAD" CACHE STRING "" FORCE )
96- set (sleigh_BUILD_SUPPORT ON CACHE BOOL "" FORCE )
97- set (sleigh_BUILD_SLEIGHSPECS ON CACHE BOOL "" FORCE )
98-
99- # Verbose fetch content updates
100- set (FETCHCONTENT_QUIET OFF )
101-
102- # This version of sleigh (HEAD) pins Ghidra somewhere between Ghidra v10.2.3 and v10.3
103- # https://github.com/lifting-bits/sleigh/blob/7c6b742/src/setup-ghidra-source.cmake#L55-L66
104- FetchContent_Declare (sleigh
105- GIT_REPOSITORY https://github.com/lifting-bits/sleigh.git
106- GIT_TAG 7c6b742
107- )
108- FetchContent_MakeAvailable (sleigh)
94+ if (REMILL_FETCH_SLEIGH)
95+ file (GLOB sleigh_patches "${CMAKE_CURRENT_SOURCE_DIR} /dependencies/sleigh_patches/*.patch" )
96+ set (sleigh_ADDITIONAL_PATCHES "${sleigh_patches} " CACHE STRING "" FORCE )
97+ set (sleigh_ENABLE_TESTS OFF CACHE BOOL "" FORCE )
98+ set (sleigh_RELEASE_TYPE "HEAD" CACHE STRING "" FORCE )
99+ set (sleigh_BUILD_SUPPORT ON CACHE BOOL "" FORCE )
100+ set (sleigh_BUILD_SLEIGHSPECS ON CACHE BOOL "" FORCE )
101+
102+ # Verbose fetch content updates
103+ set (FETCHCONTENT_QUIET OFF )
104+
105+ # This version of sleigh (HEAD) pins Ghidra somewhere between Ghidra v10.2.3 and v10.3
106+ # https://github.com/lifting-bits/sleigh/blob/7c6b742/src/setup-ghidra-source.cmake#L55-L66
107+ FetchContent_Declare (sleigh
108+ GIT_REPOSITORY https://github.com/lifting-bits/sleigh.git
109+ GIT_TAG 7c6b742
110+ )
111+ FetchContent_MakeAvailable (sleigh)
109112
110- # Get the Ghidra source directory from FetchContent's internal tracking
111- FetchContent_GetProperties (GhidraSource)
112- if (NOT ghidrasource_POPULATED)
113- message (FATAL_ERROR "Expected sleigh to populate GhidraSource" )
113+ # Get the Ghidra source directory from FetchContent's internal tracking
114+ FetchContent_GetProperties (GhidraSource)
115+ if (NOT ghidrasource_POPULATED)
116+ message (FATAL_ERROR "Expected sleigh to populate GhidraSource" )
117+ endif ()
118+ else ()
119+ find_package (sleigh CONFIG REQUIRED COMPONENTS Support Specs )
114120endif ()
115121
116122# For Linux builds, group LLVM libraries into a single group
@@ -219,22 +225,34 @@ target_compile_definitions(remill_settings INTERFACE
219225 "REMILL_BUILD_SEMANTICS_DIR_PPC64_32ADDR=\" ${REMILL_BUILD_SEMANTICS_DIR_PPC64_32ADDR} \" "
220226)
221227
222- if (SLEIGH_EXECUTABLE)
223- set (sleigh_compiler "${SLEIGH_EXECUTABLE} " )
224- else ()
225- set (sleigh_compiler "$<TARGET_FILE :sleigh ::sleigh >" )
226- endif ()
228+ if (REMILL_FETCH_SLEIGH)
229+ if (SLEIGH_EXECUTABLE)
230+ set (sleigh_compiler "${SLEIGH_EXECUTABLE} " )
231+ else ()
232+ set (sleigh_compiler "$<TARGET_FILE :sleigh ::sleigh >" )
233+ endif ()
227234
228- sleigh_compile (
229- TARGET ppc_e200_spec
230- COMPILER "${sleigh_compiler} "
231- SLASPEC "${ghidrasource_SOURCE_DIR} /Ghidra/Processors/PowerPC/data/languages/ppc_32_e200_be.slaspec"
232- LOG_FILE "${sleigh_BINARY_DIR} /sleighspecs/spec_build_logs/ppc_32_e200_be.sla.log"
233- OUT_FILE "${sleigh_BINARY_DIR} /specfiles/Ghidra/Processors/PowerPC/data/languages/ppc_32_e200_be.sla"
234- )
235+ sleigh_compile (
236+ TARGET ppc_e200_spec
237+ COMPILER "${sleigh_compiler} "
238+ SLASPEC "${ghidrasource_SOURCE_DIR} /Ghidra/Processors/PowerPC/data/languages/ppc_32_e200_be.slaspec"
239+ LOG_FILE "${sleigh_BINARY_DIR} /sleighspecs/spec_build_logs/ppc_32_e200_be.sla.log"
240+ OUT_FILE "${sleigh_BINARY_DIR} /specfiles/Ghidra/Processors/PowerPC/data/languages/ppc_32_e200_be.sla"
241+ )
235242
236- add_custom_target (sleigh_custom_specs )
237- add_dependencies (sleigh_custom_specs ppc_e200_spec )
243+ add_custom_target (sleigh_custom_specs )
244+ add_dependencies (sleigh_custom_specs ppc_e200_spec )
245+
246+ if (REMILL_ENABLE_INSTALL_TARGET)
247+ install (FILES "${sleigh_BINARY_DIR} /specfiles/Ghidra/Processors/PowerPC/data/languages/ppc_32_e200_be.sla"
248+ DESTINATION "${CMAKE_INSTALL_DATADIR} /sleigh/specfiles/Ghidra/Processors/PowerPC/data/languages/" )
249+ endif ()
250+ else ()
251+ if (NOT EXISTS "${sleigh_INSTALL_SPECDIR} /Ghidra/Processors/PowerPC/data/languages/ppc_32_e200_be.sla" )
252+ message (FATAL_ERROR "Installed sleigh spec not found: ${sleigh_INSTALL_SPECDIR} /Ghidra/Processors/PowerPC/data/languages/ppc_32_e200_be.sla" )
253+ endif ()
254+ add_custom_target (sleigh_custom_specs )
255+ endif ()
238256
239257target_link_libraries (remill_settings INTERFACE
240258 ${llvm_libs}
@@ -295,8 +313,6 @@ if(REMILL_ENABLE_INSTALL_TARGET)
295313 EXPORT remillTargets
296314 )
297315
298- install (FILES "${sleigh_BINARY_DIR} /specfiles/Ghidra/Processors/PowerPC/data/languages/ppc_32_e200_be.sla" DESTINATION "${CMAKE_INSTALL_DATADIR} /sleigh/specfiles/Ghidra/Processors/PowerPC/data/languages/" )
299-
300316 configure_file (
301317 "${CMAKE_CURRENT_SOURCE_DIR} /cmake/remillConfig.cmake.in"
302318 "${CMAKE_CURRENT_BINARY_DIR} /remillConfig.cmake"
0 commit comments