Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

macOS support #65

Open
wants to merge 14 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions .github/macos/build_create-dmg.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
#!/bin/sh
set -e

version="1.0.9"

prefix="$PWD/lib"
mkdir -p "$prefix"
cd "$prefix"

[ -f "create-dmg-$version.tar.gz" ] || curl -Lo "create-dmg-$version.tar.gz" "https://github.com/create-dmg/create-dmg/archive/refs/tags/v$version.tar.gz"
rm -rf "create-dmg-$version"
tar xf "create-dmg-$version.tar.gz"
cd "create-dmg-$version"
make prefix="$prefix" install
cd ..
rm -rf "create-dmg-$version"
25 changes: 25 additions & 0 deletions .github/macos/build_fltk.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
#!/bin/sh
set -e

version="1.3.8"

NPROC="${NPROC:-$(getconf _NPROCESSORS_ONLN)}"
export MAKEFLAGS="-j$NPROC"

prefix="$PWD/lib"
mkdir -p "$prefix"
cd "$prefix"

[ -f "fltk-$version-source.tar.bz2" ] || curl -LO "https://www.fltk.org/pub/fltk/$version/fltk-$version-source.tar.bz2"
rm -rf "fltk-$version"
tar xf "fltk-$version-source.tar.bz2"
cd "fltk-$version"
./configure \
--prefix="$prefix" \
--with-abiversion=10308 \
--enable-localjpeg \
--enable-localpng \
--disable-localzlib
make DIRS='$(IMAGEDIRS) src $(CAIRODIR)' install
cd ..
rm -rf "fltk-$version"
38 changes: 38 additions & 0 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ name: CI
on:
push:
branches: [ master ]
tags: "*"
pull_request:

jobs:
Expand Down Expand Up @@ -35,3 +36,40 @@ jobs:
run: |
export PATH="$PWD/bin:$PATH"
make

build-mac:
runs-on: macos-11
env:
MACOSX_DEPLOYMENT_TARGET: "10.13"
CFLAGS: -O3 -pipe -flto
CXXFLAGS: -O3 -pipe -flto
steps:
- name: Checkout
uses: actions/checkout@master

- name: Install FLTK
run: |
.github/macos/build_fltk.sh

- name: Build
run: |
export PATH="$PWD/lib/bin:$PATH"
make -j$(getconf _NPROCESSORS_ONLN)

- name: Install create-dmg
if: startsWith(github.ref, 'refs/tags/')
run: |
.github/macos/build_create-dmg.sh

- name: Create DMG
if: startsWith(github.ref, 'refs/tags/')
run: |
export PATH="$PWD/lib/bin:$PATH"
make appdmg

- name: Upload artifacts
if: startsWith(github.ref, 'refs/tags/')
uses: actions/upload-artifact@v2
with:
name: "Tilemap Studio.dmg"
path: "bin/Tilemap Studio.dmg"
11 changes: 7 additions & 4 deletions INSTALL.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,16 +67,19 @@ cd tilemap-studio

# Build FLTK 1.3.7 with the latest ABI enabled
# (even if you already have libfltk1.3-dev installed)
git clone --branch release-1.3.7 --depth 1 https://github.com/fltk/fltk.git
pushd fltk
./autogen.sh --prefix="$PWD/.." --with-abiversion=10307
mkdir -p lib
pushd lib
wget https://www.fltk.org/pub/fltk/1.3.8/fltk-1.3.8-source.tar.bz2
tar xf fltk-1.3.8-source.tar.bz2
cd fltk-1.3.8
./configure --prefix="$(realpath "$PWD/..")" --with-abiversion=10308
make
make install
popd

# Build Tilemap Studio
# ("export PATH" is needed if bin/fltk-config is not already in your PATH)
export PATH="$PWD/bin:$PATH"
export PATH="$PWD/lib/bin:$PATH"
make

# Install Tilemap Studio
Expand Down
93 changes: 82 additions & 11 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,10 +1,20 @@
OS_MAC :=
ifeq ($(shell uname -s),Darwin)
OS_MAC := 1
endif

DESTDIR =
PREFIX = /usr/local

APPNAME = Tilemap Studio
tilemapstudio = tilemapstudio
tilemapstudiod = tilemapstudiod

ifdef OS_MAC
CXX ?= clang++
else
CXX ?= g++
endif
LD = $(CXX)
RM = rm -rf

Expand All @@ -14,21 +24,30 @@ tmpdir = tmp
debugdir = tmp/debug
bindir = bin

CXXFLAGS = -std=c++17 -I$(srcdir) -I$(resdir) $(shell fltk-config --use-images --cxxflags)
LDFLAGS = $(shell fltk-config --use-images --ldflags) $(shell pkg-config --libs libpng xpm)
CXXFLAGS := -std=c++17 -I$(srcdir) -I$(resdir) $(shell fltk-config --use-images --cxxflags) $(CXXFLAGS)
LDFLAGS := $(shell fltk-config --use-images --ldflags) $(LDFLAGS)
ifndef OS_MAC
LDFLAGS += $(shell pkg-config --libs libpng xpm)
endif

RELEASEFLAGS = -DNDEBUG -O3 -flto -march=native
RELEASEFLAGS = -DNDEBUG -O3 -flto
DEBUGFLAGS = -DDEBUG -D_DEBUG -O0 -g -ggdb3 -Wall -Wextra -pedantic -Wno-unknown-pragmas -Wno-sign-compare -Wno-unused-parameter

COMMON = $(wildcard $(srcdir)/*.h) $(wildcard $(resdir)/*.xpm)
COMMON = $(wildcard $(srcdir)/*.h) $(wildcard $(resdir)/*.xpm) $(resdir)/help.html
SOURCES = $(wildcard $(srcdir)/*.cpp)
OBJECTS = $(SOURCES:$(srcdir)/%.cpp=$(tmpdir)/%.o)
DEBUGOBJECTS = $(SOURCES:$(srcdir)/%.cpp=$(debugdir)/%.o)

ifdef OS_MAC
SOURCES_MAC = $(wildcard $(srcdir)/*.mm)
OBJECTS += $(SOURCES_MAC:$(srcdir)/%.mm=$(tmpdir)/%.o)
DEBUGOBJECTS += $(SOURCES_MAC:$(srcdir)/%.mm=$(debugdir)/%.o)
endif

TARGET = $(bindir)/$(tilemapstudio)
DEBUGTARGET = $(bindir)/$(tilemapstudiod)
DESKTOP = "$(DESTDIR)$(PREFIX)/share/applications/Tilemap Studio.desktop"

.PHONY: all $(tilemapstudio) $(tilemapstudiod) release debug clean install uninstall
.PHONY: all $(tilemapstudio) $(tilemapstudiod) release debug clean appdir appdmg install uninstall

.SUFFIXES: .o .cpp

Expand All @@ -37,19 +56,19 @@ all: $(tilemapstudio)
$(tilemapstudio): release
$(tilemapstudiod): debug

release: CXXFLAGS += $(RELEASEFLAGS)
release: CXXFLAGS := $(RELEASEFLAGS) $(CXXFLAGS)
release: $(TARGET)

debug: CXXFLAGS += $(DEBUGFLAGS)
debug: CXXFLAGS := $(DEBUGFLAGS) $(CXXFLAGS)
debug: $(DEBUGTARGET)

$(TARGET): $(OBJECTS)
@mkdir -p $(@D)
$(LD) -o $@ $^ $(LDFLAGS)
$(LD) -o $@ $^ $(CXXFLAGS) $(LDFLAGS)

$(DEBUGTARGET): $(DEBUGOBJECTS)
@mkdir -p $(@D)
$(LD) -o $@ $^ $(LDFLAGS)
$(LD) -o $@ $^ $(CXXFLAGS) $(LDFLAGS)

$(tmpdir)/%.o: $(srcdir)/%.cpp $(COMMON)
@mkdir -p $(@D)
Expand All @@ -59,9 +78,60 @@ $(debugdir)/%.o: $(srcdir)/%.cpp $(COMMON)
@mkdir -p $(@D)
$(CXX) -c $(CXXFLAGS) -o $@ $<

ifdef OS_MAC
$(tmpdir)/%.o: $(srcdir)/%.mm $(COMMON)
@mkdir -p $(@D)
$(CXX) -c $(CXXFLAGS) -o $@ $<

$(debugdir)/%.o: $(srcdir)/%.mm $(COMMON)
@mkdir -p $(@D)
$(CXX) -c $(CXXFLAGS) -o $@ $<
endif

clean:
$(RM) $(TARGET) $(DEBUGTARGET) $(OBJECTS) $(DEBUGOBJECTS)

ifdef OS_MAC
APPDIR = "$(bindir)/$(APPNAME).app"
APPDMG = "$(bindir)/$(APPNAME).dmg"
CONTENTS = $(APPDIR)/Contents

appdir: release
rm -rf $(APPDIR)
install -d $(CONTENTS)/macOS $(CONTENTS)/Resources
install -m755 $(TARGET) $(CONTENTS)/macOS/tilemapstudio
install -m644 $(resdir)/app.icns $(CONTENTS)/Resources/AppIcon.icns
install -m644 $(resdir)/Info.plist $(CONTENTS)/Info.plist
printf 'APPL????' > $(CONTENTS)/PkgInfo

appdmg: appdir
rm -f $(APPDMG)
rm -rf $(APPDMG).dir/
mkdir -p $(APPDMG).dir
cp -a $(APPDIR) $(APPDMG).dir/
create-dmg \
--volname "$(APPNAME)" \
--volicon $(resdir)/app.icns \
--window-pos 200 120 \
--window-size 800 400 \
--icon-size 100 \
--icon "$(APPNAME).app" 200 190 \
--hide-extension "$(APPNAME).app" \
--app-drop-link 600 185 \
$(APPDMG) $(APPDMG).dir/
rm -rf $(APPDMG).dir/

install: appdir
rm -rf "/Applications/$(APPNAME).app"
cp -av $(APPDIR) "/Applications/$(APPNAME).app"
# Remove admin-owned files if ran as "sudo"
rm -rf $(APPDIR)

uninstall:
rm -rf "/Applications/$(APPNAME).app"
else
DESKTOP = "$(DESTDIR)$(PREFIX)/share/applications/$(APPNAME).desktop"

install: release
mkdir -p $(DESTDIR)$(PREFIX)/bin
cp $(TARGET) $(DESTDIR)$(PREFIX)/bin/$(tilemapstudio)
Expand All @@ -70,7 +140,7 @@ install: release
cp $(resdir)/app-icon.xpm $(DESTDIR)$(PREFIX)/share/pixmaps/tilemapstudio16.xpm
mkdir -p $(DESTDIR)$(PREFIX)/share/applications
echo "[Desktop Entry]" > $(DESKTOP)
echo "Name=Tilemap Studio" >> $(DESKTOP)
echo "Name=$(APPNAME)" >> $(DESKTOP)
echo "Comment=Edit Game Boy, Color, and Advance tilemaps" >> $(DESKTOP)
echo "Icon=$(PREFIX)/share/pixmaps/tilemapstudio48.xpm" >> $(DESKTOP)
echo "Exec=$(PREFIX)/bin/$(tilemapstudio)" >> $(DESKTOP)
Expand All @@ -82,3 +152,4 @@ uninstall:
rm -f $(DESTDIR)$(PREFIX)/share/pixmaps/tilemapstudio48.xpm
rm -f $(DESTDIR)$(PREFIX)/share/pixmaps/tilemapstudio16.xpm
rm -f $(DESKTOP)
endif
1 change: 1 addition & 0 deletions install.bat
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ mkdir "%INSTALLDIR%" >nul 2>&1
copy /b /y %SOURCEFILE% "%INSTALLPATH%" >nul

reg add "HKCR\.tilemap" /ve /f /d "Tilemap Studio" >nul
reg add "HKCR\.map" /ve /f /d "Tilemap Studio" >nul
reg add "HKCR\.rle" /ve /f /d "Tilemap Studio" >nul
reg add "HKCR\Tilemap Studio" /ve /f /d "Tilemap File" >nul
rem reg add "HKCR\Tilemap Studio\DefaultIcon" /ve /f /d "%%SystemRoot%%\system32\imageres.dll,127" >nul
Expand Down
83 changes: 83 additions & 0 deletions res/Info.plist
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleExecutable</key>
<string>tilemapstudio</string>
<key>CFBundleIconFile</key>
<string>AppIcon</string>
<key>CFBundleIdentifier</key>
<string>rangi42.tilemapstudio</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>Tilemap Studio</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>4.0.1</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>LSMinimumSystemVersion</key>
<string>10.13</string>
<key>NSHumanReadableCopyright</key>
<string></string>
<key>UTExportedTypeDeclarations</key>
<array>
<dict>
<key>UTTypeConformsTo</key>
<array>
<string>public.data</string>
</array>
<key>UTTypeDescription</key>
<string>Tilemap Studio Tilemap</string>
<key>UTTypeIdentifier</key>
<string>rangi42.tilemapstudio.tilemap</string>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<array>
<string>tilemap</string>
<string>map</string>
<string>rle</string>
</array>
</dict>
</dict>
</array>
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>LSItemContentTypes</key>
<array>
<string>rangi42.tilemapstudio.tilemap</string>
</array>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>LSHandlerRank</key>
<string>Default</string>
</dict>
<dict>
<key>LSItemContentTypes</key>
<array>
<string>public.data</string>
</array>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>LSHandlerRank</key>
<string>Alternate</string>
</dict>
<dict>
<key>LSItemContentTypes</key>
<array>
<string>public.png</string>
</array>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
<key>LSHandlerRank</key>
<string>Alternate</string>
</dict>
</array>
</dict>
</plist>
Binary file added res/app.icns
Binary file not shown.
Loading