From 647ee0d0ef6430ad4bf615c84f0507701885bd77 Mon Sep 17 00:00:00 2001 From: Mikhail Titov Date: Sat, 18 Jan 2025 10:56:30 -0600 Subject: [PATCH 01/39] Use proper pointer for addr in DRAW_GLYPH Signed-off-by: Mikhail Titov --- src/glyph.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/glyph.c b/src/glyph.c index b4ba535ce..30189ac5b 100644 --- a/src/glyph.c +++ b/src/glyph.c @@ -25,7 +25,7 @@ #define DRAW_GLYPH(bits, size) \ { \ AL_CONST unsigned char *data = glyph->dat; \ - unsigned long addr; \ + uintptr_t addr; \ int w = glyph->w; \ int h = glyph->h; \ int stride = (w+7)/8; \ From 5f6ec418a9ac7bfe0760635a6e76cd5e56298d9e Mon Sep 17 00:00:00 2001 From: Mikhail Titov Date: Wed, 12 Feb 2025 13:51:33 -0600 Subject: [PATCH 02/39] Use intptr_t for _findfirst handle --- src/win/wfile.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/win/wfile.c b/src/win/wfile.c index 56d46b3dd..028fdb3d4 100644 --- a/src/win/wfile.c +++ b/src/win/wfile.c @@ -120,7 +120,7 @@ struct FF_DATA struct _finddata_t a; struct _wfinddata_t w; } data; - long handle; + intptr_t handle; int attrib; }; From faca9ab99804044ee25a9310b27fa3a9357b89df Mon Sep 17 00:00:00 2001 From: Peter Hull Date: Thu, 25 Feb 2021 09:06:50 +0000 Subject: [PATCH 03/39] Fix some types to match Win API --- tests/win/dibgrab.c | 2 +- tests/win/dibhello.c | 2 +- tests/win/dibsound.c | 2 +- tests/win/dxwindow.c | 2 +- tests/win/scrsave.c | 6 +++--- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/tests/win/dibgrab.c b/tests/win/dibgrab.c index c9f23020e..35b473eb0 100644 --- a/tests/win/dibgrab.c +++ b/tests/win/dibgrab.c @@ -36,7 +36,7 @@ PALETTE pal; -LRESULT CALLBACK WndProc(HWND hwnd, UINT message, UINT wParam, LONG lParam) +LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { HWND dwnd; HDC hdc, ddc; diff --git a/tests/win/dibhello.c b/tests/win/dibhello.c index f6a5053a0..9d8d5c412 100644 --- a/tests/win/dibhello.c +++ b/tests/win/dibhello.c @@ -32,7 +32,7 @@ PALETTE pal; -LRESULT CALLBACK WndProc(HWND hwnd, UINT message, UINT wParam, LONG lParam) +LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { RECT rect, updaterect; PAINTSTRUCT ps; diff --git a/tests/win/dibsound.c b/tests/win/dibsound.c index 541efb64f..3f5b48227 100644 --- a/tests/win/dibsound.c +++ b/tests/win/dibsound.c @@ -29,7 +29,7 @@ BITMAP *bmp = NULL; -BOOL CALLBACK AboutDlgProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) +INT_PTR CALLBACK AboutDlgProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) { switch(Message) { diff --git a/tests/win/dxwindow.c b/tests/win/dxwindow.c index 77ae03136..758ec0b7e 100644 --- a/tests/win/dxwindow.c +++ b/tests/win/dxwindow.c @@ -229,7 +229,7 @@ void boost(void) -BOOL CALLBACK AboutDlgProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) +INT_PTR CALLBACK AboutDlgProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) { switch(Message) { diff --git a/tests/win/scrsave.c b/tests/win/scrsave.c index 60eb1d9d3..2acfd654d 100644 --- a/tests/win/scrsave.c +++ b/tests/win/scrsave.c @@ -204,7 +204,7 @@ void ss_exit(void) /* dialog procedure for the settings dialog */ -BOOL CALLBACK settings_dlg_proc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) +INT_PTR CALLBACK settings_dlg_proc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { @@ -290,7 +290,7 @@ int do_password(HANDLE hInstance, HANDLE hPrevInstance, HWND hParentWnd) /* window procedure for the screensaver preview */ -LRESULT CALLBACK preview_wnd_proc(HWND hwnd, UINT message, UINT wParam, LONG lParam) +LRESULT CALLBACK preview_wnd_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { PAINTSTRUCT ps; HDC hdc; @@ -464,7 +464,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdPa args++; if ((args[0]) && ((args[1] == ' ') || (args[1] == ':'))) - hwnd = (HWND)atoi(args+2); + hwnd = (HWND)(intptr_t)atoi(args+2); else hwnd = GetActiveWindow(); From 47202ce6dea62be697faedc48ae20e8a1fae27f1 Mon Sep 17 00:00:00 2001 From: Mikhail Titov Date: Wed, 19 Feb 2025 14:49:55 -0600 Subject: [PATCH 04/39] Backport Allegro version info and exports --- CMakeLists.txt | 89 +++++++++++++++++++++++++++++++++--- cmake/AllegroConfig.cmake.in | 24 ++++++++++ cmake/Common.cmake | 3 +- 3 files changed, 109 insertions(+), 7 deletions(-) create mode 100644 cmake/AllegroConfig.cmake.in diff --git a/CMakeLists.txt b/CMakeLists.txt index 99794e671..fe195a786 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -25,6 +25,7 @@ cmake_minimum_required(VERSION 2.6 FATAL_ERROR) if(COMMAND cmake_policy) cmake_policy(SET CMP0003 NEW) + cmake_policy(SET CMP0048 NEW) endif(COMMAND cmake_policy) if(NOT CMAKE_BUILD_TYPE) @@ -37,13 +38,41 @@ endif() # Note: This needs to be done before the project command set(CMAKE_CONFIGURATION_TYPES "${CMAKE_BUILD_TYPE}" CACHE INTERNAL "internal") +#-----------------------------------------------------------------------------# +# +# Version +# +#-----------------------------------------------------------------------------# + +set(ALLEGRO_VERSION_REGEX_PATTERN "#define ALLEGRO_VERSION_STR[ ]+\"([0-9]+\\.[0-9]+\\.[0-9]+).*\"") +file(STRINGS "${CMAKE_CURRENT_LIST_DIR}/include/allegro/base.h" ALLEGRO_VERSION_MATCH + REGEX ${ALLEGRO_VERSION_REGEX_PATTERN} + LIMIT_COUNT 1 +) +string(REGEX REPLACE ${ALLEGRO_VERSION_REGEX_PATTERN} "\\1" ALLEGRO_VERSION "${ALLEGRO_VERSION_MATCH}") +if("${ALLEGRO_VERSION}" VERSION_LESS 5.0.0) + message(STATUS "[Allegro] Allegro Version: [${ALLEGRO_VERSION}]") +else() + message(FATAL_ERROR "[Allegro] Invalid Allegro Version: [${ALLEGRO_VERSION}]") +endif() + #-----------------------------------------------------------------------------# # # Build options # # Set the project name. -project(ALLEGRO C CXX) + +# Allow generating custom project name via command-line arguments (#1174) +set(ALLEGRO_PROJECT_NAME "ALLEGRO" CACHE STRING "Project default name") +set(ALLEGRO_PROJECT_SUFFIX "" CACHE STRING "Project suffix") + +project(${ALLEGRO_PROJECT_NAME}${ALLEGRO_PROJECT_SUFFIX} + VERSION ${ALLEGRO_VERSION} + LANGUAGES C CXX + DESCRIPTION "Allegro project" + HOMEPAGE_URL "https://github.com/liballeg/allegro4" +) if(WIN32) if(MINGW) @@ -844,6 +873,8 @@ set_target_properties(allegro static_link_with "${static_link_with}" ) +set(PKG_TARGETS_NAME "${PKG_NAME}Targets") + install_our_library(allegro) if(NOT WANT_FRAMEWORKS) install_our_headers(${ALLEGRO_PUBLIC_HEADERS}) @@ -881,7 +912,7 @@ endif(PSP) # allegro-config script # -if(UNIX) # including MACOSX +if(UNIX OR MSYS OR MINGW) # including MACOSX set(prefix "${CMAKE_INSTALL_PREFIX}") set(INCLUDE_PREFIX "${CMAKE_INSTALL_PREFIX}") # not sure what this is if(BUILD_SHARED_LIBS) @@ -889,7 +920,7 @@ if(UNIX) # including MACOSX else() set(LINK_WITH_STATIC_LIBS yes) endif() - set(LIB_TO_LINK alleg${BUILD_TYPE_SUFFIX}) + set(LIB_TO_LINK ${allegro_OUTPUT_NAME}${BUILD_TYPE_SUFFIX}) if(APPLE) set(LDFLAGS "-framework Cocoa -lalleg-main") else(APPLE) @@ -923,7 +954,7 @@ if(UNIX) # including MACOSX install(PROGRAMS ${CMAKE_BINARY_DIR}/allegro-config DESTINATION bin ) -endif(UNIX) +endif(UNIX OR MSYS OR MINGW) #-----------------------------------------------------------------------------# # @@ -972,7 +1003,7 @@ set(PKG_CONFIG_FILES logg ) -if(UNIX) +if(UNIX OR MSYS) set(prefix "${CMAKE_INSTALL_PREFIX}") set(INCLUDE_PREFIX "\${prefix}") set(bindir "\${exec_prefix}/bin") @@ -997,7 +1028,53 @@ if(UNIX) DESTINATION "lib${LIB_SUFFIX}/pkgconfig" ) endforeach(name) -endif(UNIX) +endif(UNIX OR MSYS) + +set(ALLEGRO_TARGETS ${PKG_CONFIG_FILES}) +# Generate CMake package-config files +include(CMakePackageConfigHelpers) +include(GNUInstallDirs) + +set(PKG_NAME "Allegro") +string(TOLOWER ${PKG_NAME} PKG_NAME_LOWER) + +set(PKG_CONFIG_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}/cmake/${PKG_NAME_LOWER}4") +set(PKG_GENERATED_DIR "${CMAKE_CURRENT_BINARY_DIR}/cmake") +set(PKG_CONFIG_FILE "${PKG_GENERATED_DIR}/${PKG_NAME}Config.cmake") +set(PKG_VERSION_FILE "${PKG_GENERATED_DIR}/${PKG_NAME}ConfigVersion.cmake") + +configure_package_config_file( + "${CMAKE_CURRENT_LIST_DIR}/cmake/${PKG_NAME}Config.cmake.in" + ${PKG_CONFIG_FILE} + INSTALL_DESTINATION ${PKG_CONFIG_INSTALL_DIR} + NO_SET_AND_CHECK_MACRO + NO_CHECK_REQUIRED_COMPONENTS_MACRO +) +write_basic_package_version_file(${PKG_VERSION_FILE} + VERSION ${ALLEGRO_VERSION} + COMPATIBILITY SameMajorVersion +) +install( + EXPORT ${PKG_TARGETS_NAME} + NAMESPACE ${PKG_NAME}:: + DESTINATION ${PKG_CONFIG_INSTALL_DIR} +) +install( + FILES ${PKG_CONFIG_FILE} ${PKG_VERSION_FILE} + DESTINATION ${PKG_CONFIG_INSTALL_DIR} +) + +# Export build tree for debugging + +target_include_directories(allegro INTERFACE + $ + $ +) + +export(EXPORT ${PKG_TARGETS_NAME} + FILE "${PKG_GENERATED_DIR}/${PKG_NAME}Targets.cmake" + NAMESPACE ${PKG_NAME}:: +) #-----------------------------------------------------------------------------# # diff --git a/cmake/AllegroConfig.cmake.in b/cmake/AllegroConfig.cmake.in new file mode 100644 index 000000000..162f330ca --- /dev/null +++ b/cmake/AllegroConfig.cmake.in @@ -0,0 +1,24 @@ +# +# Allegro Package Config +# +@PACKAGE_INIT@ + +set(ALLEGRO_PKG_BUGREPORT "@PROJECT_HOMEPAGE_URL@/issues") + +# Allegro Targets +set(ALLEGRO_PKG_TARGETS "@ALLEGRO_TARGETS@") + +# Allegro Package Version +set(ALLEGRO_PKG_VERSION_MAJOR @PROJECT_VERSION_MAJOR@) +set(ALLEGRO_PKG_VERSION_MINOR @PROJECT_VERSION_MINOR@) +set(ALLEGRO_PKG_VERSION_PATCH @PROJECT_VERSION_PATCH@) +set(ALLEGRO_PKG_VERSION @PROJECT_VERSION@) + +# Architecture, compiler and other low level flags +set(ALLEGRO_PKG_LIBRARY_ARCHITECTURE "@CMAKE_LIBRARY_ARCHITECTURE@") +set(ALLEGRO_PKG_COMPILER "@CMAKE_C_COMPILER_ID@") +set(ALLEGRO_PKG_COMPILER_VERSION "@CMAKE_C_COMPILER_VERSION@") +set(ALLEGRO_PKG_HOST_SYSTEM "@CMAKE_HOST_SYSTEM@") + +# Targets +include("${CMAKE_CURRENT_LIST_DIR}/@PKG_TARGETS_NAME@.cmake") diff --git a/cmake/Common.cmake b/cmake/Common.cmake index 41822dd6a..482d85230 100644 --- a/cmake/Common.cmake +++ b/cmake/Common.cmake @@ -26,6 +26,7 @@ endfunction(set_our_framework_properties) function(install_our_library target) install(TARGETS ${target} + EXPORT ${PKG_TARGETS_NAME} LIBRARY DESTINATION "lib${LIB_SUFFIX}" ARCHIVE DESTINATION "lib${LIB_SUFFIX}" FRAMEWORK DESTINATION "${FRAMEWORK_INSTALL_PREFIX}" @@ -64,7 +65,7 @@ function(sanitize_cmake_link_flags return) # Watch out for -framework options (OS X) IF (NOT lib MATCHES "-framework.*|.*framework") # Remove absolute path. - string(REGEX REPLACE "/.*/(.*)" "\\1" lib ${lib}) + string(REGEX REPLACE "([A-Z]:)?/.*/(.*)" "\\2" lib ${lib}) # Remove .a/.so/.dylib. string(REGEX REPLACE "lib(.*)\\.(a|so|dylib)" "\\1" lib ${lib}) From e36ce1d1a64b32ea0a0ebc8a3cf5e9119d8dc552 Mon Sep 17 00:00:00 2001 From: Mikhail Titov Date: Thu, 25 Sep 2025 01:35:27 -0500 Subject: [PATCH 05/39] wip --- src/file.c | 4 ++-- src/fsel.c | 2 +- src/gsprite.c | 2 +- src/gui.c | 4 ++-- src/guiproc.c | 8 ++++---- src/unicode.c | 12 ++++++------ src/win/wddlock.c | 4 ++-- src/win/wgdi.c | 2 +- src/win/wmidi.c | 4 ++-- src/win/wsndwo.c | 4 ++-- 10 files changed, 23 insertions(+), 23 deletions(-) diff --git a/src/file.c b/src/file.c index f4c18d01a..8a634ff12 100644 --- a/src/file.c +++ b/src/file.c @@ -2078,7 +2078,7 @@ PACKFILE *pack_fopen_chunk(PACKFILE *f, int pack) return NULL; } _al_sane_strncpy(chunk->normal.passdata, f->normal.passdata, strlen(f->normal.passdata)+1); - chunk->normal.passpos = chunk->normal.passdata + (long)f->normal.passpos - (long)f->normal.passdata; + chunk->normal.passpos = chunk->normal.passdata + (f->normal.passpos - f->normal.passdata); f->normal.passpos = f->normal.passdata; } chunk->normal.flags |= PACKFILE_FLAG_OLD_CRYPT; @@ -2201,7 +2201,7 @@ PACKFILE *pack_fclose_chunk(PACKFILE *f) } if ((f->normal.passpos) && (f->normal.flags & PACKFILE_FLAG_OLD_CRYPT)) - parent->normal.passpos = parent->normal.passdata + (long)f->normal.passpos - (long)f->normal.passdata; + parent->normal.passpos = parent->normal.passdata + (f->normal.passpos - f->normal.passdata); free_packfile(f); } diff --git a/src/fsel.c b/src/fsel.c index 96fd796bc..269d6b733 100644 --- a/src/fsel.c +++ b/src/fsel.c @@ -933,7 +933,7 @@ int file_select_ex(AL_CONST char *message, char *path, AL_CONST char *ext, int s if (ugetc(get_filename(path))) { p = get_extension(path); if ((!ugetc(p)) && (ext) && (ugetc(ext)) && (!ustrpbrk(ext, uconvert_ascii(" ,;", tmp)))) { - size -= ((long)p - (long)path + ucwidth('.')); + size -= p - path + ucwidth('.'); if (size >= uwidth_max(U_CURRENT) + ucwidth(0)) { /* do not end with '.' */ p += usetc(p, '.'); ustrzcpy(p, size, ext); diff --git a/src/gsprite.c b/src/gsprite.c index 1f0f606f3..951f934ec 100644 --- a/src/gsprite.c +++ b/src/gsprite.c @@ -139,7 +139,7 @@ void _soft_draw_gouraud_sprite(BITMAP *bmp, BITMAP *sprite, int x, int y, int c1 addr = bmp_write_line(bmp, j) + x1*3; for (i=x1; iline[j-y] + (i-x)*3)); + pixel = bmp_read24((uintptr_t)(sprite->line[j-y] + (i-x)*3)); bmp_select(bmp); if (pixel != MASK_COLOR_24) { pixel = _blender_func24(pixel, _blender_col_24, fixtoi(hc)); diff --git a/src/gui.c b/src/gui.c index dfe96f616..9f37f57cb 100644 --- a/src/gui.c +++ b/src/gui.c @@ -571,7 +571,7 @@ static int obj_list_cmp(AL_CONST void *e1, AL_CONST void *e2) */ static int cmp_tab(AL_CONST DIALOG *d1, AL_CONST DIALOG *d2) { - int ret = (int)((AL_CONST unsigned long)d2 - (AL_CONST unsigned long)d1); + int ret = d2 - d1; /* Wrap around if d2 is before d1 in the dialog array. */ if (ret < 0) @@ -587,7 +587,7 @@ static int cmp_tab(AL_CONST DIALOG *d1, AL_CONST DIALOG *d2) */ static int cmp_shift_tab(AL_CONST DIALOG *d1, AL_CONST DIALOG *d2) { - int ret = (int)((AL_CONST unsigned long)d1 - (AL_CONST unsigned long)d2); + int ret = d1 - d2; /* Wrap around if d2 is after d1 in the dialog array. */ if (ret < 0) diff --git a/src/guiproc.c b/src/guiproc.c index edd284a83..7e06343bb 100644 --- a/src/guiproc.c +++ b/src/guiproc.c @@ -1365,17 +1365,17 @@ int d_text_list_proc(int msg, DIALOG *d, int c) thisitem = (*(getfuncptr)d->dp)(i, NULL); failure = FALSE; - if ((int)((unsigned long)d->dp3) < ustrlen(thisitem)) { - for (a=0; a < (int)((unsigned long)d->dp3); a++) { + if ((intptr_t)d->dp3 < ustrlen(thisitem)) { + for (a=0; a < (intptr_t)d->dp3; a++) { if (utolower(ugetat(thisitem, a)) != utolower(ugetat(selected, a))) { failure = TRUE; break; } } - if ((!failure) && (utolower(ugetat(thisitem, (int)(unsigned long)d->dp3)) == utolower(c))) { + if ((!failure) && (utolower(ugetat(thisitem, (uintptr_t)d->dp3)) == utolower(c))) { d->d1 = i; - d->dp3 = (void *)((unsigned long)d->dp3 + 1); + d->dp3 = (char *)d->dp3 + 1; if (sel) { for (i=0; iid |= BMP_ID_LOCKED; /* update the line array if our parent has moved */ - pitch = (long)parent->line[1] - (long)parent->line[0]; + pitch = parent->line[1] - parent->line[0]; data = parent->line[0] + (bmp->y_ofs - parent->y_ofs) * pitch + (bmp->x_ofs - parent->x_ofs) * BYTES_PER_PIXEL(bitmap_color_depth(bmp)); @@ -263,7 +263,7 @@ void gfx_directx_autolock(BITMAP *bmp) } /* update the line array if our parent has moved */ - pitch = (long)parent->line[1] - (long)parent->line[0]; + pitch = parent->line[1] - parent->line[0]; data = parent->line[0] + (bmp->y_ofs - parent->y_ofs) * pitch + (bmp->x_ofs - parent->x_ofs) * BYTES_PER_PIXEL(bitmap_color_depth(bmp)); diff --git a/src/win/wgdi.c b/src/win/wgdi.c index 5d173a689..247f7cbd3 100644 --- a/src/win/wgdi.c +++ b/src/win/wgdi.c @@ -524,7 +524,7 @@ static struct BITMAP *gfx_gdi_init(int w, int h, int v_w, int v_h, int color_dep /* create the screen surface */ screen_surf = _AL_MALLOC_ATOMIC(w * h * BYTES_PER_PIXEL(color_depth)); - gdi_screen = _make_bitmap(w, h, (unsigned long)screen_surf, &gfx_gdi, color_depth, w * BYTES_PER_PIXEL(color_depth)); + gdi_screen = _make_bitmap(w, h, (uintptr_t)screen_surf, &gfx_gdi, color_depth, w * BYTES_PER_PIXEL(color_depth)); if (!gdi_screen) { _TRACE(PREFIX_E "Could not make a bitmap out of the screen surface.\n"); goto Error; diff --git a/src/win/wmidi.c b/src/win/wmidi.c index 89b253c6f..d8ad9ca6f 100644 --- a/src/win/wmidi.c +++ b/src/win/wmidi.c @@ -242,8 +242,8 @@ int midi_win32_in_init(int input, int voices) id = (midi_input_driver->id & 0xFF) - 'A'; /* open midi input device */ - hr = midiInOpen(&midi_in_device, id, (DWORD)midi_in_proc, - (DWORD)NULL, CALLBACK_FUNCTION); + hr = midiInOpen(&midi_in_device, id, (DWORD_PTR)midi_in_proc, + (DWORD_PTR)NULL, CALLBACK_FUNCTION); if (hr != MMSYSERR_NOERROR) { _TRACE(PREFIX_E "midiInOpen failed (%x)\n", hr); midi_win32_in_exit(input); diff --git a/src/win/wsndwo.c b/src/win/wsndwo.c index 439eb6c09..6a4f77448 100644 --- a/src/win/wsndwo.c +++ b/src/win/wsndwo.c @@ -212,7 +212,7 @@ static void digi_waveout_mixer_callback(void) if (++digiwobufpos > (digiwobufdivs-1)) digiwobufpos = 0; - _mix_some_samples((unsigned long) (digiwobufdata+((digiwobufsize/digiwobufdivs)*digiwobufpos)), 0, TRUE); + _mix_some_samples((uintptr_t)digiwobufdata+((digiwobufsize/digiwobufdivs)*digiwobufpos), 0, TRUE); } } @@ -309,7 +309,7 @@ static int digi_waveout_init(int input, int voices) goto Error; } - _mix_some_samples((unsigned long) digiwobufdata, 0, TRUE); + _mix_some_samples((uintptr_t)digiwobufdata, 0, TRUE); /* get volume */ waveOutGetVolume(hWaveOut, &initial_volume); From 9068ebaf90be4efcdd12971135879f0b58f8187a Mon Sep 17 00:00:00 2001 From: Mikhail Titov Date: Mon, 27 Oct 2025 14:57:34 -0500 Subject: [PATCH 06/39] GH workflow --- .github/workflows/test.yml | 98 ++++++++++++++++++++++++++++++++++++++ CMakePresets.json | 43 +++++++++++++++++ 2 files changed, 141 insertions(+) create mode 100644 .github/workflows/test.yml create mode 100644 CMakePresets.json diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 000000000..463937012 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,98 @@ +name: Tests + +on: [push, pull_request] + +jobs: + test: + strategy: + fail-fast: false + matrix: + os: [windows-latest] + arch: [x64, x86] + include: + - os: ubuntu-latest + arch: x64 + defaults: + run: + shell: bash + runs-on: ${{ matrix.os }} + steps: + - name: Check out repository code + uses: actions/checkout@v4 + - name: 💾 Cache dependencies on Windows + if: runner.os == 'Windows' + uses: actions/cache@v4 + with: + path: | + C:\msys64\var\cache\pacman\pkg + C:\vcpkg\installed + key: build-dep-windows-${{ matrix.arch }} + - name: 🐧 Install dependencies on Linux + if: runner.os == 'Linux' + run: >- + sudo apt-get install -qq -y -o=Dpkg::Use-Pty=0 + cmake + pkgconf + libxext-dev + libx11-dev + libxpm-dev + libxt-dev + libxcursor-dev + libasound2-dev + libopenal-dev + libxxf86dga-dev + libxxf86vm-dev + libgl-dev + libglx-dev + libgl1-mesa-dev + libglu-dev + libglu1-mesa-dev + libpng-dev + zlib1g-dev + libvorbis-dev + - name: 🪟 Set up environment variables on Windows + env: + MSYSTEM: ${{ matrix.arch == 'x64' && 'MINGW64' || 'MINGW32' }} + if: runner.os == 'Windows' + run: | + echo "VCPKG_ROOT=C:/vcpkg" >> $GITHUB_ENV + echo "MSYSTEM=${{ env.MSYSTEM }}" >> $GITHUB_ENV + - name: 🪟 Install dependencies on Windows + if: runner.os == 'Windows' + shell: pwsh + run: vcpkg install --triplet ${{ matrix.arch }}-windows libvorbis libpng libjpeg-turbo zlib + - name: ⚒ Build with Visual Studio on Windows + env: + sdkPath: "C:/Program Files (x86)/Windows Kits/10" + sdkVer: "10.0.26100.0" + arch: ${{ matrix.arch }} + shell: pwsh + if: ${{ runner.os == 'Windows' && !cancelled() }} + run: | + cmake . -B build_vs -A ${{ matrix.arch == 'x64' && 'x64' || 'Win32' }} --preset=ci-vs + cmake --build build_vs --config Debug -- /verbosity:quiet + - name: 🔍 Add MSYS2 to path on Windows + if: ${{ runner.os == 'Windows' && !cancelled() }} + shell: pwsh + run: | + echo "C:\msys64\usr\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append + echo "C:\msys64\${{ matrix.arch == 'x64' && 'mingw64' || 'mingw32' }}\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append + - name: 🪟 Install msys2 dependencies on Windows + env: + arch: ${{ matrix.arch == 'x64' && 'x86_64' || 'i686' }} + if: ${{ runner.os == 'Windows' && !cancelled() }} + run: >- + pacman --noconfirm -S + mingw-w64-${{ env.arch }}-gcc + mingw-w64-${{ env.arch }}-ninja + mingw-w64-${{ env.arch }}-cmake + mingw-w64-${{ env.arch }}-libpng + mingw-w64-${{ env.arch }}-libjpeg-turbo + mingw-w64-${{ env.arch }}-libvorbis + - name: ⚒ Build with gcc + env: + MINGDIR: "C:/msys64/${{ matrix.arch == 'x64' && 'mingw64' || 'mingw32' }}" + if: ${{ !cancelled() }} + run: | + cmake . -B build --preset=ci-gcc + cmake --build build --preset=ninja-quiet diff --git a/CMakePresets.json b/CMakePresets.json new file mode 100644 index 000000000..12b5bca84 --- /dev/null +++ b/CMakePresets.json @@ -0,0 +1,43 @@ +{ + "version": 3, + "configurePresets": [ + { + "name": "ci-vs", + "generator": "Visual Studio 17 2022", + "cacheVariables": { + "CMAKE_TOOLCHAIN_FILE": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake", + "CMAKE_BUILD_TYPE": "Debug;RelWithDebInfo", + "DSOUND_INCLUDE_DIR": "$env{sdkPath}/Include/$env{sdkVer}/um", + "DSOUND_LIBRARY": "$env{sdkPath}/Lib/$env{sdkVer}/um/$env{arch}/dsound.lib", + "DXGUID_LIBRARY": "$env{sdkPath}/Lib/$env{sdkVer}/um/$env{arch}/dxguid.lib", + "DDRAW_INCLUDE_DIR": "$env{sdkPath}/Include/$env{sdkVer}/um", + "DDRAW_LIBRARY": "$env{sdkPath}/Lib/$env{sdkVer}/um/$env{arch}/ddraw.lib", + "DINPUT_INCLUDE_DIR": "$env{sdkPath}/Include/$env{sdkVer}/um", + "DINPUT_LIBRARY": "$env{sdkPath}/Lib/$env{sdkVer}/um/$env{arch}/dinput8.lib", + "CMAKE_C_FLAGS": "/W4 /we4311 /we4133 /we4022 /we4312 /we4047 /we4365 /wd4018 /wd4245 /wd4389 /wd4100 /wd4127 /wd4152 /wd4210 /wd4459 /wd4232 /wd4267 /we4005", + "WANT_DOCS": false, + "WANT_EXAMPLES": true, + "WANT_TESTS": true + } + }, + { + "name": "ci-gcc", + "generator": "Ninja", + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Debug", + "STRICT_WARN": false, + "CMAKE_C_FLAGS": "-Wall -Werror=pointer-to-int-cast -Werror=int-to-pointer-cast -Werror=pointer-arith", + "WANT_DOCS": false, + "WANT_EXAMPLES": true, + "WANT_TESTS": true + } + } + ], + "buildPresets": [ + { + "name": "ninja-quiet", + "configurePreset": "ci-gcc", + "nativeToolOptions": ["--quiet"] + } + ] +} From 5cd34fb5ec4a8ee89b85a773f7f8b5e8d0920f80 Mon Sep 17 00:00:00 2001 From: Mikhail Titov Date: Tue, 28 Oct 2025 00:25:20 -0500 Subject: [PATCH 07/39] Do not mangle main for logg examples --- addons/logg/CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/addons/logg/CMakeLists.txt b/addons/logg/CMakeLists.txt index d32b0ea8d..704588a13 100644 --- a/addons/logg/CMakeLists.txt +++ b/addons/logg/CMakeLists.txt @@ -56,6 +56,8 @@ endif(NOT WANT_FRAMEWORKS) # if(WANT_EXAMPLES) + add_compile_definitions(ALLEGRO_USE_CONSOLE) + add_executable(play_ogg play_ogg.c) target_link_libraries(play_ogg logg) From 1d57ce3afd77ff5b13095371b8cecc3a1c0b3a27 Mon Sep 17 00:00:00 2001 From: Mikhail Titov Date: Tue, 28 Oct 2025 00:33:36 -0500 Subject: [PATCH 08/39] Set scr suffix directly as CMake target property for scrsave --- tests/CMakeLists.txt | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 767c7c5c6..3deb5bb38 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -20,14 +20,7 @@ if(WIN32) add_our_executable(dibsound WIN32 win/dibsound.c win/dibsound.rc) add_our_executable(dxwindow WIN32 win/dxwindow.c win/dxwindow.rc) add_our_executable(scrsave WIN32 win/scrsave.c win/scrsave.rc) - # I don't know if there is a better way. - add_custom_command( - TARGET scrsave - POST_BUILD - COMMAND "${CMAKE_COMMAND}" -E copy - "${CMAKE_CURRENT_BINARY_DIR}/scrsave.exe" - "${CMAKE_CURRENT_BINARY_DIR}/scrsave.scr" - ) + set_target_properties(scrsave PROPERTIES SUFFIX ".scr") endif() endif(WIN32) From 1b1ad4dced78032842b4c8904d821d7d3a41450f Mon Sep 17 00:00:00 2001 From: Mikhail Titov Date: Tue, 28 Oct 2025 01:37:47 -0500 Subject: [PATCH 09/39] Bump required CMake version to match a5 --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index fe195a786..705ec3a04 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -22,7 +22,7 @@ # CMake setup # -cmake_minimum_required(VERSION 2.6 FATAL_ERROR) +cmake_minimum_required(VERSION 3.12...4.0) if(COMMAND cmake_policy) cmake_policy(SET CMP0003 NEW) cmake_policy(SET CMP0048 NEW) From e200e54e7e694c66fd2272174d1662dae11bea2d Mon Sep 17 00:00:00 2001 From: Mikhail Titov Date: Tue, 28 Oct 2025 13:08:57 -0500 Subject: [PATCH 10/39] Compile definitions to produce & consume addon DLLs --- addons/allegrogl/CMakeLists.txt | 5 +++++ addons/jpgalleg/CMakeLists.txt | 5 +++++ addons/loadpng/CMakeLists.txt | 5 +++++ addons/logg/CMakeLists.txt | 5 +++++ 4 files changed, 20 insertions(+) diff --git a/addons/allegrogl/CMakeLists.txt b/addons/allegrogl/CMakeLists.txt index 36cfcc3fc..9e45c2e5e 100644 --- a/addons/allegrogl/CMakeLists.txt +++ b/addons/allegrogl/CMakeLists.txt @@ -132,6 +132,11 @@ add_our_library(allegrogl ${ADDON_LINKAGE} ${ALLEGROGL_HEADERS} ) +target_compile_definitions(allegrogl + PRIVATE ALLEGRO_GL_SRC_BUILD + PUBLIC $<$:ALLEGRO_GL_DYNAMIC> + ) + set_target_properties(allegrogl PROPERTIES COMPILE_FLAGS -DALLEGRO_GL_SRC_BUILD diff --git a/addons/jpgalleg/CMakeLists.txt b/addons/jpgalleg/CMakeLists.txt index 5f2b0cf35..163345527 100644 --- a/addons/jpgalleg/CMakeLists.txt +++ b/addons/jpgalleg/CMakeLists.txt @@ -37,6 +37,11 @@ add_our_library(jpgalleg ${ADDON_LINKAGE} ${JPGALLEG_HEADERS} ) +target_compile_definitions(jpgalleg + PRIVATE JPGALLEG_SRC_BUILD + PUBLIC $<$:JPGALLEG_DYNAMIC> + ) + set_target_properties(jpgalleg PROPERTIES LINK_FLAGS "${ALLEGRO_LINK_FLAGS}" diff --git a/addons/loadpng/CMakeLists.txt b/addons/loadpng/CMakeLists.txt index ecb5298c0..543fa2e4c 100644 --- a/addons/loadpng/CMakeLists.txt +++ b/addons/loadpng/CMakeLists.txt @@ -31,6 +31,11 @@ add_our_library(loadpng ${ADDON_LINKAGE} ${LOADPNG_HEADERS} ) +target_compile_definitions(loadpng + PRIVATE LOADPNG_SRC_BUILD + PUBLIC $<$:LOADPNG_DYNAMIC> + ) + set_target_properties(loadpng PROPERTIES LINK_FLAGS "${ALLEGRO_LINK_FLAGS}" diff --git a/addons/logg/CMakeLists.txt b/addons/logg/CMakeLists.txt index 704588a13..33a61d4cd 100644 --- a/addons/logg/CMakeLists.txt +++ b/addons/logg/CMakeLists.txt @@ -28,6 +28,11 @@ add_our_library(logg ${ADDON_LINKAGE} ${LOGG_HEADERS} ) +target_compile_definitions(logg + PRIVATE LOGG_SRC_BUILD + PUBLIC $<$:LOGG_DYNAMIC> + ) + set_target_properties(logg PROPERTIES LINK_FLAGS "${ALLEGRO_LINK_FLAGS}" From 7b4b413726626a7b523b87d56ac1a9440488949b Mon Sep 17 00:00:00 2001 From: Mikhail Titov Date: Tue, 28 Oct 2025 13:24:59 -0500 Subject: [PATCH 11/39] Rename some addons/loadpng/examples to prevent Ninja conflicts --- addons/loadpng/CMakeLists.txt | 4 ++-- addons/loadpng/examples/{exalpha.c => exalpha2.c} | 0 addons/loadpng/examples/{exdata.c => exdata2.c} | 0 3 files changed, 2 insertions(+), 2 deletions(-) rename addons/loadpng/examples/{exalpha.c => exalpha2.c} (100%) rename addons/loadpng/examples/{exdata.c => exdata2.c} (100%) diff --git a/addons/loadpng/CMakeLists.txt b/addons/loadpng/CMakeLists.txt index 543fa2e4c..05113f240 100644 --- a/addons/loadpng/CMakeLists.txt +++ b/addons/loadpng/CMakeLists.txt @@ -83,8 +83,8 @@ endfunction() if(WANT_EXAMPLES) add_our_example(example) - add_our_example(exalpha) - add_our_example(exdata) + add_our_example(exalpha2) + add_our_example(exdata2) add_our_example(browse) copy_files(copy_loadpng_example_data diff --git a/addons/loadpng/examples/exalpha.c b/addons/loadpng/examples/exalpha2.c similarity index 100% rename from addons/loadpng/examples/exalpha.c rename to addons/loadpng/examples/exalpha2.c diff --git a/addons/loadpng/examples/exdata.c b/addons/loadpng/examples/exdata2.c similarity index 100% rename from addons/loadpng/examples/exdata.c rename to addons/loadpng/examples/exdata2.c From 2d55f657cca6efa9dbae5064267b63d1d8a900ed Mon Sep 17 00:00:00 2001 From: Mikhail Titov Date: Tue, 28 Oct 2025 13:30:23 -0500 Subject: [PATCH 12/39] Add STRICT for callback pointer casts --- tests/win/dibsound.c | 1 + tests/win/dxwindow.c | 1 + tests/win/scrsave.c | 1 + 3 files changed, 3 insertions(+) diff --git a/tests/win/dibsound.c b/tests/win/dibsound.c index 3f5b48227..ec42308c7 100644 --- a/tests/win/dibsound.c +++ b/tests/win/dibsound.c @@ -19,6 +19,7 @@ */ #include "allegro.h" +#define STRICT #include "winalleg.h" #include "dibsound.rh" diff --git a/tests/win/dxwindow.c b/tests/win/dxwindow.c index 758ec0b7e..b7c469ff3 100644 --- a/tests/win/dxwindow.c +++ b/tests/win/dxwindow.c @@ -19,6 +19,7 @@ */ #include "allegro.h" +#define STRICT #include "winalleg.h" #include "dxwindow.rh" #include "examples/running.h" diff --git a/tests/win/scrsave.c b/tests/win/scrsave.c index 2acfd654d..ad9bbc3ed 100644 --- a/tests/win/scrsave.c +++ b/tests/win/scrsave.c @@ -32,6 +32,7 @@ #include +#define STRICT #include "allegro.h" #include "winalleg.h" #include "scrsave.rh" From e53eaaa59d55158eec85eedc7a0ed9165da3d5f5 Mon Sep 17 00:00:00 2001 From: Mikhail Titov Date: Tue, 28 Oct 2025 16:45:39 -0500 Subject: [PATCH 13/39] Move OpenGL detection higher and use imported CMake target --- CMakeLists.txt | 1 + addons/allegrogl/CMakeLists.txt | 5 ++--- demos/skater/CMakeLists.txt | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 705ec3a04..370c4028f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -978,6 +978,7 @@ endif() if(WANT_ALLEGROGL) + find_package(OpenGL) add_subdirectory(addons/allegrogl) endif() if(WANT_LOADPNG) diff --git a/addons/allegrogl/CMakeLists.txt b/addons/allegrogl/CMakeLists.txt index 9e45c2e5e..37cce0306 100644 --- a/addons/allegrogl/CMakeLists.txt +++ b/addons/allegrogl/CMakeLists.txt @@ -3,7 +3,6 @@ # AllegroGL # -find_package(OpenGL) if(NOT OPENGL_FOUND) return() endif() @@ -26,7 +25,7 @@ if(DLOPEN_LIB) endif() if(ALLEGRO_WITH_XWINDOWS) - set(CMAKE_REQUIRED_LIBRARIES ${OPENGL_gl_LIBRARY}) + set(CMAKE_REQUIRED_LIBRARIES OpenGL::GL) check_function_exists(glXGetProcAddress GLXGETPROCADDRESS_FOUND) if(NOT GLXGETPROCADDRESS_FOUND) check_function_exists(glXGetProcAddressARB GLXGETPROCADDRESSARB_FOUND) @@ -183,7 +182,7 @@ function(add_our_example nm) PROPERTIES OUTPUT_NAME examp/${nm} ) - target_link_libraries(${nm}_agl allegrogl) + target_link_libraries(${nm}_agl allegrogl OpenGL::GL) endfunction() if(WANT_EXAMPLES) diff --git a/demos/skater/CMakeLists.txt b/demos/skater/CMakeLists.txt index bd6ef5690..b8bf451c8 100644 --- a/demos/skater/CMakeLists.txt +++ b/demos/skater/CMakeLists.txt @@ -47,7 +47,7 @@ if(SUPPORT_ALLEGROGL) PROPERTIES COMPILE_FLAGS -DDEMO_USE_ALLEGRO_GL ) - target_link_libraries(skater_agl allegrogl) + target_link_libraries(skater_agl allegrogl OpenGL::GL) endif(SUPPORT_ALLEGROGL) copy_files(copy_skater_data From e2d6ff638a5af867f2d24d7e16e59b3f24e75ccf Mon Sep 17 00:00:00 2001 From: Mikhail Titov Date: Wed, 26 Nov 2025 10:21:24 -0600 Subject: [PATCH 14/39] Fix pointer truncation in title.c of shooter demo --- demos/shooter/title.c | 10 +++++----- tools/grabber.c | 5 +---- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/demos/shooter/title.c b/demos/shooter/title.c index 89b57435c..1b457fd70 100644 --- a/demos/shooter/title.c +++ b/demos/shooter/title.c @@ -321,7 +321,7 @@ static int parse_source(AL_CONST char *filename, int attrib, void *param) textprintf_centre_ex(screen, font, SCREEN_W / 2, SCREEN_H / 2 + 8, makecol(160, 160, 160), 0, " %s ", - filename + (int)(unsigned long)param); + filename + (uintptr_t)param); while (pack_fgets(buf, sizeof(buf) - 1, f) != 0) { if (strstr(buf, "*/")) @@ -334,7 +334,7 @@ static int parse_source(AL_CONST char *filename, int attrib, void *param) for (d = c->files; d; d = d->next) { if (strcmp (d->text, - filename + (int)(unsigned long)param) == 0) + filename + (uintptr_t)param) == 0) break; } @@ -342,9 +342,9 @@ static int parse_source(AL_CONST char *filename, int attrib, void *param) d = malloc(sizeof(TEXT_LIST)); d->text = malloc(strlen - (filename + (int)(unsigned long)param) + + (filename + (uintptr_t)param) + 1); - strcpy(d->text, filename + (int)(unsigned long)param); + strcpy(d->text, filename + (uintptr_t)param); d->next = c->files; c->files = d; } @@ -531,7 +531,7 @@ static void load_credits(void) replace_filename(buf, buf2, "*.*", sizeof(buf)); for_each_file_ex(buf, 0, ~(FA_ARCH | FA_RDONLY | FA_DIREC), parse_source, - (void *)(unsigned long)(strlen(buf2) - 3)); + (void*)(strlen(buf2) - 3)); } /* sort the lists */ diff --git a/tools/grabber.c b/tools/grabber.c index 19ecc4ddc..069224097 100644 --- a/tools/grabber.c +++ b/tools/grabber.c @@ -1615,10 +1615,7 @@ static int folded_size = 0; /* helper function for comparing two pointers */ static INLINE int ptr_cmp(AL_CONST void *elem_p1, AL_CONST void *elem_p2) { - AL_CONST void *ptr1 = *(AL_CONST void **)elem_p1; - AL_CONST void *ptr2 = *(AL_CONST void **)elem_p2; - - return (int)((AL_CONST unsigned long)ptr2 - (AL_CONST unsigned long)ptr1); + return *(AL_CONST uintptr_t *)elem_p2 - *(AL_CONST uintptr_t *)elem_p1; } From 70ca7532ca025c96d6ef3bf336cd2c54d67b1eea Mon Sep 17 00:00:00 2001 From: Mikhail Titov Date: Wed, 26 Nov 2025 10:23:56 -0600 Subject: [PATCH 15/39] Explicit pointer widening on x86 in unicode.c long long may be wider than a pointer on x86 --- src/unicode.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/unicode.c b/src/unicode.c index 7b85b91d9..f18e7c81b 100644 --- a/src/unicode.c +++ b/src/unicode.c @@ -2948,7 +2948,7 @@ static int decode_format_string(char *buf, STRING_ARG *string_arg, AL_CONST char case 'p': /* pointer */ - slen = sprint_hex(string_arg, &info, FALSE, (unsigned LONGEST)va_arg(args, void *)); + slen = sprint_hex(string_arg, &info, FALSE, (unsigned LONGEST)(uintptr_t)va_arg(args, void *)); NEXT_C(); break; From 4fa0dac4336558a6e7318445ba866f474454b1bd Mon Sep 17 00:00:00 2001 From: Mikhail Titov Date: Wed, 26 Nov 2025 13:59:42 -0600 Subject: [PATCH 16/39] Fix pointer truncation in datitype.c grabber plugin --- tools/plugins/datitype.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/plugins/datitype.c b/tools/plugins/datitype.c index de52f6541..00ca4829c 100644 --- a/tools/plugins/datitype.c +++ b/tools/plugins/datitype.c @@ -107,7 +107,7 @@ static int do_changetype(DATAFILE *dat, int *param, int type) /* changes the type of bitmap data */ static int changetype(void) { - int type = (int)((unsigned long)active_menu->dp); + int type = (intptr_t)active_menu->dp; char buf[80]; int ret, n; int p = 0; @@ -200,7 +200,7 @@ static int do_changedepth(DATAFILE *dat, int *param, int depth) /* changes the color depth of bitmap data */ static int changedepth(void) { - int depth = (int)((unsigned long)active_menu->dp); + int depth = (intptr_t)active_menu->dp; char buf[80]; int ret, n; int p = 0; From 3eb8b0ecce6aa2a0c446c642f1ee486b9c54fdf6 Mon Sep 17 00:00:00 2001 From: Mikhail Titov Date: Wed, 26 Nov 2025 14:08:23 -0600 Subject: [PATCH 17/39] Explicit widening w/ SystemParametersInfo in allegrogl/src/win.c --- addons/allegrogl/src/win.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/allegrogl/src/win.c b/addons/allegrogl/src/win.c index 7cac95dfb..30bb8959e 100644 --- a/addons/allegrogl/src/win.c +++ b/addons/allegrogl/src/win.c @@ -1557,7 +1557,7 @@ static BITMAP *allegro_gl_win_init(int w, int h, int v_w, int v_h) if (fullscreen) { SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, - 0, (LPVOID)lock_time, + 0, (LPVOID)(uintptr_t)lock_time, SPIF_SENDWININICHANGE | SPIF_UPDATEINIFILE); } #undef SPI_GETFOREGROUNDLOCKTIMEOUT From 4fbdb682f424c4b7973c07402fc5043fd5a49111 Mon Sep 17 00:00:00 2001 From: Mikhail Titov Date: Wed, 26 Nov 2025 14:59:04 -0600 Subject: [PATCH 18/39] Fix pointer truncation in grabber.c --- tools/grabber.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tools/grabber.c b/tools/grabber.c index 069224097..40d5cfea1 100644 --- a/tools/grabber.c +++ b/tools/grabber.c @@ -1639,7 +1639,7 @@ static void fold_datafile(DATAFILE *dat) break; } - memmove(elem_p + 1, elem_p, (size_t)((unsigned long)&folded[folded_size++] - (unsigned long)elem_p)); + memmove(elem_p + 1, elem_p, &folded[folded_size++] - elem_p); *elem_p = dat->dat; } @@ -1651,7 +1651,7 @@ static void unfold_datafile(DATAFILE *dat) void **elem_p = bsearch(&dat->dat, folded, folded_size, sizeof(void *), ptr_cmp); if (elem_p) - memmove(elem_p, elem_p + 1, (size_t)((unsigned long)&folded[--folded_size] - (unsigned long)elem_p)); + memmove(elem_p, elem_p + 1, &folded[--folded_size] - elem_p); } @@ -3034,7 +3034,7 @@ static int helper(void) while (uisspace(last[j])) j++; s++; - memmove(s, s+1+cr+j, size - ((long)s-(long)grabber_help_text) - 1 - j); + memmove(s, s+1+cr+j, size - (s-grabber_help_text) - 1 - j); size -= 1+cr+j; last = s; } @@ -3298,7 +3298,7 @@ static int add_new(int type) /* handle the new object command */ static int new_object(void) { - return add_new((int)((unsigned long)active_menu->dp)); + return add_new((intptr_t)active_menu->dp); } @@ -3306,7 +3306,7 @@ static int new_object(void) /* handle the replace object command */ static int replace_object(void) { - return replacer((int)((unsigned long)active_menu->dp)); + return replacer((intptr_t)active_menu->dp); } @@ -3905,7 +3905,7 @@ int main(int argc, char *argv[]) tmpmenu.proc = new_object; tmpmenu.child = NULL; tmpmenu.flags = 0; - tmpmenu.dp = (void *)(unsigned long)datedit_object_info[i]->type; + tmpmenu.dp = (void *)(intptr_t)datedit_object_info[i]->type; add_to_menu(new_menu, &tmpmenu, TRUE, NULL, NULL, 0); From 8c52be0eda9e6d180102405acd9c7068d99a5b6b Mon Sep 17 00:00:00 2001 From: Mikhail Titov Date: Thu, 27 Nov 2025 02:49:03 -0600 Subject: [PATCH 19/39] Cross compilation test on GH w/ vcpkg --- .github/workflows/xc.yml | 32 ++++++++++++++++++ CMakePresets.json | 11 +++++++ cmake/Toolchain-mingw.cmake | 66 ------------------------------------- 3 files changed, 43 insertions(+), 66 deletions(-) create mode 100644 .github/workflows/xc.yml delete mode 100644 cmake/Toolchain-mingw.cmake diff --git a/.github/workflows/xc.yml b/.github/workflows/xc.yml new file mode 100644 index 000000000..54650ef5f --- /dev/null +++ b/.github/workflows/xc.yml @@ -0,0 +1,32 @@ +name: Cross compilation + +on: [push, pull_request] + +jobs: + test: + runs-on: ubuntu-latest + steps: + - name: Check out repository code + uses: actions/checkout@v4 + - name: 🐧 Setup + run: >- + sudo apt-get install -qq -y -o=Dpkg::Use-Pty=0 + mingw-w64-x86-64-dev + binutils-mingw-w64-x86-64 + gcc-mingw-w64-x86-64-win32 + g++-mingw-w64-x86-64-win32 + - name: 💾 Cache vcpkg dependencies + uses: actions/cache@v4 + with: + path: /usr/local/share/vcpkg/installed + key: vcpkg-installed + - name: 🌳 Install dependencies + run: | + echo VCPKG_ROOT=/usr/local/share/vcpkg >> $GITHUB_ENV + vcpkg install --triplet=x64-mingw-dynamic libpng libvorbis + - name: ⚒ Build with gcc + run: | + # https://github.com/microsoft/vcpkg/pull/48512 + sed -i 's/NO_DEFAULT_PATH/NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH/' $VCPKG_ROOT/installed/x64-mingw-dynamic/share/zlib/vcpkg-cmake-wrapper.cmake + cmake . -B build --preset=ci-xc + cmake --build build --preset ninja-quiet diff --git a/CMakePresets.json b/CMakePresets.json index 12b5bca84..7b5f078ab 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -31,6 +31,17 @@ "WANT_EXAMPLES": true, "WANT_TESTS": true } + }, + { + "name": "ci-xc", + "inherits": "ci-gcc", + "cacheVariables": { + "CMAKE_TOOLCHAIN_FILE": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake", + "VCPKG_CHAINLOAD_TOOLCHAIN_FILE": "$env{VCPKG_ROOT}/scripts/toolchains/mingw.cmake", + "VCPKG_TARGET_TRIPLET": "x64-mingw-dynamic", + "VCPKG_TARGET_ARCHITECTURE": "x64", + "CMAKE_FIND_ROOT_PATH": "/usr/x86_64-w64-mingw32" + } } ], "buildPresets": [ diff --git a/cmake/Toolchain-mingw.cmake b/cmake/Toolchain-mingw.cmake deleted file mode 100644 index a3d6c0eb5..000000000 --- a/cmake/Toolchain-mingw.cmake +++ /dev/null @@ -1,66 +0,0 @@ -# Use this command to build the Windows port of Allegro -# with a mingw cross compiler: -# -# cmake -DCMAKE_TOOLCHAIN_FILE=cmake/Toolchain-mingw.cmake . -# -# or for out of source: -# -# cmake -DCMAKE_TOOLCHAIN_FILE=../cmake/Toolchain-mingw.cmake .. -# -# You will need at least CMake 2.6.0. -# -# Adjust the following paths to suit your environment. -# -# You might want to set MINGDIR to prevent make install making a mess -# in your normal directories. -# -# This file was based on http://www.cmake.org/Wiki/CmakeMingw - -# the name of the target operating system -set(CMAKE_SYSTEM_NAME Windows) - -# Assume the target architecture. -# XXX for some reason the value set here gets cleared before we reach the -# main CMakeLists.txt; see that file for a workaround. -# set(CMAKE_SYSTEM_PROCESSOR i686) - -# Which compilers to use for C and C++, and location of target -# environment. -if(EXISTS /usr/i586-mingw32msvc) - # First look in standard location as used by Debian/Ubuntu/etc. - set(CMAKE_C_COMPILER i586-mingw32msvc-gcc) - set(CMAKE_CXX_COMPILER i586-mingw32msvc-g++) - set(CMAKE_FIND_ROOT_PATH /usr/i586-mingw32msvc) -elseif(EXISTS /opt/mingw) - # Otherwise you can get a MinGW environment using the script at - # . It downloads and builds MinGW and - # most of the dependencies for you. This is a suitable location. - set(CMAKE_C_COMPILER /opt/mingw/usr/bin/i686-pc-mingw32-gcc) - set(CMAKE_CXX_COMPILER /opt/mingw/usr/bin/i686-pc-mingw32-g++) - set(CMAKE_FIND_ROOT_PATH /opt/mingw/usr/i686-pc-mingw32) -else() - # Else fill in local path which the user will likely adjust. - # This is the location assumed by - set(CMAKE_C_COMPILER /usr/local/cross-tools/bin/i386-mingw32-gcc) - set(CMAKE_CXX_COMPILER /usr/local/cross-tools/bin/i386-mingw32-g++) - set(CMAKE_FIND_ROOT_PATH /usr/local/cross-tools) -endif() - -# Adjust the default behaviour of the FIND_XXX() commands: -# search headers and libraries in the target environment, search -# programs in the host environment -set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) -set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) -set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) - -# Tell pkg-config not to look at the target environment's .pc files. -# Setting PKG_CONFIG_LIBDIR sets the default search directory, but we have to -# set PKG_CONFIG_PATH as well to prevent pkg-config falling back to the host's -# path. -set(ENV{PKG_CONFIG_LIBDIR} ${CMAKE_FIND_ROOT_PATH}/lib/pkgconfig) -set(ENV{PKG_CONFIG_PATH} ${CMAKE_FIND_ROOT_PATH}/lib/pkgconfig) - -set(INSTALL_PREFIX ${CMAKE_FIND_ROOT_PATH}) -if(ENV{MINGDIR} STREQUAL "") - set(ENV{MINGDIR} ${CMAKE_FIND_ROOT_PATH}) -endif() From deb17f889d17b6ee39844b569b4758c181e2f961 Mon Sep 17 00:00:00 2001 From: Mikhail Titov Date: Fri, 28 Nov 2025 00:08:34 -0600 Subject: [PATCH 20/39] fixup! wip --- src/unicode.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/unicode.c b/src/unicode.c index f18e7c81b..1563aa8c8 100644 --- a/src/unicode.c +++ b/src/unicode.c @@ -2948,7 +2948,7 @@ static int decode_format_string(char *buf, STRING_ARG *string_arg, AL_CONST char case 'p': /* pointer */ - slen = sprint_hex(string_arg, &info, FALSE, (unsigned LONGEST)(uintptr_t)va_arg(args, void *)); + slen = sprint_hex(string_arg, &info, FALSE, (unsigned LONGEST)va_arg(args, uintptr_t)); NEXT_C(); break; From 7d25139df37061af3e212990ef099f09eddcef88 Mon Sep 17 00:00:00 2001 From: Mikhail Titov Date: Fri, 28 Nov 2025 00:35:13 -0600 Subject: [PATCH 21/39] Proper cases in CMake find_package helpers to reduce noise --- cmake/FindDDraw.cmake | 2 +- cmake/FindDInput.cmake | 2 +- cmake/FindDSound.cmake | 2 +- cmake/FindDXGuid.cmake | 2 +- cmake/FindVorbis.cmake | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/cmake/FindDDraw.cmake b/cmake/FindDDraw.cmake index af464d25d..41c2ebe16 100644 --- a/cmake/FindDDraw.cmake +++ b/cmake/FindDDraw.cmake @@ -29,7 +29,7 @@ find_library(DDRAW_LIBRARY # Handle the QUIETLY and REQUIRED arguments and set DDRAW_FOUND to TRUE if # all listed variables are TRUE. include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(DDRAW DEFAULT_MSG +find_package_handle_standard_args(DDraw DEFAULT_MSG DDRAW_INCLUDE_DIR DDRAW_LIBRARY) if(DDRAW_FOUND) diff --git a/cmake/FindDInput.cmake b/cmake/FindDInput.cmake index 4c9ad3072..31c5ced09 100644 --- a/cmake/FindDInput.cmake +++ b/cmake/FindDInput.cmake @@ -29,7 +29,7 @@ find_library(DINPUT_LIBRARY # Handle the QUIETLY and REQUIRED arguments and set DINPUT_FOUND to TRUE if # all listed variables are TRUE. include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(DINPUT DEFAULT_MSG +find_package_handle_standard_args(DInput DEFAULT_MSG DINPUT_INCLUDE_DIR DINPUT_LIBRARY) if(DINPUT_FOUND) diff --git a/cmake/FindDSound.cmake b/cmake/FindDSound.cmake index 40972a464..7e288d615 100644 --- a/cmake/FindDSound.cmake +++ b/cmake/FindDSound.cmake @@ -27,7 +27,7 @@ find_library(DSOUND_LIBRARY NAMES dsound # Handle the QUIETLY and REQUIRED arguments and set DSOUND_FOUND to TRUE if # all listed variables are TRUE. include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(DSOUND DEFAULT_MSG +find_package_handle_standard_args(DSound DEFAULT_MSG DSOUND_INCLUDE_DIR DSOUND_LIBRARY) if(DSOUND_FOUND) diff --git a/cmake/FindDXGuid.cmake b/cmake/FindDXGuid.cmake index 6426e25e9..ec6917c51 100644 --- a/cmake/FindDXGuid.cmake +++ b/cmake/FindDXGuid.cmake @@ -16,7 +16,7 @@ endif() # Handle the QUIETLY and REQUIRED arguments and set DXGUID_FOUND to TRUE if # all listed variables are TRUE. include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(DXGUID DEFAULT_MSG +find_package_handle_standard_args(DXGuid DEFAULT_MSG DXGUID_LIBRARY) if(DXGUID_FOUND) diff --git a/cmake/FindVorbis.cmake b/cmake/FindVorbis.cmake index 46e990761..66614e16c 100644 --- a/cmake/FindVorbis.cmake +++ b/cmake/FindVorbis.cmake @@ -18,7 +18,7 @@ if(NOT GP2XWIZ) # Handle the QUIETLY and REQUIRED arguments and set VORBIS_FOUND # to TRUE if all listed variables are TRUE. include(FindPackageHandleStandardArgs) - find_package_handle_standard_args(VORBIS DEFAULT_MSG + find_package_handle_standard_args(Vorbis DEFAULT_MSG OGG_INCLUDE_DIR VORBIS_INCLUDE_DIR OGG_LIBRARY VORBIS_LIBRARY VORBISFILE_LIBRARY) else(NOT GP2XWIZ) From 0083a0760a6757923e8a2444ef496fca129eb882 Mon Sep 17 00:00:00 2001 From: Mikhail Titov Date: Fri, 28 Nov 2025 00:38:23 -0600 Subject: [PATCH 22/39] test --- .github/workflows/xc.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/xc.yml b/.github/workflows/xc.yml index 54650ef5f..7de3ab999 100644 --- a/.github/workflows/xc.yml +++ b/.github/workflows/xc.yml @@ -27,6 +27,6 @@ jobs: - name: ⚒ Build with gcc run: | # https://github.com/microsoft/vcpkg/pull/48512 - sed -i 's/NO_DEFAULT_PATH/NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH/' $VCPKG_ROOT/installed/x64-mingw-dynamic/share/zlib/vcpkg-cmake-wrapper.cmake + # sed -i 's/NO_DEFAULT_PATH/NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH/' $VCPKG_ROOT/installed/x64-mingw-dynamic/share/zlib/vcpkg-cmake-wrapper.cmake cmake . -B build --preset=ci-xc cmake --build build --preset ninja-quiet From c3706e75a696c9bf1ddf2910e1c08d27dd8ed84e Mon Sep 17 00:00:00 2001 From: Mikhail Titov Date: Fri, 28 Nov 2025 02:08:01 -0600 Subject: [PATCH 23/39] fixup! xc --- .github/workflows/xc.yml | 2 -- CMakePresets.json | 6 ++++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/xc.yml b/.github/workflows/xc.yml index 7de3ab999..808910a04 100644 --- a/.github/workflows/xc.yml +++ b/.github/workflows/xc.yml @@ -26,7 +26,5 @@ jobs: vcpkg install --triplet=x64-mingw-dynamic libpng libvorbis - name: ⚒ Build with gcc run: | - # https://github.com/microsoft/vcpkg/pull/48512 - # sed -i 's/NO_DEFAULT_PATH/NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH/' $VCPKG_ROOT/installed/x64-mingw-dynamic/share/zlib/vcpkg-cmake-wrapper.cmake cmake . -B build --preset=ci-xc cmake --build build --preset ninja-quiet diff --git a/CMakePresets.json b/CMakePresets.json index 7b5f078ab..a8037558b 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -35,12 +35,14 @@ { "name": "ci-xc", "inherits": "ci-gcc", + "environment": { + "MINGDIR": "/usr/x86_64-w64-mingw32" + }, "cacheVariables": { "CMAKE_TOOLCHAIN_FILE": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake", "VCPKG_CHAINLOAD_TOOLCHAIN_FILE": "$env{VCPKG_ROOT}/scripts/toolchains/mingw.cmake", "VCPKG_TARGET_TRIPLET": "x64-mingw-dynamic", - "VCPKG_TARGET_ARCHITECTURE": "x64", - "CMAKE_FIND_ROOT_PATH": "/usr/x86_64-w64-mingw32" + "VCPKG_TARGET_ARCHITECTURE": "x64" } } ], From 944e6daaa5783eeb0f379ad1486e325ede333b3c Mon Sep 17 00:00:00 2001 From: Mikhail Titov Date: Sun, 30 Nov 2025 00:29:35 -0600 Subject: [PATCH 24/39] fixup! GH --- .github/workflows/test.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 463937012..7cef654a5 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -60,7 +60,7 @@ jobs: - name: 🪟 Install dependencies on Windows if: runner.os == 'Windows' shell: pwsh - run: vcpkg install --triplet ${{ matrix.arch }}-windows libvorbis libpng libjpeg-turbo zlib + run: vcpkg install --triplet ${{ matrix.arch }}-windows libvorbis libpng - name: ⚒ Build with Visual Studio on Windows env: sdkPath: "C:/Program Files (x86)/Windows Kits/10" @@ -87,7 +87,6 @@ jobs: mingw-w64-${{ env.arch }}-ninja mingw-w64-${{ env.arch }}-cmake mingw-w64-${{ env.arch }}-libpng - mingw-w64-${{ env.arch }}-libjpeg-turbo mingw-w64-${{ env.arch }}-libvorbis - name: ⚒ Build with gcc env: From 505be6ff8afe8a258a859855d023517cbbf473b0 Mon Sep 17 00:00:00 2001 From: Mikhail Titov Date: Sun, 30 Nov 2025 00:36:56 -0600 Subject: [PATCH 25/39] PSP toolchain repeats itself 3 times --- cmake/Toolchain-psp-gcc.cmake | 146 ---------------------------------- 1 file changed, 146 deletions(-) diff --git a/cmake/Toolchain-psp-gcc.cmake b/cmake/Toolchain-psp-gcc.cmake index 84a220cb8..119d07339 100644 --- a/cmake/Toolchain-psp-gcc.cmake +++ b/cmake/Toolchain-psp-gcc.cmake @@ -71,149 +71,3 @@ function(add_psp_executable nm) endfunction() set(PSP 1) -# Use this command to build the PSP port of Allegro: -# -# cmake -DWANT_TESTS=off -DWANT_TOOLS=off -DWANT_LOGG=off -DWANT_ALLEGROGL=off -DCMAKE_TOOLCHAIN_FILE=cmake/Toolchain-psp-gcc.cmake . -# -# or for out of source: -# -# cmake -DWANT_TESTS=off -DWANT_TOOLS=off -DWANT_LOGG=off -DWANT_ALLEGROGL=off -DCMAKE_TOOLCHAIN_FILE=../cmake/Toolchain-psp-gcc.cmake .. -# -# You will need at least CMake 2.6.0. -# -# Adjust the following paths to suit your environment. -# -# This file was based on http://www.cmake.org/Wiki/CmakeMingw - -# The name of the target operating system. -set(CMAKE_SYSTEM_NAME Generic) - -# Location of target environment. -find_program(psp-config_SCRIPT psp-config) -if (psp-config_SCRIPT) - execute_process(COMMAND ${psp-config_SCRIPT} - ARGS --psp-prefix - OUTPUT_VARIABLE PSP_PREFIX - OUTPUT_STRIP_TRAILING_WHITESPACE) - execute_process(COMMAND ${psp-config_SCRIPT} - ARGS --pspsdk-path - OUTPUT_VARIABLE PSPSDK_PATH - OUTPUT_STRIP_TRAILING_WHITESPACE) -else (psp-config_SCRIPT) - message(FATAL_ERROR "psp-config was not found.\nInstall the PSPDEV toolchain or update the $PATH environment variable.") -endif (psp-config_SCRIPT) - -set(CMAKE_SYSTEM_INCLUDE_PATH "${PSP_PREFIX}/include") -set(CMAKE_SYSTEM_LIBRARY_PATH "${PSP_PREFIX}/lib") -set(CMAKE_SYSTEM_PROGRAM_PATH "${PSP_PREFIX}/bin") - -# Which compilers to use for C and C++. -set(CMAKE_C_COMPILER psp-gcc) -set(CMAKE_CXX_COMPILER psp-g++) - -# Needed to pass the compiler tests. -set(LINK_DIRECTORIES ${PSPSDK_PATH}/lib) -set(LINK_LIBRARIES -lc -lpspuser -lpspkernel -lc) - -# Adjust the default behaviour of the FIND_XXX() commands: -# search headers and libraries in the target environment, search -# programs in the host environment. -set(CMAKE_FIND_ROOT_PATH ${PSP_PREFIX}) -set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) -set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) -set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) - -# After building the ELF binary build the PSP executable. -function(add_psp_executable nm) - get_target_property(PSP_EXECUTABLE_OUTPUT_NAME ${nm} OUTPUT_NAME) - if (NOT PSP_EXECUTABLE_OUTPUT_NAME) - set(PSP_EXECUTABLE_OUTPUT_NAME ${nm}) - endif(NOT PSP_EXECUTABLE_OUTPUT_NAME) - set_target_properties( - ${nm} - PROPERTIES LINK_FLAGS "-specs=${PSPSDK_PATH}/lib/prxspecs -Wl,-q,-T${PSPSDK_PATH}/lib/linkfile.prx ${PSPSDK_PATH}/lib/prxexports.o" - ) - add_custom_command( - TARGET ${nm} - POST_BUILD - COMMAND psp-fixup-imports ${PSP_EXECUTABLE_OUTPUT_NAME} - COMMAND mksfo '${PSP_EXECUTABLE_OUTPUT_NAME}' PARAM.SFO - COMMAND psp-prxgen ${PSP_EXECUTABLE_OUTPUT_NAME} ${PSP_EXECUTABLE_OUTPUT_NAME}.prx - COMMAND pack-pbp EBOOT.PBP PARAM.SFO NULL NULL NULL NULL NULL ${PSP_EXECUTABLE_OUTPUT_NAME}.prx NULL - ) -endfunction() - -set(PSP 1) -# Use this command to build the PSP port of Allegro: -# -# cmake -DWANT_TESTS=off -DWANT_TOOLS=off -DWANT_LOGG=off -DWANT_ALLEGROGL=off -DCMAKE_TOOLCHAIN_FILE=cmake/Toolchain-psp-gcc.cmake . -# -# or for out of source: -# -# cmake -DWANT_TESTS=off -DWANT_TOOLS=off -DWANT_LOGG=off -DWANT_ALLEGROGL=off -DCMAKE_TOOLCHAIN_FILE=../cmake/Toolchain-psp-gcc.cmake .. -# -# You will need at least CMake 2.6.0. -# -# Adjust the following paths to suit your environment. -# -# This file was based on http://www.cmake.org/Wiki/CmakeMingw - -# The name of the target operating system. -set(CMAKE_SYSTEM_NAME Generic) - -# Location of target environment. -find_program(psp-config_SCRIPT psp-config) -if (psp-config_SCRIPT) - execute_process(COMMAND ${psp-config_SCRIPT} - ARGS --psp-prefix - OUTPUT_VARIABLE PSP_PREFIX - OUTPUT_STRIP_TRAILING_WHITESPACE) - execute_process(COMMAND ${psp-config_SCRIPT} - ARGS --pspsdk-path - OUTPUT_VARIABLE PSPSDK_PATH - OUTPUT_STRIP_TRAILING_WHITESPACE) -else (psp-config_SCRIPT) - message(FATAL_ERROR "psp-config was not found.\nInstall the PSPDEV toolchain or update the $PATH environment variable.") -endif (psp-config_SCRIPT) - -set(CMAKE_SYSTEM_INCLUDE_PATH "${PSP_PREFIX}/include") -set(CMAKE_SYSTEM_LIBRARY_PATH "${PSP_PREFIX}/lib") -set(CMAKE_SYSTEM_PROGRAM_PATH "${PSP_PREFIX}/bin") - -# Which compilers to use for C and C++. -set(CMAKE_C_COMPILER psp-gcc) -set(CMAKE_CXX_COMPILER psp-g++) - -# Needed to pass the compiler tests. -set(LINK_DIRECTORIES ${PSPSDK_PATH}/lib) -set(LINK_LIBRARIES -lc -lpspuser -lpspkernel -lc) - -# Adjust the default behaviour of the FIND_XXX() commands: -# search headers and libraries in the target environment, search -# programs in the host environment. -set(CMAKE_FIND_ROOT_PATH ${PSP_PREFIX}) -set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) -set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) -set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) - -# After building the ELF binary build the PSP executable. -function(add_psp_executable nm) - get_target_property(PSP_EXECUTABLE_OUTPUT_NAME ${nm} OUTPUT_NAME) - if (NOT PSP_EXECUTABLE_OUTPUT_NAME) - set(PSP_EXECUTABLE_OUTPUT_NAME ${nm}) - endif(NOT PSP_EXECUTABLE_OUTPUT_NAME) - set_target_properties( - ${nm} - PROPERTIES LINK_FLAGS "-specs=${PSPSDK_PATH}/lib/prxspecs -Wl,-q,-T${PSPSDK_PATH}/lib/linkfile.prx ${PSPSDK_PATH}/lib/prxexports.o" - ) - add_custom_command( - TARGET ${nm} - POST_BUILD - COMMAND psp-fixup-imports ${PSP_EXECUTABLE_OUTPUT_NAME} - COMMAND mksfo '${PSP_EXECUTABLE_OUTPUT_NAME}' PARAM.SFO - COMMAND psp-prxgen ${PSP_EXECUTABLE_OUTPUT_NAME} ${PSP_EXECUTABLE_OUTPUT_NAME}.prx - COMMAND pack-pbp EBOOT.PBP PARAM.SFO NULL NULL NULL NULL NULL ${PSP_EXECUTABLE_OUTPUT_NAME}.prx NULL - ) -endfunction() - -set(PSP 1) From 1d7d6497f59b3d95296d1584ba5c43b6e3b1855e Mon Sep 17 00:00:00 2001 From: Mikhail Titov Date: Sun, 30 Nov 2025 01:09:10 -0600 Subject: [PATCH 26/39] more --- .github/workflows/haiku.yml | 19 ++++++++ .github/workflows/psp.yml | 20 ++++++++ .github/workflows/test.yml | 97 ------------------------------------- .github/workflows/xc.yml | 30 ------------ CMakePresets.json | 12 +++++ 5 files changed, 51 insertions(+), 127 deletions(-) create mode 100644 .github/workflows/haiku.yml create mode 100644 .github/workflows/psp.yml delete mode 100644 .github/workflows/test.yml delete mode 100644 .github/workflows/xc.yml diff --git a/.github/workflows/haiku.yml b/.github/workflows/haiku.yml new file mode 100644 index 000000000..9865b7deb --- /dev/null +++ b/.github/workflows/haiku.yml @@ -0,0 +1,19 @@ +name: Haiku + +on: [push, pull_request] + +jobs: + test: + runs-on: ubuntu-latest + steps: + - name: Build on Haiku + uses: cross-platform-actions/action@v0.30.0 + with: + image_url: 'https://github.com/cross-platform-actions/haiku-builder/releases/download/v0.0.1/haiku-r1beta5-x86-64.qcow2' + commands: | + pkgman install cmake libvorbis_devel ninja git + mkdir src && cd src + git clone https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com{{ github.repository }}.git . + git checkout ${{ github.sha }} + cmake . -B build --preset=ci-gcc + cmake --build build --preset ninja-quiet diff --git a/.github/workflows/psp.yml b/.github/workflows/psp.yml new file mode 100644 index 000000000..bd4e1028c --- /dev/null +++ b/.github/workflows/psp.yml @@ -0,0 +1,20 @@ +name: PSP + +on: [push, pull_request] + +jobs: + test: + runs-on: ubuntu-latest + container: + image: pspdev/pspdev:latest + volumes: + - ${{ github.workspace }}:/src + steps: + - name: 🎮 Setup tools + run: apk add build-base cmake ninja-build git + - name: Check out repository code + uses: actions/checkout@v4 + - name: ⚒ Build with gcc + run: | + cmake . -B build --preset=ci-psp + cmake --build build --preset ninja-quiet diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml deleted file mode 100644 index 7cef654a5..000000000 --- a/.github/workflows/test.yml +++ /dev/null @@ -1,97 +0,0 @@ -name: Tests - -on: [push, pull_request] - -jobs: - test: - strategy: - fail-fast: false - matrix: - os: [windows-latest] - arch: [x64, x86] - include: - - os: ubuntu-latest - arch: x64 - defaults: - run: - shell: bash - runs-on: ${{ matrix.os }} - steps: - - name: Check out repository code - uses: actions/checkout@v4 - - name: 💾 Cache dependencies on Windows - if: runner.os == 'Windows' - uses: actions/cache@v4 - with: - path: | - C:\msys64\var\cache\pacman\pkg - C:\vcpkg\installed - key: build-dep-windows-${{ matrix.arch }} - - name: 🐧 Install dependencies on Linux - if: runner.os == 'Linux' - run: >- - sudo apt-get install -qq -y -o=Dpkg::Use-Pty=0 - cmake - pkgconf - libxext-dev - libx11-dev - libxpm-dev - libxt-dev - libxcursor-dev - libasound2-dev - libopenal-dev - libxxf86dga-dev - libxxf86vm-dev - libgl-dev - libglx-dev - libgl1-mesa-dev - libglu-dev - libglu1-mesa-dev - libpng-dev - zlib1g-dev - libvorbis-dev - - name: 🪟 Set up environment variables on Windows - env: - MSYSTEM: ${{ matrix.arch == 'x64' && 'MINGW64' || 'MINGW32' }} - if: runner.os == 'Windows' - run: | - echo "VCPKG_ROOT=C:/vcpkg" >> $GITHUB_ENV - echo "MSYSTEM=${{ env.MSYSTEM }}" >> $GITHUB_ENV - - name: 🪟 Install dependencies on Windows - if: runner.os == 'Windows' - shell: pwsh - run: vcpkg install --triplet ${{ matrix.arch }}-windows libvorbis libpng - - name: ⚒ Build with Visual Studio on Windows - env: - sdkPath: "C:/Program Files (x86)/Windows Kits/10" - sdkVer: "10.0.26100.0" - arch: ${{ matrix.arch }} - shell: pwsh - if: ${{ runner.os == 'Windows' && !cancelled() }} - run: | - cmake . -B build_vs -A ${{ matrix.arch == 'x64' && 'x64' || 'Win32' }} --preset=ci-vs - cmake --build build_vs --config Debug -- /verbosity:quiet - - name: 🔍 Add MSYS2 to path on Windows - if: ${{ runner.os == 'Windows' && !cancelled() }} - shell: pwsh - run: | - echo "C:\msys64\usr\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append - echo "C:\msys64\${{ matrix.arch == 'x64' && 'mingw64' || 'mingw32' }}\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append - - name: 🪟 Install msys2 dependencies on Windows - env: - arch: ${{ matrix.arch == 'x64' && 'x86_64' || 'i686' }} - if: ${{ runner.os == 'Windows' && !cancelled() }} - run: >- - pacman --noconfirm -S - mingw-w64-${{ env.arch }}-gcc - mingw-w64-${{ env.arch }}-ninja - mingw-w64-${{ env.arch }}-cmake - mingw-w64-${{ env.arch }}-libpng - mingw-w64-${{ env.arch }}-libvorbis - - name: ⚒ Build with gcc - env: - MINGDIR: "C:/msys64/${{ matrix.arch == 'x64' && 'mingw64' || 'mingw32' }}" - if: ${{ !cancelled() }} - run: | - cmake . -B build --preset=ci-gcc - cmake --build build --preset=ninja-quiet diff --git a/.github/workflows/xc.yml b/.github/workflows/xc.yml deleted file mode 100644 index 808910a04..000000000 --- a/.github/workflows/xc.yml +++ /dev/null @@ -1,30 +0,0 @@ -name: Cross compilation - -on: [push, pull_request] - -jobs: - test: - runs-on: ubuntu-latest - steps: - - name: Check out repository code - uses: actions/checkout@v4 - - name: 🐧 Setup - run: >- - sudo apt-get install -qq -y -o=Dpkg::Use-Pty=0 - mingw-w64-x86-64-dev - binutils-mingw-w64-x86-64 - gcc-mingw-w64-x86-64-win32 - g++-mingw-w64-x86-64-win32 - - name: 💾 Cache vcpkg dependencies - uses: actions/cache@v4 - with: - path: /usr/local/share/vcpkg/installed - key: vcpkg-installed - - name: 🌳 Install dependencies - run: | - echo VCPKG_ROOT=/usr/local/share/vcpkg >> $GITHUB_ENV - vcpkg install --triplet=x64-mingw-dynamic libpng libvorbis - - name: ⚒ Build with gcc - run: | - cmake . -B build --preset=ci-xc - cmake --build build --preset ninja-quiet diff --git a/CMakePresets.json b/CMakePresets.json index a8037558b..f21e1d130 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -44,6 +44,18 @@ "VCPKG_TARGET_TRIPLET": "x64-mingw-dynamic", "VCPKG_TARGET_ARCHITECTURE": "x64" } + }, + { + "name": "ci-psp", + "inherits": "ci-gcc", + "cacheVariables": { + "CMAKE_TOOLCHAIN_FILE": "${sourceDir}/cmake/Toolchain-psp-gcc.cmake", + "CMAKE_MAKE_PROGRAM": "/usr/lib/ninja-build/bin/ninja", + "SHARED": false, + "WANT_TOOLS": false, + "WANT_ALLEGROGL": false, + "ALLEGRO_USE_CONSTRUCTOR_EXITCODE": "0" + } } ], "buildPresets": [ From 1dff6fa0ada41c768112f1484707068544a9d024 Mon Sep 17 00:00:00 2001 From: Mikhail Titov Date: Sun, 30 Nov 2025 01:23:21 -0600 Subject: [PATCH 27/39] fixup! more --- .github/workflows/haiku.yml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/.github/workflows/haiku.yml b/.github/workflows/haiku.yml index 9865b7deb..edfc30775 100644 --- a/.github/workflows/haiku.yml +++ b/.github/workflows/haiku.yml @@ -6,14 +6,15 @@ jobs: test: runs-on: ubuntu-latest steps: + - name: Check out repository code + uses: actions/checkout@v4 - name: Build on Haiku uses: cross-platform-actions/action@v0.30.0 with: + operating_system: haiku + version: r1beta5 image_url: 'https://github.com/cross-platform-actions/haiku-builder/releases/download/v0.0.1/haiku-r1beta5-x86-64.qcow2' - commands: | + run: | pkgman install cmake libvorbis_devel ninja git - mkdir src && cd src - git clone https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com{{ github.repository }}.git . - git checkout ${{ github.sha }} cmake . -B build --preset=ci-gcc cmake --build build --preset ninja-quiet From dce55f01dda4a1c756dfe6dbce444d0d6493e41e Mon Sep 17 00:00:00 2001 From: Mikhail Titov Date: Sun, 30 Nov 2025 01:24:10 -0600 Subject: [PATCH 28/39] [psp] define ALLEGRO_NO_STRICMP --- include/allegro/platform/alpspcfg.h | 1 + 1 file changed, 1 insertion(+) diff --git a/include/allegro/platform/alpspcfg.h b/include/allegro/platform/alpspcfg.h index dd6327650..be7e64cd6 100644 --- a/include/allegro/platform/alpspcfg.h +++ b/include/allegro/platform/alpspcfg.h @@ -48,6 +48,7 @@ #define ALLEGRO_HAVE_STDINT_H 1 #define ALLEGRO_HAVE_SYS_TIME_H 1 #define ALLEGRO_HAVE_SYS_STAT_H 1 +#define ALLEGRO_NO_STRICMP /* Describe this platform */ #define ALLEGRO_PLATFORM_STR "PlayStation Portable" From 19089879e9ac1ee5720fe57e715fbb69427f023d Mon Sep 17 00:00:00 2001 From: Mikhail Titov Date: Sun, 30 Nov 2025 01:29:34 -0600 Subject: [PATCH 29/39] [psp] Use AL_VAR for displayed_video_bitmap --- include/allegro/platform/aintpsp.h | 2 +- src/psp/pgfx.c | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/include/allegro/platform/aintpsp.h b/include/allegro/platform/aintpsp.h index ebc211f06..a9b1f0c1e 100644 --- a/include/allegro/platform/aintpsp.h +++ b/include/allegro/platform/aintpsp.h @@ -43,7 +43,7 @@ AL_VAR(GFX_VTABLE, psp_vtable8); AL_FUNC(void, psp_do_stretch_blit8, (BITMAP *source, BITMAP *dest, int source_x, int source_y, int source_width, int source_height, int dest_x, int dest_y, int dest_width, int dest_height, int masked)); /* The video bitmap actually displayed on the PSP. */ -BITMAP *displayed_video_bitmap; +AL_VAR(BITMAP *, displayed_video_bitmap); AL_FUNC(void, psp_draw_to_screen, (void)); diff --git a/src/psp/pgfx.c b/src/psp/pgfx.c index c762e83b1..c17abbc02 100644 --- a/src/psp/pgfx.c +++ b/src/psp/pgfx.c @@ -39,6 +39,8 @@ #define VIDEO_REFRESH_RATE (60) #define DISPLAY_SIZE (MIN_BUF_WIDTH * MAX_SCR_HEIGHT * PALETTE_PIXEL_SIZE) +/* The video bitmap actually displayed on the PSP. */ +BITMAP *displayed_video_bitmap; /* The width in pixels of the display framebuffer. */ static unsigned int framebuf_width; From 0960b4dc98cce69f05cc0969069a7c2928e6a3a8 Mon Sep 17 00:00:00 2001 From: Mikhail Titov Date: Sun, 30 Nov 2025 01:30:06 -0600 Subject: [PATCH 30/39] fixup! more --- .github/workflows/haiku.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/haiku.yml b/.github/workflows/haiku.yml index edfc30775..39156dc29 100644 --- a/.github/workflows/haiku.yml +++ b/.github/workflows/haiku.yml @@ -15,6 +15,6 @@ jobs: version: r1beta5 image_url: 'https://github.com/cross-platform-actions/haiku-builder/releases/download/v0.0.1/haiku-r1beta5-x86-64.qcow2' run: | - pkgman install cmake libvorbis_devel ninja git + echo yes | pkgman install cmake libvorbis_devel ninja git cmake . -B build --preset=ci-gcc cmake --build build --preset ninja-quiet From 4da21a3df0666f4c50652a0eddd87174cb05a1a3 Mon Sep 17 00:00:00 2001 From: Mikhail Titov Date: Mon, 1 Dec 2025 20:22:00 -0600 Subject: [PATCH 31/39] fixup! more --- .github/workflows/haiku.yml | 2 +- .github/workflows/psp.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/haiku.yml b/.github/workflows/haiku.yml index 39156dc29..e7c57e36d 100644 --- a/.github/workflows/haiku.yml +++ b/.github/workflows/haiku.yml @@ -15,6 +15,6 @@ jobs: version: r1beta5 image_url: 'https://github.com/cross-platform-actions/haiku-builder/releases/download/v0.0.1/haiku-r1beta5-x86-64.qcow2' run: | - echo yes | pkgman install cmake libvorbis_devel ninja git + echo yes | pkgman install cmake ninja glu_devel libvorbis_devel cmake . -B build --preset=ci-gcc cmake --build build --preset ninja-quiet diff --git a/.github/workflows/psp.yml b/.github/workflows/psp.yml index bd4e1028c..48d6a6803 100644 --- a/.github/workflows/psp.yml +++ b/.github/workflows/psp.yml @@ -11,7 +11,7 @@ jobs: - ${{ github.workspace }}:/src steps: - name: 🎮 Setup tools - run: apk add build-base cmake ninja-build git + run: apk add cmake ninja-build - name: Check out repository code uses: actions/checkout@v4 - name: ⚒ Build with gcc From c153d425c9aabbee0fb91c83bbfeda8a8d12b163 Mon Sep 17 00:00:00 2001 From: Mikhail Titov Date: Mon, 1 Dec 2025 20:23:38 -0600 Subject: [PATCH 32/39] [psp] CMake somehow fails to emit -L flag. Why??? --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 370c4028f..8f1f32afc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -724,7 +724,7 @@ endif(ALLEGRO_MACOSX) if(PSP) include_directories(SYSTEM ${PSPSDK_PATH}/include) - link_directories(${PSPSDK_PATH}/lib) + add_link_options("-L${PSPSDK_PATH}/lib") list(APPEND PLATFORM_SOURCES ${ALLEGRO_SRC_PSP_FILES}) list(APPEND PLATFORM_LIBS m pspaudio pspgu psprtc pspdebug pspdisplay pspge pspctrl pspsdk c pspnet pspnet_inet pspnet_resolver psputility pspuser pspkernel) From 4c398a60245af4f0d440623c2bd1931110dcaad3 Mon Sep 17 00:00:00 2001 From: Mikhail Titov Date: Mon, 1 Dec 2025 20:26:40 -0600 Subject: [PATCH 33/39] Haiku OS fixups --- CMakeLists.txt | 12 +++++++----- addons/allegrogl/CMakeLists.txt | 5 ++++- addons/allegrogl/include/alleggl.h | 2 +- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8f1f32afc..dc1313f73 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -320,12 +320,14 @@ if(APPLE) endif(COMPILER_GCC) endif(APPLE) +if(CMAKE_SYSTEM_NAME STREQUAL Haiku) + set(ALLEGRO_HAIKU 1) + set(BEOS 1) +elseif(CMAKE_SYSTEM_NAME STREQUAL BeOS) + set(ALLEGRO_BEOS 1) + set(BEOS 1) +endif(CMAKE_SYSTEM_NAME STREQUAL Haiku) if(BEOS) - if(CMAKE_SYSTEM_NAME STREQUAL Haiku) - set(ALLEGRO_HAIKU 1) - else(CMAKE_SYSTEM_NAME STREQUAL Haiku) - set(ALLEGRO_BEOS 1) - endif(CMAKE_SYSTEM_NAME STREQUAL Haiku) set(WFLAGS "-W -Wall -Wno-unused -Wno-multichar") set(WFLAGS_C_ONLY "") set(WFLAGS_CXX_ONLY "-Wno-ctor-dtor-privacy") diff --git a/addons/allegrogl/CMakeLists.txt b/addons/allegrogl/CMakeLists.txt index 37cce0306..b6953cc9f 100644 --- a/addons/allegrogl/CMakeLists.txt +++ b/addons/allegrogl/CMakeLists.txt @@ -6,7 +6,7 @@ if(NOT OPENGL_FOUND) return() endif() -if(UNIX AND NOT APPLE) +if(UNIX AND NOT APPLE AND NOT BEOS) find_package(X11) if(NOT X11_FOUND) return() @@ -39,6 +39,9 @@ if(ALLEGRO_WITH_XWINDOWS) endif(ALLEGRO_WITH_XWINDOWS) # XXX Mesa generic driver support? +if(PSP OR BEOS) + set(ALLEGROGL_GENERIC_DRIVER 1) +endif(PSP OR BEOS) configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/include/allegrogl/alleggl_config.h.cmake diff --git a/addons/allegrogl/include/alleggl.h b/addons/allegrogl/include/alleggl.h index fa36c9844..5fd5cd344 100644 --- a/addons/allegrogl/include/alleggl.h +++ b/addons/allegrogl/include/alleggl.h @@ -76,7 +76,7 @@ typedef __int64 INT64; #include "allegrogl/gl_ext.h" -#ifdef ALLEGRO_WITH_XWINDOWS +#if defined(ALLEGRO_WITH_XWINDOWS) || defined(ALLEGRO_PSP) || defined(ALLEGRO_HAIKU) #if (ALLEGRO_SUB_VERSION == 2) && (ALLEGRO_WIP_VERSION < 2) # ifndef HAVE_LIBPTHREAD # error AllegroGL requires Allegro to have pthread support enabled! From 79073d716d963c400daf9af17d590c7751d80220 Mon Sep 17 00:00:00 2001 From: Mikhail Titov Date: Mon, 1 Dec 2025 23:05:22 -0600 Subject: [PATCH 34/39] fixup! more --- .github/workflows/haiku.yml | 9 ++-- .github/workflows/psp.yml | 2 +- .github/workflows/test.yml | 97 +++++++++++++++++++++++++++++++++++++ .github/workflows/xc.yml | 30 ++++++++++++ CMakePresets.json | 3 +- 5 files changed, 134 insertions(+), 7 deletions(-) create mode 100644 .github/workflows/test.yml create mode 100644 .github/workflows/xc.yml diff --git a/.github/workflows/haiku.yml b/.github/workflows/haiku.yml index e7c57e36d..59b317803 100644 --- a/.github/workflows/haiku.yml +++ b/.github/workflows/haiku.yml @@ -6,15 +6,16 @@ jobs: test: runs-on: ubuntu-latest steps: - - name: Check out repository code + - name: 💳 Check out repository code uses: actions/checkout@v4 - - name: Build on Haiku + - name: ⚒️ Build on Haiku uses: cross-platform-actions/action@v0.30.0 with: operating_system: haiku version: r1beta5 - image_url: 'https://github.com/cross-platform-actions/haiku-builder/releases/download/v0.0.1/haiku-r1beta5-x86-64.qcow2' + sync_files: runner-to-vm + memory: 2G run: | - echo yes | pkgman install cmake ninja glu_devel libvorbis_devel + pkgman install -y cmake ninja glu_devel libvorbis_devel cmake . -B build --preset=ci-gcc cmake --build build --preset ninja-quiet diff --git a/.github/workflows/psp.yml b/.github/workflows/psp.yml index 48d6a6803..5b40d99b6 100644 --- a/.github/workflows/psp.yml +++ b/.github/workflows/psp.yml @@ -11,7 +11,7 @@ jobs: - ${{ github.workspace }}:/src steps: - name: 🎮 Setup tools - run: apk add cmake ninja-build + run: apk add ninja-build - name: Check out repository code uses: actions/checkout@v4 - name: ⚒ Build with gcc diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 000000000..97c820d73 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,97 @@ +name: Tests + +on: [push, pull_request] + +jobs: + test: + strategy: + fail-fast: false + matrix: + os: [windows-latest] + arch: [x64, x86] + include: + - os: ubuntu-latest + arch: x64 + defaults: + run: + shell: bash + runs-on: ${{ matrix.os }} + steps: + - name: 💳 Check out repository code + uses: actions/checkout@v4 + - name: 💾 Cache dependencies on Windows + if: runner.os == 'Windows' + uses: actions/cache@v4 + with: + path: | + C:\msys64\var\cache\pacman\pkg + C:\vcpkg\installed + key: build-dep-windows-${{ matrix.arch }} + - name: 🐧 Install dependencies on Linux + if: runner.os == 'Linux' + run: >- + sudo apt-get install -qq -y -o=Dpkg::Use-Pty=0 + cmake + pkgconf + libxext-dev + libx11-dev + libxpm-dev + libxt-dev + libxcursor-dev + libasound2-dev + libopenal-dev + libxxf86dga-dev + libxxf86vm-dev + libgl-dev + libglx-dev + libgl1-mesa-dev + libglu-dev + libglu1-mesa-dev + libpng-dev + zlib1g-dev + libvorbis-dev + - name: 🪟 Set up environment variables on Windows + env: + MSYSTEM: ${{ matrix.arch == 'x64' && 'MINGW64' || 'MINGW32' }} + if: runner.os == 'Windows' + run: | + echo "VCPKG_ROOT=C:/vcpkg" >> $GITHUB_ENV + echo "MSYSTEM=${{ env.MSYSTEM }}" >> $GITHUB_ENV + - name: 🪟 Install dependencies on Windows + if: runner.os == 'Windows' + shell: pwsh + run: vcpkg install --triplet ${{ matrix.arch }}-windows libvorbis libpng + - name: ⚒️ Build with Visual Studio on Windows + env: + sdkPath: "C:/Program Files (x86)/Windows Kits/10" + sdkVer: "10.0.26100.0" + arch: ${{ matrix.arch }} + shell: pwsh + if: ${{ runner.os == 'Windows' && !cancelled() }} + run: | + cmake . -B build_vs -A ${{ matrix.arch == 'x64' && 'x64' || 'Win32' }} --preset=ci-vs + cmake --build build_vs --config Debug -- /verbosity:quiet + - name: 🔍 Add MSYS2 to path on Windows + if: ${{ runner.os == 'Windows' && !cancelled() }} + shell: pwsh + run: | + echo "C:\msys64\usr\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append + echo "C:\msys64\${{ matrix.arch == 'x64' && 'mingw64' || 'mingw32' }}\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append + - name: 🪟 Install msys2 dependencies on Windows + env: + arch: ${{ matrix.arch == 'x64' && 'x86_64' || 'i686' }} + if: ${{ runner.os == 'Windows' && !cancelled() }} + run: >- + pacman --noconfirm -S + mingw-w64-${{ env.arch }}-gcc + mingw-w64-${{ env.arch }}-ninja + mingw-w64-${{ env.arch }}-cmake + mingw-w64-${{ env.arch }}-libpng + mingw-w64-${{ env.arch }}-libvorbis + - name: ⚒️ Build with gcc + env: + MINGDIR: "C:/msys64/${{ matrix.arch == 'x64' && 'mingw64' || 'mingw32' }}" + if: ${{ !cancelled() }} + run: | + cmake . -B build --preset=ci-gcc + cmake --build build --preset=ninja-quiet diff --git a/.github/workflows/xc.yml b/.github/workflows/xc.yml new file mode 100644 index 000000000..332b91d92 --- /dev/null +++ b/.github/workflows/xc.yml @@ -0,0 +1,30 @@ +name: Cross compilation + +on: [push, pull_request] + +jobs: + test: + runs-on: ubuntu-latest + steps: + - name: 💳 Check out repository code + uses: actions/checkout@v4 + - name: 🐧 Setup + run: >- + sudo apt-get install -qq -y -o=Dpkg::Use-Pty=0 + mingw-w64-x86-64-dev + binutils-mingw-w64-x86-64 + gcc-mingw-w64-x86-64-win32 + g++-mingw-w64-x86-64-win32 + - name: 💾 Cache vcpkg dependencies + uses: actions/cache@v4 + with: + path: /usr/local/share/vcpkg/installed + key: vcpkg-installed + - name: 🌳 Install dependencies + run: | + echo VCPKG_ROOT=/usr/local/share/vcpkg >> $GITHUB_ENV + vcpkg install --triplet=x64-mingw-dynamic libpng libvorbis + - name: ⚒️ Build with gcc + run: | + cmake . -B build --preset=ci-xc + cmake --build build --preset ninja-quiet diff --git a/CMakePresets.json b/CMakePresets.json index f21e1d130..27e394e6d 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -53,8 +53,7 @@ "CMAKE_MAKE_PROGRAM": "/usr/lib/ninja-build/bin/ninja", "SHARED": false, "WANT_TOOLS": false, - "WANT_ALLEGROGL": false, - "ALLEGRO_USE_CONSTRUCTOR_EXITCODE": "0" + "WANT_ALLEGROGL": false } } ], From 8547365e29ef359c1317f852f558990caa3eb653 Mon Sep 17 00:00:00 2001 From: Mikhail Titov Date: Mon, 1 Dec 2025 23:42:40 -0600 Subject: [PATCH 35/39] fixup! GH workflow --- .github/workflows/test.yml | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 97c820d73..cf3f93542 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -33,20 +33,12 @@ jobs: sudo apt-get install -qq -y -o=Dpkg::Use-Pty=0 cmake pkgconf - libxext-dev libx11-dev - libxpm-dev - libxt-dev - libxcursor-dev libasound2-dev - libopenal-dev libxxf86dga-dev - libxxf86vm-dev + libjack-dev libgl-dev - libglx-dev - libgl1-mesa-dev libglu-dev - libglu1-mesa-dev libpng-dev zlib1g-dev libvorbis-dev From aa03843262f3269d00fef223d6e1accb1b576803 Mon Sep 17 00:00:00 2001 From: Mikhail Titov Date: Tue, 2 Dec 2025 12:03:54 -0600 Subject: [PATCH 36/39] fixup! more --- .github/workflows/psp.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/psp.yml b/.github/workflows/psp.yml index 5b40d99b6..d97bbbf2b 100644 --- a/.github/workflows/psp.yml +++ b/.github/workflows/psp.yml @@ -12,9 +12,9 @@ jobs: steps: - name: 🎮 Setup tools run: apk add ninja-build - - name: Check out repository code + - name: 💳 Check out repository code uses: actions/checkout@v4 - - name: ⚒ Build with gcc + - name: ⚒️ Build with gcc run: | cmake . -B build --preset=ci-psp cmake --build build --preset ninja-quiet From c6c095fc77cea79dbfeaa2fa425c31b184f78af7 Mon Sep 17 00:00:00 2001 From: Mikhail Titov Date: Tue, 2 Dec 2025 12:06:03 -0600 Subject: [PATCH 37/39] [psp] Change libraries order psp-fixup-imports is very particular about linking order --- CMakeLists.txt | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index dc1313f73..b2dc9cf5e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -728,8 +728,6 @@ if(PSP) include_directories(SYSTEM ${PSPSDK_PATH}/include) add_link_options("-L${PSPSDK_PATH}/lib") list(APPEND PLATFORM_SOURCES ${ALLEGRO_SRC_PSP_FILES}) - list(APPEND PLATFORM_LIBS - m pspaudio pspgu psprtc pspdebug pspdisplay pspge pspctrl pspsdk c pspnet pspnet_inet pspnet_resolver psputility pspuser pspkernel) endif(PSP) #-----------------------------------------------------------------------------# @@ -904,7 +902,7 @@ if(PSP) OUTPUT_NAME alleg-main${BUILD_TYPE_SUFFIX} COMPILE_FLAGS -DALLEGRO_SRC ) - target_link_libraries(alleg-main pspuser pspkernel) + target_link_libraries(alleg-main INTERFACE c pspaudio pspdisplay pspctrl pspdebug pspgu pspge) target_link_libraries(allegro alleg-main) install_our_library(alleg-main) endif(PSP) From 72157417dbb178f42f9a2fe351747314bb1a8b4b Mon Sep 17 00:00:00 2001 From: Mikhail Titov Date: Tue, 2 Dec 2025 15:07:39 -0600 Subject: [PATCH 38/39] [psp] -G0 is not used anymore https://github.com/pspdev/pspsdk/pull/167/files --- CMakeLists.txt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b2dc9cf5e..3748f19d6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -339,8 +339,7 @@ endif() if(PSP) set(ALLEGRO_PSP 1) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -G0") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -G0 -fno-exceptions -fno-rtti") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-exceptions -fno-rtti") endif(PSP) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${WFLAGS} ${WFLAGS_C_ONLY}") From 23d1d66bab36d331975f93ce47bc701b56ddb524 Mon Sep 17 00:00:00 2001 From: Mikhail Titov Date: Tue, 2 Dec 2025 23:36:45 -0600 Subject: [PATCH 39/39] [psp] Implement SYSTEM_DRIVER methods for mutex This is required by keyboard.c --- src/psp/psystem.c | 39 +++++++++++++++++++++++++++++++++++---- 1 file changed, 35 insertions(+), 4 deletions(-) diff --git a/src/psp/psystem.c b/src/psp/psystem.c index 1a4cc4f59..468028711 100644 --- a/src/psp/psystem.c +++ b/src/psp/psystem.c @@ -39,6 +39,10 @@ static void psp_sys_exit(void); static void psp_message(AL_CONST char *msg); static void psp_created_sub_bitmap(BITMAP *bmp, BITMAP *parent); static void psp_get_gfx_safe_mode(int *driver, struct GFX_MODE *mode); +static void * psp_create_mutex(void); +static void psp_destroy_mutex(void *handle); +static void psp_lock_mutex(void *handle); +static void psp_unlock_mutex(void *handle); @@ -72,10 +76,10 @@ SYSTEM_DRIVER system_psp = NULL, /* AL_METHOD(int, get_desktop_resolution, (int *width, int *height)); */ psp_get_gfx_safe_mode, /*AL_METHOD(void, get_gfx_safe_mode, (int *driver, struct GFX_MODE *mode));*/ NULL, /* AL_METHOD(void, yield_timeslice, (void)); */ - NULL, /* AL_METHOD(void *, create_mutex, (void)); */ - NULL, /* AL_METHOD(void, destroy_mutex, (void *handle)); */ - NULL, /* AL_METHOD(void, lock_mutex, (void *handle)); */ - NULL, /* AL_METHOD(void, unlock_mutex, (void *handle)); */ + psp_create_mutex, + psp_destroy_mutex, + psp_lock_mutex, + psp_unlock_mutex, NULL, /* AL_METHOD(_DRIVER_INFO *, gfx_drivers, (void)); */ NULL, /* AL_METHOD(_DRIVER_INFO *, digi_drivers, (void)); */ NULL, /* AL_METHOD(_DRIVER_INFO *, midi_drivers, (void)); */ @@ -233,4 +237,31 @@ static void psp_get_gfx_safe_mode(int *driver, struct GFX_MODE *mode) mode->bpp = DEFAULT_COLOR_DEPTH; } +static void * psp_create_mutex(void) +{ + SceLwMutexWorkarea *mutex = (SceLwMutexWorkarea *)_AL_MALLOC(sizeof(SceLwMutexWorkarea)); + if (!mutex) + return NULL; + if (sceKernelCreateLwMutex(mutex, "allegro_mutex", 0, 0, NULL)) { + _AL_FREE(mutex); + return NULL; + } + return (void *)mutex; +} + +static void psp_destroy_mutex(void *handle) +{ + sceKernelDeleteLwMutex((SceLwMutexWorkarea *)handle); + _AL_FREE(handle); +} + +static void psp_lock_mutex(void *handle) +{ + sceKernelLockLwMutex((SceLwMutexWorkarea *)handle, 1, NULL); +} + +static void psp_unlock_mutex(void *handle) +{ + sceKernelUnlockLwMutex((SceLwMutexWorkarea *)handle, 1); +}