diff --git a/.gitignore b/.gitignore index 1fe0f8b..c3b9ee6 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ windows/.vs windows/x64 windows/enc_temp_folder windows/packages +linux/build/ racket/lib racket/modules third_party/racket/lib/x64 diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..18d2c57 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,71 @@ +cmake_minimum_required(VERSION 3.14) +project(tangerine) + +if (MSVC) + message(FATAL_ERROR + "Currently CMake is only used on the Linux platform.\ + Visual Studio users should open the .sln file directly, instead.") +endif() + +option(EMBED_LUA "Embed Lua support" ON) +option(EMBED_RACKET "Embed Racket support" OFF) + +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_C_STANDARD 17) + +file(GLOB_RECURSE TANGERINE_FILES "tangerine/*.cpp") + +if(EMBED_LUA) + file(GLOB TANGERINE_LUA_FILES "third_party/lua-5.4.4/lua/*.c") + list(FILTER + TANGERINE_LUA_FILES + EXCLUDE REGEX + ".*/lua/(onelua|lua|luac)\.c") # these define main +endif() + +file(GLOB TANGERINE_IMGUI_FILES + "third_party/imgui/*.cpp") + +set(TANGERINE_THIRD_PARTY_FILES + ${TANGERINE_IMGUI_FILES} + "third_party/imgui/backends/imgui_impl_opengl3.cpp" + "third_party/imgui/backends/imgui_impl_sdl.cpp" + "third_party/voxwriter/VoxWriter.cpp" + "third_party/fmt/src/format.cc" + "third_party/glad/glad.c" + ${TANGERINE_LUA_FILES}) + +set(TANGERINE_INCLUDE_DIRS + "third_party" + "third_party/fmt/include" + "third_party/imgui" + "third_party/imgui/backends") + +if(EMBED_LUA) + list(APPEND TANGERINE_INCLUDE_DIRS "third_party/lua-5.4.4") +endif() +if(EMBED_RACKET) + list(APPEND TANGERINE_INCLUDE_DIRS "third_party/racket/include") +endif() + +add_executable(tangerine + ${TANGERINE_FILES} + ${TANGERINE_THIRD_PARTY_FILES}) + +find_package(SDL2 REQUIRED) + +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK3 REQUIRED gtk+-3.0) +include_directories( + ${TANGERINE_INCLUDE_DIRS} + ${GTK3_INCLUDE_DIRS}) + +target_compile_definitions(tangerine PRIVATE + "EMBED_LUA=$" + "EMBED_RACKET=$") + +target_link_libraries(tangerine + SDL2::SDL2 + "$<$:racketcs>" + tinfo + ${GTK3_LIBRARIES}) diff --git a/linux/build_majuscule.sh b/linux/build_majuscule.sh old mode 100644 new mode 100755 index e2ac17e..985e416 --- a/linux/build_majuscule.sh +++ b/linux/build_majuscule.sh @@ -2,23 +2,11 @@ cd `dirname $0` cd .. -clang++ \ - -std=c++17 \ - -fPIC \ - -U_WIN64 \ - -Ithird_party/fmt/include \ - -Ithird_party/imgui \ - -Ithird_party/imgui/backends \ - -Ithird_party \ - -I/usr/include/racket \ - -L/usr/lib/racket \ - -lracket \ - `pkg-config --libs --cflags sdl2 gtk+-3.0` \ - tangerine/*.cpp \ - third_party/imgui/*.cpp \ - third_party/imgui/backends/imgui_impl_opengl3.cpp \ - third_party/imgui/backends/imgui_impl_sdl.cpp \ - third_party/fmt/src/format.cc \ - third_party/Glad/glad.c \ - third_party/voxwriter/VoxWriter.cpp \ - -o package/tangerine/tangerine.out +cmake -B linux/build/Debug -DCMAKE_BUILD_TYPE=Debug \ + -DCMAKE_CXX_COMPILER=clang++ \ + -DCMAKE_C_COMPILER=clang +cmake -B linux/build/Release -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_CXX_COMPILER=clang++ \ + -DCMAKE_C_COMPILER=clang + +cmake --build linux/build/Release diff --git a/regen.sh b/regen.sh new file mode 100755 index 0000000..4e17404 --- /dev/null +++ b/regen.sh @@ -0,0 +1,3 @@ +raco exe -v -o delete_me --collects-dest racket/collects ++lib tangerine ++lib tangerine/smol ++lib vec ++lib racket/base/lang/reader ++lib s-exp/lang/reader ++lib at-exp/lang/reader ++lib racket/runtime-config ++lib ffi/unsafe models/basic_thing.rkt + +rm delete_me diff --git a/tangerine/embedding.h b/tangerine/embedding.h index 158b221..2a83bf0 100644 --- a/tangerine/embedding.h +++ b/tangerine/embedding.h @@ -22,7 +22,7 @@ #endif #ifndef EMBED_RACKET -#define EMBED_RACKET 1 +#define EMBED_RACKET 0 #endif #define EMBED_MULTI (EMBED_LUA + EMBED_RACKET) > 1 diff --git a/tangerine/export.cpp b/tangerine/export.cpp index 53bbd63..1548156 100644 --- a/tangerine/export.cpp +++ b/tangerine/export.cpp @@ -23,9 +23,11 @@ #include #include #include +#ifndef MINIMAL_DLL #if _WIN64 #include #endif +#endif #include #include "threadpool.h" #include "extern.h" diff --git a/tangerine/gl_boilerplate.cpp b/tangerine/gl_boilerplate.cpp index 7ab5ccc..94e0fa5 100644 --- a/tangerine/gl_boilerplate.cpp +++ b/tangerine/gl_boilerplate.cpp @@ -246,6 +246,8 @@ StatusCode RouteSource(std::vector& BreadCrumbs, std::vector b ? a : b) +#endif + #define MINIMUM_VERSION_MAJOR 4 #define MINIMUM_VERSION_MINOR 2 @@ -1361,7 +1367,7 @@ void RenderUI(SDL_Window* Window, bool& Live) glBindFramebuffer(GL_READ_FRAMEBUFFER, 0); std::string Msg = fmt::format("CSG Leaf Count: {}\n", LeafCount); - ImGui::SetTooltip(Msg.c_str()); + ImGui::SetTooltip("%s", Msg.c_str()); } if (ShowFocusOverlay) @@ -1743,6 +1749,10 @@ void Boot(int argc, char* argv[]) BootRacket(); #endif } + { + std::cout << "Initialize gtk+3.0... "; + gtk_init(&argc, &argv); + } { std::cout << "Setting up Dear ImGui... "; IMGUI_CHECKVERSION(); @@ -2079,6 +2089,7 @@ void MainLoop() } } EndEvent(); + gtk_main_iteration_do(false); } } }