@@ -3,75 +3,108 @@ SHELL=bash
3
3
LAST_LOG =.build/last_build.log
4
4
PWD =$(shell pwd)
5
5
6
- PLUGIN_NAME =example
6
+ PLUGIN_NAME =Example
7
+ TRIPPLE =x86_64-apple-macosx10.12
8
+ BUILD_DIR =$(PWD ) /.build/$(CONFIG )
7
9
8
- # Generate a plugin setup to work with VimKit
10
+ # Generate a plugin setup to work with Vim
9
11
.PHONY : generate
10
12
generate :
11
13
@./PluginGenerator/plugin_generator.sh
12
14
13
- default : debug
15
+ .PHONY : debug
16
+ debug : CONFIG=debug
17
+ debug : plugin_so
14
18
15
19
.PHONY : release
16
- release : CONFIG=release
17
- release : SWIFT_OPTS=--product VimKit \
18
- -Xcc -I$(PYTHON_INCLUDE ) \
19
- -Xcc -fvisibility=hidden \
20
- -Xcc -DVIM_PLUGIN_NAME=$(PLUGIN_NAME ) \
21
- -Xlinker $(PYTHON_LINKED_LIB )
22
- release : build_impl
20
+ release : CONFIG=debug
21
+ release : vim_lib plugin_so
23
22
24
- .PHONY : debug
25
- debug : CONFIG=debug
26
- debug : SWIFT_OPTS=--product VimKit \
27
- -Xcc -I$(PYTHON_INCLUDE ) \
28
- -Xcc -fvisibility=hidden \
23
+ BASE_OPTS =-Xcc -I$(PYTHON_INCLUDE ) \
29
24
-Xcc -DVIM_PLUGIN_NAME=$(PLUGIN_NAME ) \
30
- -Xlinker $(PYTHON_LINKED_LIB )
31
- debug : build_impl
25
+ -Xlinker $(PYTHON_LINKED_LIB ) \
26
+ -Xcc -fvisibility=hidden \
27
+ -Xlinker -undefined -Xlinker dynamic_lookup \
28
+ -Xlinker -all_load
29
+
30
+ .PHONY : vim_lib, renamed_vim_lib
31
+ vim_lib : SWIFT_OPTS=--product Vim \
32
+ -Xswiftc -module-name=$(PLUGIN_NAME ) Vim \
33
+ -Xswiftc -module-link-name=$(PLUGIN_NAME ) Vim \
34
+ $(BASE_OPTS )
35
+
36
+ # FIXME: this triggers rebuilds.
37
+ renamed_vim_lib : vim_lib
38
+ @ditto $(BUILD_DIR ) /Vim.swiftmodule \
39
+ $(BUILD_DIR ) /$(PLUGIN_NAME ) Vim.swiftmodule
40
+ @ditto $(BUILD_DIR ) /Vim.swiftdoc \
41
+ $(BUILD_DIR ) /$(PLUGIN_NAME ) Vim.swiftdoc
42
+ @ditto $(BUILD_DIR ) /libVim.a \
43
+ $(BUILD_DIR ) /lib$(PLUGIN_NAME ) Vim.a
44
+
45
+ # FIXME: this triggers rebuilds.
46
+ .PHONY : vim_async_lib, renamed_vim_lib_async
47
+ vim_async_lib : SWIFT_OPTS=--product VimAsync \
48
+ -Xswiftc -module-name=$(PLUGIN_NAME ) VimAsync \
49
+ -Xswiftc -module-link-name=$(PLUGIN_NAME ) VimAsync \
50
+ $(BASE_OPTS )
51
+ renamed_vim_async_lib : vim_async_lib
52
+ @ditto $(BUILD_DIR ) /VimAsync.swiftmodule \
53
+ $(BUILD_DIR ) /$(PLUGIN_NAME ) VimAsync.swiftmodule
54
+ @ditto $(BUILD_DIR ) /VimAsync.swiftdoc \
55
+ $(BUILD_DIR ) /$(PLUGIN_NAME ) VimAsync.swiftdoc
56
+ @ditto $(BUILD_DIR ) /libVimAsync.a \
57
+ $(BUILD_DIR ) /lib$(PLUGIN_NAME ) libVimAsync.a
58
+
59
+ # Main plugin lib
60
+ .PHONY : plugin_lib
61
+ plugin_lib : SWIFT_OPTS=--product $(PLUGIN_NAME ) \
62
+ $(BASE_OPTS )
63
+ plugin_lib : renamed_vim_lib
64
+ # To useadd VimAsync, add it following `renamed_vim_lib`
32
65
33
- # Dynamically find python vars
34
- # Note, that this is OSX specific
35
- # We will pass this directly to the linker command line
36
- # Whatever dylib was used i.e. Py.framework/SOMEPYTHON
66
+ # Build the .so, which Vim dynamically links.
67
+ .PHONY : plugin_so
68
+ plugin_so : plugin_lib
69
+ @clang -g \
70
+ -Xlinker $(PYTHON_LINKED_LIB ) \
71
+ -Xlinker $(BUILD_DIR ) /lib$(PLUGIN_NAME ) .dylib \
72
+ -shared -o .build/$(PLUGIN_NAME ) .so
73
+
74
+ # Build for the python dylib vim links
37
75
.PHONY : py_vars
38
76
py_vars :
39
- @source Utils/make_lib.sh; python_info
40
- $(eval PYTHON_LINKED_LIB=$(shell source Utils/make_lib.sh; linked_python) )
41
- $(eval PYTHON_INCLUDE=$(shell source Utils/make_lib.sh; python_inc_dir) )
42
-
77
+ @source VimUtils/make_lib.sh; python_info
78
+ $(eval PYTHON_LINKED_LIB=$(shell source VimUtils/make_lib.sh; linked_python) )
79
+ $(eval PYTHON_INCLUDE=$(shell source VimUtils/make_lib.sh; python_inc_dir) )
43
80
44
81
# SPM Build
45
- .PHONY : build_impl
46
- # Careful: assume we need to depend on this here
47
- build_impl : py_vars
48
- build_impl :
82
+ vim_lib vim_async_lib plugin_lib test_b : py_vars
49
83
@echo " Building.."
50
- @mkdir -p .build/$(CONFIG )
51
- @swift build -c $(CONFIG ) $(SWIFT_OPTS ) \
52
- -Xswiftc " -target" -Xswiftc " x86_64-apple-macosx10.12" \
84
+ @mkdir -p .build
85
+ @swift build -c $(CONFIG ) \
86
+ $(BASE_OPTS ) $(SWIFT_OPTS ) $(EXTRA_OPTS ) \
87
+ -Xswiftc -target -Xswiftc $(TRIPPLE ) \
88
+ -Xlinker $(BUILD_DIR ) /libVim.a \
53
89
| tee $(LAST_LOG )
54
- @clang -g \
55
- -Xlinker $(PYTHON_LINKED_LIB ) \
56
- -Xlinker $(PWD ) /.build/$(CONFIG ) /lib$(PLUGIN_NAME ) .dylib \
57
- -shared -o .build/$(PLUGIN_NAME ) .so
58
90
59
- # Running tests with custom versions of Python
91
+ # Mark - Internal Utils:
92
+
93
+ # Overriding Python:
60
94
# USE_PYTHON=/usr/local/Cellar/python/3.6.4_4/Frameworks/Python.framework/Versions/3.6/Python make test
61
95
.PHONY : test
62
- test_b : CONFIG=debug
63
- test_b : SWIFT_OPTS= \
64
- -Xcc -DSPMVIM_LOADSTUB_RUNTIME \
65
- -Xcc -I$(PYTHON_INCLUDE ) \
66
- -Xcc -DVIM_PLUGIN_NAME=$(PLUGIN_NAME ) \
67
- -Xlinker $(PYTHON_LINKED_LIB ) \
68
- --build-tests
69
- test_b : build_impl
70
96
test : CONFIG=debug
71
- test : py_vars test_b
97
+ test : EXTRA_OPTS= \
98
+ -Xcc -DSPMVIM_LOADSTUB_RUNTIME
99
+ test : debug
72
100
@echo " Testing.."
73
- @mkdir -p .build/$(CONFIG )
74
- @swift test --skip-build -c $(CONFIG ) $(SWIFT_OPTS ) | tee $(LAST_LOG )
101
+ @mkdir -p .build
102
+ @swift build --product VimPackageTests \
103
+ $(BASE_OPTS ) $(SWIFT_OPTS ) $(EXTRA_OPTS ) \
104
+ -Xlinker $(BUILD_DIR ) /lib$(PLUGIN_NAME ) .dylib \
105
+ -Xswiftc -target -Xswiftc $(TRIPPLE )
106
+ @swift test --skip-build | tee $(LAST_LOG )
107
+
75
108
76
109
.PHONY : test_generate
77
110
test_generate :
@@ -85,6 +118,10 @@ clean:
85
118
rm -rf .build/debug/*
86
119
rm -rf .build/release/*
87
120
121
+ # Generate the example
122
+ PluginGenerator/PluginMain.tpl.swift : Sources/Example/Example.swift
123
+ sed " s,Example,__VIM_PLUGIN_NAME__,g" $< > $@
124
+
88
125
# Build compile_commands.json
89
126
# Unfortunately, we need to clean.
90
127
# Use the last installed product incase we messed something up during
0 commit comments