diff --git a/.gitignore b/.gitignore index f1319f48..bf4359db 100644 --- a/.gitignore +++ b/.gitignore @@ -26,7 +26,7 @@ cmake-build-debug cmake-build-release compile_commands.json .cache - +deps/* third_party/* build/* remill-build/* diff --git a/CMakeLists.txt b/CMakeLists.txt index ea1241f3..f6777950 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -82,7 +82,9 @@ set(REMILL_BUILD_SEMANTICS_DIR_SPARC64 "${CMAKE_CURRENT_BINARY_DIR}/lib/Arch/SPA set(REMILL_BUILD_SEMANTICS_DIR_PPC64_32ADDR "${CMAKE_CURRENT_BINARY_DIR}/lib/Arch/PPC/Runtime") set(REMILL_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/include") set(REMILL_LIB_DIR "${CMAKE_CURRENT_SOURCE_DIR}/lib") - +if (PROJECT_IS_TOP_LEVEL) + set(FETCHCONTENT_BASE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/deps" CACHE PATH "Base dir for FetchContent") +endif() include("${CMAKE_CURRENT_SOURCE_DIR}/cmake/BCCompiler.cmake") # Intel XED @@ -167,16 +169,16 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Windows" AND MSVC) else() # warnings and compiler settings - if(CMAKE_SYSTEM_NAME STREQUAL "Linux") - target_compile_options(remill_settings INTERFACE -fPIC) - endif() + set_target_properties(remill_settings PROPERTIES + INTERFACE_POSITION_INDEPENDENT_CODE ON + ) target_compile_options(remill_settings INTERFACE -Wall -Wextra -Wno-unused-parameter -Wno-c++98-compat -Wno-unreachable-code-return -Wno-nested-anon-types -Wno-extended-offsetof -Wno-variadic-macros -Wno-return-type-c-linkage -Wno-c99-extensions -Wno-ignored-attributes -Wno-unused-local-typedef - -Wno-unknown-pragmas -Wno-unknown-warning-option -fPIC + -Wno-unknown-pragmas -Wno-unknown-warning-option -fno-omit-frame-pointer -fvisibility-inlines-hidden -fno-asynchronous-unwind-tables ) diff --git a/bin/differential_tester_x86/CMakeLists.txt b/bin/differential_tester_x86/CMakeLists.txt index 23c36ece..d1aa7c37 100644 --- a/bin/differential_tester_x86/CMakeLists.txt +++ b/bin/differential_tester_x86/CMakeLists.txt @@ -29,7 +29,6 @@ target_link_libraries( ) set_property(TARGET lift-and-compare PROPERTY ENABLE_EXPORTS ON) -set_property(TARGET lift-and-compare PROPERTY POSITION_INDEPENDENT_CODE ON) enable_testing() add_test(NAME "small_diff_test" COMMAND "${Python_EXECUTABLE}" ${REMILL_SOURCE_DIR}/scripts/diff_tester_export_insns/diff_tester_export_insns/ci_runner.py --required_success_rate 1.0 --difftester_bin ${CMAKE_BINARY_DIR}/bin/differential_tester_x86/lift-and-compare --workdir ${CMAKE_BINARY_DIR} ${REMILL_SOURCE_DIR}/bin/differential_tester_x86/data/small_test/ --whitelist_file ${REMILL_SOURCE_DIR}/bin/differential_tester_x86/whitelist.json) diff --git a/cmake/BCCompiler.cmake b/cmake/BCCompiler.cmake index 2efb669c..b65ebfbf 100644 --- a/cmake/BCCompiler.cmake +++ b/cmake/BCCompiler.cmake @@ -216,7 +216,6 @@ function(add_runtime target_name) set(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES "${absolute_target_path}") add_custom_target("${target_name}" ALL DEPENDS "${absolute_target_path}") - set_property(TARGET "${target_name}" PROPERTY LOCATION "${absolute_target_path}") if(REMILL_ENABLE_INSTALL_TARGET) if(DEFINED install_destination) diff --git a/cmake/settings.cmake b/cmake/settings.cmake index aa1af957..a1481b58 100644 --- a/cmake/settings.cmake +++ b/cmake/settings.cmake @@ -21,6 +21,7 @@ macro(main) # Globally set the required C++ standard set(CMAKE_CXX_STANDARD 20) + set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) if(UNIX) diff --git a/lib/Arch/AArch32/Runtime/CMakeLists.txt b/lib/Arch/AArch32/Runtime/CMakeLists.txt index 0f493116..547d7e10 100644 --- a/lib/Arch/AArch32/Runtime/CMakeLists.txt +++ b/lib/Arch/AArch32/Runtime/CMakeLists.txt @@ -28,13 +28,6 @@ set_source_files_properties(BasicBlock.cpp PROPERTIES COMPILE_FLAGS "-O0 -g3") function(add_runtime_helper target_name little_endian) message(" > Generating runtime target: ${target_name}") - # Visual C++ requires C++14 - if(WIN32) - set(required_cpp_standard "c++14") - else() - set(required_cpp_standard "c++17") - endif() - # necessary to build code as 32-bit # on aarch64 if(CMAKE_SYSTEM_PROCESSOR MATCHES "^(aarch64.*|AARCH64.*|arm64.*|ARM64.*)" AND "${PLATFORM_NAME}" STREQUAL "linux") @@ -47,7 +40,7 @@ function(add_runtime_helper target_name little_endian) SOURCES ${ARMRUNTIME_SOURCEFILES} ADDRESS_SIZE 32 DEFINITIONS "LITTLE_ENDIAN=${little_endian}" - BCFLAGS "${arch_flags}" "-std=${required_cpp_standard}" + BCFLAGS "${arch_flags}" INCLUDEDIRECTORIES "${REMILL_INCLUDE_DIR}" "${REMILL_SOURCE_DIR}" INSTALLDESTINATION "${REMILL_INSTALL_SEMANTICS_DIR}" ARCH arm diff --git a/lib/Arch/AArch64/CMakeLists.txt b/lib/Arch/AArch64/CMakeLists.txt index 25fd49d7..a83767df 100644 --- a/lib/Arch/AArch64/CMakeLists.txt +++ b/lib/Arch/AArch64/CMakeLists.txt @@ -33,8 +33,6 @@ add_library(remill_arch_aarch64 STATIC add_subdirectory(Runtime) -set_property(TARGET remill_arch_aarch64 PROPERTY POSITION_INDEPENDENT_CODE ON) - target_link_libraries(remill_arch_aarch64 LINK_PUBLIC remill_settings ) diff --git a/lib/Arch/AArch64/Runtime/CMakeLists.txt b/lib/Arch/AArch64/Runtime/CMakeLists.txt index a4185da9..db0a0ba6 100644 --- a/lib/Arch/AArch64/Runtime/CMakeLists.txt +++ b/lib/Arch/AArch64/Runtime/CMakeLists.txt @@ -28,18 +28,10 @@ set_source_files_properties(BasicBlock.cpp PROPERTIES COMPILE_FLAGS "-O0 -g3") function(add_runtime_helper target_name address_bit_size little_endian) message(" > Generating runtime target: ${target_name}") - # Visual C++ requires C++14 - if(WIN32) - set(required_cpp_standard "c++14") - else() - set(required_cpp_standard "c++17") - endif() - add_runtime(${target_name} SOURCES ${AARCH64RUNTIME_SOURCEFILES} ADDRESS_SIZE ${address_bit_size} DEFINITIONS "LITTLE_ENDIAN=${little_endian}" - BCFLAGS "-std=${required_cpp_standard}" INCLUDEDIRECTORIES "${REMILL_INCLUDE_DIR}" "${REMILL_SOURCE_DIR}" INSTALLDESTINATION "${REMILL_INSTALL_SEMANTICS_DIR}" ARCH aarch64 diff --git a/lib/Arch/CMakeLists.txt b/lib/Arch/CMakeLists.txt index 3f631087..16c7a0c2 100644 --- a/lib/Arch/CMakeLists.txt +++ b/lib/Arch/CMakeLists.txt @@ -34,8 +34,6 @@ add_subdirectory(SPARC64) add_subdirectory(Sleigh) add_subdirectory(X86) -set_property(TARGET remill_arch PROPERTY POSITION_INDEPENDENT_CODE ON) - target_link_libraries(remill_arch LINK_PUBLIC remill_arch_aarch64 remill_arch_sleigh diff --git a/lib/Arch/PPC/Runtime/CMakeLists.txt b/lib/Arch/PPC/Runtime/CMakeLists.txt index e2ad70db..fc25cefe 100644 --- a/lib/Arch/PPC/Runtime/CMakeLists.txt +++ b/lib/Arch/PPC/Runtime/CMakeLists.txt @@ -23,18 +23,11 @@ set(PPCRUNTIME_SOURCEFILES set_source_files_properties(BasicBlock.cpp PROPERTIES COMPILE_FLAGS "-O3 -g0") -# Visual C++ requires C++14 -if(WIN32) - set(required_cpp_standard "c++14") -else() - set(required_cpp_standard "c++17") -endif() add_runtime(ppc SOURCES ${PPCRUNTIME_SOURCEFILES} ADDRESS_SIZE 32 DEFINITIONS "LITTLE_ENDIAN=${little_endian}" - BCFLAGS "-std=${required_cpp_standard}" INCLUDEDIRECTORIES "${REMILL_INCLUDE_DIR}" "${REMILL_SOURCE_DIR}" INSTALLDESTINATION "${REMILL_INSTALL_SEMANTICS_DIR}" ARCH ppc diff --git a/lib/Arch/SPARC32/CMakeLists.txt b/lib/Arch/SPARC32/CMakeLists.txt index 6d048ecb..809d66bc 100644 --- a/lib/Arch/SPARC32/CMakeLists.txt +++ b/lib/Arch/SPARC32/CMakeLists.txt @@ -33,8 +33,6 @@ if(${REMILL_BUILD_SPARC32_RUNTIME}) add_subdirectory(Runtime) endif() -set_property(TARGET remill_arch_sparc32 PROPERTY POSITION_INDEPENDENT_CODE ON) - target_link_libraries(remill_arch_sparc32 LINK_PUBLIC remill_settings ) diff --git a/lib/Arch/SPARC32/Runtime/CMakeLists.txt b/lib/Arch/SPARC32/Runtime/CMakeLists.txt index bc32bd43..7e24a91b 100644 --- a/lib/Arch/SPARC32/Runtime/CMakeLists.txt +++ b/lib/Arch/SPARC32/Runtime/CMakeLists.txt @@ -31,12 +31,6 @@ endif(REMILL_BARRIER_AS_NOP) function(add_runtime_helper target_name little_endian) message(" > Generating runtime target: ${target_name}") - # Visual C++ requires C++14 - if(WIN32) - set(required_cpp_standard "c++14") - else() - set(required_cpp_standard "c++17") - endif() # necessary to build code as 32-bit # on aarch64 @@ -50,7 +44,7 @@ function(add_runtime_helper target_name little_endian) SOURCES ${SPARC32RUNTIME_SOURCEFILES} ADDRESS_SIZE 32 DEFINITIONS "LITTLE_ENDIAN=${little_endian}" "REMILL_DISABLE_INT128=1" - BCFLAGS "${arch_flags}" "-std=${required_cpp_standard}" "${EXTRA_BC_FLAGS}" + BCFLAGS "${arch_flags}" "${EXTRA_BC_FLAGS}" INCLUDEDIRECTORIES "${REMILL_INCLUDE_DIR}" "${REMILL_SOURCE_DIR}" INSTALLDESTINATION "${REMILL_INSTALL_SEMANTICS_DIR}" ARCH sparc diff --git a/lib/Arch/SPARC64/CMakeLists.txt b/lib/Arch/SPARC64/CMakeLists.txt index 0aab9349..ec30d250 100644 --- a/lib/Arch/SPARC64/CMakeLists.txt +++ b/lib/Arch/SPARC64/CMakeLists.txt @@ -31,8 +31,6 @@ add_library(remill_arch_sparc64 STATIC Extract.cpp ) -set_property(TARGET remill_arch_sparc64 PROPERTY POSITION_INDEPENDENT_CODE ON) - target_link_libraries(remill_arch_sparc64 LINK_PUBLIC remill_settings ) diff --git a/lib/Arch/SPARC64/Runtime/CMakeLists.txt b/lib/Arch/SPARC64/Runtime/CMakeLists.txt index b0937155..9fa64ecf 100644 --- a/lib/Arch/SPARC64/Runtime/CMakeLists.txt +++ b/lib/Arch/SPARC64/Runtime/CMakeLists.txt @@ -32,18 +32,11 @@ endif(REMILL_BARRIER_AS_NOP) function(add_runtime_helper target_name little_endian) message(" > Generating runtime target: ${target_name}") - # Visual C++ requires C++14 - if(WIN32) - set(required_cpp_standard "c++14") - else() - set(required_cpp_standard "c++17") - endif() - add_runtime(${target_name} SOURCES ${SPARC64RUNTIME_SOURCEFILES} ADDRESS_SIZE 64 DEFINITIONS "LITTLE_ENDIAN=${little_endian}" - BCFLAGS "-std=${required_cpp_standard}" "${EXTRA_BC_FLAGS}" + BCFLAGS "${EXTRA_BC_FLAGS}" INCLUDEDIRECTORIES "${REMILL_INCLUDE_DIR}" "${REMILL_SOURCE_DIR}" INSTALLDESTINATION "${REMILL_INSTALL_SEMANTICS_DIR}" ARCH sparc64 diff --git a/lib/Arch/Sleigh/CMakeLists.txt b/lib/Arch/Sleigh/CMakeLists.txt index 8e480ede..58b98dc0 100644 --- a/lib/Arch/Sleigh/CMakeLists.txt +++ b/lib/Arch/Sleigh/CMakeLists.txt @@ -65,8 +65,6 @@ add_library(remill_arch_sleigh STATIC add_dependencies(remill_arch_sleigh sleigh_custom_specs) -set_property(TARGET remill_arch_sleigh PROPERTY POSITION_INDEPENDENT_CODE ON) - target_link_libraries(remill_arch_sleigh LINK_PUBLIC remill_settings ) diff --git a/lib/Arch/X86/CMakeLists.txt b/lib/Arch/X86/CMakeLists.txt index b53fd112..cf85532f 100644 --- a/lib/Arch/X86/CMakeLists.txt +++ b/lib/Arch/X86/CMakeLists.txt @@ -32,8 +32,6 @@ add_library(remill_arch_x86 STATIC add_subdirectory(Runtime) -set_property(TARGET remill_arch_x86 PROPERTY POSITION_INDEPENDENT_CODE ON) - target_link_libraries(remill_arch_x86 LINK_PUBLIC remill_settings ) diff --git a/lib/Arch/X86/Runtime/CMakeLists.txt b/lib/Arch/X86/Runtime/CMakeLists.txt index ad91af8a..d0f9728d 100644 --- a/lib/Arch/X86/Runtime/CMakeLists.txt +++ b/lib/Arch/X86/Runtime/CMakeLists.txt @@ -28,13 +28,6 @@ set_source_files_properties(BasicBlock.cpp PROPERTIES COMPILE_FLAGS "-O0 -g3") function(add_runtime_helper target_name address_bit_size enable_avx enable_avx512) message(" > Generating runtime target: ${target_name}") - # Visual C++ requires C++14 - if(WIN32) - set(required_cpp_standard "c++14") - else() - set(required_cpp_standard "c++11") - endif() - if (address_bit_size EQUAL 32) set(x86_arch "i386") else() @@ -45,7 +38,6 @@ function(add_runtime_helper target_name address_bit_size enable_avx enable_avx51 SOURCES ${X86RUNTIME_SOURCEFILES} ADDRESS_SIZE ${address_bit_size} DEFINITIONS "HAS_FEATURE_AVX=${enable_avx}" "HAS_FEATURE_AVX512=${enable_avx512}" - BCFLAGS "-std=${required_cpp_standard}" INCLUDEDIRECTORIES "${REMILL_INCLUDE_DIR}" "${REMILL_SOURCE_DIR}" INSTALLDESTINATION "${REMILL_INSTALL_SEMANTICS_DIR}" ARCH ${x86_arch} diff --git a/lib/BC/CMakeLists.txt b/lib/BC/CMakeLists.txt index cf49b961..1bacf011 100644 --- a/lib/BC/CMakeLists.txt +++ b/lib/BC/CMakeLists.txt @@ -37,8 +37,6 @@ add_library(remill_bc STATIC target_include_directories(remill_bc AFTER PRIVATE "${REMILL_SOURCE_DIR}") -set_property(TARGET remill_bc PROPERTY POSITION_INDEPENDENT_CODE ON) - target_link_libraries(remill_bc LINK_PRIVATE remill_settings ) diff --git a/lib/OS/CMakeLists.txt b/lib/OS/CMakeLists.txt index ffb2554c..dd2772cd 100644 --- a/lib/OS/CMakeLists.txt +++ b/lib/OS/CMakeLists.txt @@ -21,8 +21,6 @@ add_library(remill_os STATIC OS.cpp ) -set_property(TARGET remill_os PROPERTY POSITION_INDEPENDENT_CODE ON) - target_link_libraries(remill_os LINK_PRIVATE remill_settings ) diff --git a/scripts/build.sh b/scripts/build.sh index 1ffc2b77..ba4c77b0 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -229,7 +229,7 @@ function Configure set -x cmake \ -DCMAKE_INSTALL_PREFIX="${INSTALL_DIR}" \ - -DCMAKE_VERBOSE_MAKEFILE=True \ + -GNinja \ -DCMAKE_TOOLCHAIN_FILE="${DOWNLOAD_DIR}/${LIBRARY_VERSION}/scripts/buildsystems/vcpkg.cmake" \ -DVCPKG_TARGET_TRIPLET="${VCPKG_TARGET_TRIPLET}" \ ${BUILD_FLAGS} \ diff --git a/test_runner_lib/CMakeLists.txt b/test_runner_lib/CMakeLists.txt index d6085b96..e844c89c 100644 --- a/test_runner_lib/CMakeLists.txt +++ b/test_runner_lib/CMakeLists.txt @@ -29,6 +29,4 @@ target_link_libraries( glog::glog ) -target_include_directories(test-runner PUBLIC "${TEST_RUNNER_INCLUDE_DIR}") - -set_property(TARGET test-runner PROPERTY POSITION_INDEPENDENT_CODE ON) +target_include_directories(test-runner PUBLIC "${TEST_RUNNER_INCLUDE_DIR}") \ No newline at end of file diff --git a/tests/AArch64/CMakeLists.txt b/tests/AArch64/CMakeLists.txt index 54280a5a..aeae7c41 100644 --- a/tests/AArch64/CMakeLists.txt +++ b/tests/AArch64/CMakeLists.txt @@ -25,8 +25,7 @@ add_executable(lift-aarch64-tests ) set_target_properties(lift-aarch64-tests PROPERTIES - POSITION_INDEPENDENT_CODE ON - COMPILE_FLAGS "-fPIC -pie" + COMPILE_FLAGS "-pie" ) target_compile_options(lift-aarch64-tests @@ -52,8 +51,7 @@ add_executable(run-aarch64-tests ) set_target_properties(run-aarch64-tests PROPERTIES - POSITION_INDEPENDENT_CODE ON - COMPILE_FLAGS "-fPIC -pie" + COMPILE_FLAGS "-pie" OBJECT_DEPENDS "${AARCH64_TEST_FILES}" ) diff --git a/tests/PPC/CMakeLists.txt b/tests/PPC/CMakeLists.txt index 013f6d8c..fbb1628c 100644 --- a/tests/PPC/CMakeLists.txt +++ b/tests/PPC/CMakeLists.txt @@ -32,5 +32,4 @@ target_link_libraries( glog::glog ) -set_property(TARGET run-ppc-tests PROPERTY ENABLE_EXPORTS ON) -set_property(TARGET run-ppc-tests PROPERTY POSITION_INDEPENDENT_CODE ON) +set_property(TARGET run-ppc-tests PROPERTY ENABLE_EXPORTS ON) \ No newline at end of file diff --git a/tests/Thumb/CMakeLists.txt b/tests/Thumb/CMakeLists.txt index 91120a0e..dba269bc 100644 --- a/tests/Thumb/CMakeLists.txt +++ b/tests/Thumb/CMakeLists.txt @@ -32,5 +32,4 @@ target_link_libraries( glog::glog ) -set_property(TARGET run-thumb-tests PROPERTY ENABLE_EXPORTS ON) -set_property(TARGET run-thumb-tests PROPERTY POSITION_INDEPENDENT_CODE ON) +set_property(TARGET run-thumb-tests PROPERTY ENABLE_EXPORTS ON) \ No newline at end of file diff --git a/tests/X86/CMakeLists.txt b/tests/X86/CMakeLists.txt index dd298ebe..198bdc67 100644 --- a/tests/X86/CMakeLists.txt +++ b/tests/X86/CMakeLists.txt @@ -13,7 +13,7 @@ # limitations under the License. project(x86_tests ASM) -cmake_minimum_required(VERSION 3.2) +cmake_minimum_required(VERSION 3.21) function(COMPILE_X86_TESTS name address_size has_avx has_avx512) set(X86_TEST_FLAGS