Switch to CMake for Qt build
This commit is contained in:
		
							parent
							
								
									2138179760
								
							
						
					
					
						commit
						761fc4aa90
					
				
					 8 changed files with 73 additions and 53 deletions
				
			
		
							
								
								
									
										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…
	
	Add table
		Add a link
		
	
		Reference in a new issue