Commit Graph

15 Commits

Author SHA1 Message Date
ice_iix 55ff26409a Update to Rust stable 1.44.1, closes #258 2020-06-21 11:35:20 -07:00
iceiix 87e0726f3f
blocks: split macro into multiple functions, fast! (#267)
Improves fix for #184, whereas #255 reduced optimizations,
we now address the underlying compiler limitation and split out
the one massive lazy_static! initialization function, into
one function per block in the block_registration_functions module.

Previous build time, with opt-level=1:

% time cargo build --release
   Compiling steven_blocks v0.0.1
    Finished release [optimized] target(s) in 21.24s
cargo build --release  31.80s user 0.71s system 152% cpu 21.276 total

With this change, opt-level=3 and the function splitting fix:

% time cargo build --release
   Compiling steven_blocks v0.0.1
    Finished release [optimized] target(s) in 30.80s
cargo build --release  40.26s user 0.86s system 133% cpu 30.850 total

Full optimizations are expectedly slightly slower, but this is still
much much _much_ faster than before this refactoring, where this crate
would take up to an unbelievable 5 hours (and tens of GB of RAM). Long
story short, we're now back to full optimizations and stable Rust.

Thanks to dtolnay on the Rust programming language forum for suggesting
this technique, https://users.rust-lang.org/t/5-hours-to-compile-macro-what-can-i-do/36508/2
2020-01-09 20:08:28 -08:00
ice_iix e04ee876f3 Nightly rust, steven_blocks: reduce optimizations in release. Fixes #184 (#255)
Reduce to "basic optimizations" for the steven_blocks module, so it
doesn't take hours of time and gigabytes of memory to compile. The main
program and other code still builds with full optimizations in release
mode, to accomplish this, the profile-overrides feature is required so
we also switch to nightly Rust (to be switched to 1.41+ in #258).

* Update to rustc 1.42.0-nightly (760ce94c6 2020-01-04)

* Update builds.sr.ht to use +nightly

* Override opt-level=1 for steven_blocks using profile-overrides
2020-01-05 07:16:10 -08:00
ice_iix 8502c031f8 Update to Rust 1.40.0. Closes #253
* Update mem::uninitialized to MaybeUninit

* Update to Rust version 1.40 in AppVeyor

* Update readme for Rust version requirement
2020-01-04 17:26:26 -08:00
ice_iix 3da354def4 Update to Rust 1.38.0 in AppVeyor. Closes #235 2019-11-02 15:46:16 -07:00
ice_iix 1b668242d0 Update to Rust 1.36.0 on AppVeyor 2019-11-02 14:18:01 -07:00
ice_iix 9a6af430df Update to Rust stable 1.34.1 2019-05-05 06:22:31 -07:00
iceiix 90eb2b2693
Fix AppVeyor CI configuration to build from master branch (#91) 2019-01-12 11:22:47 -08:00
ice_iix c80372a1f1 Rename project to Stevenarella (#83)
This fork has significantly diverged from the original, it is time
to make it official, as a new distinct project. Forked from
https://github.com/thinkofname/steven into https://github.com/iceiix/steven,
now moved to https://github.com/iceiix/stevenarella and renamed accordingly.

* Update readme

* Update logo

* Update binary name

* Update window title

* Update splash text
2019-01-11 20:41:19 -08:00
iceiix bd4a521072
Update to Rust stable 1.31.0. Closes https://github.com/iceiix/steven/issues/47 (#60) 2018-12-06 18:16:57 -08:00
iceiix 936fb17d1a
AppVeyor: skip building branches and 32-bit Windows (#39)
AppVeyor as configured is too slow, so make it do less:

* Prevent duplicate AppVeyor builds on pull requests https://github.com/appveyor/ci/issues/882

* Only allow AppVeyor to build updates branch, https://www.appveyor.com/docs/branches/#white--and-blacklisting

* Only build for 64-bit Windows (x64) to improve CI times; remove x86
2018-12-01 09:29:18 -08:00
iceiix c099a68168
Use glutin to replace sdl2 (#35)
* Add glutin dependency

* Create a glutin window

* Use the glutin window, basics work

* Store DPI factor on game object, update on Resized

* Use physical size for rendering only. Fixes UI scaled too small

Fixes https://github.com/iceiix/steven/pull/35#issuecomment-442683373
See also https://github.com/iceiix/steven/issues/22

* Begin adding mouse input events

* Listen for DeviceEvents

* Call hover_at on mouse motion

* Listen for CursorMoved window event, hovering works

Glutin has separate WindowEvent::CursorMoved and
DeviceEvent::MouseMotion events, for absolute cursor and relative mouse
motion, respectively, instead of SDL's Event::MouseMotion for both.

* Use tuple pattern matching instead of nested if for MouseInput

* Implement left clicking

* Use grab_cursor() to capture the cursor

* Hide the cursor when grabbing

* Implement MouseWheel event

* Listen for keyboard input, escape key release

* Keyboard input: console toggling, glutin calls backquote 'grave'

* Implement fullscreen in glutin, updates https://github.com/iceiix/steven/pull/31

* Update settings for glutin VirtualKeyCode

* Keyboard controls (note: must clear conf.cfg to use correct bindings)

* Move DeviceEvent match arm up higher for clarity

* Remove SDL

* Pass physical dimensions to renderer tick so blit_framebuffer can use full size but the ui is still sized logically.

* Listen for DeviceEvent::Text

* Implement text input using ReceivedCharacter window event, works

https://github.com/iceiix/steven/pull/35#issuecomment-443247267

* Request specific version of OpenGL, version 3.2

* Request OpenGL 3.2 but fallback to OpenGL ES 2.0 if available (not tested)

* Set core profile and depth 24-bits, stencil 0-bits

* Allow changing vsync, but require restarting (until https://github.com/tomaka/glutin/issues/693)

* Clarify specific Rust version requirement

* Import glutin::* in handle_window_event() to avoid overly repetitive code

* Linux in VM fix: manually calculate delta in MouseMotion

For the third issue on https://github.com/iceiix/steven/pull/35#issuecomment-443084458
https://github.com/tomaka/glutin/issues/1084 MouseMotion event returns absolute instead of relative values, when running Linux in a VM

* Heuristic to detect absolute/relative MouseMotion from delta:(xrel, yrel); use a higher scaling factor

* Add clipboard pasting with clipboard crate instead of sdl2

https://github.com/iceiix/steven/pull/35#issuecomment-443307295
2018-11-30 11:35:35 -08:00
iceiix e72cf4787c
Update to Visual Studio 2017 (#28)
* Update readme for Windows with rustup and VS17

* Update AppVeyor to build with Visual Studio 2017

* Drop Visual Studio 2015 support in favor of 2017
2018-11-20 07:06:31 -08:00
iceiix 1589a29685
Remove use of OpenSSL for RSA PKCS1 encryption (#12). Closes #2
* Add handwritten RSA PKCS1 encryption using num-bigint and simple_asn1

* Add more logging to compare OpenSSL with/without side-by-side

* Log message and ciphertext in hex

* Print N and e as hexadecimal integers

* Fix bad encryption caused by zeros in PKCS1 padding

PS field in https://tools.ietf.org/html/rfc8017#section-7.2.1
Must be nonzero

* Use rand fill instead of rand_bytes

* Remove OpenSSL!

* Update CI scripts and docs to not install OpenSSL

* Remove copying OpenSSL DLLs (libeay and ssleay) in AppVeyor script

* Change rsa_public_encrypt_pkcs1 to return a Result<Vec<u8>, String>

* Add error checking, returning Err<String> on failure; RFC comments

* Add the required message representative range checking

* Use expect() instead of unwrap() on from_der

* Map the ASN.1 error to a String to return it from rsa_public_encrypt_pkcs1() instead of panicking

* Move RSA to a new crate, rsa_public_encrypt_pkcs1

https://github.com/iceiix/rsa_public_encrypt_pkcs1

* Update to rsa_public_encrypt_pkcs1 with simple_asn 0.1.0

https://github.com/iceiix/rsa_public_encrypt_pkcs1/issues/1

* Update to published version of rsa_public_encrypt_pkcs1, 0.1.0

* Remove unnecessarily added blank line

* Remove libssl-dev from .travis.yml
2018-11-04 09:40:51 -08:00
iceiix 24f71cf959
Add Appveyor for Windows continuous integration (#9)
* Add appveyor based on https://users.rust-lang.org/t/rust-appveyor-windows-ci-scripts/4437/2

* Add build script in a separate file, based on https://github.com/briansmith/ring/blob/master/mk/appveyor.bat

* Add pacman installation packages from https://github.com/Thinkofname/steven/wiki/Compiling-and-or-running#compiling-on-windows

* Run msys2_shell from https://github.com/appveyor/ci/issues/352

* Set msys64 and mingw PATH

f000540506

* Add --noconfirm option to pacman

https://unix.stackexchange.com/questions/52277/pacman-option-to-assume-yes-to-every-question#52278

* Try installing OpenSSL using vcpkg

https://www.appveyor.com/docs/lang/cpp/#vc-packaging-tool

* Attempt to install OpenSSL using rust-openssl's appveyor.yml

https://github.com/sfackler/rust-openssl/blob/master/appveyor.yml

* Revert "Attempt to install OpenSSL using rust-openssl's appveyor.yml"

This reverts commit 50106089798615f5a6576651fe9ca88af9a43a0d.

* Set OPENSSL_DIR to C:\OpenSSL

* List contents of C:\OpenSSL

* List C:\OpenSSL after installation

* No such directory

* Use appveyor script from thinkofname

https://github.com/Thinkofname/steven/issues/72#issuecomment-433889692

* Enable echo in appveyor.bat

* Add exported build script, merge working with existing

* Remove environment matrix, nightly-2018-10-24 vs nightly

* Remove debug/release because it builds both in one go

* Echo the platform variable before forcing it

* Set platforms to x86 (not Win32) and x64

* Build x64 first

* Only install the proper platform for OpenSSL, not both
2018-10-31 19:22:16 -07:00