diff --git a/CMakeLists.txt b/CMakeLists.txt deleted file mode 100644 index 555ae41..0000000 --- a/CMakeLists.txt +++ /dev/null @@ -1,91 +0,0 @@ -cmake_minimum_required(VERSION 3.14) -project(maraiah-tycho CXX) - -include(FeatureSummary) - -set(CMAKE_AUTOMOC ON) -set(CMAKE_AUTORCC ON) -set(CMAKE_AUTOUIC ON) -set(CMAKE_INCLUDE_CURRENT_DIR ON) - -set(CMAKE_CXX_FLAGS_DEBUGOPT "-O2 -g") -set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DQT_QML_DEBUG") - -set(THREADS_PREFER_PTHREAD_FLAG ON) - -set(CARGO_FLAGS) - -if(CMAKE_BUILD_TYPE STREQUAL Release) - set(RUST_TARGET_DIR "release") - set(CARGO_FLAGS "${CARGO_FLAGS} --release") -else() - set(RUST_TARGET_DIR "debug") -endif() - -set(CARGO_TARGET_DIR "${CMAKE_BINARY_DIR}/rust") -set(RUST_LIB "${CARGO_TARGET_DIR}/${RUST_TARGET_DIR}/libtycho.a") - -find_package(Threads REQUIRED) -find_package(Qt5 5.6.0 CONFIG REQUIRED COMPONENTS Core Widgets) - -feature_summary( - WHAT - ALL - INCLUDE_QUIET_PACKAGES - FATAL_ON_MISSING_REQUIRED_PACKAGES -) - -add_custom_command( - OUTPUT "${RUST_LIB}" - COMMAND env CARGO_TARGET_DIR="${CARGO_TARGET_DIR}" cargo build -p maraiah-tycho ${CARGO_FLAGS} - WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" - COMMENT "Building Rust library" -) - -add_custom_target( - test - COMMAND env CARGO_TARGET_DIR="${CARGO_TARGET_DIR}" cargo test - DEPENDS "${RUST_LIB}" - WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" -) - -add_custom_target(maraiah-tycho-rust DEPENDS "${RUST_LIB}") - -add_executable( - maraiah-tycho - WIN32 - source/tycho/headers/mapprops.h - source/tycho/headers/menu.h - source/tycho/headers/tycho.h - source/tycho/resources/resources.qrc - source/tycho/source/main.cc - source/tycho/source/mapprops.cc - source/tycho/source/menu.cc - source/tycho/ui/about.ui - source/tycho/ui/mapprops.ui - source/tycho/ui/mapview.ui - source/tycho/ui/menu.ui - source/tycho/ui/points.ui -) - -set_target_properties( - maraiah-tycho - PROPERTIES - CXX_STANDARD 17 - CXX_STANDARD_REQUIRED ON -) - -target_include_directories(maraiah-tycho PUBLIC source/tycho/headers) - -add_dependencies(maraiah-tycho maraiah-tycho-rust) - -target_link_libraries( - maraiah-tycho - "${RUST_LIB}" - Threads::Threads - ${CMAKE_DL_LIBS} - Qt5::Core - Qt5::Widgets -) - -## EOF diff --git a/source/leela/Cargo.toml b/source/leela/Cargo.toml index a81e41f..1d010c2 100644 --- a/source/leela/Cargo.toml +++ b/source/leela/Cargo.toml @@ -3,8 +3,7 @@ name = "maraiah-leela" version = "0.1.0" authors = ["Alison Watson "] description = "Maraiah testbed program." - -edition = "2018" +edition = "2018" [dependencies] clap = "2" diff --git a/source/tycho/CMakeLists.txt b/source/tycho/CMakeLists.txt new file mode 100644 index 0000000..1c25ec3 --- /dev/null +++ b/source/tycho/CMakeLists.txt @@ -0,0 +1,61 @@ +cmake_minimum_required(VERSION 3.14) +cmake_policy(SET CMP0046 NEW) +cmake_policy(SET CMP0063 NEW) +cmake_policy(SET CMP0071 NEW) + +project(maraiah-tycho-hermes CXX) + +set(CMAKE_AUTOMOC ON) +set(CMAKE_AUTORCC ON) +set(CMAKE_AUTOUIC ON) +set(CMAKE_INCLUDE_CURRENT_DIR ON) + +find_package( + Qt5 5.6.0 + CONFIG + REQUIRED + COMPONENTS Core Widgets +) + +add_library( + maraiah-tycho-hermes + SHARED + $ENV{OUT_DIR}/bindings.cc + $ENV{OUT_DIR}/bindings.h + headers/mapprops.h + headers/menu.h + headers/tycho.h + resources/resources.qrc + source/main.cc + source/mapprops.cc + source/menu.cc + ui/about.ui + ui/mapprops.ui + ui/mapview.ui + ui/menu.ui + ui/points.ui +) + +set_target_properties( + maraiah-tycho-hermes + PROPERTIES + CXX_STANDARD 17 + CXX_STANDARD_REQUIRED ON +) + +target_include_directories( + maraiah-tycho-hermes + PUBLIC + headers + $ENV{OUT_DIR} +) + +target_link_libraries( + maraiah-tycho-hermes + Qt5::Core + Qt5::Widgets +) + +install(TARGETS maraiah-tycho-hermes) + +## EOF diff --git a/source/tycho/Cargo.toml b/source/tycho/Cargo.toml index ff6b0a5..3779ded 100644 --- a/source/tycho/Cargo.toml +++ b/source/tycho/Cargo.toml @@ -4,12 +4,16 @@ version = "0.1.0" authors = ["Alison Sanderson "] description = "Tycho map editor." edition = "2018" +build = "build.rs" [dependencies] maraiah = {path = "../.."} memmap = "0.7" -[lib] +[build-dependencies] +cmake = "0.1" +rust_qt_binding_generator = "0.3" + +[[bin]] name = "tycho" -path = "lib.rs" -crate-type = ["staticlib"] +path = "main.rs" diff --git a/source/tycho/bindings.json b/source/tycho/bindings.json new file mode 100644 index 0000000..f52365a --- /dev/null +++ b/source/tycho/bindings.json @@ -0,0 +1,10 @@ +{ + "cppFile": "", + "rust": { + "dir": "", + "interfaceModule": "interface", + "implementationModule": "implementation" + }, + "objects": { + } +} diff --git a/source/tycho/build.rs b/source/tycho/build.rs new file mode 100644 index 0000000..bfaf76a --- /dev/null +++ b/source/tycho/build.rs @@ -0,0 +1,22 @@ +use rust_qt_binding_generator::*; +use std::path::PathBuf; + +fn main() +{ + let out_dir = PathBuf::from(std::env::var("OUT_DIR").unwrap()); + + let mut config = configuration::parse("bindings.json").unwrap(); + + config.overwrite_implementation = true; + config.cpp_file = out_dir.join("bindings.cc"); + config.rust.dir = out_dir; + + generate_bindings(&config).unwrap(); + + let dst = cmake::Config::new(".").build(); + + println!("cargo:rustc-link-search=native={}/lib", dst.display()); + println!("cargo:rustc-link-lib=dylib=maraiah-tycho-hermes"); +} + +// EOF diff --git a/source/tycho/lib.rs b/source/tycho/lib.rs deleted file mode 100644 index 359ad34..0000000 --- a/source/tycho/lib.rs +++ /dev/null @@ -1,16 +0,0 @@ -use maraiah::durandal::ffi; - -#[no_mangle] -pub extern "C" fn test_fn(fname: *const ffi::c_char) -{ - let fname = unsafe {ffi::CStr::from_ptr(fname)}; - println!("hello, world! from rust: {}", fname.to_str().unwrap()); -} - -/* -struct Project -{ -} -*/ - -// EOF diff --git a/source/tycho/main.rs b/source/tycho/main.rs new file mode 100644 index 0000000..3e47c38 --- /dev/null +++ b/source/tycho/main.rs @@ -0,0 +1,29 @@ +use maraiah::durandal::{err::*, ffi}; + +extern "C" { + fn main_cc(app_name: *mut ffi::c_char); +} + +#[no_mangle] +unsafe extern "C" fn Ma_test_fn(fname: *const ffi::c_char) +{ + let fname = ffi::CStr::from_ptr(fname); + println!("hello, world! from rust: {}", fname.to_str().unwrap()); +} + +fn main() -> ResultS<()> +{ + println!("rust entry"); + + let mut args = std::env::args(); + let app_name = args.next().ok_or(err_msg("bad launch name"))?; + let app_name = ffi::CString::new(app_name)?; + + unsafe { + main_cc(app_name.into_raw()); + } + + Ok(()) +} + +// EOF diff --git a/source/tycho/resources/resources.qrc b/source/tycho/resources/resources.qrc index 90dbeec..374c078 100644 --- a/source/tycho/resources/resources.qrc +++ b/source/tycho/resources/resources.qrc @@ -1,5 +1,5 @@ - + color/lines.png color/map.png color/points.png diff --git a/source/tycho/source/main.cc b/source/tycho/source/main.cc index 2e12703..c79b3b5 100644 --- a/source/tycho/source/main.cc +++ b/source/tycho/source/main.cc @@ -1,13 +1,19 @@ #include "menu.h" #include -#include -int main(int argc, char *argv[]) -{ - QApplication a(argc, argv); - Menu w; - w.show(); - return a.exec(); +extern "C" { + int main_cc(char *app_path) + { + puts("cc entry"); + + int argc = 1; + char *argv[] = {app_path, nullptr}; + + QApplication a(argc, argv); + Menu w; + w.show(); + return a.exec(); + } } // EOF diff --git a/source/tycho/source/menu.cc b/source/tycho/source/menu.cc index 10ac914..f86c059 100644 --- a/source/tycho/source/menu.cc +++ b/source/tycho/source/menu.cc @@ -7,7 +7,7 @@ #include #include -extern "C" void test_fn(char const *fname); +extern "C" void Ma_test_fn(char const *fname); Menu::Menu(QWidget *parent) : QMainWindow(parent), @@ -35,7 +35,7 @@ void Menu::mapOpen() QString(), tr("Marathon Map files (*.scen *.sceA Map)")); - test_fn(qUtf8Printable(fname)); + Ma_test_fn(qUtf8Printable(fname)); } void Menu::openAbout()