From 5eb3ed11f816656892c6777234fe79eef8c1eb06 Mon Sep 17 00:00:00 2001 From: TheTank20 <57580668+thepwrtank18@users.noreply.github.com> Date: Sun, 6 Jul 2025 20:08:03 +0000 Subject: [PATCH] use CWSDSTUB to avoid needing CWSDPMI (#131) --- .github/workflows/dos-djgpp.yml | 15 +++++++++++---- CMakeLists.txt | 20 +++++++++++++++++++- 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/.github/workflows/dos-djgpp.yml b/.github/workflows/dos-djgpp.yml index c4099ff..6f4cf7d 100644 --- a/.github/workflows/dos-djgpp.yml +++ b/.github/workflows/dos-djgpp.yml @@ -42,7 +42,7 @@ jobs: - name: Setup build environment run: | sudo apt -y update - sudo apt -y install build-essential cmake wget 7zip git flex libfl-dev nasm libslang2-dev pkg-config libslang2-modules gcc-multilib dosbox + sudo apt -y install build-essential cmake wget 7zip git flex libfl-dev nasm libslang2-dev pkg-config libslang2-modules gcc-multilib dosbox tree - name: Download and Setup DJGPP Toolchain run: | @@ -50,6 +50,7 @@ jobs: wget https://github.com/andrewwutw/build-djgpp/releases/download/v3.4/djgpp-linux64-gcc1220.tar.bz2 tar xjf djgpp-linux64-gcc1220.tar.bz2 cd ${{ github.workspace }}/djgpp + tree . -S git clone https://github.com/UMSKT/Watt-32.git watt32 cd watt32/util make clean && make linux @@ -84,12 +85,18 @@ jobs: path: | ${{ github.workspace }}/djgpp key: openssl-3.1.2-${{ hashFiles('**/CMakeLists.txt') }} - + + - name: Download stub + run: | + wget https://web.archive.org/web/20250308092209/https://www.ibiblio.org/pub/micro/pc-stuff/freedos/files/util/system/cwsdpmi/csdpmi7b.zip -O CSDPMI7B.ZIP + mkdir /home/runner/dpmibin + 7z e CSDPMI7B.ZIP bin/CWSDSTUB.EXE -o/home/runner/dpmibin + - name: Build run: | source ${{ github.workspace }}/djgpp/setenv pushd build - cmake ../ -D DJGPP_WATT32=${WATT_ROOT}/lib/libwatt.a -D CMAKE_FIND_ROOT_PATH=${CMAKE_FIND_ROOT_PATH} + cmake ../ -D DJGPP_WATT32=${WATT_ROOT}/lib/libwatt.a -D CMAKE_FIND_ROOT_PATH=${CMAKE_FIND_ROOT_PATH} -D CWSDSTUB_LOCATION=/home/runner/dpmibin/CWSDSTUB.EXE -D DJGPP_BIN_LOCATION=/home/runner/work/UMSKT/UMSKT/djgpp/i586-pc-msdosdjgpp/bin make - name: Setup DOSBox test environment @@ -97,7 +104,7 @@ jobs: mkdir -p dosbox_test cp build/umskt.exe dosbox_test/ # Download DPMI server directly - wget https://github.com/UMSKT/winactiontest/raw/refs/heads/main/CWSDPMI.EXE -O dosbox_test/CWSDPMI.EXE + # wget https://github.com/UMSKT/winactiontest/raw/refs/heads/main/CWSDPMI.EXE -O dosbox_test/CWSDPMI.EXE # Create test batch file cat > dosbox_test/test.bat << EOL @echo off diff --git a/CMakeLists.txt b/CMakeLists.txt index 10d6710..ddda32c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -108,7 +108,8 @@ IF(DJGPP_WATT32) # Maximum compatibility flags for DOS/NTVDM SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=i386 -mtune=i386 -mno-sse -mno-sse2 -mno-mmx -mno-3dnow -mno-ssse3 -mno-sse3 -mno-sse4 -mno-sse4.1 -mno-sse4.2 -mno-avx -mno-avx2 -mno-fma -mno-fma4") SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=i386 -mtune=i386 -mno-sse -mno-sse2 -mno-mmx -mno-3dnow -mno-ssse3 -mno-sse3 -mno-sse4 -mno-sse4.1 -mno-sse4.2 -mno-avx -mno-avx2 -mno-fma -mno-fma4") - MESSAGE(STATUS "[UMSKT] Using i386 target for DOS DGJPP") + + MESSAGE(STATUS "[UMSKT] Using i386 target for DOS DGJPP with stub: ${CWSDSTUB_LOCATION}") ENDIF() ##if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") @@ -273,4 +274,21 @@ ELSE() GET_FILENAME_COMPONENT(OPENSSL_CRYPTO_LIBRARY_FILENAME ${OPENSSL_CRYPTO_LIBRARY} NAME) CONFIGURE_FILE(${OPENSSL_CRYPTO_LIBRARY} "${CMAKE_CURRENT_BINARY_DIR}/${OPENSSL_CRYPTO_LIBRARY_FILENAME}" COPYONLY) ENDIF() + + IF (DJGPP_WATT32) + message(STATUS "[UMSKT] Configuring DJGPP post-build commands") + # Set .exe suffix for DJGPP builds + set_target_properties(umskt PROPERTIES SUFFIX ".exe") + add_custom_command(TARGET umskt POST_BUILD + # Convert exe to coff, removing the default stub + COMMAND ${DJGPP_BIN_LOCATION}/exe2coff $ + # Concatenate CWSDSTUB with the COFF file + COMMAND ${CMAKE_COMMAND} -E cat ${CWSDSTUB_LOCATION} $/umskt > $ + # Clean up the COFF file + COMMAND ${CMAKE_COMMAND} -E rm $/umskt + ) + message(STATUS "[UMSKT] STUBIFY_LOCATION set to: ${STUBIFY_LOCATION}") + message(STATUS "[UMSKT] CWSDSTUB_LOCATION set to: ${CWSDSTUB_LOCATION}") + message(STATUS "[UMSKT] DJGPP_BIN_LOCATION set to: ${DJGPP_BIN_LOCATION}") + ENDIF() ENDIF()