Skip to content

Commit ebc1dc2

Browse files
committed
updated mingw workflow
1 parent 65b7a53 commit ebc1dc2

14 files changed

Lines changed: 151 additions & 71 deletions

File tree

.github/workflows/mingw32.yml

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ on:
44
push:
55
branches:
66
- "master"
7-
# - "develop"
7+
- "develop"
88
tags:
99
- "v*"
1010
pull_request:
@@ -60,10 +60,11 @@ jobs:
6060
6161
- name: Build your app
6262
run: |
63-
python3 bin/gen.py mingw32-sdl3 -s
64-
mkdir -p build
65-
make build_libs
66-
make
63+
#python3 bin/gen.py mingw32-sdl3 -s
64+
#mkdir -p build
65+
#make build_libs
66+
#make
67+
bin/build.sh mingw
6768
6869
- name: Make Installer
6970
run: |

CMakeLists.txt

Lines changed: 50 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -4,26 +4,46 @@ project(${PROJECT_NAME} LANGUAGES CXX)
44
set(CMAKE_CXX_STANDARD 20)
55
set(CMAKE_CXX_STANDARD_REQUIRED ON)
66

7-
if(MSVC)
8-
add_compile_options(/W4 /permissive-)
9-
else()
10-
add_compile_options(-Wall -Wextra -Wpedantic)
7+
if(CMAKE_C_COMPILER MATCHES "x86_64-w64-mingw32.*")
8+
set(IS_MINGW TRUE)
119
endif()
1210

11+
1312
if(EMSCRIPTEN)
1413
message(STATUS "Targeting Emscripten/WebAssembly ${CMAKE_SOURCE_DIR}")
1514
set(CMAKE_EXECUTABLE_SUFFIX ".html") # Optional: .html shell
1615
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -sUSE_SDL=0 -O3 -sUSE_ZLIB=1 ")
16+
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static")
17+
elseif(IS_MINGW)
18+
message(STATUS "Targeting MinGW/Windows")
19+
set(SDL3_DIR "${CMAKE_SOURCE_DIR}/external/SDL3")
20+
set(SDL3_DISABLE_INSTALL ON)
21+
set(SDL3_mixer_DISABLE_INSTALL ON)
22+
elseif(MSVC)
23+
message(STATUS "Using MSVC")
24+
add_compile_options(/W4 /permissive-)
1725
else()
1826
message(STATUS "Targeting native GCC/Linux")
27+
message(STATUS "Using GCC or Clang")
28+
add_compile_options(-Wall -Wextra -Wpedantic)
1929
endif()
2030

2131
add_subdirectory(src)
2232

2333
# Add External
2434
if(EMSCRIPTEN)
25-
set(libxmp_INCLUDE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/external/libxmp/include")
26-
set(libxmp_LIBRARY "${CMAKE_CURRENT_SOURCE_DIR}/build/ems/build_libxmp/libxmp.a")
35+
set(SDLMIXER_MOD_XMP ON CACHE BOOL "Enable libxmp module support")
36+
set(SDLMIXER_VENDORED ON CACHE BOOL "Use vendored libxmp")
37+
elseif(IS_MINGW)
38+
set(SDL3_mixer_DISABLE_FIND_PACKAGE_SDL3 ON)
39+
set(SDLMIXER_MOD_XMP ON CACHE BOOL "Enable libxmp module support")
40+
set(SDLMIXER_VENDORED ON CACHE BOOL "Use vendored libxmp")
41+
set(SDLMIXER_MOD_XMP_SHARED OFF CACHE BOOL "Build libxmp statically")
42+
set(SDLMIXER_BUILD_SHARED_LIBS OFF CACHE BOOL "Build SDL3_mixer statically")
43+
set(CMAKE_FIND_PACKAGE_PREFER_CONFIG OFF)
44+
set(ZLIB_BUILD_TESTING OFF CACHE BOOL "Disable zlib test targets like infcover")
45+
add_subdirectory(external/zlib zlib)
46+
#cmake --build build/mingw --target help
2747
endif()
2848

2949
add_subdirectory(external/SDL3 SDL3)
@@ -33,11 +53,12 @@ add_subdirectory(external/SDL3_mixer SDL3_mixer)
3353
#add_executable(${PROJECT_NAME} ${SRC_EXPORTED_FILES})
3454
add_executable(${PROJECT_NAME} src/main.cpp)
3555

36-
enable_testing()
37-
add_subdirectory(tests)
56+
#enable_testing()
57+
#add_subdirectory(tests)
3858

3959

4060
if(EMSCRIPTEN)
61+
message(STATUS "Link Target EMSCRIPTEN")
4162
target_link_options(${PROJECT_NAME} PRIVATE
4263
#--preload-file ../data@data
4364
--preload-file ems_data@data
@@ -57,19 +78,25 @@ if(EMSCRIPTEN)
5778
-sEXPORTED_RUNTIME_METHODS=ccall,cwrap
5879
-sEXPORTED_FUNCTIONS=_main,_malloc,_free
5980
)
60-
endif()
61-
62-
if(EMSCRIPTEN)
63-
message(STATUS "Looking for libxmp.a in: ${CMAKE_CURRENT_SOURCE_DIR}/build/ems/build_libxmp")
64-
add_library(libxmp_static STATIC IMPORTED GLOBAL)
65-
set_target_properties(libxmp_static PROPERTIES
66-
IMPORTED_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}/build/ems/build_libxmp/libxmp.a"
67-
INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}/external/libxmp/include"
81+
target_link_libraries(${PROJECT_NAME}
82+
PRIVATE SDL3::SDL3 SDL3_mixer::SDL3_mixer src_lib
83+
)
84+
elseif(IS_MINGW)
85+
message(STATUS "Link Target MinGW/Windows")
86+
target_link_options(${PROJECT_NAME} PRIVATE
87+
-Wl,-t -mwindows
88+
-static-libstdc++
89+
-static-libgcc
90+
-lwinpthread
91+
-lmingw32
92+
-s
6893
)
6994
target_link_libraries(${PROJECT_NAME}
70-
PRIVATE SDL3::SDL3 SDL3_mixer::SDL3_mixer libxmp_static src_lib
71-
)
95+
PRIVATE SDL3::SDL3 SDL3_mixer::SDL3_mixer zlib src_lib
96+
)
97+
7298
else()
99+
message(STATUS "Link Target Linux")
73100
#find_library(XMP_LIBRARY xmp)
74101
#find_library(OGG_LIBRARY ogg)
75102
#find_library(VORBIS_LIBRARY vorbisfile)
@@ -80,7 +107,9 @@ else()
80107
endif()
81108

82109
target_include_directories(${PROJECT_NAME} PRIVATE
83-
${CMAKE_CURRENT_SOURCE_DIR}/src
84-
${CMAKE_CURRENT_SOURCE_DIR}/external/SDL3/include
85-
${CMAKE_CURRENT_SOURCE_DIR}/external/SDL3_mixer/include
110+
${CMAKE_SOURCE_DIR}/src
111+
${CMAKE_SOURCE_DIR}/external/SDL3/include
112+
${CMAKE_SOURCE_DIR}/external/SDL3_mixer/include
113+
${CMAKE_SOURCE_DIR}/external/zlib
86114
)
115+

bin/build.sh

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ show_help () {
55
printf '\navailable targets:\n\n'
66
echo "sdl3 "
77
echo "emsdl3 "
8+
echo "mingw "
89
}
910

1011
APP_NAME=cs3-runtime
@@ -22,14 +23,20 @@ elif [[ "$1" == "emsdl3" ]] ; then
2223
# preload only xm files/ download ogg files from web
2324
mkdir -p ${BPATH}/ems_data && cp -r data/* ${BPATH}/ems_data && mv ${BPATH}/ems_data/musics/*.ogg ${BPATH}
2425
ls ${BPATH}/ems_data -l
25-
emcmake cmake -S external/libxmp -B ${BPATH}/build_libxmp -DBUILD_SHARED_LIBS=OFF
26-
cmake --build ${BPATH}/build_libxmp
2726
emcmake cmake -B ${BPATH} -DCMAKE_BUILD_TYPE=Release
28-
cmake --build ${BPATH} && echo "To run: emrun --hostname 0.0.0.0 ${TARGET}"
27+
cmake --build ${BPATH} -- VERBOSE=1 && echo "To run: emrun --hostname 0.0.0.0 ${TARGET}"
28+
elif [[ "$1" == "mingw" ]] ; then
29+
BPATH=build/mingw
30+
cmake -DCMAKE_TOOLCHAIN_FILE=packages/cmake/mingw.toolchain.cmake -DIS_MINGW=ON -B ${BPATH} -DCMAKE_BUILD_TYPE=Release
31+
cmake --build ${BPATH} -- VERBOSE=1
2932
elif [[ "$1" == "run_ems" ]] ; then
3033
emrun --hostname 0.0.0.0 build/ems/cs3-runtime.html
3134
elif [[ "$1" == "clean" ]] ; then
3235
rm -rf build
36+
elif [[ "$1" == "tests" ]] ; then
37+
# rm -rf build
38+
cmake -S . -B build
39+
cmake --build build --target cs3-tests
3340
elif [ -z "$1" ]; then
3441
echo "nothing to do"
3542
show_help

bin/refresh.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,10 +65,19 @@ def generate_file(folder, sub_folders):
6565
${{CMAKE_CURRENT_SOURCE_DIR}}
6666
{prefix}external/SDL3/include
6767
{prefix}external/SDL3_mixer/include
68+
{prefix}external/zlib
6869
)
6970
""".strip()
7071
)
7172

73+
lines.append("")
74+
lines.append("if(IS_MINGW)")
75+
lines.append(
76+
f"target_link_libraries({master_lib} PRIVATE SDL3_mixer::SDL3_mixer zlib)"
77+
)
78+
lines.append("endif()")
79+
lines.append("")
80+
7281
with open(file_path, "w") as tfile:
7382
tfile.write("\n".join(lines) + "\n")
7483

@@ -107,6 +116,9 @@ def generate_tests(folder):
107116
lines.append("")
108117
lines.append("add_test(NAME cs3-runtime-tests COMMAND cs3-tests)")
109118

119+
lines.append("")
120+
lines.append('message(STATUS "Building cs3-tests with ${TEST_SOURCES}")')
121+
110122
with open(file_path, "w") as tfile:
111123
tfile.write("\n".join(lines) + "\n")
112124

data/levels.mapz

3 Bytes
Binary file not shown.

packages/bin/makesetup.sh

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,22 @@
11
#!/bin/bash
2+
BPATH=build/mingw
3+
DEST=setup
24

35
rm -rf setup/*
46
mkdir -p setup/data
57
mkdir -p setup/legal
68
cp -R data/* setup/data
7-
cp build/*.exe setup
9+
cp ${BPATH}/*.exe setup
810
cp -R techdocs/legal/* setup/legal
911
cp techdocs/*.md setup/legal
1012
cp LICENSE setup
1113
PTHREAD_DLL=$(find /usr/x86_64-w64-mingw32/ | grep libwinpthread-1.dll | head -n 1)
1214
echo PTHREAD_DLL=$PTHREAD_DLL
1315
cp $PTHREAD_DLL setup
14-
cp local/mingw/bin/*.dll setup
15-
ls -l setup
16+
#cp local/mingw/bin/*.dll setup
17+
cp ${BPATH}/SDL3/*.dll ${DEST}
18+
cp ${BPATH}/SDL3_mixer/*.dll ${DEST}
19+
cp ${BPATH}/SDL3/*.dll ${DEST}
20+
cp ${BPATH}/zlib/*.dll ${DEST}
21+
#cp ${BPATH}/build_libxmp/*.dll ${DEST}
22+
ls -l ${DEST}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
set(CMAKE_SYSTEM_NAME Windows)
2+
set(CMAKE_C_COMPILER x86_64-w64-mingw32-gcc)
3+
set(CMAKE_CXX_COMPILER x86_64-w64-mingw32-g++)
4+
set(CMAKE_RC_COMPILER x86_64-w64-mingw32-windres)
5+
6+
set(CMAKE_FIND_ROOT_PATH /usr/x86_64-w64-mingw32)
7+
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
8+
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
9+
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
10+
11+
12+
set(CMAKE_SYSTEM_NAME Windows)
13+
set(CMAKE_C_COMPILER x86_64-w64-mingw32-gcc)
14+
set(CMAKE_CXX_COMPILER x86_64-w64-mingw32-g++)
15+
set(CMAKE_FIND_ROOT_PATH /usr/x86_64-w64-mingw32)
16+
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
17+
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
18+
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

src/game.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
#include <set>
2424
#include <algorithm>
2525
#include <memory>
26+
#include <array>
2627
#include "game.h"
2728
#include "map.h"
2829
#include "actor.h"

src/logger.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
#include <SDL3/SDL.h>
2525
#endif
2626

27-
Logger::Level Logger::m_minLevel = Logger::INFO;
27+
Logger::Level Logger::m_minLevel = Logger::L_INFO;
2828
FILE *Logger::m_output = nullptr;
2929
std::mutex Logger::m_mutex;
3030

@@ -53,18 +53,18 @@ void Logger::log(Level level, const char *tag, const char *format, ...)
5353
: ANDROID_LOG_FATAL;
5454
__android_log_vprint(priority, tag, format, args);
5555
#else
56-
FILE *out = m_output ? m_output : (level == ERROR || level == FATAL) ? stderr
57-
: stdout;
58-
fprintf(out, "[%s/%s] ", tag, level == INFO ? "INFO" : level == WARN ? "WARN"
59-
: level == ERROR ? "ERROR"
60-
: "FATAL");
56+
FILE *out = m_output ? m_output : (level == L_ERROR || level == L_FATAL) ? stderr
57+
: stdout;
58+
fprintf(out, "[%s/%s] ", tag, level == L_INFO ? "INFO" : level == L_WARN ? "WARN"
59+
: level == L_ERROR ? "ERROR"
60+
: "FATAL");
6161
vfprintf(out, format, args);
6262

6363
std::string s = std::string(format);
6464
auto p = s.rfind('\n');
6565
if (p == std::string::npos || p != s.size() - 1)
6666
fprintf(out, "\n");
67-
if (level == FATAL)
67+
if (level == L_FATAL)
6868
exit(1);
6969
#endif
7070
va_end(args);

src/logger.h

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,10 @@ class Logger
2929
public:
3030
enum Level
3131
{
32-
INFO,
33-
WARN,
34-
ERROR,
35-
FATAL
32+
L_INFO,
33+
L_WARN,
34+
L_ERROR,
35+
L_FATAL
3636
};
3737
static void setLevel(Level minLevel) { m_minLevel = minLevel; }
3838
static void setOutputFile(const std::string &filename);
@@ -53,16 +53,16 @@ class Logger
5353
#define LOGE(...) qCritical(__VA_ARGS__)
5454
#define LOGF(...) qFatal(__VA_ARGS__)
5555
#else
56-
#define LOGI(...) \
57-
if (Logger::level() <= Logger::INFO) \
58-
Logger::log(Logger::INFO, __FILE_NAME__, __VA_ARGS__)
59-
#define LOGW(...) \
60-
if (Logger::level() <= Logger::WARN) \
61-
Logger::log(Logger::WARN, __FILE_NAME__, __VA_ARGS__)
62-
#define LOGE(...) \
63-
if (Logger::level() <= Logger::ERROR) \
64-
Logger::log(Logger::ERROR, __FILE_NAME__, __VA_ARGS__)
65-
#define LOGF(...) \
66-
Logger::log(Logger::FATAL, __FILE_NAME__, __VA_ARGS__); \
56+
#define LOGI(...) \
57+
if (Logger::level() <= Logger::L_INFO) \
58+
Logger::log(Logger::L_INFO, __FILE_NAME__, __VA_ARGS__)
59+
#define LOGW(...) \
60+
if (Logger::level() <= Logger::L_WARN) \
61+
Logger::log(Logger::L_WARN, __FILE_NAME__, __VA_ARGS__)
62+
#define LOGE(...) \
63+
if (Logger::level() <= Logger::L_ERROR) \
64+
Logger::log(Logger::L_ERROR, __FILE_NAME__, __VA_ARGS__)
65+
#define LOGF(...) \
66+
Logger::log(Logger::L_FATAL, __FILE_NAME__, __VA_ARGS__); \
6767
exit(1)
6868
#endif

0 commit comments

Comments
 (0)