From 4cf4bc6a724f7818ee2ff83b73d57b332710d826 Mon Sep 17 00:00:00 2001 From: JornVernee Date: Tue, 23 Apr 2019 23:41:03 +0200 Subject: [PATCH 1/7] Add cmake option to disable architectures by default --- CMakeLists.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e57996cc66..7f63598493 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -27,6 +27,7 @@ option(CAPSTONE_BUILD_DIET "Build diet library" OFF) option(CAPSTONE_BUILD_TESTS "Build tests" ON) option(CAPSTONE_BUILD_CSTOOL "Build cstool" ON) option(CAPSTONE_USE_DEFAULT_ALLOC "Use default memory allocation functions" ON) +option(CAPSTONE_ARCHITECTURE_DEFAULT "Whether a particular architecture is enabled by default" ON) set(SUPPORTED_ARCHITECTURES ARM ARM64 M68K MIPS PPC SPARC SYSZ XCORE X86 TMS320C64X M680X EVM MOS65XX) set(SUPPORTED_ARCHITECTURE_LABELS ARM ARM64 M68K MIPS PowerPC Sparc SystemZ XCore x86 TMS320C64x M680x EVM MOS65XX) @@ -37,7 +38,7 @@ math(EXPR count "${count}-1") foreach(i RANGE ${count}) list(GET SUPPORTED_ARCHITECTURES ${i} supported_architecture) list(GET SUPPORTED_ARCHITECTURE_LABELS ${i} supported_architecture_label) - option("CAPSTONE_${supported_architecture}_SUPPORT" "${supported_architecture_label} support" ON) + option("CAPSTONE_${supported_architecture}_SUPPORT" "${supported_architecture_label} support" ${CAPSTONE_ARCHITECTURE_DEFAULT}) endforeach(i) # propagate architecture support variables to preprocessor From 62aa468679b8396a42c00b54d24777d5beff1f3b Mon Sep 17 00:00:00 2001 From: JornVernee Date: Tue, 23 Apr 2019 23:41:03 +0200 Subject: [PATCH 2/7] Add cmake option to disable architectures by default --- CMakeLists.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ac18440654..3f19ca14a8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -27,6 +27,7 @@ option(CAPSTONE_BUILD_DIET "Build diet library" OFF) option(CAPSTONE_BUILD_TESTS "Build tests" ON) option(CAPSTONE_BUILD_CSTOOL "Build cstool" ON) option(CAPSTONE_USE_DEFAULT_ALLOC "Use default memory allocation functions" ON) +option(CAPSTONE_ARCHITECTURE_DEFAULT "Whether a particular architecture is enabled by default" ON) set(SUPPORTED_ARCHITECTURES ARM ARM64 M68K MIPS PPC SPARC SYSZ XCORE X86 TMS320C64X M680X EVM MOS65XX) set(SUPPORTED_ARCHITECTURE_LABELS ARM ARM64 M68K MIPS PowerPC Sparc SystemZ XCore x86 TMS320C64x M680x EVM MOS65XX) @@ -37,7 +38,7 @@ math(EXPR count "${count}-1") foreach(i RANGE ${count}) list(GET SUPPORTED_ARCHITECTURES ${i} supported_architecture) list(GET SUPPORTED_ARCHITECTURE_LABELS ${i} supported_architecture_label) - option("CAPSTONE_${supported_architecture}_SUPPORT" "${supported_architecture_label} support" ON) + option("CAPSTONE_${supported_architecture}_SUPPORT" "${supported_architecture_label} support" ${CAPSTONE_ARCHITECTURE_DEFAULT}) endforeach(i) # propagate architecture support variables to preprocessor From 21be02cc0e5d8f1bce992e1e18fb015fc659493e Mon Sep 17 00:00:00 2001 From: JornVernee Date: Sun, 28 Apr 2019 18:02:12 +0200 Subject: [PATCH 3/7] Remove CAPSTONE_X86_ONLY cmake variable, and update build scripts to use the CAPSTONE_ARCHITECUTRE_DEFAULT option, which can be used with any architecture. --- CMakeLists.txt | 27 +++++++++++++-------------- cmake-x86.sh | 4 ++-- nmake-x86.bat | 4 ++-- 3 files changed, 17 insertions(+), 18 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3f19ca14a8..b029cd1d7d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -27,7 +27,7 @@ option(CAPSTONE_BUILD_DIET "Build diet library" OFF) option(CAPSTONE_BUILD_TESTS "Build tests" ON) option(CAPSTONE_BUILD_CSTOOL "Build cstool" ON) option(CAPSTONE_USE_DEFAULT_ALLOC "Use default memory allocation functions" ON) -option(CAPSTONE_ARCHITECTURE_DEFAULT "Whether a particular architecture is enabled by default" ON) +option(CAPSTONE_ARCHITECTURE_DEFAULT "Whether architectures are enabled by default" ON) set(SUPPORTED_ARCHITECTURES ARM ARM64 M68K MIPS PPC SPARC SYSZ XCORE X86 TMS320C64X M680X EVM MOS65XX) set(SUPPORTED_ARCHITECTURE_LABELS ARM ARM64 M68K MIPS PowerPC Sparc SystemZ XCore x86 TMS320C64x M680x EVM MOS65XX) @@ -50,7 +50,6 @@ foreach(supported_architecture ${SUPPORTED_ARCHITECTURES}) endif() endforeach(supported_architecture) -option(CAPSTONE_X86_ONLY "Enable just x86, and disable building every other architectures" OFF) option(CAPSTONE_X86_REDUCE "x86 with reduce instruction sets to minimize library" OFF) option(CAPSTONE_X86_ATT_DISABLE "Disable x86 AT&T syntax" OFF) option(CAPSTONE_OSXKERNEL_SUPPORT "Support to embed Capstone into OS X Kernel extensions" OFF) @@ -121,7 +120,7 @@ set(HEADERS_COMMON set(TEST_SOURCES test_basic.c test_detail.c test_skipdata.c test_iter.c) ## architecture support -if (NOT CAPSTONE_X86_ONLY AND CAPSTONE_ARM_SUPPORT) +if (CAPSTONE_ARM_SUPPORT) add_definitions(-DCAPSTONE_HAS_ARM) set(SOURCES_ARM arch/ARM/ARMDisassembler.c @@ -158,7 +157,7 @@ if (NOT CAPSTONE_X86_ONLY AND CAPSTONE_ARM_SUPPORT) set(TEST_SOURCES ${TEST_SOURCES} test_arm.c) endif () -if (NOT CAPSTONE_X86_ONLY AND CAPSTONE_ARM64_SUPPORT) +if (CAPSTONE_ARM64_SUPPORT) add_definitions(-DCAPSTONE_HAS_ARM64) set(SOURCES_ARM64 arch/AArch64/AArch64BaseInfo.c @@ -195,7 +194,7 @@ if (NOT CAPSTONE_X86_ONLY AND CAPSTONE_ARM64_SUPPORT) set(TEST_SOURCES ${TEST_SOURCES} test_arm64.c) endif () -if (NOT CAPSTONE_X86_ONLY AND CAPSTONE_MIPS_SUPPORT) +if (CAPSTONE_MIPS_SUPPORT) add_definitions(-DCAPSTONE_HAS_MIPS) set(SOURCES_MIPS arch/Mips/MipsDisassembler.c @@ -227,7 +226,7 @@ if (NOT CAPSTONE_X86_ONLY AND CAPSTONE_MIPS_SUPPORT) set(TEST_SOURCES ${TEST_SOURCES} test_mips.c) endif () -if (NOT CAPSTONE_X86_ONLY AND CAPSTONE_PPC_SUPPORT) +if (CAPSTONE_PPC_SUPPORT) add_definitions(-DCAPSTONE_HAS_POWERPC) set(SOURCES_PPC arch/PowerPC/PPCDisassembler.c @@ -314,7 +313,7 @@ if (CAPSTONE_X86_SUPPORT) set(TEST_SOURCES ${TEST_SOURCES} test_x86.c test_customized_mnem.c) endif () -if (NOT CAPSTONE_X86_ONLY AND CAPSTONE_SPARC_SUPPORT) +if (CAPSTONE_SPARC_SUPPORT) add_definitions(-DCAPSTONE_HAS_SPARC) set(SOURCES_SPARC arch/Sparc/SparcDisassembler.c @@ -337,7 +336,7 @@ if (NOT CAPSTONE_X86_ONLY AND CAPSTONE_SPARC_SUPPORT) set(TEST_SOURCES ${TEST_SOURCES} test_sparc.c) endif () -if (NOT CAPSTONE_X86_ONLY AND CAPSTONE_SYSZ_SUPPORT) +if (CAPSTONE_SYSZ_SUPPORT) add_definitions(-DCAPSTONE_HAS_SYSZ) set(SOURCES_SYSZ arch/SystemZ/SystemZDisassembler.c @@ -362,7 +361,7 @@ if (NOT CAPSTONE_X86_ONLY AND CAPSTONE_SYSZ_SUPPORT) set(TEST_SOURCES ${TEST_SOURCES} test_systemz.c) endif () -if (NOT CAPSTONE_X86_ONLY AND CAPSTONE_XCORE_SUPPORT) +if (CAPSTONE_XCORE_SUPPORT) add_definitions(-DCAPSTONE_HAS_XCORE) set(SOURCES_XCORE arch/XCore/XCoreDisassembler.c @@ -383,7 +382,7 @@ if (NOT CAPSTONE_X86_ONLY AND CAPSTONE_XCORE_SUPPORT) set(TEST_SOURCES ${TEST_SOURCES} test_xcore.c) endif () -if (NOT CAPSTONE_X86_ONLY AND CAPSTONE_M68K_SUPPORT) +if (CAPSTONE_M68K_SUPPORT) add_definitions(-DCAPSTONE_HAS_M68K) set(SOURCES_M68K arch/M68K/M68KDisassembler.c @@ -396,7 +395,7 @@ if (NOT CAPSTONE_X86_ONLY AND CAPSTONE_M68K_SUPPORT) set(TEST_SOURCES ${TEST_SOURCES} test_m68k.c) endif () -if (NOT CAPSTONE_X86_ONLY AND CAPSTONE_TMS320C64X_SUPPORT) +if (CAPSTONE_TMS320C64X_SUPPORT) add_definitions(-DCAPSTONE_HAS_TMS320C64X) set(SOURCES_TMS320C64X arch/TMS320C64x/TMS320C64xDisassembler.c @@ -416,7 +415,7 @@ if (NOT CAPSTONE_X86_ONLY AND CAPSTONE_TMS320C64X_SUPPORT) set(TEST_SOURCES ${TEST_SOURCES} test_tms320c64x.c) endif () -if (NOT CAPSTONE_X86_ONLY AND CAPSTONE_M680X_SUPPORT) +if (CAPSTONE_M680X_SUPPORT) add_definitions(-DCAPSTONE_HAS_M680X) set(SOURCES_M680X arch/M680X/M680XDisassembler.c @@ -431,7 +430,7 @@ if (NOT CAPSTONE_X86_ONLY AND CAPSTONE_M680X_SUPPORT) set(TEST_SOURCES ${TEST_SOURCES} test_m680x.c) endif () -if (NOT CAPSTONE_X86_ONLY AND CAPSTONE_EVM_SUPPORT) +if (CAPSTONE_EVM_SUPPORT) add_definitions(-DCAPSTONE_HAS_EVM) set(SOURCES_EVM arch/EVM/EVMDisassembler.c @@ -448,7 +447,7 @@ if (NOT CAPSTONE_X86_ONLY AND CAPSTONE_EVM_SUPPORT) set(TEST_SOURCES ${TEST_SOURCES} test_evm.c) endif () -if (NOT CAPSTONE_X86_ONLY AND CAPSTONE_MOS65XX_SUPPORT) +if (CAPSTONE_MOS65XX_SUPPORT) add_definitions(-DCAPSTONE_HAS_MOS65XX) set(SOURCES_MOS65XX arch/MOS65XX/MOS65XXModule.c diff --git a/cmake-x86.sh b/cmake-x86.sh index a5ec1f8713..e893291099 100755 --- a/cmake-x86.sh +++ b/cmake-x86.sh @@ -3,8 +3,8 @@ # By Nguyen Anh Quynh, 2019 # Uncomment below line to compile in Diet mode -# cmake -DCMAKE_BUILD_TYPE=Release -DCAPSTONE_BUILD_DIET=ON -DCAPSTONE_X86_ONLY=1 .. +# cmake -DCMAKE_BUILD_TYPE=Release -DCAPSTONE_BUILD_DIET=ON -DCAPSTONE_ARCHITECTURE_DEFAULT=OFF -DCAPSTONE_X86_SUPPORT=ON .. -cmake -DCMAKE_BUILD_TYPE=Release -DCAPSTONE_X86_ONLY=1 .. +cmake -DCMAKE_BUILD_TYPE=Release -DCAPSTONE_ARCHITECTURE_DEFAULT=OFF -DCAPSTONE_X86_SUPPORT=ON .. make -j8 diff --git a/nmake-x86.bat b/nmake-x86.bat index 6a32fcd707..c5d4d78b98 100644 --- a/nmake-x86.bat +++ b/nmake-x86.bat @@ -3,8 +3,8 @@ :: By Nguyen Anh Quynh, 2017 :: Uncomment below line to compile in Diet mode -:: cmake -DCMAKE_BUILD_TYPE=Release -DCAPSTONE_BUILD_DIET=ON -DCAPSTONE_X86_ONLY=1 -DCAPSTONE_BUILD_STATIC_RUNTIME=ON -G "NMake Makefiles" .. +:: cmake -DCMAKE_BUILD_TYPE=Release -DCAPSTONE_BUILD_DIET=ON -DCAPSTONE_ARCHITECTURE_DEFAULT=OFF -DCAPSTONE_X86_SUPPORT=ON -DCAPSTONE_BUILD_STATIC_RUNTIME=ON -G "NMake Makefiles" .. -cmake -DCMAKE_BUILD_TYPE=Release -DCAPSTONE_X86_ONLY=1 -DCAPSTONE_BUILD_STATIC_RUNTIME=ON -G "NMake Makefiles" .. +cmake -DCMAKE_BUILD_TYPE=Release -DCAPSTONE_ARCHITECTURE_DEFAULT=OFF -DCAPSTONE_X86_SUPPORT=ON -DCAPSTONE_BUILD_STATIC_RUNTIME=ON -G "NMake Makefiles" .. nmake From d4a85fb6d69c9b4e5d66b24846f73caa49d2eb7e Mon Sep 17 00:00:00 2001 From: JornVernee Date: Sun, 28 Apr 2019 19:23:23 +0200 Subject: [PATCH 4/7] Updated cmake and nmake files to replace cmake-x86 and nmake-x86 --- cmake-x86.sh | 10 ---------- cmake.sh | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++ nmake-x86.bat | 10 ---------- nmake.bat | 22 +++++++++++++++++++-- 4 files changed, 75 insertions(+), 22 deletions(-) delete mode 100755 cmake-x86.sh create mode 100644 cmake.sh delete mode 100644 nmake-x86.bat diff --git a/cmake-x86.sh b/cmake-x86.sh deleted file mode 100755 index e893291099..0000000000 --- a/cmake-x86.sh +++ /dev/null @@ -1,10 +0,0 @@ -# Capstone disassembler engine (www.capstone-engine.org) -# Build Capstone libs for X86 only (libcapstone.so & libcapstone.a) on *nix with CMake & make -# By Nguyen Anh Quynh, 2019 - -# Uncomment below line to compile in Diet mode -# cmake -DCMAKE_BUILD_TYPE=Release -DCAPSTONE_BUILD_DIET=ON -DCAPSTONE_ARCHITECTURE_DEFAULT=OFF -DCAPSTONE_X86_SUPPORT=ON .. - -cmake -DCMAKE_BUILD_TYPE=Release -DCAPSTONE_ARCHITECTURE_DEFAULT=OFF -DCAPSTONE_X86_SUPPORT=ON .. - -make -j8 diff --git a/cmake.sh b/cmake.sh new file mode 100644 index 0000000000..d847258a3e --- /dev/null +++ b/cmake.sh @@ -0,0 +1,55 @@ +# Capstone disassembler engine (www.capstone-engine.org) +# Build Capstone libs for specified architecture, or all if none is specified (libcapstone.so & libcapstone.a) on *nix with CMake & make +# By Nguyen Anh Quynh, Jorn Vernee, 2019 + +FLAGS="-DCMAKE_BUILD_TYPE=Release" +# Uncomment below line to compile in Diet mode +# FLAGS+=" -DCAPSTONE_BUILD_DIET=ON" + +case $1 in + ARM) + FLAGS+=" -DCAPSTONE_ARCHITECTURE_DEFAULT=OFF -DCAPSTONE_ARM_SUPPORT=ON" + ;; + ARM64) + FLAGS+=" -DCAPSTONE_ARCHITECTURE_DEFAULT=OFF -DCAPSTONE_ARM64_SUPPORT=ON" + ;; + M68K) + FLAGS+=" -DCAPSTONE_ARCHITECTURE_DEFAULT=OFF -DCAPSTONE_M68K_SUPPORT=ON" + ;; + MIPS) + FLAGS+=" -DCAPSTONE_ARCHITECTURE_DEFAULT=OFF -DCAPSTONE_MIPS_SUPPORT=ON" + ;; + PowerPC) + FLAGS+=" -DCAPSTONE_ARCHITECTURE_DEFAULT=OFF -DCAPSTONE_PPC_SUPPORT=ON" + ;; + Sparc) + FLAGS+=" -DCAPSTONE_ARCHITECTURE_DEFAULT=OFF -DCAPSTONE_SPARC_SUPPORT=ON" + ;; + SystemZ) + FLAGS+=" -DCAPSTONE_ARCHITECTURE_DEFAULT=OFF -DCAPSTONE_SYSZ_SUPPORT=ON" + ;; + XCore) + FLAGS+=" -DCAPSTONE_ARCHITECTURE_DEFAULT=OFF -DCAPSTONE_XCORE_SUPPORT=ON" + ;; + x86) + FLAGS+=" -DCAPSTONE_ARCHITECTURE_DEFAULT=OFF -DCAPSTONE_X86_SUPPORT=ON" + ;; + TMS320C64x) + FLAGS+=" -DCAPSTONE_ARCHITECTURE_DEFAULT=OFF -DCAPSTONE_TMS320C64X_SUPPORT=ON" + ;; + M680x) + FLAGS+=" -DCAPSTONE_ARCHITECTURE_DEFAULT=OFF -DCAPSTONE_M680X_SUPPORT=ON" + ;; + EVM) + FLAGS+=" -DCAPSTONE_ARCHITECTURE_DEFAULT=OFF -DCAPSTONE_EVM_SUPPORT=ON" + ;; + MOS65XX) + FLAGS+=" -DCAPSTONE_ARCHITECTURE_DEFAULT=OFF -DCAPSTONE_MOS65XX_SUPPORT=ON" + ;; + *) + ;; +esac + +cmake $FLAGS .. + +make -j8 diff --git a/nmake-x86.bat b/nmake-x86.bat deleted file mode 100644 index c5d4d78b98..0000000000 --- a/nmake-x86.bat +++ /dev/null @@ -1,10 +0,0 @@ -:: Capstone disassembler engine (www.capstone-engine.org) -:: Build Capstone libs for X86 only (capstone.dll & capstone.lib) on Windows with CMake & Nmake -:: By Nguyen Anh Quynh, 2017 - -:: Uncomment below line to compile in Diet mode -:: cmake -DCMAKE_BUILD_TYPE=Release -DCAPSTONE_BUILD_DIET=ON -DCAPSTONE_ARCHITECTURE_DEFAULT=OFF -DCAPSTONE_X86_SUPPORT=ON -DCAPSTONE_BUILD_STATIC_RUNTIME=ON -G "NMake Makefiles" .. - -cmake -DCMAKE_BUILD_TYPE=Release -DCAPSTONE_ARCHITECTURE_DEFAULT=OFF -DCAPSTONE_X86_SUPPORT=ON -DCAPSTONE_BUILD_STATIC_RUNTIME=ON -G "NMake Makefiles" .. - -nmake diff --git a/nmake.bat b/nmake.bat index 2068eb68d6..bd0958d9b2 100644 --- a/nmake.bat +++ b/nmake.bat @@ -1,7 +1,25 @@ :: Capstone disassembler engine (www.capstone-engine.org) :: Build Capstone libs (capstone.dll & capstone.lib) on Windows with CMake & Nmake -:: By Nguyen Anh Quynh, 2017 +:: By Nguyen Anh Quynh, Jorn Vernee, 2017, 2019 -cmake -DCMAKE_BUILD_TYPE=Release -DCAPSTONE_BUILD_STATIC_RUNTIME=ON -G "NMake Makefiles" .. +@echo off + +set flags="-DCMAKE_BUILD_TYPE=Release -DCAPSTONE_BUILD_STATIC_RUNTIME=ON" + +if "%1"=="ARM" set flags=%flags% and " -DCAPSTONE_ARCHITECTURE_DEFAULT=OFF -DCAPSTONE_ARM_SUPPORT=ON" +if "%1"=="ARM64" set flags=%flags% and " -DCAPSTONE_ARCHITECTURE_DEFAULT=OFF -DCAPSTONE_ARM64_SUPPORT=ON" +if "%1"=="M68K" set flags=%flags% and " -DCAPSTONE_ARCHITECTURE_DEFAULT=OFF -DCAPSTONE_M68K_SUPPORT=ON" +if "%1"=="MIPS" set flags=%flags% and " -DCAPSTONE_ARCHITECTURE_DEFAULT=OFF -DCAPSTONE_MIPS_SUPPORT=ON" +if "%1"=="PowerPC" set flags=%flags% and " -DCAPSTONE_ARCHITECTURE_DEFAULT=OFF -DCAPSTONE_PPC_SUPPORT=ON" +if "%1"=="Sparc" set flags=%flags% and " -DCAPSTONE_ARCHITECTURE_DEFAULT=OFF -DCAPSTONE_SPARC_SUPPORT=ON" +if "%1"=="SystemZ" set flags=%flags% and " -DCAPSTONE_ARCHITECTURE_DEFAULT=OFF -DCAPSTONE_SYSZ_SUPPORT=ON" +if "%1"=="XCore" set flags=%flags% and " -DCAPSTONE_ARCHITECTURE_DEFAULT=OFF -DCAPSTONE_XCORE_SUPPORT=ON" +if "%1"=="x86" set flags=%flags% and " -DCAPSTONE_ARCHITECTURE_DEFAULT=OFF -DCAPSTONE_X86_SUPPORT=ON" +if "%1"=="TMS320C64x" set flags=%flags% and " -DCAPSTONE_ARCHITECTURE_DEFAULT=OFF -DCAPSTONE_TMS320C64X_SUPPORT=ON" +if "%1"=="M680x" set flags=%flags% and " -DCAPSTONE_ARCHITECTURE_DEFAULT=OFF -DCAPSTONE_M680X_SUPPORT=ON" +if "%1"=="EVM" set flags=%flags% and " -DCAPSTONE_ARCHITECTURE_DEFAULT=OFF -DCAPSTONE_EVM_SUPPORT=ON" +if "%1"=="MOS65XX" set flags=%flags% and " -DCAPSTONE_ARCHITECTURE_DEFAULT=OFF -DCAPSTONE_MOS65XX_SUPPORT=ON" + +cmake %flags% -G "NMake Makefiles" .. nmake From 607884450b15158c63d8c02b760b694f5bab40c1 Mon Sep 17 00:00:00 2001 From: JornVernee Date: Sun, 28 Apr 2019 19:48:50 +0200 Subject: [PATCH 5/7] Simplified cmake wrapper scripts --- cmake.sh | 32 ++++++++++++++++++-------------- nmake.bat | 28 +++++++++++++++------------- 2 files changed, 33 insertions(+), 27 deletions(-) diff --git a/cmake.sh b/cmake.sh index d847258a3e..e83741593d 100644 --- a/cmake.sh +++ b/cmake.sh @@ -8,47 +8,51 @@ FLAGS="-DCMAKE_BUILD_TYPE=Release" case $1 in ARM) - FLAGS+=" -DCAPSTONE_ARCHITECTURE_DEFAULT=OFF -DCAPSTONE_ARM_SUPPORT=ON" + ARCH=ARM ;; ARM64) - FLAGS+=" -DCAPSTONE_ARCHITECTURE_DEFAULT=OFF -DCAPSTONE_ARM64_SUPPORT=ON" + ARCH=ARM64 ;; M68K) - FLAGS+=" -DCAPSTONE_ARCHITECTURE_DEFAULT=OFF -DCAPSTONE_M68K_SUPPORT=ON" + ARCH=M68K ;; MIPS) - FLAGS+=" -DCAPSTONE_ARCHITECTURE_DEFAULT=OFF -DCAPSTONE_MIPS_SUPPORT=ON" + ARCH=MIPS ;; PowerPC) - FLAGS+=" -DCAPSTONE_ARCHITECTURE_DEFAULT=OFF -DCAPSTONE_PPC_SUPPORT=ON" + ARCH=PPC ;; Sparc) - FLAGS+=" -DCAPSTONE_ARCHITECTURE_DEFAULT=OFF -DCAPSTONE_SPARC_SUPPORT=ON" + ARCH=SPARC ;; SystemZ) - FLAGS+=" -DCAPSTONE_ARCHITECTURE_DEFAULT=OFF -DCAPSTONE_SYSZ_SUPPORT=ON" + ARCH=SYSZ ;; XCore) - FLAGS+=" -DCAPSTONE_ARCHITECTURE_DEFAULT=OFF -DCAPSTONE_XCORE_SUPPORT=ON" + ARCH=XCORE ;; x86) - FLAGS+=" -DCAPSTONE_ARCHITECTURE_DEFAULT=OFF -DCAPSTONE_X86_SUPPORT=ON" + ARCH=X86 ;; TMS320C64x) - FLAGS+=" -DCAPSTONE_ARCHITECTURE_DEFAULT=OFF -DCAPSTONE_TMS320C64X_SUPPORT=ON" + ARCH=TMS320C64X ;; M680x) - FLAGS+=" -DCAPSTONE_ARCHITECTURE_DEFAULT=OFF -DCAPSTONE_M680X_SUPPORT=ON" + ARCH=M680X ;; EVM) - FLAGS+=" -DCAPSTONE_ARCHITECTURE_DEFAULT=OFF -DCAPSTONE_EVM_SUPPORT=ON" + ARCH=EVM ;; MOS65XX) - FLAGS+=" -DCAPSTONE_ARCHITECTURE_DEFAULT=OFF -DCAPSTONE_MOS65XX_SUPPORT=ON" + ARCH=MOS65XX ;; *) ;; -esac +esac + +if test "x$ARCH" = "x"; then + FLAGS+=" -DCAPSTONE_ARCHITECTURE_DEFAULT=OFF -DCAPSTONE_$ARCH_SUPPORT=ON" +fi cmake $FLAGS .. diff --git a/nmake.bat b/nmake.bat index bd0958d9b2..4a77c6ff3c 100644 --- a/nmake.bat +++ b/nmake.bat @@ -6,19 +6,21 @@ set flags="-DCMAKE_BUILD_TYPE=Release -DCAPSTONE_BUILD_STATIC_RUNTIME=ON" -if "%1"=="ARM" set flags=%flags% and " -DCAPSTONE_ARCHITECTURE_DEFAULT=OFF -DCAPSTONE_ARM_SUPPORT=ON" -if "%1"=="ARM64" set flags=%flags% and " -DCAPSTONE_ARCHITECTURE_DEFAULT=OFF -DCAPSTONE_ARM64_SUPPORT=ON" -if "%1"=="M68K" set flags=%flags% and " -DCAPSTONE_ARCHITECTURE_DEFAULT=OFF -DCAPSTONE_M68K_SUPPORT=ON" -if "%1"=="MIPS" set flags=%flags% and " -DCAPSTONE_ARCHITECTURE_DEFAULT=OFF -DCAPSTONE_MIPS_SUPPORT=ON" -if "%1"=="PowerPC" set flags=%flags% and " -DCAPSTONE_ARCHITECTURE_DEFAULT=OFF -DCAPSTONE_PPC_SUPPORT=ON" -if "%1"=="Sparc" set flags=%flags% and " -DCAPSTONE_ARCHITECTURE_DEFAULT=OFF -DCAPSTONE_SPARC_SUPPORT=ON" -if "%1"=="SystemZ" set flags=%flags% and " -DCAPSTONE_ARCHITECTURE_DEFAULT=OFF -DCAPSTONE_SYSZ_SUPPORT=ON" -if "%1"=="XCore" set flags=%flags% and " -DCAPSTONE_ARCHITECTURE_DEFAULT=OFF -DCAPSTONE_XCORE_SUPPORT=ON" -if "%1"=="x86" set flags=%flags% and " -DCAPSTONE_ARCHITECTURE_DEFAULT=OFF -DCAPSTONE_X86_SUPPORT=ON" -if "%1"=="TMS320C64x" set flags=%flags% and " -DCAPSTONE_ARCHITECTURE_DEFAULT=OFF -DCAPSTONE_TMS320C64X_SUPPORT=ON" -if "%1"=="M680x" set flags=%flags% and " -DCAPSTONE_ARCHITECTURE_DEFAULT=OFF -DCAPSTONE_M680X_SUPPORT=ON" -if "%1"=="EVM" set flags=%flags% and " -DCAPSTONE_ARCHITECTURE_DEFAULT=OFF -DCAPSTONE_EVM_SUPPORT=ON" -if "%1"=="MOS65XX" set flags=%flags% and " -DCAPSTONE_ARCHITECTURE_DEFAULT=OFF -DCAPSTONE_MOS65XX_SUPPORT=ON" +if "%1"=="ARM" set %arch%=ARM +if "%1"=="ARM64" set %arch%=ARM64 +if "%1"=="M68K" set %arch%=M68K +if "%1"=="MIPS" set %arch%=MIPS +if "%1"=="PowerPC" set %arch%=PPC +if "%1"=="Sparc" set %arch%=SPARC +if "%1"=="SystemZ" set %arch%=SYSZ +if "%1"=="XCore" set %arch%=XCORE +if "%1"=="x86" set %arch%=X86 +if "%1"=="TMS320C64x" set %arch%=TMS320C64X +if "%1"=="M680x" set %arch%=M680X +if "%1"=="EVM" set %arch%=EVM +if "%1"=="MOS65XX" set %arch%=MOS65XX + +if not "%arch%"=="" set flags=%flags% and " -DCAPSTONE_ARCHITECTURE_DEFAULT=OFF -DCAPSTONE_%arch%_SUPPORT=ON" cmake %flags% -G "NMake Makefiles" .. nmake From 2b219612162720d2c608e7c61ec1f61a8a23e091 Mon Sep 17 00:00:00 2001 From: JornVernee Date: Mon, 29 Apr 2019 11:57:49 +0200 Subject: [PATCH 6/7] Updated cmake build instructions --- COMPILE_CMAKE.TXT | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/COMPILE_CMAKE.TXT b/COMPILE_CMAKE.TXT index b661d08e34..0ac4a1da97 100644 --- a/COMPILE_CMAKE.TXT +++ b/COMPILE_CMAKE.TXT @@ -33,6 +33,9 @@ Get CMake for free from http://www.cmake.org. - CAPSTONE_X86_TMS320C64X: support TMS320C64X. Run cmake with -DCAPSTONE_TMS320C64X_SUPPORT=0 to remove TMS320C64X. - CAPSTONE_X86_M680X: support M680X. Run cmake with -DCAPSTONE_M680X_SUPPORT=0 to remove M680X. - CAPSTONE_X86_EVM: support EVM. Run cmake with -DCAPSTONE_EVM_SUPPORT=0 to remove EVM. + - CAPSTONE_ARCHITECUTRE_DEFAULT: Whether architectures are enabled by default. + Set this of OFF with -DCAPSTONE_ARCHITECUTRE_DEFAULT=OFF to dissable all architectures by default. + You can then enable them again with one of the CAPSTONE__SUPPORT options. By default, all architectures are compiled in. @@ -56,6 +59,17 @@ Get CMake for free from http://www.cmake.org. (1) CMake allows you to generate different generators to build Capstone. Below is some examples on how to build Capstone on Windows with CMake. + (*) You can let CMake select a generator for you. Do: + + mkdir build + cd build + cmake .. + + This last command is also where you can pass additional CMake configuration flags + using `-D=`. Then to build use: + + cmake --build . --config Release + (*) To build Capstone using Nmake of Windows SDK, do: @@ -83,3 +97,19 @@ Get CMake for free from http://www.cmake.org. (2) You can make sure the prior steps successfully worked by launching one of the testing binary (test*.exe). +(3) You can also enable just one specific architecture by passing the architecture name + to either the cmake.sh or nmake.bat scripts. e.g.: + + ../cmake.sh x86 + + Will just target the x86 architecture. The list of available architectures is: ARM, + ARM64, M68K, MIPS, PowerPC, Sparc, SystemZ, XCore, x86, TMS320C64x, M680x, EVM, MOS65XX. + +(4) You can also create an installation image with cmake, by using the 'install' target. + Use: + + cmake --build . --config Release --target install + + This will normally install an image in a default location (`C:\Program Files` on Windows), + so it's good to explicitly set this location when configuring CMake. Use: `-DCMAKE_INSTALL_PREFIX=image` + for instance, to put the installation in the 'image' subdirectory of the build directory. From 0d97c01fe8c17ead69bd92393760254c355e892f Mon Sep 17 00:00:00 2001 From: JornVernee Date: Mon, 29 Apr 2019 12:00:36 +0200 Subject: [PATCH 7/7] Tab to space in doc --- COMPILE_CMAKE.TXT | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/COMPILE_CMAKE.TXT b/COMPILE_CMAKE.TXT index 0ac4a1da97..f17a0672ba 100644 --- a/COMPILE_CMAKE.TXT +++ b/COMPILE_CMAKE.TXT @@ -35,7 +35,7 @@ Get CMake for free from http://www.cmake.org. - CAPSTONE_X86_EVM: support EVM. Run cmake with -DCAPSTONE_EVM_SUPPORT=0 to remove EVM. - CAPSTONE_ARCHITECUTRE_DEFAULT: Whether architectures are enabled by default. Set this of OFF with -DCAPSTONE_ARCHITECUTRE_DEFAULT=OFF to dissable all architectures by default. - You can then enable them again with one of the CAPSTONE__SUPPORT options. + You can then enable them again with one of the CAPSTONE__SUPPORT options. By default, all architectures are compiled in. @@ -62,14 +62,14 @@ Get CMake for free from http://www.cmake.org. (*) You can let CMake select a generator for you. Do: mkdir build - cd build - cmake .. - - This last command is also where you can pass additional CMake configuration flags - using `-D=`. Then to build use: - - cmake --build . --config Release - + cd build + cmake .. + + This last command is also where you can pass additional CMake configuration flags + using `-D=`. Then to build use: + + cmake --build . --config Release + (*) To build Capstone using Nmake of Windows SDK, do: