|
3 | 3 | # Platform detection (via env vars in Docker, uname for native) |
4 | 4 | PLATFORM ?= $(shell uname -s) |
5 | 5 |
|
6 | | -# Default values |
| 6 | +# Default values - IDA SDK requires C++17 |
7 | 7 | USE_COMPILER := g++ |
8 | | -COMPILER_FLAGS := -O3 -std=c++20 -w -Wreturn-type -fpermissive |
| 8 | +COMPILER_FLAGS := -O2 -std=c++17 -Wreturn-type |
9 | 9 | LINKER_FLAGS := |
10 | 10 |
|
11 | 11 | OBJ_DIR := obj/ |
12 | 12 | CPP_FILES := $(wildcard ./src/*.cpp) |
13 | 13 |
|
14 | 14 | # Platform-specific settings |
15 | 15 | ifeq ($(PLATFORM),Linux) |
16 | | - # Linux |
| 16 | + # Linux - GCC (official) |
17 | 17 | USE_COMPILER := g++ |
18 | | - COMPILER_FLAGS += -Isdk/src/include -fPIC -D__LINUX__ -D__EA64__ |
| 18 | + COMPILER_FLAGS += -Isdk/src/include |
| 19 | + COMPILER_FLAGS += -fPIC |
| 20 | + COMPILER_FLAGS += -D__LINUX__ -D__EA64__ |
19 | 21 | LINKER_FLAGS := -shared |
20 | 22 | RELEASE_NAME := vtable64.so |
| 23 | + |
21 | 24 | else ifeq ($(PLATFORM),Darwin) |
22 | | - # macOS (osxcross) |
| 25 | + # macOS - Clang (official) |
23 | 26 | ARCH ?= arm64 |
24 | 27 | ifeq ($(ARCH),x86_64) |
25 | 28 | USE_COMPILER := o64-clang++ |
26 | | - COMPILER_FLAGS += -Isdk/src/include -D__MAC__ -D__EA64__ |
| 29 | + COMPILER_FLAGS += -Isdk/src/include |
| 30 | + COMPILER_FLAGS += -D__MAC__ -D__EA64__ |
27 | 31 | COMPILER_FLAGS += -Lsdk/src/lib/x64_mac_clang_64 |
28 | 32 | RELEASE_NAME := vtable64-macos-x64.dylib |
29 | 33 | else |
30 | 34 | USE_COMPILER := oa64-clang++ |
31 | | - COMPILER_FLAGS += -Isdk/src/include -D__MAC__ -D__EA64__ |
| 35 | + COMPILER_FLAGS += -Isdk/src/include |
| 36 | + COMPILER_FLAGS += -D__MAC__ -D__EA64__ |
32 | 37 | COMPILER_FLAGS += -Lsdk/src/lib/arm64_mac_clang_64 |
33 | 38 | RELEASE_NAME := vtable64-macos-arm64.dylib |
34 | 39 | endif |
35 | 40 | LINKER_FLAGS := -dynamiclib -undefined dynamic_lookup -lida |
| 41 | + |
36 | 42 | else |
37 | | - # Windows (MinGW cross-compile) |
| 43 | + # Windows - MinGW cross-compile |
| 44 | + # WARNING: MinGW has ABI incompatibility with MSVC for C++ virtual functions! |
| 45 | + # Plugins using chooser_t will NOT work correctly. |
| 46 | + # For proper Windows builds, use Visual Studio 2022+ with MSVC. |
38 | 47 | USE_COMPILER := x86_64-w64-mingw32-g++ |
39 | | - COMPILER_FLAGS += -Isdk/src/include -D__NT__ -D__X64__ |
| 48 | + COMPILER_FLAGS += -Isdk/src/include |
| 49 | + COMPILER_FLAGS += -D__NT__ -D__EA64__ |
40 | 50 | COMPILER_FLAGS += -Lsdk/src/lib/x64_win_vc_64 |
41 | | - LINKER_FLAGS := -static -Wl,-exclude-all-symbols,--kill-at -shared |
| 51 | + LINKER_FLAGS := -static -shared |
| 52 | + LINKER_FLAGS += -Wl,--kill-at |
42 | 53 | LINKER_FLAGS += -l:ida.lib |
43 | 54 | RELEASE_NAME := vtable64.dll |
44 | 55 | endif |
45 | 56 |
|
46 | | -.PHONY: all |
| 57 | +.PHONY: all clean |
47 | 58 |
|
48 | 59 | all: |
49 | 60 | @mkdir -p $(OBJ_DIR) |
| 61 | + @echo "Building for $(PLATFORM) with $(USE_COMPILER)..." |
50 | 62 | @count=0; \ |
51 | 63 | for file in $(CPP_FILES); do \ |
| 64 | + echo " Compiling: $$file"; \ |
52 | 65 | $(USE_COMPILER) $$file -c -o $(OBJ_DIR)$$count.o $(COMPILER_FLAGS); \ |
53 | 66 | count=$$((count + 1)); \ |
54 | 67 | done |
55 | 68 | @mkdir -p release |
| 69 | + @echo " Linking: $(RELEASE_NAME)" |
56 | 70 | @$(USE_COMPILER) -o release/$(RELEASE_NAME) $(COMPILER_FLAGS) $(OBJ_DIR)*.o $(LINKER_FLAGS) |
| 71 | + @echo "Done: release/$(RELEASE_NAME)" |
| 72 | + |
| 73 | +clean: |
| 74 | + @rm -rf $(OBJ_DIR) release/ |
0 commit comments