Commit graph

5155 commits

Author SHA1 Message Date
Simon Hausmann
5e7c6372fd Fix cross-compilation of vtable
syn/quote/proc-macro are not needed at run-time for the vtable use.
2020-06-08 13:00:55 +02:00
Olivier Goffart
11ac0cfad0 Test for nodejs 2020-06-08 12:24:39 +02:00
Olivier Goffart
11a0e89827 Test framework: extract the cpp and rust snippets 2020-06-08 10:54:17 +02:00
Olivier Goffart
0e67a0ecbc Block comments 2020-06-08 10:40:02 +02:00
Olivier Goffart
d1febde6c7 Fix warning in the generated code 2020-06-08 10:07:17 +02:00
Olivier Goffart
4b7f8e2d04 Fix building of corelib for wasm
Wasm does not have the run_return function, so use the trick with
scoped_tls to have non-static functions
2020-06-08 09:22:38 +02:00
Olivier Goffart
772f77b700 Rust test: generate a different file for each test
So that the file name show which test it cames from in case of error
2020-06-05 19:51:41 +02:00
Olivier Goffart
e18689af5c Test the rist frontend 2020-06-05 19:29:40 +02:00
Olivier Goffart
d0332fafbf Revert "Not-working Tests for the Rust frontend"
This reverts commit 87bce9c106688516ab66de3f81cc907bee0a8b9b.

Because it is not working
2020-06-05 19:04:07 +02:00
Olivier Goffart
9f6639631c Not-working Tests for the Rust frontend
This is not working because spawning cargo for each tests is too slow,
and cannot even re-use the same target directory because it would block
on the cargo lock file. and rebuild all the dependences because of
different flags
2020-06-05 19:04:07 +02:00
Simon Hausmann
d574a088a6 Remove unnecessary CARGO environment variable forwarding
In contrast to the others, this one seems to be universally set :)
2020-06-05 18:01:40 +02:00
Simon Hausmann
318e65b1d4 Fix typo 2020-06-05 17:41:59 +02:00
Simon Hausmann
8b475440c6 Reduce build ping-pong due to system library extraction 2020-06-05 17:22:42 +02:00
Olivier Goffart
6adbf1a077 Test: Slightly better error output when the C++ code does not compile 2020-06-05 17:03:42 +02:00
Simon Hausmann
975d0603e6 Fix scopeguard API usage
This is more idiomatic and nicer :)
2020-06-05 16:53:31 +02:00
Simon Hausmann
2579d4e84c Don't exit the process if there's an issue with the C++ generator 2020-06-05 16:15:32 +02:00
Simon Hausmann
3aa0c94f83 Run tests through the interpreter as well, at least for instantiation. 2020-06-05 16:02:59 +02:00
Simon Hausmann
d20eec1b4e Pick up newly added test cases
Add all the directories of the tests to the watch list of cargo. Adding
a new file will change the mtime of the directory and trigger a rebuild
then.
2020-06-05 15:18:14 +02:00
Simon Hausmann
5a5ab27f70 Minor cleanups
* Remove the dependency to the rust frontend and library from the test
  driver. Tests are compiled and run as standalone programs.
* Add diagnostics for the initial cargo run for the dependencies.
2020-06-05 15:11:26 +02:00
Simon Hausmann
54b02d2b0d Change the test driver to use the rust test framework
Collect all tests are build time in build.rs and generate Rust code that
uses #[test] annotated functions. This gives nice reporting and the
ability to run individual tests.
2020-06-05 14:47:05 +02:00
Simon Hausmann
46d7aaa2cb WIP 2020-06-05 14:11:29 +02:00
Olivier Goffart
9fc60e104f Add another way to load .60 files from a build script 2020-06-05 13:45:38 +02:00
Olivier Goffart
0553ab8b1a Use env::var_os instead of env::var
For the unliekly case in which the git repository is checked out in a directory
that cannot be represented with unicode
2020-06-05 13:45:37 +02:00
Simon Hausmann
31da762245 Complete compilation and running of .60 to mapped c++ tests
* Fix text-file-busy error when running the binary by replacing the use
  of named temp file with simply using the input source file and the
  extension replaced. A scope guard make sure to also delete the binary.
* Fix hard-coded library dependencies by sharing code with the cmake
  xtask that needs the same list.
2020-06-05 13:30:13 +02:00
Simon Hausmann
a69594530f First step towards compiling the generated C++ in the test driver
This extracts a compiler command line from the cc crate, runs the
compiler and tries to run the resulting binary. Unfortunately the latter
fails still.
2020-06-05 11:08:05 +02:00
Olivier Goffart
e6681a7087 Move the rust generator to the compiler lib 2020-06-05 10:54:22 +02:00
Simon Hausmann
19a2777aec Fix build 2020-06-05 09:28:09 +02:00
Olivier Goffart
3651885d87 Move the compiler binary in tools/
And rename sixtyfps_compiler to sixtyfps_compilerlib
2020-06-05 09:23:38 +02:00
Simon Hausmann
3d1064f2e8 Separate the C++ bits into a separate module 2020-06-05 09:00:49 +02:00
Simon Hausmann
8624566e5c Add boilerplate for new testing harness
The objective is to have a bunch of .60 files with annotations inside
and the test harness picks them up and runs them through the Rust and
C++ frontend.
2020-06-05 08:56:16 +02:00
Simon Hausmann
fef5004780 Fix repeated rebuilds
Don't try to determine the native libs dependency *and* the artifact
collection in one go by setting RUSTFLAGS, as that causes everything to
be rebuilt over and over again.

Instead, go back to invoking rustc once to determine the native libs
dependencies.
2020-06-04 19:25:44 +02:00
Simon Hausmann
5d2b5f7e4c Simplify cmake xtask
Call cargo only once by building the target package (gl renderer) right
away and passing the RUSTFLAGS to get the native library dependency.

Suggested by Olivier :)
2020-06-04 17:52:26 +02:00
Simon Hausmann
4eb50335a4 Prospective build fix for the CI
Make sure to prepare the cmake module and extend the lookup in the
project to prefer the local build.
2020-06-04 16:55:27 +02:00
Simon Hausmann
68e4eaa3dc Bump cache action to version 2
This apparently also enables caching for any refs
2020-06-04 16:55:27 +02:00
Olivier Goffart
5f5aa0fc38 Add a package.json for the example 2020-06-04 15:48:41 +02:00
Olivier Goffart
7a8c549625 Be able to read or write properties from JS 2020-06-04 15:48:39 +02:00
Simon Hausmann
2e0a5ddb25 Create & install a cmake package file (part 3)
The cargo target directory tree is now populated with a cmake package
file and that's also installed into the prefix specified with the cargo
cmake xtask.

As a consequence, the cpptest example can be built by first building the
cmake package:

    cargo xtask cmake

    or

    cargo xtask cmake --release --target some-triplet)

    or

    cargo xtask cmake --release --prefix /somewhere --install

and then run cmake in the cpptest example with a prefix path:

    -DCMAKE_PREFIX_PATH=/where/you/installed/it or simply
    -DCMAKE_PREFIX_PATH=../../target/debug for example.

Pending still is the sixtyfps compiler tool installation and discovery.
2020-06-04 15:33:18 +02:00
Simon Hausmann
a2c5e66bee Rename gl renderer backend package
Use a full prefixed name (sixtyfps_rendering_backend_gl) to ensure that
the created static lib can be installed without file conflicts (libgl is
not a unique name).
2020-06-04 15:30:41 +02:00
Simon Hausmann
45879a4e04 Add an install option to the cmake xtask to run cmake --install 2020-06-04 15:29:19 +02:00
Simon Hausmann
a4da4de8c8 Add the ability to specify an install prefix for the cmake xtask build 2020-06-04 15:29:19 +02:00
Simon Hausmann
c5001703d4 Build the cmake module for our runtime as xtask, part 2
This is done by calling cargo with json output to build the libraries,
collect the .a files, extract the native libraries needed for final
linkage and pass all that to a CMake project that cobbles together the
.a files into a propery cmake target with include paths, etc.
2020-06-04 15:29:19 +02:00
Simon Hausmann
8a2a7ae8cb Add a boilerplate for the xtask concept
This shall provide a task to build the cmake module.
2020-06-04 15:29:19 +02:00
Simon Hausmann
33cfe03dc9 Rework the C++ facing build system, part 1
The objective is to automatically create a propery cmake module, with a
FindSixtyFPSConfig.cmake, corresponding targets .cmake files, etc. This
should encapsulate the build profile (debug vs. release) and also allow
making the choice of shared vs. static transparent.

Unfortunately it does not seem to be possible to easily combine different
crates into one cdylib crate that can re-export symbols from the
statically linked rust crates (cbindgen generated, as well as manual
extern "C").

That means for the dynamic case (not cared for right now), we're going
to need to create either one cdylib per crate that has public symbols or
manually re-export the symbols.

For the static case, linking just against the "last crate" in the chain
(the gl renderer backend) is sufficient to pull in all needed symbols.

In addition for the static case we need to specify the linkage of some
external libraries. This can be extracted manually via

    cargo rustc -p gl -- --print=native-static-libs

for example. For now that's in the changed CMakeLists.txt, but the plan
going forward is to automate this extraction in an xtask, to paste that
into the cmake target.

Finally, both linkage scenarios require access to the headers. This is
for now solved by generating them simply in an include sub-directory of
the build folder ($root/target/${profile}/include).
2020-06-04 15:29:19 +02:00
Olivier Goffart
ec8baa81f2 formating 2020-06-04 14:05:17 +02:00
Olivier Goffart
7b8df5ca9d Use interior mutability for the cache
So we do not need a mutable reference to the Component
2020-06-04 14:03:30 +02:00
Olivier Goffart
e4366efb67 Do not require the component to be static to show a window 2020-06-04 13:44:40 +02:00
Olivier Goffart
aa08ee1148 Fix signal connection from JS
Since we do not have persistent handle, I need to find a place to save the
callback, so i save them in a property of the component
2020-06-04 12:49:33 +02:00
Olivier Goffart
adaadc30a9 Remove the "Rendering..." debug message.
This just polute the output while debugging other stuff
2020-06-04 12:49:33 +02:00
Olivier Goffart
49d2aec7e2 Node: add possibility to add signal handler
Right now, this only works once and then panic the second time
2020-06-04 12:49:33 +02:00
Simon Hausmann
12457ed7f3 Fix crash when using optimized gcc builds
Don't return void in non-void functions.
2020-06-04 08:44:24 +02:00