Add macOS support (#63)
This commit is contained in:
parent
8e1291b1d1
commit
80e27a8c98
|
@ -5,6 +5,7 @@
|
||||||
*.h text eol=lf
|
*.h text eol=lf
|
||||||
*.md text eol=lf
|
*.md text eol=lf
|
||||||
*.json text eol=lf
|
*.json text eol=lf
|
||||||
|
*.plist text eol=lf
|
||||||
*.yml text eol=lf
|
*.yml text eol=lf
|
||||||
.clang-format text eol=lf
|
.clang-format text eol=lf
|
||||||
.editorconfig text eol=lf
|
.editorconfig text eol=lf
|
||||||
|
|
|
@ -1,84 +1,84 @@
|
||||||
name: Build
|
name: Build
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
paths:
|
paths:
|
||||||
- '.github/workflows/Build.yml'
|
- '.github/workflows/Build.yml'
|
||||||
- 'src/**.cc'
|
- 'src/**.cc'
|
||||||
- 'src/**.h'
|
- 'src/**.h'
|
||||||
- '**/CMakeLists.txt'
|
- '**/CMakeLists.txt'
|
||||||
- '**/*.cmake'
|
- '**/*.cmake'
|
||||||
pull_request:
|
pull_request:
|
||||||
paths:
|
paths:
|
||||||
- '.github/workflows/Build.yml'
|
- '.github/workflows/Build.yml'
|
||||||
- 'src/**.cc'
|
- 'src/**.cc'
|
||||||
- 'src/**.h'
|
- 'src/**.h'
|
||||||
- '**/CMakeLists.txt'
|
- '**/CMakeLists.txt'
|
||||||
- '**/*.cmake'
|
- '**/*.cmake'
|
||||||
|
|
||||||
defaults:
|
defaults:
|
||||||
run:
|
run:
|
||||||
shell: bash
|
shell: bash
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
|
|
||||||
StaticAnalysis:
|
StaticAnalysis:
|
||||||
name: Static analysis
|
name: Static analysis
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
|
|
||||||
- name: Install
|
- name: Install
|
||||||
run: |
|
run: |
|
||||||
:
|
:
|
||||||
echo ::group::apt update
|
echo ::group::apt update
|
||||||
sudo apt update 2>&1
|
sudo apt update 2>&1
|
||||||
echo ::endgroup::
|
echo ::endgroup::
|
||||||
sudo apt install cppcheck
|
sudo apt install cppcheck
|
||||||
|
|
||||||
- name: Clone
|
- name: Clone
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
- name: cppcheck
|
- name: cppcheck
|
||||||
run: cppcheck --std=c++17 src/
|
run: cppcheck --std=c++17 src/
|
||||||
|
|
||||||
Build:
|
Build:
|
||||||
name: ${{ matrix.cfg.name }} x${{ matrix.cfg.arch }}
|
name: ${{ matrix.cfg.name }} x${{ matrix.cfg.arch }}
|
||||||
runs-on: ${{ matrix.cfg.os }}
|
runs-on: ${{ matrix.cfg.os }}
|
||||||
needs: [StaticAnalysis]
|
needs: [StaticAnalysis]
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
cfg:
|
cfg:
|
||||||
#
|
#
|
||||||
# name .......... overrides job name in GitHub UI
|
# name .......... overrides job name in GitHub UI
|
||||||
# os ............ defines system image; passed to job.<id>.runs-on
|
# os ............ defines system image; passed to job.<id>.runs-on
|
||||||
# cc ............ defines C compiler; passed to CMake configuration step (as `CC` environment variable)
|
# cc ............ defines C compiler; passed to CMake configuration step (as `CC` environment variable)
|
||||||
# cxx ........... defines C++ compiler; passed to CMake configuration step (as `CXX` environment variable)
|
# cxx ........... defines C++ compiler; passed to CMake configuration step (as `CXX` environment variable)
|
||||||
# ver ........... defines optional suffix to package name when installing compiler with apt, and whenever compiler version is important for build process
|
# ver ........... defines optional suffix to package name when installing compiler with apt, and whenever compiler version is important for build process
|
||||||
# cc: gcc, cxx: g++, ver: null --becomes--> sudo apt install gcc g++
|
# cc: gcc, cxx: g++, ver: null --becomes--> sudo apt install gcc g++
|
||||||
# cc: gcc, cxx: g++, ver: 10 --becomes--> sudo apt install gcc-10 g++-10
|
# cc: gcc, cxx: g++, ver: 10 --becomes--> sudo apt install gcc-10 g++-10
|
||||||
# arch .......... defines if building 32bit or 64bit application; used in multiple places to prepare build environment
|
# arch .......... defines if building 32bit or 64bit application; used in multiple places to prepare build environment
|
||||||
# also used as job name suffix (" x32" or " x64")
|
# also used as job name suffix (" x32" or " x64")
|
||||||
# generator ..... passed to CMake configuration step (as `-G` switch)
|
# generator ..... passed to CMake configuration step (as `-G` switch)
|
||||||
# can-fail ...... defines if job status should be set to success even if compilation fails
|
# can-fail ...... defines if job status should be set to success even if compilation fails
|
||||||
# applies *only* to compilation step; errors in any other steps (installation, preparing build directory, etc.) still mark job as failed
|
# applies *only* to compilation step; errors in any other steps (installation, preparing build directory, etc.) still mark job as failed
|
||||||
# artifact ...... path to compiled application; use "NO" if given job run should not generate any artifacts (case sensitive)
|
# artifact ...... path to compiled application; use "NO" if given job run should not generate any artifacts (case sensitive)
|
||||||
# artifact-os ... defines artifact name suffix
|
# artifact-os ... defines artifact name suffix
|
||||||
#
|
#
|
||||||
- { name: Linux GCC, os: ubuntu-20.04, cc: gcc, cxx: g++, ver: null, arch: 32, generator: "Unix Makefiles", can-fail: false, artifact: Build/fallout2-ce, artifact-os: linux }
|
- { name: Linux GCC, os: ubuntu-20.04, cc: gcc, cxx: g++, ver: null, arch: 32, generator: "Unix Makefiles", can-fail: false, artifact: Build/fallout2-ce, artifact-os: linux }
|
||||||
# { name: Linux GCC, os: ubuntu-22.04, cc: gcc, cxx: g++, ver: null, arch: 64, generator: "Unix Makefiles", can-fail: true, artifact: Build/fallout2-ce, artifact-os: linux }
|
# { name: Linux GCC, os: ubuntu-22.04, cc: gcc, cxx: g++, ver: null, arch: 64, generator: "Unix Makefiles", can-fail: true, artifact: Build/fallout2-ce, artifact-os: linux }
|
||||||
- { name: Linux GCC 10, os: ubuntu-22.04, cc: gcc, cxx: g++, ver: 10, arch: 32, generator: "Unix Makefiles", can-fail: false, artifact: NO, artifact-os: linux }
|
- { name: Linux GCC 10, os: ubuntu-22.04, cc: gcc, cxx: g++, ver: 10, arch: 32, generator: "Unix Makefiles", can-fail: false, artifact: NO, artifact-os: linux }
|
||||||
# { name: Linux GCC 10, os: ubuntu-22.04, cc: gcc, cxx: g++, ver: 10, arch: 64, generator: "Unix Makefiles", can-fail: true, artifact: NO, artifact-os: linux }
|
# { name: Linux GCC 10, os: ubuntu-22.04, cc: gcc, cxx: g++, ver: 10, arch: 64, generator: "Unix Makefiles", can-fail: true, artifact: NO, artifact-os: linux }
|
||||||
# { name: MacOS 11 CLang, os: macOS-11, cc: clang, cxx: clang++, ver: null, arch: 64, generator: "Unix Makefiles", can-fail: true, artifact: NO, artifact-os: mac }
|
# { name: MacOS 11 CLang, os: macOS-11, cc: clang, cxx: clang++, ver: null, arch: 64, generator: "Unix Makefiles", can-fail: true, artifact: NO, artifact-os: mac }
|
||||||
# { name: MacOS 12 CLang, os: macOS-12, cc: clang, cxx: clang++, ver: null, arch: 64, generator: "Unix Makefiles", can-fail: true, artifact: NO, artifact-os: mac }
|
# { name: MacOS 12 CLang, os: macOS-12, cc: clang, cxx: clang++, ver: null, arch: 64, generator: "Unix Makefiles", can-fail: true, artifact: NO, artifact-os: mac }
|
||||||
- { name: Windows VS2019, os: windows-2019, cc: cl, cxx: cl, ver: null, arch: 32, generator: "Visual Studio 16 2019", can-fail: false, artifact: NO, artifact-os: windows }
|
- { name: Windows VS2019, os: windows-2019, cc: cl, cxx: cl, ver: null, arch: 32, generator: "Visual Studio 16 2019", can-fail: false, artifact: NO, artifact-os: windows }
|
||||||
# { name: Windows VS2019, os: windows-2019, cc: cl, cxx: cl, ver: null, arch: 64, generator: "Visual Studio 16 2019", can-fail: true, artifact: NO, artifact-os: windows }
|
# { name: Windows VS2019, os: windows-2019, cc: cl, cxx: cl, ver: null, arch: 64, generator: "Visual Studio 16 2019", can-fail: true, artifact: NO, artifact-os: windows }
|
||||||
- { name: Windows VS2022, os: windows-2022, cc: cl, cxx, cl, ver: null, arch: 32, generator: "Visual Studio 17 2022", can-fail: false, artifact: Build/Release/fallout2-ce.exe, artifact-os: windows }
|
- { name: Windows VS2022, os: windows-2022, cc: cl, cxx, cl, ver: null, arch: 32, generator: "Visual Studio 17 2022", can-fail: false, artifact: Build/Release/fallout2-ce.exe, artifact-os: windows }
|
||||||
# { name: Windows VS2022, os: windows-2022, cc: cl, cxx, cl, ver: null, arch: 64, generator: "Visual Studio 17 2022", can-fail: true, artifact: Build/Release/fallout2-ce.exe, artifact-os: windows }
|
# { name: Windows VS2022, os: windows-2022, cc: cl, cxx, cl, ver: null, arch: 64, generator: "Visual Studio 17 2022", can-fail: true, artifact: Build/Release/fallout2-ce.exe, artifact-os: windows }
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Configure
|
- name: Configure
|
||||||
run: |
|
run: |
|
||||||
: Here be dragons :
|
: Here be dragons :
|
||||||
#set -x
|
#set -x
|
||||||
arch=${{ matrix.cfg.arch }}
|
arch=${{ matrix.cfg.arch }}
|
||||||
|
@ -155,9 +155,9 @@ jobs:
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
- name: Install
|
- name: Install
|
||||||
if: env.GHA_PM != ''
|
if: env.GHA_PM != ''
|
||||||
run: |
|
run: |
|
||||||
:
|
:
|
||||||
#set -x
|
#set -x
|
||||||
|
|
||||||
|
@ -183,23 +183,23 @@ jobs:
|
||||||
echo :endgroup::
|
echo :endgroup::
|
||||||
fi
|
fi
|
||||||
|
|
||||||
- name: Clone
|
- name: Clone
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
# Using ${{ env.NAME }} here (instead of usual $NAME) to make full command line clearly displayed, without need to check step environment first
|
# Using ${{ env.NAME }} here (instead of usual $NAME) to make full command line clearly displayed, without need to check step environment first
|
||||||
- name: Prepare
|
- name: Prepare
|
||||||
run: cmake -B Build -G "${{ matrix.cfg.generator }}" ${{ env.GHA_PLATFORM }} ${{ env.GHA_TOOLCHAIN }} 2>&1
|
run: cmake -B Build -G "${{ matrix.cfg.generator }}" ${{ env.GHA_PLATFORM }} ${{ env.GHA_TOOLCHAIN }} 2>&1
|
||||||
env:
|
env:
|
||||||
CC: ${{ env.GHA_CC }}
|
CC: ${{ env.GHA_CC }}
|
||||||
CXX: ${{ env.GHA_CXX }}
|
CXX: ${{ env.GHA_CXX }}
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
run: cmake --build Build --config Release && echo BUILD_OK=1 >> $GITHUB_ENV
|
run: cmake --build Build --config Release && echo BUILD_OK=1 >> $GITHUB_ENV
|
||||||
continue-on-error: ${{ matrix.cfg.can-fail }}
|
continue-on-error: ${{ matrix.cfg.can-fail }}
|
||||||
|
|
||||||
- name: Artifact prepare
|
- name: Artifact prepare
|
||||||
if: matrix.cfg.artifact != 'NO' && env.BUILD_OK == 1
|
if: matrix.cfg.artifact != 'NO' && env.BUILD_OK == 1
|
||||||
run: |
|
run: |
|
||||||
:
|
:
|
||||||
echo BUILD_OK=0 >> $GITHUB_ENV
|
echo BUILD_OK=0 >> $GITHUB_ENV
|
||||||
dir="${{ matrix.cfg.artifact-os }}/x${{ matrix.cfg.arch }}"
|
dir="${{ matrix.cfg.artifact-os }}/x${{ matrix.cfg.arch }}"
|
||||||
|
@ -207,10 +207,36 @@ jobs:
|
||||||
cp "${{ matrix.cfg.artifact }}" "$dir"
|
cp "${{ matrix.cfg.artifact }}" "$dir"
|
||||||
echo BUILD_OK=1 >> $GITHUB_ENV
|
echo BUILD_OK=1 >> $GITHUB_ENV
|
||||||
|
|
||||||
- name: Artifact upload
|
- name: Artifact upload
|
||||||
if: matrix.cfg.artifact != 'NO' && env.BUILD_OK == 1
|
if: matrix.cfg.artifact != 'NO' && env.BUILD_OK == 1
|
||||||
uses: actions/upload-artifact@v3
|
uses: actions/upload-artifact@v3
|
||||||
with:
|
with:
|
||||||
name: fallout2-ce-${{ matrix.cfg.artifact-os }}
|
name: fallout2-ce-${{ matrix.cfg.artifact-os }}
|
||||||
path: "${{ matrix.cfg.artifact-os }}/x${{ matrix.cfg.arch }}"
|
path: "${{ matrix.cfg.artifact-os }}/x${{ matrix.cfg.arch }}"
|
||||||
retention-days: 7
|
retention-days: 7
|
||||||
|
|
||||||
|
macos:
|
||||||
|
runs-on: macos-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Clone
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Dependencies
|
||||||
|
run: |
|
||||||
|
brew install sdl2
|
||||||
|
|
||||||
|
- name: Configure
|
||||||
|
run: |
|
||||||
|
cmake -B build/macos -DCMAKE_BUILD_TYPE=RelWithDebInfo
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
run: |
|
||||||
|
cmake --build build/macos -j $(sysctl -n hw.physicalcpu) --target package
|
||||||
|
|
||||||
|
- name: Upload
|
||||||
|
uses: actions/upload-artifact@v3
|
||||||
|
with:
|
||||||
|
name: fallout2-ce-macos
|
||||||
|
path: build/macos/_CPack_Packages/Darwin/DragNDrop/fallout2-ce/fallout2-ce.dmg
|
||||||
|
retention-days: 7
|
||||||
|
|
|
@ -10,7 +10,7 @@ set(CMAKE_CXX_STANDARD 17)
|
||||||
set(CMAKE_CXX_STANDARD_REQUIRED YES)
|
set(CMAKE_CXX_STANDARD_REQUIRED YES)
|
||||||
set(CMAKE_CXX_EXTENSIONS NO)
|
set(CMAKE_CXX_EXTENSIONS NO)
|
||||||
|
|
||||||
add_executable(${EXECUTABLE_NAME} WIN32
|
add_executable(${EXECUTABLE_NAME} WIN32 MACOSX_BUNDLE
|
||||||
"src/actions.cc"
|
"src/actions.cc"
|
||||||
"src/actions.h"
|
"src/actions.h"
|
||||||
"src/animation.cc"
|
"src/animation.cc"
|
||||||
|
@ -262,6 +262,14 @@ if(WIN32)
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(APPLE)
|
||||||
|
set_target_properties(${EXECUTABLE_NAME} PROPERTIES MACOSX_BUNDLE_INFO_PLIST "${CMAKE_SOURCE_DIR}/os/macos/Info.plist")
|
||||||
|
set(MACOSX_BUNDLE_GUI_IDENTIFIER "com.alexbatalov.fallout2-ce")
|
||||||
|
set(MACOSX_BUNDLE_BUNDLE_NAME "${EXECUTABLE_NAME}")
|
||||||
|
set(MACOSX_BUNDLE_DISPLAY_NAME "Fallout 2")
|
||||||
|
set(CMAKE_OSX_DEPLOYMENT_TARGET "12.0")
|
||||||
|
endif()
|
||||||
|
|
||||||
add_subdirectory("third_party/fpattern")
|
add_subdirectory("third_party/fpattern")
|
||||||
target_link_libraries(${EXECUTABLE_NAME} ${FPATTERN_LIBRARY})
|
target_link_libraries(${EXECUTABLE_NAME} ${FPATTERN_LIBRARY})
|
||||||
target_include_directories(${EXECUTABLE_NAME} PRIVATE ${FPATTERN_INCLUDE_DIR})
|
target_include_directories(${EXECUTABLE_NAME} PRIVATE ${FPATTERN_INCLUDE_DIR})
|
||||||
|
@ -279,3 +287,18 @@ target_include_directories(${EXECUTABLE_NAME} PRIVATE ${ZLIB_INCLUDE_DIRS})
|
||||||
|
|
||||||
target_link_libraries(${EXECUTABLE_NAME} ${SDL2_LIBRARIES})
|
target_link_libraries(${EXECUTABLE_NAME} ${SDL2_LIBRARIES})
|
||||||
target_include_directories(${EXECUTABLE_NAME} PRIVATE ${SDL2_INCLUDE_DIRS})
|
target_include_directories(${EXECUTABLE_NAME} PRIVATE ${SDL2_INCLUDE_DIRS})
|
||||||
|
|
||||||
|
if(APPLE)
|
||||||
|
install(TARGETS ${EXECUTABLE_NAME} DESTINATION .)
|
||||||
|
install(CODE "
|
||||||
|
include(BundleUtilities)
|
||||||
|
fixup_bundle(${CMAKE_BINARY_DIR}/${MACOSX_BUNDLE_BUNDLE_NAME}.app \"\" \"\")
|
||||||
|
"
|
||||||
|
COMPONENT Runtime)
|
||||||
|
|
||||||
|
set(CPACK_GENERATOR "DragNDrop")
|
||||||
|
set(CPACK_DMG_DISABLE_APPLICATIONS_SYMLINK ON)
|
||||||
|
set(CPACK_PACKAGE_FILE_NAME "fallout2-ce")
|
||||||
|
|
||||||
|
include(CPack)
|
||||||
|
endif()
|
||||||
|
|
|
@ -0,0 +1,36 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>CFBundleDevelopmentRegion</key>
|
||||||
|
<string>English</string>
|
||||||
|
<key>CFBundleDisplayName</key>
|
||||||
|
<string>${MACOSX_BUNDLE_DISPLAY_NAME}</string>
|
||||||
|
<key>CFBundleExecutable</key>
|
||||||
|
<string>${MACOSX_BUNDLE_EXECUTABLE_NAME}</string>
|
||||||
|
<key>CFBundleGetInfoString</key>
|
||||||
|
<string>${MACOSX_BUNDLE_INFO_STRING}</string>
|
||||||
|
<key>CFBundleIconFile</key>
|
||||||
|
<string>${MACOSX_BUNDLE_ICON_FILE}</string>
|
||||||
|
<key>CFBundleIdentifier</key>
|
||||||
|
<string>${MACOSX_BUNDLE_GUI_IDENTIFIER}</string>
|
||||||
|
<key>CFBundleInfoDictionaryVersion</key>
|
||||||
|
<string>6.0</string>
|
||||||
|
<key>CFBundleName</key>
|
||||||
|
<string>${MACOSX_BUNDLE_BUNDLE_NAME}</string>
|
||||||
|
<key>CFBundlePackageType</key>
|
||||||
|
<string>APPL</string>
|
||||||
|
<key>CFBundleShortVersionString</key>
|
||||||
|
<string>${MACOSX_BUNDLE_SHORT_VERSION_STRING}</string>
|
||||||
|
<key>CFBundleVersion</key>
|
||||||
|
<string>${MACOSX_BUNDLE_BUNDLE_VERSION}</string>
|
||||||
|
<key>NSHumanReadableCopyright</key>
|
||||||
|
<string>${MACOSX_BUNDLE_COPYRIGHT}</string>
|
||||||
|
<key>NSHighResolutionCapable</key>
|
||||||
|
<string>True</string>
|
||||||
|
<key>LSMinimumSystemVersion</key>
|
||||||
|
<string>12</string>
|
||||||
|
<key>SDL_FILESYSTEM_BASE_DIR_TYPE</key>
|
||||||
|
<string>parent</string>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
|
@ -84,6 +84,12 @@ bool gProgramIsActive = false;
|
||||||
|
|
||||||
int main(int argc, char* argv[])
|
int main(int argc, char* argv[])
|
||||||
{
|
{
|
||||||
|
#if __APPLE__
|
||||||
|
char* basePath = SDL_GetBasePath();
|
||||||
|
chdir(basePath);
|
||||||
|
SDL_free(basePath);
|
||||||
|
#endif
|
||||||
|
|
||||||
SDL_ShowCursor(SDL_DISABLE);
|
SDL_ShowCursor(SDL_DISABLE);
|
||||||
gProgramIsActive = true;
|
gProgramIsActive = true;
|
||||||
return falloutMain(argc, argv);
|
return falloutMain(argc, argv);
|
||||||
|
|
Loading…
Reference in New Issue