Hallelujah

I finally got a cross-platform build for kge [1] that builds binaries in Linux, MacOS, and Windows. I had to do some trickery with the Windows side, and it really only builds in CLion. That works for me; it builds on the command line in MacOS and Linux just fine. I mostly just want it to run in Windows on my desktop. There was something about copying SDL2.dll to system32, and I think a few other things.

The other major Windows adjustment was to disable freetype. The way I came up to do this is to have

find_package(Freetype)
if (DEFINED FREETYPE_INCLUDE_DIRS)
        add_definitions(-DIMGUI_ENABLE_FREETYPE)
        set(FREETYPE_SOURCES
                ext/imgui/misc/freetype/imgui_freetype.cpp
                ext/imgui/misc/freetype/imgui_freetype.h)
endif()

Then, for example, you can later say something like the fourth line below:

target_link_libraries(imgui
        PUBLIC
        OpenGL::GL
        $<IF:$<TARGET_EXISTS:Freetype::Freetype>,Freetype::Freetype,>
        $<TARGET_NAME_IF_EXISTS:SDL2::SDL2main>
        $<IF:$<TARGET_EXISTS:SDL2::SDL2>,SDL2::SDL2,SDL2::SDL2-static>)

I managed to do this without conan, which would just add more complications to the system.

Shifting arrays

Working on the Buffer class [2] in klib [3], I needed to shift the backing array left or right for insertions and deletions. This is fraught with peril (a phrase I used several times today in our team sync), but fortunately I remembered that memmove(3) exists. I'm sure there's a better C++ version, but this works for now. I did goof at first with one of the moves:

// Wrong!
memmove(this->contents+offset, this->contents+(offset+delta),
        this->length);


// Fixed!
memmove(this->contents+(offset+delta), this->contents+offset,
        this->length);

There were a few minor goofs (an i++ instead of an i--, for example), but I've been testing it out with a simple test program that I can also run valgrind on.

  • [1] https://git.wntrmute.dev/kyle/kge
  • [2] https://git.wntrmute.dev/kyle/klib/src/branch/master/Buffer.h
  • [3] https://git.wntrmute.dev/kyle/klib/

Tags: , ,