Skip to content

Commit cdc7348

Browse files
committed
Add MSVC GitHub Actions build for test
1 parent f27a222 commit cdc7348

File tree

2 files changed

+78
-11
lines changed

2 files changed

+78
-11
lines changed

.github/workflows/build.yml

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
name: Build IDA Plugin
2+
3+
on:
4+
push:
5+
branches: [ main ]
6+
pull_request:
7+
branches: [ main ]
8+
workflow_dispatch:
9+
10+
jobs:
11+
build-windows-msvc:
12+
runs-on: windows-latest
13+
14+
steps:
15+
- uses: actions/checkout@v4
16+
17+
- name: Setup MSVC
18+
uses: microsoft/setup-msbuild@v2
19+
20+
- name: Build with MSVC
21+
shell: cmd
22+
run: |
23+
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat"
24+
25+
mkdir obj 2>nul
26+
mkdir release 2>nul
27+
28+
echo Building VTable Explorer with MSVC...
29+
30+
cl.exe /c /O2 /std:c++17 /EHsc ^
31+
/D__NT__ /D__EA64__ ^
32+
/Isdk/src/include ^
33+
/Foobj/ ^
34+
src/main.cpp
35+
36+
link.exe /DLL /OUT:release/vtable64.dll ^
37+
/LIBPATH:sdk/src/lib/x64_win_vc_64 ^
38+
obj/main.obj ^
39+
ida.lib
40+
41+
echo Build complete!
42+
dir release\
43+
44+
- name: Upload Windows DLL
45+
uses: actions/upload-artifact@v4
46+
with:
47+
name: vtable64-windows-msvc
48+
path: release/vtable64.dll
49+
if-no-files-found: error

docker/Makefile

Lines changed: 29 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,54 +3,72 @@
33
# Platform detection (via env vars in Docker, uname for native)
44
PLATFORM ?= $(shell uname -s)
55

6-
# Default values
6+
# Default values - IDA SDK requires C++17
77
USE_COMPILER := g++
8-
COMPILER_FLAGS := -O3 -std=c++20 -w -Wreturn-type -fpermissive
8+
COMPILER_FLAGS := -O2 -std=c++17 -Wreturn-type
99
LINKER_FLAGS :=
1010

1111
OBJ_DIR := obj/
1212
CPP_FILES := $(wildcard ./src/*.cpp)
1313

1414
# Platform-specific settings
1515
ifeq ($(PLATFORM),Linux)
16-
# Linux
16+
# Linux - GCC (official)
1717
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__
1921
LINKER_FLAGS := -shared
2022
RELEASE_NAME := vtable64.so
23+
2124
else ifeq ($(PLATFORM),Darwin)
22-
# macOS (osxcross)
25+
# macOS - Clang (official)
2326
ARCH ?= arm64
2427
ifeq ($(ARCH),x86_64)
2528
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__
2731
COMPILER_FLAGS += -Lsdk/src/lib/x64_mac_clang_64
2832
RELEASE_NAME := vtable64-macos-x64.dylib
2933
else
3034
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__
3237
COMPILER_FLAGS += -Lsdk/src/lib/arm64_mac_clang_64
3338
RELEASE_NAME := vtable64-macos-arm64.dylib
3439
endif
3540
LINKER_FLAGS := -dynamiclib -undefined dynamic_lookup -lida
41+
3642
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.
3847
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__
4050
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
4253
LINKER_FLAGS += -l:ida.lib
4354
RELEASE_NAME := vtable64.dll
4455
endif
4556

46-
.PHONY: all
57+
.PHONY: all clean
4758

4859
all:
4960
@mkdir -p $(OBJ_DIR)
61+
@echo "Building for $(PLATFORM) with $(USE_COMPILER)..."
5062
@count=0; \
5163
for file in $(CPP_FILES); do \
64+
echo " Compiling: $$file"; \
5265
$(USE_COMPILER) $$file -c -o $(OBJ_DIR)$$count.o $(COMPILER_FLAGS); \
5366
count=$$((count + 1)); \
5467
done
5568
@mkdir -p release
69+
@echo " Linking: $(RELEASE_NAME)"
5670
@$(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

Comments
 (0)