From 5df0bf864feddd67bb671469b47e7262d3f2de63 Mon Sep 17 00:00:00 2001 From: jorenchik Date: Sun, 8 Dec 2024 11:05:50 +0200 Subject: [PATCH] Linux un Windows build differences in CMakeLists and appropriate README --- CMakeLists.txt | 34 ++++++++++++++++-- README.md | 75 +++++++++++++++++++++++++++++++++++++++ src/qtapp/CMakeLists.txt | 36 ++++++++++++------- src/test/CMakeLists.txt | 14 ++++++++ src/transpiler/parser.cpp | 1 + 5 files changed, 144 insertions(+), 16 deletions(-) create mode 100644 README.md diff --git a/CMakeLists.txt b/CMakeLists.txt index 777a5df..ca052e5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,10 +5,38 @@ set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED True) set( - CMAKE_CXX_FLAGS_DEBUG - "${CMAKE_CXX_FLAGS_DEBUG} -g3 -O0 -ggdb -fno-inline" + CMAKE_EXPORT_COMPILE_COMMANDS + ON CACHE BOOL "Enable generation of compile_commands.json by default" ) +if (WIN32) + set( + WIN32_ADDITIONAL_OPTIONS "-static-libgcc -static-libstdc++ -static" + CACHE STRING "Additional options for Windows builds" + ) +endif() + +set( + DEFAULT_DEBUG_OPTIONS "-g3 -O0 -ggdb -fno-inline" + CACHE STRING "Default debug options" +) +set( + DEFAULT_RELEASE_OPTIONS "-O3 -DNDEBUG" + CACHE STRING "Default release options" +) + +if (WIN32) + set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${DEFAULT_DEBUG_OPTIONS} ${WIN32_ADDITIONAL_OPTIONS}") + set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${DEFAULT_RELEASE_OPTIONS} ${WIN32_ADDITIONAL_OPTIONS}") +else() + set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${DEFAULT_DEBUG_OPTIONS}") + set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${DEFAULT_RELEASE_OPTIONS}") +endif() + +option(COMPILE_TESTS "Compile tests" ON) + add_subdirectory(src/transpiler) add_subdirectory(src/qtapp) -add_subdirectory(src/test) +if (COMPILE_TESTS) + add_subdirectory(src/test) +endif() diff --git a/README.md b/README.md new file mode 100644 index 0000000..887c7d7 --- /dev/null +++ b/README.md @@ -0,0 +1,75 @@ +# Nepieciešamie rīki un bibliotēkas + +## Linux + +- `C++` kompilators (piemēram, `g++`) +- Bibliotēka `Qt` (v5.15.0) +- Bibliotēka `QScintilla` (v2.14) +- Bibliotēka `GTest` (v1.15) +- Rīks `CMake` +- Rīks `Ninja` + +## Windows + +- `C++` kompilators ([`MinGw`](https://winlibs.com/)) +- Bibliotēka `Qt` (v5.15.0) +- Bibliotēka `QScintilla` (v2.14) +- Bibliotēka `GTest` (v1.15) +- Rīks `CMake` +- Rīks `Ninja` + +# Uzbūvēšana + +Linux un Windows sistēmām ir norādītas noklusētās bibliotēku atrašanās vietas. +Lai uzbūvētu ar noklusētiem iestatījumiem. + +```bash +mkdir Debug/ +cd Debug/ +cmake -DCMAKE_BUILD_TYPE=Debug -G Ninja .. +``` + +Lai nekompilētu testus pievieno `-DCOMPILE_TESTS=OFF`. + +Ir pieejamas 2 cmake konfigurācijas - `Debug` (atkļūdošana) un `Release` +(piegāde). Ja nepieciešams pielāgot vienu vai vairākus parametrus, skatīt +nākamās 2 sadaļas. + +## Linux + +```bash +cmake -DCMAKE_BUILD_TYPE=Debug \ + -DQt5_DIR="/usr/lib/cmake/Qt5" \ + -DQSCINTILLA_LIB_PATH="/usr/lib/libqscintilla2_qt5.so" \ + -DQSCINTILLA_INCLUDE_PATH="/usr/include/qt/Qsci" \ + -DGTEST_INCLUDE_DIR="/usr/include/gtest" \ + -DGTEST_LIBRARY="/usr/lib/libgtest.so" \ + -DGTEST_MAIN_LIBRARY="/usr/lib/libgtest_main.so" \ + -G Ninja .. +``` + +## Windows + +```bash +cmake -DCMAKE_BUILD_TYPE=Debug \ + -DQt5_DIR="C:/Qt/5.15.0/mingw81_64/lib/cmake/Qt5" \ + -DQSCINTILLA_LIB_PATH="C:/Programs/binaries/qscintilla2_qt5.dll" \ + -DQSCINTILLA_INCLUDE_PATH="C:/Programs/QScintilla_src-2.14.1/src" \ + -DGTEST_INCLUDE_DIR="C:/Programs/binaries/gtest_include" \ + -DGTEST_LIBRARY="C:/Programs/binaries/gtest_lib/libgtest.a" \ + -DGTEST_MAIN_LIBRARY="C:/Programs/binaries/gtest_lib/libgtest_main.a" \ + -G Ninja .. +``` + +Lai ieliktu direktorijā nepieciešamās bibliotēkas. + +``` +cd ./src/qtapp/ +windeployqt MdemoryApp.exe +``` + +Darbam uz Windows direktorijā papildus jāieliek `qscintilla2_qt5.dll` un +`Qt5PrintSupport.dll`. + +Piegādes kompilēšanā var pielikt `-DWIN32_EXECUTABLE=ON`, lai slēdzot programmu +nerādītos termināla logs. diff --git a/src/qtapp/CMakeLists.txt b/src/qtapp/CMakeLists.txt index 07427ae..62d7c1b 100644 --- a/src/qtapp/CMakeLists.txt +++ b/src/qtapp/CMakeLists.txt @@ -1,21 +1,31 @@ -# cmake_minimum_required(VERSION 3.10) -# if(CMAKE_VERSION VERSION_LESS "3.7.0") -# set(CMAKE_INCLUDE_CURRENT_DIR ON) -# endif() - -# set(CMAKE_CXX_STANDARD 20) -# set(CMAKE_CXX_STANDARD_REQUIRED ON) -set(CMAKE_EXPORT_COMPILE_COMMANDS ON) - set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) set(CMAKE_AUTOUIC ON) -find_package(Qt5 COMPONENTS Widgets REQUIRED) +if (WIN32) + set(DEFAULT_QT5_DIR "C:/Qt/5.15.0/mingw81_64/lib/cmake/Qt5") + set(DEFAULT_QSCINTILLA_LIB_PATH "C:/Programs/binaries/qscintilla2_qt5.dll") + set(DEFAULT_QSCINTILLA_INCLUDE_PATH "C:/Programs/QScintilla_src-2.14.1/src") +else() + set(DEFAULT_QT5_DIR "/usr/lib/cmake/Qt5") + set(DEFAULT_QSCINTILLA_LIB_PATH "/usr/lib/libqscintilla2_qt5.so") + set(DEFAULT_QSCINTILLA_INCLUDE_PATH "/usr/include/qt/Qsci") +endif() -# find_package(QScintilla REQUIRED) -include_directories(/usr/include/qt/Qsci) +set(Qt5_DIR ${DEFAULT_QT5_DIR} CACHE PATH "Path to Qt5 CMake configuration") +set(QSCINTILLA_LIB_PATH ${DEFAULT_QSCINTILLA_LIB_PATH} CACHE PATH "Path to QScintilla library") +set(QSCINTILLA_INCLUDE_PATH ${DEFAULT_QSCINTILLA_INCLUDE_PATH} CACHE PATH "Path to QScintilla include files") +set(CMAKE_PREFIX_PATH ${Qt5_DIR} ${CMAKE_PREFIX_PATH}) + +include_directories(${QSCINTILLA_INCLUDE_PATH}) + +option(WIN32_EXECUTABLE "Set this option to remove terminal opening on Windows" OFF) +if (WIN32 AND WIN32_EXECUTABLE) + set_target_properties(MdemoryApp PROPERTIES WIN32_EXECUTABLE TRUE) +endif() + +find_package(Qt5 COMPONENTS Widgets Gui REQUIRED) qt5_add_resources(RESOURCES ${CMAKE_SOURCE_DIR}/resources/resources.qrc) add_library( @@ -31,6 +41,6 @@ add_executable( ${RESOURCES} ) -target_link_libraries(gui Qt5::Widgets /usr/lib/libqscintilla2_qt5.so api) +target_link_libraries(gui Qt5::Widgets Qt5::Gui ${QSCINTILLA_LIB_PATH} api) target_link_libraries(MdemoryApp gui) target_include_directories(MdemoryApp PRIVATE ${CMAKE_SOURCE_DIR}/src/include) diff --git a/src/test/CMakeLists.txt b/src/test/CMakeLists.txt index 3541e43..54ce9ac 100644 --- a/src/test/CMakeLists.txt +++ b/src/test/CMakeLists.txt @@ -4,6 +4,20 @@ project(MdemoryTest) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) +if (WIN32) + set(DEFAULT_GTEST_INCLUDE_DIR "C:/Programs/binaries/gtest_include") + set(DEFAULT_GTEST_LIBRARY "C:/Programs/binaries/gtest_lib/libgtest.a") + set(DEFAULT_GTEST_MAIN_LIBRARY "C:/Programs/binaries/gtest_lib/libgtest_main.a") +else() + set(DEFAULT_GTEST_INCLUDE_DIR "/usr/include/gtest") + set(DEFAULT_GTEST_LIBRARY "/usr/lib/libgtest.so") + set(DEFAULT_GTEST_MAIN_LIBRARY "/usr/lib/libgtest_main.so") +endif() + +set(GTEST_INCLUDE_DIR ${DEFAULT_GTEST_INCLUDE_DIR} CACHE PATH "Path to GTest include directory") +set(GTEST_LIBRARY ${DEFAULT_GTEST_LIBRARY} CACHE FILEPATH "Path to GTest library") +set(GTEST_MAIN_LIBRARY ${DEFAULT_GTEST_MAIN_LIBRARY} CACHE FILEPATH "Path to GTest main library") + find_package(GTest REQUIRED) enable_testing() diff --git a/src/transpiler/parser.cpp b/src/transpiler/parser.cpp index 1b08191..715b439 100644 --- a/src/transpiler/parser.cpp +++ b/src/transpiler/parser.cpp @@ -84,6 +84,7 @@ Result ValidateGrammar(const std::vector& tokens) { nextToken.tokenType ) == (*transitions)[token.tokenType].end()) { + auto capitalize = [](const std::string& str) { if (str.empty()) return str; std::string result = str;