about summary refs log tree commit diff stats
path: root/ext
diff options
context:
space:
mode:
authorStar Rauchenberger <fefferburbia@gmail.com>2023-10-27 22:52:44 -0400
committerStar Rauchenberger <fefferburbia@gmail.com>2023-10-27 22:52:44 -0400
commit472719a3be3e7b6f2810aa6bad63550a1327360a (patch)
tree25646f18cac2a44707fc9be1dfc7fc54a292af47 /ext
parentd3727cb8d2ba959a4bf3387c9aa8848f233cfcab (diff)
downloadwittle-472719a3be3e7b6f2810aa6bad63550a1327360a.tar.gz
wittle-472719a3be3e7b6f2810aa6bad63550a1327360a.tar.bz2
wittle-472719a3be3e7b6f2810aa6bad63550a1327360a.zip
gemspec
Diffstat (limited to 'ext')
-rw-r--r--ext/wittle_generator/Generate.cpp2
-rw-r--r--ext/wittle_generator/Generate.h1
-rw-r--r--ext/wittle_generator/Makefile270
-rw-r--r--ext/wittle_generator/Test.cpp15
-rw-r--r--ext/wittle_generator/extconf.rb2
-rw-r--r--ext/wittle_generator/wittle_generator.cpp28
6 files changed, 313 insertions, 5 deletions
diff --git a/ext/wittle_generator/Generate.cpp b/ext/wittle_generator/Generate.cpp index 4cc3ce9..5e38ba8 100644 --- a/ext/wittle_generator/Generate.cpp +++ b/ext/wittle_generator/Generate.cpp
@@ -2109,3 +2109,5 @@ bool Generate::combine_shapes(std::vector<Shape>& shapes) {
2109} 2109}
2110 2110
2111bool Generate::hasSymbolOrPath(int x, int y) { return get(x, y) != 0; } 2111bool Generate::hasSymbolOrPath(int x, int y) { return get(x, y) != 0; }
2112
2113std::string Generate::AsCode() { return _panel->Write(); }
diff --git a/ext/wittle_generator/Generate.h b/ext/wittle_generator/Generate.h index 0dc5fc3..cbb870d 100644 --- a/ext/wittle_generator/Generate.h +++ b/ext/wittle_generator/Generate.h
@@ -86,6 +86,7 @@ class Generate {
86 } 86 }
87 void setGridSize(int width, int height); 87 void setGridSize(int width, int height);
88 void setSymmetry(Panel::Symmetry symmetry); 88 void setSymmetry(Panel::Symmetry symmetry);
89 std::string AsCode();
89 void write(int id); 90 void write(int id);
90 void setFlag(Config option) { _config |= option; }; 91 void setFlag(Config option) { _config |= option; };
91 void setFlagOnce(Config option) { 92 void setFlagOnce(Config option) {
diff --git a/ext/wittle_generator/Makefile b/ext/wittle_generator/Makefile new file mode 100644 index 0000000..2df1195 --- /dev/null +++ b/ext/wittle_generator/Makefile
@@ -0,0 +1,270 @@
1
2SHELL = /bin/sh
3
4# V=0 quiet, V=1 verbose. other values don't work.
5V = 0
6V0 = $(V:0=)
7Q1 = $(V:1=)
8Q = $(Q1:0=@)
9ECHO1 = $(V:1=@ :)
10ECHO = $(ECHO1:0=@ echo)
11NULLCMD = :
12
13#### Start of system configuration section. ####
14
15srcdir = .
16topdir = /Users/hatkirby/.rvm/rubies/ruby-3.2.2/include/ruby-3.2.0
17hdrdir = $(topdir)
18arch_hdrdir = /Users/hatkirby/.rvm/rubies/ruby-3.2.2/include/ruby-3.2.0/x86_64-darwin22
19PATH_SEPARATOR = :
20VPATH = $(srcdir):$(arch_hdrdir)/ruby:$(hdrdir)/ruby
21prefix = $(DESTDIR)/Users/hatkirby/.rvm/rubies/ruby-3.2.2
22rubysitearchprefix = $(rubylibprefix)/$(sitearch)
23rubyarchprefix = $(rubylibprefix)/$(arch)
24rubylibprefix = $(libdir)/$(RUBY_BASE_NAME)
25exec_prefix = $(prefix)
26vendorarchhdrdir = $(vendorhdrdir)/$(sitearch)
27sitearchhdrdir = $(sitehdrdir)/$(sitearch)
28rubyarchhdrdir = $(rubyhdrdir)/$(arch)
29vendorhdrdir = $(rubyhdrdir)/vendor_ruby
30sitehdrdir = $(rubyhdrdir)/site_ruby
31rubyhdrdir = $(includedir)/$(RUBY_VERSION_NAME)
32vendorarchdir = $(vendorlibdir)/$(sitearch)
33vendorlibdir = $(vendordir)/$(ruby_version)
34vendordir = $(rubylibprefix)/vendor_ruby
35sitearchdir = $(sitelibdir)/$(sitearch)
36sitelibdir = $(sitedir)/$(ruby_version)
37sitedir = $(rubylibprefix)/site_ruby
38rubyarchdir = $(rubylibdir)/$(arch)
39rubylibdir = $(rubylibprefix)/$(ruby_version)
40sitearchincludedir = $(includedir)/$(sitearch)
41archincludedir = $(includedir)/$(arch)
42sitearchlibdir = $(libdir)/$(sitearch)
43archlibdir = $(libdir)/$(arch)
44ridir = $(datarootdir)/$(RI_BASE_NAME)
45mandir = $(datarootdir)/man
46localedir = $(datarootdir)/locale
47libdir = $(exec_prefix)/lib
48psdir = $(docdir)
49pdfdir = $(docdir)
50dvidir = $(docdir)
51htmldir = $(docdir)
52infodir = $(datarootdir)/info
53docdir = $(datarootdir)/doc/$(PACKAGE)
54oldincludedir = $(DESTDIR)/usr/include
55includedir = $(SDKROOT)$(prefix)/include
56runstatedir = $(localstatedir)/run
57localstatedir = $(prefix)/var
58sharedstatedir = $(prefix)/com
59sysconfdir = $(prefix)/etc
60datadir = $(datarootdir)
61datarootdir = $(prefix)/share
62libexecdir = $(exec_prefix)/libexec
63sbindir = $(exec_prefix)/sbin
64bindir = $(exec_prefix)/bin
65archdir = $(rubyarchdir)
66
67
68CC_WRAPPER =
69CC = gcc
70CXX = g++
71LIBRUBY = $(LIBRUBY_SO)
72LIBRUBY_A = lib$(RUBY_SO_NAME)-static.a
73LIBRUBYARG_SHARED = -l$(RUBY_SO_NAME)
74LIBRUBYARG_STATIC = -l$(RUBY_SO_NAME)-static -framework CoreFoundation $(MAINLIBS)
75empty =
76OUTFLAG = -o $(empty)
77COUTFLAG = -o $(empty)
78CSRCFLAG = $(empty)
79
80RUBY_EXTCONF_H =
81cflags = -fdeclspec $(optflags) $(debugflags) $(warnflags)
82cxxflags =
83optflags = -O3 -fno-fast-math
84debugflags = -ggdb3
85warnflags = -Wall -Wextra -Wextra-tokens -Wdeprecated-declarations -Wdivision-by-zero -Wdiv-by-zero -Wimplicit-function-declaration -Wimplicit-int -Wmisleading-indentation -Wpointer-arith -Wshorten-64-to-32 -Wwrite-strings -Wold-style-definition -Wmissing-noreturn -Wno-cast-function-type -Wno-constant-logical-operand -Wno-long-long -Wno-missing-field-initializers -Wno-overlength-strings -Wno-parentheses-equality -Wno-self-assign -Wno-tautological-compare -Wno-unused-parameter -Wno-unused-value -Wunused-variable -Wundef
86cppflags =
87CCDLFLAGS = -fno-common
88CFLAGS = $(CCDLFLAGS) -O3 -I/usr/local/opt/libyaml/include -I/usr/local/opt/libksba/include -I/usr/local/opt/readline/include -I/usr/local/opt/zlib/include -I/usr/local/opt/openssl@1.1/include $(cflags) -fno-common -pipe $(ARCH_FLAG)
89INCFLAGS = -I. -I$(arch_hdrdir) -I$(hdrdir)/ruby/backward -I$(hdrdir) -I$(srcdir) -I/Users/hatkirby/.rvm/gems/ruby-3.2.2/gems/rice-4.1.0/include
90DEFS =
91CPPFLAGS = -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT $(DEFS) $(cppflags)
92CXXFLAGS = $(CCDLFLAGS) -fdeclspec -std=c++17 $(ARCH_FLAG)
93ldflags = -L. -L/usr/local/opt/libyaml/lib -L/usr/local/opt/libksba/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/zlib/lib -L/usr/local/opt/openssl@1.1/lib -fstack-protector-strong
94dldflags = -L/usr/local/opt/libyaml/lib -L/usr/local/opt/libksba/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/zlib/lib -L/usr/local/opt/openssl@1.1/lib -Wl,-multiply_defined,suppress $(LIBRUBYARG_SHARED)
95ARCH_FLAG =
96DLDFLAGS = $(ldflags) $(dldflags) $(ARCH_FLAG)
97LDSHARED = $(CC) -dynamic -bundle
98LDSHAREDXX = $(CXX) -dynamic -bundle
99AR = ar
100EXEEXT =
101
102RUBY_INSTALL_NAME = $(RUBY_BASE_NAME)
103RUBY_SO_NAME = ruby.3.2
104RUBYW_INSTALL_NAME =
105RUBY_VERSION_NAME = $(RUBY_BASE_NAME)-$(ruby_version)
106RUBYW_BASE_NAME = rubyw
107RUBY_BASE_NAME = ruby
108
109arch = x86_64-darwin22
110sitearch = $(arch)
111ruby_version = 3.2.0
112ruby = $(bindir)/$(RUBY_BASE_NAME)
113RUBY = $(ruby)
114BUILTRUBY = $(bindir)/$(RUBY_BASE_NAME)
115ruby_headers = $(hdrdir)/ruby.h $(hdrdir)/ruby/backward.h $(hdrdir)/ruby/ruby.h $(hdrdir)/ruby/defines.h $(hdrdir)/ruby/missing.h $(hdrdir)/ruby/intern.h $(hdrdir)/ruby/st.h $(hdrdir)/ruby/subst.h $(arch_hdrdir)/ruby/config.h
116
117RM = rm -f
118RM_RF = rm -fr
119RMDIRS = rmdir -p
120MAKEDIRS = /usr/local/opt/coreutils/bin/gmkdir -p
121INSTALL = /usr/local/opt/coreutils/bin/ginstall -c
122INSTALL_PROG = $(INSTALL) -m 0755
123INSTALL_DATA = $(INSTALL) -m 644
124COPY = cp
125TOUCH = exit >
126
127#### End of system configuration section. ####
128
129preload =
130libpath = . $(libdir)
131LIBPATH = -L. -L$(libdir)
132DEFFILE =
133
134CLEANFILES = mkmf.log
135DISTCLEANFILES =
136DISTCLEANDIRS =
137
138extout =
139extout_prefix =
140target_prefix =
141LOCAL_LIBS =
142LIBS = $(LIBRUBYARG_SHARED) -lc++ -lpthread
143ORIG_SRCS = Generate.cpp Panel.cpp Random.cpp Serializer.cpp Test.cpp wittle_generator.cpp
144SRCS = $(ORIG_SRCS)
145OBJS = Generate.o Panel.o Random.o Serializer.o Test.o wittle_generator.o
146HDRS = $(srcdir)/Base64.h $(srcdir)/Generate.h $(srcdir)/Panel.h $(srcdir)/PuzzleSymbols.h $(srcdir)/Random.h $(srcdir)/Serializer.h
147LOCAL_HDRS =
148TARGET = wittle_generator
149TARGET_NAME = wittle_generator
150TARGET_ENTRY = Init_$(TARGET_NAME)
151DLLIB = $(TARGET).bundle
152EXTSTATIC =
153STATIC_LIB =
154
155TIMESTAMP_DIR = .
156BINDIR = $(bindir)
157RUBYCOMMONDIR = $(sitedir)$(target_prefix)
158RUBYLIBDIR = $(sitelibdir)$(target_prefix)
159RUBYARCHDIR = $(sitearchdir)$(target_prefix)
160HDRDIR = $(sitehdrdir)$(target_prefix)
161ARCHHDRDIR = $(sitearchhdrdir)$(target_prefix)
162TARGET_SO_DIR =
163TARGET_SO = $(TARGET_SO_DIR)$(DLLIB)
164CLEANLIBS = $(TARGET_SO) $(TARGET_SO).dSYM
165CLEANOBJS = $(OBJS) *.bak
166TARGET_SO_DIR_TIMESTAMP = $(TIMESTAMP_DIR)/.sitearchdir.time
167
168all: $(DLLIB)
169static: $(STATIC_LIB)
170.PHONY: all install static install-so install-rb
171.PHONY: clean clean-so clean-static clean-rb
172
173clean-static::
174clean-rb-default::
175clean-rb::
176clean-so::
177clean: clean-so clean-static clean-rb-default clean-rb
178 -$(Q)$(RM_RF) $(CLEANLIBS) $(CLEANOBJS) $(CLEANFILES) .*.time
179
180distclean-rb-default::
181distclean-rb::
182distclean-so::
183distclean-static::
184distclean: clean distclean-so distclean-static distclean-rb-default distclean-rb
185 -$(Q)$(RM) Makefile $(RUBY_EXTCONF_H) conftest.* mkmf.log
186 -$(Q)$(RM) core ruby$(EXEEXT) *~ $(DISTCLEANFILES)
187 -$(Q)$(RMDIRS) $(DISTCLEANDIRS) 2> /dev/null || true
188
189realclean: distclean
190install: install-so install-rb
191
192install-so: $(DLLIB) $(TARGET_SO_DIR_TIMESTAMP)
193 $(INSTALL_PROG) $(DLLIB) $(RUBYARCHDIR)
194clean-static::
195 -$(Q)$(RM) $(STATIC_LIB)
196install-rb: pre-install-rb do-install-rb install-rb-default
197install-rb-default: pre-install-rb-default do-install-rb-default
198pre-install-rb: Makefile
199pre-install-rb-default: Makefile
200do-install-rb:
201do-install-rb-default:
202pre-install-rb-default:
203 @$(NULLCMD)
204$(TARGET_SO_DIR_TIMESTAMP):
205 $(Q) $(MAKEDIRS) $(@D) $(RUBYARCHDIR)
206 $(Q) $(TOUCH) $@
207
208site-install: site-install-so site-install-rb
209site-install-so: install-so
210site-install-rb: install-rb
211
212.SUFFIXES: .c .m .cc .mm .cxx .cpp .o .S
213
214.cc.o:
215 $(ECHO) compiling $(<)
216 $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$<
217
218.cc.S:
219 $(ECHO) translating $(<)
220 $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -S $(CSRCFLAG)$<
221
222.mm.o:
223 $(ECHO) compiling $(<)
224 $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$<
225
226.mm.S:
227 $(ECHO) translating $(<)
228 $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -S $(CSRCFLAG)$<
229
230.cxx.o:
231 $(ECHO) compiling $(<)
232 $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$<
233
234.cxx.S:
235 $(ECHO) translating $(<)
236 $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -S $(CSRCFLAG)$<
237
238.cpp.o:
239 $(ECHO) compiling $(<)
240 $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$<
241
242.cpp.S:
243 $(ECHO) translating $(<)
244 $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -S $(CSRCFLAG)$<
245
246.c.o:
247 $(ECHO) compiling $(<)
248 $(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$<
249
250.c.S:
251 $(ECHO) translating $(<)
252 $(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -S $(CSRCFLAG)$<
253
254.m.o:
255 $(ECHO) compiling $(<)
256 $(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$<
257
258.m.S:
259 $(ECHO) translating $(<)
260 $(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -S $(CSRCFLAG)$<
261
262$(TARGET_SO): $(OBJS) Makefile
263 $(ECHO) linking shared-object $(DLLIB)
264 -$(Q)$(RM) $(@)
265 $(Q) $(LDSHAREDXX) -o $@ $(OBJS) $(LIBPATH) $(DLDFLAGS) $(LOCAL_LIBS) $(LIBS)
266 $(Q) $(POSTLINK)
267
268
269
270$(OBJS): $(HDRS) $(ruby_headers)
diff --git a/ext/wittle_generator/Test.cpp b/ext/wittle_generator/Test.cpp index ecd2a37..8273da8 100644 --- a/ext/wittle_generator/Test.cpp +++ b/ext/wittle_generator/Test.cpp
@@ -2,13 +2,18 @@
2 2
3int main(int, char**) { 3int main(int, char**) {
4 Generate generator; 4 Generate generator;
5 generator.setFlag(Generate::RegularStartEnd); 5 // generator.setFlag(Generate::RegularStartEnd);
6 /*generator.generate(4 * 2 + 1, 4 * 2 + 1, 6 /*generator.generate(4 * 2 + 1, 4 * 2 + 1,
7 {{{Decoration::Triangle | Decoration::Orange, 6}}});*/ 7 {{{Decoration::Triangle | Decoration::Orange, 6}}});*/
8 generator.setSymmetry(Panel::Vertical); 8 // generator.setSymmetry(Panel::Vertical);
9 generator.generate( 9 generator.setSymbol(Decoration::Exit, 0, 0);
10 5 * 2 + 1, 5 * 2 + 1, 10 generator.setSymbol(Decoration::Exit, 7 * 2, 0);
11 {{{Decoration::Triangle | Decoration::Color::Orange, 6}}}); 11 generator.setSymbol(Decoration::Exit, 7 * 2, 7 * 2);
12 generator.generate(7 * 2 + 1, 7 * 2 + 1,
13 {{{Decoration::Stone | Decoration::Color::White, 10},
14 {Decoration::Stone | Decoration::Color::Black, 10},
15 {Decoration::Dot, 10},
16 {Decoration::Start, 2}}});
12 17
13 return 0; 18 return 0;
14} 19}
diff --git a/ext/wittle_generator/extconf.rb b/ext/wittle_generator/extconf.rb new file mode 100644 index 0000000..8d00284 --- /dev/null +++ b/ext/wittle_generator/extconf.rb
@@ -0,0 +1,2 @@
1require 'mkmf-rice'
2create_makefile('wittle_generator')
diff --git a/ext/wittle_generator/wittle_generator.cpp b/ext/wittle_generator/wittle_generator.cpp new file mode 100644 index 0000000..e8f2dba --- /dev/null +++ b/ext/wittle_generator/wittle_generator.cpp
@@ -0,0 +1,28 @@
1#include <rice/rice.hpp>
2
3#include "Generate.h"
4
5Rice::Object wittle_generator_generate(Rice::Object /* self */) {
6 Generate generator;
7 // generator.setFlag(Generate::RegularStartEnd);
8 /*generator.generate(4 * 2 + 1, 4 * 2 + 1,
9 {{{Decoration::Triangle | Decoration::Orange, 6}}});*/
10 // generator.setSymmetry(Panel::Vertical);
11 generator.setSymbol(Decoration::Exit, 0, 0);
12 generator.setSymbol(Decoration::Exit, 7 * 2, 0);
13 generator.setSymbol(Decoration::Exit, 7 * 2, 7 * 2);
14 generator.generate(7 * 2 + 1, 7 * 2 + 1,
15 {{{Decoration::Stone | Decoration::Color::White, 10},
16 {Decoration::Stone | Decoration::Color::Black, 10},
17 {Decoration::Dot, 10},
18 {Decoration::Start, 2}}});
19
20 Rice::String str(generator.AsCode());
21 return str;
22}
23
24extern "C" void Init_wittle_generator() {
25 Rice::Class rb_cWittleGenerator =
26 Rice::define_class("WittleGenerator")
27 .define_method("generate", &wittle_generator_generate);
28}