Skip to content

Commit f5c630a

Browse files
author
Peter Goodman
authored
Fix some cmake issues that I caused, and add some options (#547)
* Fix some cmake issues that I caused, and add some options * Rename some cmake variables. Use them more.
1 parent 7e723cb commit f5c630a

File tree

16 files changed

+148
-97
lines changed

16 files changed

+148
-97
lines changed

CMakeLists.txt

Lines changed: 51 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
# See the License for the specific language governing permissions and
1313
# limitations under the License.
1414

15-
cmake_minimum_required(VERSION 3.14)
15+
cmake_minimum_required(VERSION 3.21)
1616
include(cmake/vcpkg_helper.cmake)
1717

1818
# Setup to use ccache
@@ -23,16 +23,14 @@ include(GNUInstallDirs)
2323

2424
include("${CMAKE_CURRENT_SOURCE_DIR}/cmake/settings.cmake")
2525
include("${CMAKE_CURRENT_SOURCE_DIR}/cmake/utils.cmake")
26+
include("${CMAKE_CURRENT_SOURCE_DIR}/cmake/options.cmake")
2627
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules")
27-
include(CTest)
2828

29+
if(REMILL_ENABLE_TESTING)
30+
include(CTest)
31+
endif()
2932

30-
set(REMILL_SOURCE_DIR "${PROJECT_SOURCE_DIR}")
31-
32-
set(REMILL_INSTALL_LIB_DIR "${CMAKE_INSTALL_LIBDIR}" CACHE PATH "Directory in which remill libraries will be installed")
33-
set(REMILL_INSTALL_BIN_DIR "${CMAKE_INSTALL_BINDIR}" CACHE PATH "Directory in which remill binaries will be installed")
34-
set(REMILL_INSTALL_INCLUDE_DIR "${CMAKE_INSTALL_INCLUDEDIR}" CACHE PATH "Directory in which remill headers will be installed")
35-
set(REMILL_INSTALL_SHARE_DIR "${CMAKE_INSTALL_DATADIR}" CACHE PATH "Directory in which remill cmake files will be installed")
33+
message(STATUS "Compiler ID is ${CMAKE_C_COMPILER_ID}")
3634

3735
#
3836
# libraries
@@ -47,8 +45,20 @@ string(REPLACE "." ";" LLVM_VERSION_LIST ${LLVM_PACKAGE_VERSION})
4745
list(GET LLVM_VERSION_LIST 0 LLVM_MAJOR_VERSION)
4846
list(GET LLVM_VERSION_LIST 1 LLVM_MINOR_VERSION)
4947

50-
set(LLVM_MAJOR_VERSION "${LLVM_MAJOR_VERSION}" PARENT_SCOPE)
51-
set(LLVM_MINOR_VERSION "${LLVM_MINOR_VERSION}" PARENT_SCOPE)
48+
set(LLVM_MAJOR_VERSION "${LLVM_MAJOR_VERSION}")
49+
set(LLVM_MINOR_VERSION "${LLVM_MINOR_VERSION}")
50+
51+
set(REMILL_LLVM_VERSION "${LLVM_MAJOR_VERSION}")
52+
53+
message("Remill llvm version: ${REMILL_LLVM_VERSION}")
54+
set(REMILL_INSTALL_SEMANTICS_DIR "${CMAKE_INSTALL_PREFIX}/${REMILL_INSTALL_SHARE_DIR}/remill/${REMILL_LLVM_VERSION}/semantics" CACHE PATH "Directory into which semantics are installed")
55+
set(REMILL_BUILD_SEMANTICS_DIR_X86 "${CMAKE_CURRENT_BINARY_DIR}/lib/Arch/X86/Runtime")
56+
set(REMILL_BUILD_SEMANTICS_DIR_AARCH32 "${CMAKE_CURRENT_BINARY_DIR}/lib/Arch/AArch32/Runtime")
57+
set(REMILL_BUILD_SEMANTICS_DIR_AARCH64 "${CMAKE_CURRENT_BINARY_DIR}/lib/Arch/AArch64/Runtime")
58+
set(REMILL_BUILD_SEMANTICS_DIR_SPARC32 "${CMAKE_CURRENT_BINARY_DIR}/lib/Arch/SPARC32/Runtime")
59+
set(REMILL_BUILD_SEMANTICS_DIR_SPARC64 "${CMAKE_CURRENT_BINARY_DIR}/lib/Arch/SPARC64/Runtime")
60+
set(REMILL_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/include")
61+
set(REMILL_LIB_DIR "${CMAKE_CURRENT_SOURCE_DIR}/lib")
5262

5363
add_library(thirdparty_llvm INTERFACE)
5464
target_include_directories(thirdparty_llvm SYSTEM INTERFACE
@@ -139,21 +149,7 @@ option(REMILL_BUILD_SPARC32_RUNTIME "Build the Runtime for SPARC32. Turn this of
139149
# target settings
140150
#
141151

142-
set(REMILL_LLVM_VERSION "${LLVM_MAJOR_VERSION}" PARENT_SCOPE)
143-
message("Remill llvm version: ${REMILL_LLVM_VERSION}")
144-
math(EXPR REMILL_LLVM_VERSION_NUMBER "${LLVM_MAJOR_VERSION} * 100 + ${LLVM_MINOR_VERSION}")
145-
146-
set(REMILL_INSTALL_SEMANTICS_DIR "${CMAKE_INSTALL_PREFIX}/${REMILL_INSTALL_SHARE_DIR}/remill/${REMILL_LLVM_VERSION}/semantics" CACHE PATH "Directory into which semantics are installed")
147-
148-
set(REMILL_BUILD_SEMANTICS_DIR_X86 "${CMAKE_CURRENT_BINARY_DIR}/lib/Arch/X86/Runtime")
149-
set(REMILL_BUILD_SEMANTICS_DIR_AARCH32 "${CMAKE_CURRENT_BINARY_DIR}/lib/Arch/AArch32/Runtime")
150-
set(REMILL_BUILD_SEMANTICS_DIR_AARCH64 "${CMAKE_CURRENT_BINARY_DIR}/lib/Arch/AArch64/Runtime")
151-
set(REMILL_BUILD_SEMANTICS_DIR_SPARC32 "${CMAKE_CURRENT_BINARY_DIR}/lib/Arch/SPARC32/Runtime")
152-
set(REMILL_BUILD_SEMANTICS_DIR_SPARC64 "${CMAKE_CURRENT_BINARY_DIR}/lib/Arch/SPARC64/Runtime")
153-
154152
# add everything as public.
155-
set(REMILL_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/include")
156-
set(REMILL_LIB_DIR "${CMAKE_CURRENT_SOURCE_DIR}/lib")
157153

158154
add_library(remill_settings INTERFACE)
159155

@@ -243,8 +239,6 @@ set(THIRDPARTY_LIBRARY_LIST thirdparty_llvm thirdparty_xed thirdparty_glog third
243239
target_link_libraries(remill_settings INTERFACE
244240
${THIRDPARTY_LIBRARY_LIST}
245241
)
246-
install(TARGETS remill_settings ${THIRDPARTY_LIBRARY_LIST}
247-
EXPORT remillTargets)
248242

249243
add_subdirectory(lib/Arch)
250244
add_subdirectory(lib/BC)
@@ -261,7 +255,6 @@ target_link_libraries(remill INTERFACE
261255
remill_version
262256
${LINKER_END_GROUP}
263257
)
264-
install(TARGETS remill EXPORT remillTargets)
265258

266259
#
267260
# Also install clang, libllvm and llvm-link
@@ -292,22 +285,6 @@ endforeach()
292285

293286
list(REMOVE_DUPLICATES THIRDPARTY_LIBRARY_FILES)
294287

295-
# First do the basic substitutions.
296-
configure_file(
297-
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/remillConfig.cmake.in"
298-
"${CMAKE_CURRENT_BINARY_DIR}/remillConfig.cmake"
299-
@ONLY
300-
)
301-
302-
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/remillConfig.cmake"
303-
"${CMAKE_CURRENT_LIST_DIR}/cmake/vcpkg_helper.cmake"
304-
DESTINATION "${REMILL_INSTALL_LIB_DIR}/cmake/remill"
305-
)
306-
307-
install(DIRECTORY "${REMILL_INCLUDE_DIR}/remill/"
308-
DESTINATION "${REMILL_INSTALL_INCLUDE_DIR}/remill"
309-
)
310-
311288
#
312289
# additional targets
313290
#
@@ -317,27 +294,48 @@ add_custom_target(semantics)
317294
# tools
318295
add_subdirectory(bin)
319296

320-
install(EXPORT remillTargets
321-
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/remill")
297+
if(REMILL_ENABLE_INSTALL_TARGET)
298+
install(TARGETS remill EXPORT remillTargets)
299+
300+
install(TARGETS remill_settings ${THIRDPARTY_LIBRARY_LIST}
301+
EXPORT remillTargets
302+
)
303+
304+
# First do the basic substitutions.
305+
configure_file(
306+
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/remillConfig.cmake.in"
307+
"${CMAKE_CURRENT_BINARY_DIR}/remillConfig.cmake"
308+
@ONLY
309+
)
310+
311+
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/remillConfig.cmake"
312+
"${CMAKE_CURRENT_LIST_DIR}/cmake/vcpkg_helper.cmake"
313+
DESTINATION "${REMILL_INSTALL_LIB_DIR}/cmake/remill"
314+
)
315+
316+
install(DIRECTORY "${REMILL_INCLUDE_DIR}/remill/"
317+
DESTINATION "${REMILL_INSTALL_INCLUDE_DIR}/remill"
318+
)
319+
320+
install(EXPORT remillTargets
321+
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/remill")
322+
endif()
322323

323324
# tests
324-
message("compiler ID ${CMAKE_C_COMPILER_ID}")
325-
if ("${CMAKE_C_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_C_COMPILER_ID}" STREQUAL "AppleClang")
325+
if (REMILL_ENABLE_TESTING)
326326
# Tests require enabling exports on binaries
327327
# https://cmake.org/cmake/help/latest/variable/CMAKE_ENABLE_EXPORTS.html#variable:CMAKE_ENABLE_EXPORTS
328328
set(CMAKE_ENABLE_EXPORTS ON)
329329

330330
find_package(Threads REQUIRED)
331331
add_custom_target(test_dependencies)
332332

333-
if(NOT "${PLATFORM_NAME}" STREQUAL "windows")
334-
if("${CMAKE_HOST_SYSTEM_PROCESSOR}" STREQUAL "AMD64" OR "${CMAKE_HOST_SYSTEM_PROCESSOR}" STREQUAL "x86_64")
335-
message(STATUS "X86 tests enabled")
336-
add_subdirectory(tests/X86)
337-
endif()
333+
if(REMILL_ENABLE_TESTING_X86)
334+
message(STATUS "X86 tests enabled")
335+
add_subdirectory(tests/X86)
338336
endif()
339337

340-
if("${CMAKE_HOST_SYSTEM_PROCESSOR}" STREQUAL "aarch64" AND "${PLATFORM_NAME}" STREQUAL "linux")
338+
if(REMILL_ENABLE_TESTING_AARCH64)
341339
message(STATUS "aarch64 tests enabled")
342340
add_subdirectory(tests/AArch64)
343341
endif()

bin/lift/CMakeLists.txt

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,10 @@ add_executable(${REMILL_LIFT}
3232
target_link_libraries(${REMILL_LIFT} PRIVATE remill)
3333
target_include_directories(${REMILL_LIFT} SYSTEM PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}")
3434

35-
install(
36-
TARGETS ${REMILL_LIFT}
37-
RUNTIME DESTINATION "${REMILL_INSTALL_BIN_DIR}"
38-
LIBRARY DESTINATION "${REMILL_INSTALL_LIB_DIR}"
39-
)
35+
if(REMILL_ENABLE_INSTALL_TARGET)
36+
install(
37+
TARGETS ${REMILL_LIFT}
38+
RUNTIME DESTINATION "${REMILL_INSTALL_BIN_DIR}"
39+
LIBRARY DESTINATION "${REMILL_INSTALL_LIB_DIR}"
40+
)
41+
endif()

cmake/BCCompiler.cmake

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -187,8 +187,10 @@ function(add_runtime target_name)
187187

188188
add_custom_target("${target_name}" ALL DEPENDS "${absolute_target_path}")
189189
set_property(TARGET "${target_name}" PROPERTY LOCATION "${absolute_target_path}")
190-
191-
if(DEFINED install_destination)
192-
install(FILES "${absolute_target_path}" DESTINATION "${install_destination}")
190+
191+
if(REMILL_ENABLE_INSTALL_TARGET)
192+
if(DEFINED install_destination)
193+
install(FILES "${absolute_target_path}" DESTINATION "${install_destination}")
194+
endif()
193195
endif()
194196
endfunction()

cmake/options.cmake

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
2+
include(CMakeDependentOption)
3+
4+
set(can_enable_testing FALSE)
5+
set(can_enable_testing_x86 FALSE)
6+
set(can_enable_testing_aarch64 FALSE)
7+
8+
# tests
9+
if ("${CMAKE_C_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_C_COMPILER_ID}" STREQUAL "AppleClang")
10+
11+
if(NOT "${PLATFORM_NAME}" STREQUAL "windows")
12+
if("${CMAKE_HOST_SYSTEM_PROCESSOR}" STREQUAL "AMD64" OR "${CMAKE_HOST_SYSTEM_PROCESSOR}" STREQUAL "x86_64")
13+
set(can_enable_testing TRUE)
14+
set(can_enable_testing_x86 TRUE)
15+
endif()
16+
endif()
17+
18+
if("${CMAKE_HOST_SYSTEM_PROCESSOR}" STREQUAL "aarch64" AND "${PLATFORM_NAME}" STREQUAL "linux")
19+
message(STATUS "aarch64 tests enabled")
20+
set(can_enable_testing TRUE)
21+
set(can_enable_testing_aarch64 TRUE)
22+
endif()
23+
endif()
24+
25+
26+
set(REMILL_SOURCE_DIR "${PROJECT_SOURCE_DIR}" CACHE PATH "Root directory of remill source code")
27+
set(REMILL_INSTALL_LIB_DIR "${CMAKE_INSTALL_LIBDIR}" CACHE PATH "Directory in which remill libraries will be installed")
28+
set(REMILL_INSTALL_BIN_DIR "${CMAKE_INSTALL_BINDIR}" CACHE PATH "Directory in which remill binaries will be installed")
29+
set(REMILL_INSTALL_INCLUDE_DIR "${CMAKE_INSTALL_INCLUDEDIR}" CACHE PATH "Directory in which remill headers will be installed")
30+
set(REMILL_INSTALL_SHARE_DIR "${CMAKE_INSTALL_DATADIR}" CACHE PATH "Directory in which remill cmake files will be installed")
31+
option(REMILL_ENABLE_INSTALL_TARGET "Should Remill be installed?" TRUE)
32+
cmake_dependent_option(REMILL_ENABLE_TESTING "Build your tests" ON "can_enable_testing" OFF)
33+
cmake_dependent_option(REMILL_ENABLE_TESTING_X86 "Build your tests" ON "REMILL_ENABLE_TESTING;can_enable_testing_x86" OFF)
34+
cmake_dependent_option(REMILL_ENABLE_TESTING_AARCH64 "Build your tests" ON "REMILL_ENABLE_TESTING;can_enable_testing_aarch64" OFF)

cmake/remillConfig.cmake.in

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ endforeach()
3838
if(NOT remill_setup_vcpkg AND NOT TARGET remill)
3939
set(LLVM_MAJOR_VERSION @LLVM_MAJOR_VERSION@)
4040
set(LLVM_MINOR_VERSION @LLVM_MINOR_VERSION@)
41-
set(REMILL_LLVM_VERSION "@LLVM_MAJOR_VERSION@.@LLVM_MINOR_VERSION@")
41+
set(REMILL_LLVM_VERSION @LLVM_MAJOR_VERSION@)
4242

4343
# External libs
4444
include(CMakeFindDependencyMacro)

lib/Arch/AArch32/CMakeLists.txt

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,9 @@ target_link_libraries(remill_arch_aarch32 LINK_PUBLIC
3939
remill_settings
4040
)
4141

42-
install(
43-
TARGETS remill_arch_aarch32
44-
EXPORT remillTargets
45-
)
42+
if(REMILL_ENABLE_INSTALL_TARGET)
43+
install(
44+
TARGETS remill_arch_aarch32
45+
EXPORT remillTargets
46+
)
47+
endif()

lib/Arch/AArch32/Decode.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -564,8 +564,6 @@ static_assert(sizeof(SpecialRegsAndHints) == 4, " ");
564564
static constexpr auto kAddressSize = 32u;
565565
static constexpr auto kPCRegNum = 15u;
566566
static constexpr auto kLRRegNum = 14u;
567-
static constexpr auto kSPRegNum = 13u;
568-
static constexpr auto kSLRegNum = 10u;
569567

570568
static const char *const kIntRegName[] = {
571569
"R0", "R1", "R2", "R3", "R4", "R5", "R6", "R7",

lib/Arch/AArch64/CMakeLists.txt

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,9 @@ target_link_libraries(remill_arch_aarch64 LINK_PUBLIC
3939
remill_settings
4040
)
4141

42-
install(
43-
TARGETS remill_arch_aarch64
44-
EXPORT remillTargets
45-
)
42+
if(REMILL_ENABLE_INSTALL_TARGET)
43+
install(
44+
TARGETS remill_arch_aarch64
45+
EXPORT remillTargets
46+
)
47+
endif()

lib/Arch/CMakeLists.txt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,5 +40,7 @@ target_link_libraries(remill_arch LINK_PUBLIC
4040
remill_settings
4141
)
4242

43-
install(TARGETS remill_arch
44-
EXPORT remillTargets)
43+
if(REMILL_ENABLE_INSTALL_TARGET)
44+
install(TARGETS remill_arch
45+
EXPORT remillTargets)
46+
endif()

lib/Arch/SPARC32/CMakeLists.txt

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,9 @@ target_link_libraries(remill_arch_sparc32 LINK_PUBLIC
3939
remill_settings
4040
)
4141

42-
install(
43-
TARGETS remill_arch_sparc32
44-
EXPORT remillTargets
45-
)
42+
if(REMILL_ENABLE_INSTALL_TARGET)
43+
install(
44+
TARGETS remill_arch_sparc32
45+
EXPORT remillTargets
46+
)
47+
endif()

0 commit comments

Comments
 (0)