Skip to content

Commit 6f740e1

Browse files
committed
ci: another attempt at mass generation
1 parent eb30e9a commit 6f740e1

File tree

2 files changed

+142
-146
lines changed

2 files changed

+142
-146
lines changed

src/Makevars

Lines changed: 139 additions & 143 deletions
Original file line numberDiff line numberDiff line change
@@ -1,143 +1,139 @@
1-
# User-defined variables
2-
# OBJECTS = rust_add.o hello.o
3-
OBJECTS = $(patsubst %.rs,%.o,$(wildcard *.rs))
4-
5-
BINDINGS_DIR = bindings
6-
CACHE_BINDINGS_LOCATION = ../cached_bindings
7-
ALL_R_HEADERS = $(wildcard $(R_INCLUDE_DIR)/*.h $(R_INCLUDE_DIR)/*/*.h)
8-
NONAPI = `$(R_HOME)/bin$(R_ARCH_BIN)/Rscript --vanilla -e "cat(tools:::nonAPI, sep = '|')"`
9-
RUSTC = rustc
10-
R_VERSION_MAJOR_MINOR_ONLY = $(word 1,$(subst ., ,$(R_VERSION))).$(word 2,$(subst ., ,$(R_VERSION)))
11-
UNAME = $(shell uname -s)
12-
PLATFORM = $(UNAME)
13-
14-
ifeq ($(R_OSTYPE),windows)
15-
RUSTC_DEFAULT_FLAGS = -Cembed-bitcode=no -Cdebuginfo=2
16-
TARGET = --target x86_64-pc-windows-gnu
17-
OS_DEFINES = -DWin32 -D_Win32
18-
RUSTC_LINKER = -Clinker=x86_64-w64-mingw32.static.posix-gcc.exe
19-
LIBGCC_EH_RECIPE = `mkdir -p libgcc_mock && touch libgcc_mock/libgcc_eh.a`
20-
LIBGCC_EH_FLAG = -Llibgcc_mock
21-
R_LIBRARY_PATH = -L"$(R_HOME)/bin$(R_ARCH)"
22-
23-
PLATFORM = "windows"
24-
else
25-
RUSTC_DEFAULT_FLAGS = -Cembed-bitcode=no -Cdebuginfo=2 -Csplit-debuginfo=unpacked
26-
TARGET =
27-
OS_DEFINES =
28-
ifeq ($(UNAME), Darwin)
29-
# Mac-specific settings
30-
OS_DEFINES += -isysroot `xcrun -show-sdk-path`
31-
endif
32-
RUSTC_LINKER =
33-
LIBGCC_EH_RECIPE =
34-
LIBGCC_EH_FLAG =
35-
R_LIBRARY_PATH = -L$(R_HOME)/lib$(R_ARCH)
36-
endif
37-
38-
RUSTC_FLAGS = \
39-
--print native-static-libs \
40-
$(TARGET) \
41-
$(RUSTC_LINKER) \
42-
$(LIBGCC_EH_FLAG) \
43-
$(R_LIBRARY_PATH) -lR \
44-
--edition=2021 \
45-
-Cpanic=abort \
46-
$(RUSTC_DEFAULT_FLAGS) \
47-
-Cllvm-args=--align-all-functions=64 \
48-
--crate-type=cdylib \
49-
--emit=dep-info,obj
50-
51-
# PKG_LIBS += -lc -lm -lresolv -ldl -lpthread -dynamiclib -Wl,-dylib -shared -L. -lrust_add
52-
# PKG_LIBS += -L. -lrust_add
53-
# PKG_LIBS += -lc -lm "-Wl,-dead_strip" "-dynamiclib" "-Wl,-dylib" "-nodefaultlibs"
54-
55-
R_BLOCKED_ITEMS = --blocklist-item="VECTOR_PTR|SEXPREC|DL_FUNC|TYPEOF|R_altrep_Coerce_method_t|Rf_isS4"
56-
# TODO: use --override-abi=C-unwind if the current rustc supports it..
57-
RUSTC_VERSION = `rustc --version`
58-
ATTRIBUTE_CUSTOM = --with-attribute-custom="$(NONAPI)=\#[cfg(feature = \"nonapi\")]"
59-
# --with-attribute-custom=".*=\#[cfg(feature = \"$(addprefix r_,$(subst .,_,$(R_VERSION_MAJOR_MINOR_ONLY)))\")]" \
60-
# --with-attribute-custom=".*=\#[cfg(target_family = \"$(R_OSTYPE)\")]" \
61-
62-
BINDGEN_ARGS = \
63-
--raw-line "/* OS: $(R_OSTYPE) */" \
64-
--raw-line "/* Platform: $(R_PLATFORM) */" \
65-
--raw-line "/* $(RUSTC_VERSION) */" \
66-
--raw-line "/* R version: $(R_VERSION) */" \
67-
--enable-function-attribute-detection \
68-
--no-layout-tests \
69-
--with-derive-custom="R_CMethodDef|R_CallMethodDef=Debug,Copy,Clone" \
70-
--opaque-type SEXPREC \
71-
--opaque-type DL_FUNC \
72-
--opaque-type CGContext \
73-
--builtins \
74-
--allowlist-item "CGContextRef|CGContext" \
75-
--sort-semantically --translate-enum-integer-types --merge-extern-blocks \
76-
--no-recursive-allowlist --rustified-non-exhaustive-enum=".*" \
77-
$(R_BLOCKED_ITEMS)
78-
79-
BINDGEN_CLANG_ARGS = -Denum_SEXPTYPE -DR_NO_REMAP -DSTRICT_R_HEADERS -DR_INTERFACE_PTRS \
80-
$(OS_DEFINES) \
81-
-Wno-visibility \
82-
-fparse-all-comments \
83-
-include Rinternals.h -include R_ext/GraphicsEngine.h -include R_ext/GraphicsDevice.h
84-
85-
ALL_R_BINDINGS = $(patsubst $(R_INCLUDE_DIR)/%.h,$(BINDINGS_DIR)/%.rs,$(ALL_R_HEADERS))
86-
87-
ALL_CACHED_BINDINGS = $(patsubst $(BINDINGS_DIR)/%.rs,$(CACHE_BINDINGS_LOCATION)/%-$(PLATFORM)-$(R_VERSION_MAJOR_MINOR_ONLY).rs,$(ALL_R_BINDINGS))
88-
89-
# TODO: unless `rust_analyzer_dummy` is added here, it won't do anything
90-
all: DEBUG LIBGCC_EH_RECIPE_SETUP ALL_R_BINDINGS $(ALL_CACHED_BINDINGS) $(OBJECTS) $(SHLIB)
91-
92-
DEBUG:
93-
#$(ECHO) $(.VARIABLES)
94-
# $(foreach var,$(.VARIABLES),$(info $(var) = $($(var))))
95-
# $(ECHO) SDK `xcrun --show-sdk-path`
96-
# $(ECHO) $(NONAPI)
97-
# $(ECHO) $(ATTRIBUTE_CUSTOM)
98-
99-
LIBGCC_EH_RECIPE_SETUP:
100-
$(LIBGCC_EH_RECIPE)
101-
102-
# Rule to generate all bindings
103-
ALL_R_BINDINGS: $(ALL_R_BINDINGS)
104-
# $(ECHO) $(ALL_R_BINDINGS)
105-
# $(ECHO) "All bindings are up-to-date."
106-
107-
$(BINDINGS_DIR)/R_ext/Constants.rs: BINDGEN_EXTRA = --blocklist-item M_PI
108-
# Applic.h includes what's in R_ext/Utils.h, so we block them
109-
$(BINDINGS_DIR)/R_ext/Applic.rs: BINDGEN_EXTRA = --blocklist-item findInterval
110-
# Lapack.h includes what's in R_ext/BLAS.h, so we block them
111-
$(BINDINGS_DIR)/R_ext/Lapack.rs: BINDGEN_EXTRA = --blocklist-item zdrot_
112-
# Rinternals.h includes what's in R_ext/Rallocators.h, so we block them (and Rembedded)
113-
$(BINDINGS_DIR)/Rinternals.rs: BINDGEN_EXTRA = --blocklist-item "R_allocator|R_allocator_t|R_RunExitFinalizers"
114-
$(BINDINGS_DIR)/R_ext/RStartup.rs: BINDGEN_EXTRA = --blocklist-item "setup_Rmainloop"
115-
# Rmath includes what's in R_ext/Random.h, so we block them
116-
$(BINDINGS_DIR)/Rmath.rs: BINDGEN_EXTRA = --blocklist-item "__STDC_WANT_IEC_60559_FUNCS_EXT__|norm_rand|unif_rand|R_unif_index|exp_rand"
117-
$(BINDINGS_DIR)/R_ext/Rallocators.rs: BINDGEN_EXTRA = --allowlist-item "R_allocator|R_allocator_t"
118-
119-
$(BINDINGS_DIR)/%.rs: $(R_INCLUDE_DIR)/%.h
120-
$(ECHO) "Generating $@ from $<"
121-
@mkdir -p $(dir $@)
122-
bindgen "$<" -o "$@" $(BINDGEN_ARGS) $(BINDGEN_EXTRA) --allowlist-file "$<" -- -I$(R_INCLUDE_DIR) $(BINDGEN_CLANG_ARGS)
123-
124-
$(CACHE_BINDINGS_LOCATION)/%-$(PLATFORM)-$(R_VERSION_MAJOR_MINOR_ONLY).rs: $(BINDINGS_DIR)/%.rs
125-
$(ECHO) "Updating cache for $< -> $@"
126-
@mkdir -p $(dir $@)
127-
@cp -f $< $@
128-
129-
%.o: %.rs
130-
$(ECHO) "Compiling $< to $@"
131-
$(RUSTC) $(RUSTC_FLAGS) $<
132-
133-
# rust_analyzer_dummy: ALL_R_BINDINGS
134-
# mkdir -p dummy/bindings
135-
# cp -r bindings/ dummy/bindings
136-
137-
# clean_rust: shlib-clean
138-
# @rm -f \
139-
# $(addsuffix .so, $(OBJECTS_BASENAME)) \
140-
# $(addsuffix .dll, $(OBJECTS_BASENAME)) \
141-
# $(addsuffix .dylib, $(addprefix lib, $(OBJECTS_BASENAME))) \
142-
# $(addsuffix .d, $(OBJECTS_BASENAME))
143-
# TODO: Also erase the bindings?
1+
# User-defined variables
2+
# OBJECTS = rust_add.o hello.o
3+
OBJECTS = $(patsubst %.rs,%.o,$(wildcard *.rs))
4+
5+
BINDINGS_DIR = bindings
6+
CACHE_BINDINGS_LOCATION = ../cached_bindings
7+
ALL_R_HEADERS = $(wildcard $(R_INCLUDE_DIR)/*.h $(R_INCLUDE_DIR)/*/*.h)
8+
NONAPI = `$(R_HOME)/bin$(R_ARCH_BIN)/Rscript --vanilla -e "cat(tools:::nonAPI, sep = '|')"`
9+
RUSTC = rustc
10+
R_VERSION_MAJOR_MINOR_ONLY = $(word 1,$(subst ., ,$(R_VERSION))).$(word 2,$(subst ., ,$(R_VERSION)))
11+
UNAME = $(shell uname -s)
12+
PLATFORM = $(UNAME)
13+
14+
ifeq ($(R_OSTYPE),windows)
15+
RUSTC_DEFAULT_FLAGS = -Cembed-bitcode=no -Cdebuginfo=2
16+
TARGET = --target x86_64-pc-windows-gnu
17+
OS_DEFINES = -DWin32 -D_Win32
18+
RUSTC_LINKER = -Clinker=x86_64-w64-mingw32.static.posix-gcc.exe
19+
LIBGCC_EH_RECIPE = `mkdir -p libgcc_mock && touch libgcc_mock/libgcc_eh.a`
20+
LIBGCC_EH_FLAG = -Llibgcc_mock
21+
R_LIBRARY_PATH = -L"$(R_HOME)/bin$(R_ARCH)"
22+
23+
PLATFORM = "windows"
24+
else
25+
RUSTC_DEFAULT_FLAGS = -Cembed-bitcode=no -Cdebuginfo=2 -Csplit-debuginfo=unpacked
26+
TARGET =
27+
OS_DEFINES =
28+
ifeq ($(UNAME), Darwin)
29+
# Mac-specific settings
30+
OS_DEFINES += -isysroot `xcrun -show-sdk-path`
31+
endif
32+
RUSTC_LINKER =
33+
LIBGCC_EH_RECIPE =
34+
LIBGCC_EH_FLAG =
35+
R_LIBRARY_PATH = -L$(R_HOME)/lib$(R_ARCH)
36+
endif
37+
38+
RUSTC_FLAGS = \
39+
--print native-static-libs \
40+
$(TARGET) \
41+
$(RUSTC_LINKER) \
42+
$(LIBGCC_EH_FLAG) \
43+
$(R_LIBRARY_PATH) -lR \
44+
--edition=2021 \
45+
-Cpanic=abort \
46+
$(RUSTC_DEFAULT_FLAGS) \
47+
-Cllvm-args=--align-all-functions=64 \
48+
--crate-type=cdylib \
49+
--emit=dep-info,obj
50+
51+
# PKG_LIBS += -lc -lm -lresolv -ldl -lpthread -dynamiclib -Wl,-dylib -shared -L. -lrust_add
52+
# PKG_LIBS += -L. -lrust_add
53+
# PKG_LIBS += -lc -lm "-Wl,-dead_strip" "-dynamiclib" "-Wl,-dylib" "-nodefaultlibs"
54+
55+
R_BLOCKED_ITEMS = --blocklist-item="VECTOR_PTR|SEXPREC|DL_FUNC|TYPEOF|R_altrep_Coerce_method_t|Rf_isS4"
56+
# TODO: use --override-abi=C-unwind if the current rustc supports it..
57+
RUSTC_VERSION = `rustc --version`
58+
ATTRIBUTE_CUSTOM = --with-attribute-custom="$(NONAPI)=\#[cfg(feature = \"nonapi\")]"
59+
# --with-attribute-custom=".*=\#[cfg(feature = \"$(addprefix r_,$(subst .,_,$(R_VERSION_MAJOR_MINOR_ONLY)))\")]" \
60+
# --with-attribute-custom=".*=\#[cfg(target_family = \"$(R_OSTYPE)\")]" \
61+
62+
BINDGEN_ARGS = \
63+
--raw-line "/* OS: $(R_OSTYPE) */" \
64+
--raw-line "/* Platform: $(R_PLATFORM) */" \
65+
--raw-line "/* $(RUSTC_VERSION) */" \
66+
--raw-line "/* R version: $(R_VERSION) */" \
67+
--enable-function-attribute-detection \
68+
--no-layout-tests \
69+
--with-derive-custom="R_CMethodDef|R_CallMethodDef=Debug,Copy,Clone" \
70+
--opaque-type SEXPREC \
71+
--opaque-type DL_FUNC \
72+
--opaque-type CGContext \
73+
--builtins \
74+
--allowlist-item "CGContextRef|CGContext" \
75+
--sort-semantically --translate-enum-integer-types --merge-extern-blocks \
76+
--no-recursive-allowlist --rustified-non-exhaustive-enum=".*" \
77+
$(R_BLOCKED_ITEMS)
78+
79+
BINDGEN_CLANG_ARGS = -Denum_SEXPTYPE -DR_NO_REMAP -DSTRICT_R_HEADERS -DR_INTERFACE_PTRS \
80+
$(OS_DEFINES) \
81+
-Wno-visibility \
82+
-fparse-all-comments \
83+
-include Rinternals.h -include R_ext/GraphicsEngine.h -include R_ext/GraphicsDevice.h
84+
85+
ALL_R_BINDINGS = $(patsubst $(R_INCLUDE_DIR)/%.h,$(BINDINGS_DIR)/%.rs,$(ALL_R_HEADERS))
86+
87+
ALL_CACHED_BINDINGS = $(patsubst $(BINDINGS_DIR)/%.rs,$(CACHE_BINDINGS_LOCATION)/%-$(PLATFORM)-$(R_VERSION_MAJOR_MINOR_ONLY).rs,$(ALL_R_BINDINGS))
88+
89+
# TODO: unless `rust_analyzer_dummy` is added here, it won't do anything
90+
all: DEBUG LIBGCC_EH_RECIPE_SETUP ALL_R_BINDINGS $(ALL_CACHED_BINDINGS) $(OBJECTS) $(SHLIB)
91+
92+
DEBUG:
93+
# $(ECHO) $(.VARIABLES)
94+
# $(foreach var,$(.VARIABLES),$(info $(var) = $($(var))))
95+
# $(ECHO) SDK `xcrun --show-sdk-path`
96+
# $(ECHO) $(NONAPI)
97+
# $(ECHO) $(ATTRIBUTE_CUSTOM)
98+
99+
LIBGCC_EH_RECIPE_SETUP:
100+
$(LIBGCC_EH_RECIPE)
101+
102+
# Rule to generate all bindings
103+
ALL_R_BINDINGS: $(ALL_R_BINDINGS)
104+
# $(ECHO) $(ALL_R_BINDINGS)
105+
# $(ECHO) "All bindings are up-to-date."
106+
107+
$(BINDINGS_DIR)/R_ext/Constants.rs: BINDGEN_EXTRA = --blocklist-item M_PI
108+
# Applic.h includes what's in R_ext/Utils.h, so we block them
109+
$(BINDINGS_DIR)/R_ext/Applic.rs: BINDGEN_EXTRA = --blocklist-item findInterval
110+
# Lapack.h includes what's in R_ext/BLAS.h, so we block them
111+
$(BINDINGS_DIR)/R_ext/Lapack.rs: BINDGEN_EXTRA = --blocklist-item zdrot_
112+
# Rinternals.h includes what's in R_ext/Rallocators.h, so we block them (and Rembedded)
113+
$(BINDINGS_DIR)/Rinternals.rs: BINDGEN_EXTRA = --blocklist-item "R_allocator|R_allocator_t|R_RunExitFinalizers"
114+
$(BINDINGS_DIR)/R_ext/RStartup.rs: BINDGEN_EXTRA = --blocklist-item "setup_Rmainloop"
115+
# Rmath includes what's in R_ext/Random.h, so we block them
116+
$(BINDINGS_DIR)/Rmath.rs: BINDGEN_EXTRA = --blocklist-item "__STDC_WANT_IEC_60559_FUNCS_EXT__|norm_rand|unif_rand|R_unif_index|exp_rand"
117+
# Rallocators have items blocked by Rinternals, so we allow them explicitly here.
118+
$(BINDINGS_DIR)/R_ext/Rallocators.rs: BINDGEN_EXTRA = --allowlist-item "R_allocator|R_allocator_t"
119+
120+
$(BINDINGS_DIR)/R_ext/Print.rs: BINDGEN_EXTRA = --blocklist-item "Rvprintf|REvprintf"
121+
122+
123+
$(BINDINGS_DIR)/%.rs: $(R_INCLUDE_DIR)/%.h
124+
$(ECHO) "Generating $@ from $<"
125+
@mkdir -p $(dir $@)
126+
bindgen "$<" -o "$@" $(BINDGEN_ARGS) $(BINDGEN_EXTRA) --allowlist-file "$<" -- -I$(R_INCLUDE_DIR) $(BINDGEN_CLANG_ARGS)
127+
128+
$(CACHE_BINDINGS_LOCATION)/%-$(PLATFORM)-$(R_VERSION_MAJOR_MINOR_ONLY).rs: $(BINDINGS_DIR)/%.rs
129+
$(ECHO) "Updating cache for $< -> $@"
130+
@mkdir -p $(dir $@)
131+
@cp -f $< $@
132+
133+
%.o: %.rs
134+
$(ECHO) "Compiling $< to $@"
135+
$(RUSTC) $(RUSTC_FLAGS) $<
136+
137+
# rust_analyzer_dummy: ALL_R_BINDINGS
138+
# mkdir -p dummy/bindings
139+
# cp -r bindings/ dummy/bindings

src/bindings.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ include!("bindings/R_ext/libextern.rs");
3939
include!("bindings/R_ext/MathThreads.rs");
4040
include!("bindings/R_ext/Memory.rs");
4141
include!("bindings/R_ext/Parse.rs");
42-
// include!("bindings/R_ext/Print.rs"); // missing va_list
42+
include!("bindings/R_ext/Print.rs"); // missing va_list
4343
include!("bindings/R_ext/PrtUtil.rs");
4444
#[cfg(unix)]
4545
include!("bindings/R_ext/QuartzDevice.rs");
@@ -60,8 +60,8 @@ include!("bindings/R_ext/Visibility.rs");
6060
include!("bindings/Rinternals.rs");
6161
include!("custom_bindings/custom_Rinternals.rs");
6262

63-
#[cfg(target_os = "macos")]
64-
include!("bindings/libintl.rs");
63+
// #[cfg(target_os = "macos")]
64+
// include!("bindings/libintl.rs");
6565
include!("bindings/Rconfig.rs");
6666
include!("bindings/Rdefines.rs");
6767
include!("bindings/Rembedded.rs"); // defined in R internals!

0 commit comments

Comments
 (0)