Switch to CMake for Qt build
This commit is contained in:
parent
2138179760
commit
761fc4aa90
15
Makefile
15
Makefile
|
@ -1,12 +1,15 @@
|
||||||
all:
|
BUILD:=_build
|
||||||
dune build src/lib/oboy.exe
|
|
||||||
|
# all:
|
||||||
|
# dune build src/core/oboy.exe
|
||||||
|
|
||||||
core:
|
core:
|
||||||
dune build src/core/oboy.a
|
dune build src/core/oboy.so
|
||||||
|
cp _build/default/src/core/oboy.so $(BUILD)/liboboycore.so
|
||||||
|
|
||||||
check:
|
# check:
|
||||||
ocamlbuild -use-ocamlfind -I src -lflag -g test/test_bit.byte --
|
# ocamlbuild -use-ocamlfind -I src -lflag -g test/test_bit.byte --
|
||||||
ocamlbuild -use-ocamlfind -I src -lflag -g test/test_interrupt.byte --
|
# ocamlbuild -use-ocamlfind -I src -lflag -g test/test_interrupt.byte --
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
dune clean
|
dune clean
|
||||||
|
|
|
@ -1,3 +1,7 @@
|
||||||
(library
|
; oboy.ml as the top-level file
|
||||||
|
; building a shared library because we are relying on pthread and we cannot
|
||||||
|
; combine static pthread with dynamic libc
|
||||||
|
(executable
|
||||||
(name oboy)
|
(name oboy)
|
||||||
(libraries threads))
|
(libraries threads)
|
||||||
|
(modes shared_object))
|
||||||
|
|
|
@ -60,7 +60,7 @@ let power_up cartridge =
|
||||||
run cpu mem screen
|
run cpu mem screen
|
||||||
|
|
||||||
|
|
||||||
let main =
|
(** let main =
|
||||||
if Array.length Sys.argv < 2 then begin
|
if Array.length Sys.argv < 2 then begin
|
||||||
prerr_endline "Please specify a ROM.";
|
prerr_endline "Please specify a ROM.";
|
||||||
eprintf "Usage: %s path/to/rom\n" Sys.argv.(0);
|
eprintf "Usage: %s path/to/rom\n" Sys.argv.(0);
|
||||||
|
@ -70,7 +70,8 @@ let main =
|
||||||
let cartridge = Cartridge.read_cartridge Sys.argv.(1) in
|
let cartridge = Cartridge.read_cartridge Sys.argv.(1) in
|
||||||
match cartridge with
|
match cartridge with
|
||||||
| None -> print_endline "Invalid ROM file."
|
| None -> print_endline "Invalid ROM file."
|
||||||
| Some c -> power_up c
|
| Some c -> power_up c *)
|
||||||
|
|
||||||
(** let () =
|
let () =
|
||||||
main *)
|
Callback.register "name" Version.name;
|
||||||
|
Callback.register "version" Version.version;
|
||||||
|
|
|
@ -1,6 +1,2 @@
|
||||||
let name () = "oboy"
|
let name () = "oboy"
|
||||||
let version () = "1.0a"
|
let version () = "1.0a"
|
||||||
|
|
||||||
let () =
|
|
||||||
Callback.register "name" name;
|
|
||||||
Callback.register "version" version;
|
|
||||||
|
|
24
src/qt/CMakeLists.txt
Normal file
24
src/qt/CMakeLists.txt
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
cmake_minimum_required(VERSION 3.1)
|
||||||
|
|
||||||
|
project(oboy LANGUAGES CXX)
|
||||||
|
|
||||||
|
set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
||||||
|
set(CMAKE_AUTOMOC ON)
|
||||||
|
set(CMAKE_AUTORCC ON)
|
||||||
|
set(CMAKE_CXX_STANDARD 11)
|
||||||
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
|
|
||||||
|
find_package(Qt5 COMPONENTS Core Quick REQUIRED)
|
||||||
|
|
||||||
|
add_executable(${PROJECT_NAME} "main.cpp" "qml.qrc")
|
||||||
|
target_compile_definitions(${PROJECT_NAME} PRIVATE $<$<OR:$<CONFIG:Debug>,$<CONFIG:RelWithDebInfo>>:QT_QML_DEBUG>)
|
||||||
|
target_link_libraries(${PROJECT_NAME} PRIVATE Qt5::Core Qt5::Quick)
|
||||||
|
|
||||||
|
# OCaml
|
||||||
|
set(OCAML_ROOT "/usr/lib/ocaml")
|
||||||
|
target_include_directories(${PROJECT_NAME} PRIVATE ${OCAML_ROOT})
|
||||||
|
target_link_directories(${PROJECT_NAME} PRIVATE ${OCAML_ROOT} ${CMAKE_SOURCE_DIR}/../../_build)
|
||||||
|
target_link_libraries(${PROJECT_NAME} PRIVATE oboycore m dl asmrun)
|
||||||
|
|
||||||
|
#target_link_options(${PROJECT_NAME} PRIVATE -L${CMAKE_SOURCE_DIR}/../../_build -loboy)
|
||||||
|
#target_link_options(${PROJECT_NAME} PRIVATE -L${OCAML_ROOT} -lm -ldl -lasmrun)
|
|
@ -1,13 +0,0 @@
|
||||||
unix:!android {
|
|
||||||
isEmpty(target.path) {
|
|
||||||
qnx {
|
|
||||||
target.path = /tmp/$${TARGET}/bin
|
|
||||||
} else {
|
|
||||||
target.path = /opt/$${TARGET}/bin
|
|
||||||
}
|
|
||||||
export(target.path)
|
|
||||||
}
|
|
||||||
INSTALLS += target
|
|
||||||
}
|
|
||||||
|
|
||||||
export(INSTALLS)
|
|
|
@ -1,5 +1,7 @@
|
||||||
#include <QApplication>
|
#include <QGuiApplication>
|
||||||
#include <QQmlApplicationEngine>
|
#include <QQmlApplicationEngine>
|
||||||
|
#include <iostream>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
#include <caml/mlvalues.h>
|
#include <caml/mlvalues.h>
|
||||||
#include <caml/callback.h>
|
#include <caml/callback.h>
|
||||||
|
@ -9,14 +11,38 @@ void load_caml(char *argv[])
|
||||||
caml_main(argv);
|
caml_main(argv);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void print_closure(const std::string &closure_name) {
|
||||||
|
value * closure_f = caml_named_value(closure_name.c_str());
|
||||||
|
if (closure_f == nullptr) {
|
||||||
|
std::cerr << "ERROR: Unreachable closure " << closure_name << "\n";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *str = String_val(caml_callback(*closure_f, Val_unit));
|
||||||
|
std::cout << closure_name << ": " << str << "\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
QApplication app(argc, argv);
|
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
|
||||||
|
QGuiApplication app(argc, argv);
|
||||||
|
|
||||||
QQmlApplicationEngine engine;
|
QQmlApplicationEngine engine;
|
||||||
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
|
const QUrl url(QStringLiteral("qrc:/main.qml"));
|
||||||
|
QObject::connect(&engine, &QQmlApplicationEngine::objectCreated,
|
||||||
|
&app, [url](QObject *obj, const QUrl &objUrl) {
|
||||||
|
if (!obj && url == objUrl)
|
||||||
|
QCoreApplication::exit(-1);
|
||||||
|
}, Qt::QueuedConnection);
|
||||||
|
engine.load(url);
|
||||||
|
|
||||||
load_caml(argv);
|
load_caml(argv);
|
||||||
|
|
||||||
|
std::cout << "test std::cout" << "\n";
|
||||||
|
std::cerr << "test std::cerr" << "\n";
|
||||||
|
print_closure("name");
|
||||||
|
print_closure("version");
|
||||||
|
|
||||||
return app.exec();
|
return app.exec();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,21 +0,0 @@
|
||||||
TEMPLATE = app
|
|
||||||
|
|
||||||
QT += qml quick widgets
|
|
||||||
|
|
||||||
CONFIG += c++11
|
|
||||||
|
|
||||||
SOURCES += main.cpp
|
|
||||||
|
|
||||||
# `ocamlc -where` = /usr/lib/ocaml
|
|
||||||
INCLUDEPATH += /usr/lib/ocaml
|
|
||||||
|
|
||||||
LIBS += -L/home/fabs/Code/oboy/_build/default/src/core -loboy # TODO: fix path to OCaml library
|
|
||||||
LIBS += -L/usr/lib/ocaml -lm -ldl -lasmrun # /usr/lib/ocaml/Makefile.config | grep NATIVECCLIBS
|
|
||||||
|
|
||||||
RESOURCES += qml.qrc
|
|
||||||
|
|
||||||
# Additional import path used to resolve QML modules in Qt Creator's code model
|
|
||||||
QML_IMPORT_PATH =
|
|
||||||
|
|
||||||
# Default rules for deployment.
|
|
||||||
include(deployment.pri)
|
|
Loading…
Reference in a new issue