Skip to content

Commit ad15a3d

Browse files
authored
MacOS support (#5)
1 parent 55e90ac commit ad15a3d

7 files changed

Lines changed: 1113 additions & 379 deletions

File tree

.github/workflows/build.yml

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ on:
1212

1313
jobs:
1414

15-
build:
15+
build_windows:
1616

1717
runs-on: windows-2022
1818

@@ -43,6 +43,25 @@ jobs:
4343
- name: Build
4444
run: |
4545
mkdir build
46-
cd build
47-
cmake -A ${{ matrix.arch }} -DFOO_SAMPLE=ON ..
48-
msbuild -v:m -p:Configuration=Release -p:Platform=${{ matrix.arch }} foosdk.sln
46+
cmake -A ${{ matrix.arch }} -DFOO_SAMPLE=ON -S . -B build
47+
msbuild -v:m -p:Configuration=Release -p:Platform=${{ matrix.arch }} build\foosdk.sln
48+
49+
build_macos:
50+
51+
strategy:
52+
matrix:
53+
os:
54+
- macos-26
55+
- macos-15-intel
56+
57+
runs-on: ${{ matrix.os }}
58+
59+
steps:
60+
- name: Checkout
61+
uses: actions/checkout@v4
62+
63+
- name: Build
64+
run: |
65+
mkdir build
66+
cmake -DFOO_SAMPLE=ON -DCMAKE_BUILD_TYPE=Release -S . -B build
67+
cmake --build build --parallel

CMakeLists.txt

Lines changed: 87 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -2,44 +2,66 @@ cmake_minimum_required(VERSION 3.10)
22

33
project(foosdk)
44

5-
if(NOT WIN32)
6-
message(FATAL_ERROR "This project requires WIN32 target.")
5+
set(CMAKE_CXX_STANDARD 17)
6+
7+
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
8+
9+
set(OS_WINDOWS OFF)
10+
set(OS_MAC OFF)
11+
12+
if(CMAKE_SYSTEM_NAME STREQUAL Windows)
13+
set(OS_WINDOWS ON)
14+
include(SourcesWindows)
15+
elseif(CMAKE_SYSTEM_NAME STREQUAL Darwin)
16+
set(OS_MAC ON)
17+
include(SourcesMacOs)
18+
enable_language(OBJC)
19+
else()
20+
message(FATAL_ERROR "Target OS is not Windows or Mac")
721
endif()
822

9-
option(FOO_PPUI "Include libPPUI (adds usage of ATL/WTL)" ON)
10-
option(FOO_SDK_HELPERS "Include SDK helpers (requires FOO_PPUI)" ON)
11-
option(FOO_STATIC_STDLIB "Use static standard libraries" OFF)
12-
option(FOO_SYSTEM_WTL "Use system WTL library" OFF)
13-
option(FOO_SAMPLE "Build foo_sample component" OFF)
23+
option(FOO_SAMPLE "Build foo_sample component" OFF)
24+
option(FOO_SDK_HELPERS "Include SDK helpers (requires FOO_PPUI on Windows)" ON)
25+
26+
if(OS_WINDOWS)
27+
option(FOO_PPUI "Include libPPUI (adds usage of ATL/WTL)" ON)
28+
option(FOO_SYSTEM_WTL "Use system WTL library" OFF)
29+
else()
30+
set(FOO_PPUI OFF)
31+
endif()
1432

15-
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake;${CMAKE_MODULE_PATH}")
16-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP /wd4302 /wd4838 /wd4996 /d2notypeopt")
33+
if(MSVC)
34+
option(FOO_STATIC_STDLIB "Use static standard libraries" OFF)
1735

18-
if(FOO_STATIC_STDLIB)
19-
foreach(FLAGS CMAKE_CXX_FLAGS_DEBUG
36+
if(FOO_STATIC_STDLIB)
37+
foreach(FLAGS CMAKE_CXX_FLAGS_DEBUG
2038
CMAKE_CXX_FLAGS_RELEASE
2139
CMAKE_CXX_FLAGS_MINSIZEREL
2240
CMAKE_CXX_FLAGS_RELWITHDEBINFO)
2341
string(REPLACE "/MD" "/MT" ${FLAGS} "${${FLAGS}}")
24-
endforeach()
42+
endforeach()
43+
endif()
44+
45+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP /wd4302 /wd4838 /wd4996 /d2notypeopt")
2546
endif()
2647

27-
set(CMAKE_CXX_STANDARD 17)
28-
set(WINVER 0x0601)
48+
set(INCLUDE_WTL OFF) # WTL not WTF
2949

30-
add_definitions(
31-
-D_UNICODE -DUNICODE -DSTRICT -DWINVER=${WINVER} -D_WIN32_WINNT=${WINVER}
32-
)
50+
if(OS_WINDOWS)
51+
set(WINVER 0x0601)
3352

34-
set(INCLUDE_WTL OFF)
53+
add_definitions(
54+
-D_UNICODE -DUNICODE -DSTRICT -DWINVER=${WINVER} -D_WIN32_WINNT=${WINVER}
55+
)
3556

36-
if(FOO_PPUI)
37-
if(FOO_SYSTEM_WTL)
38-
find_package(Wtl REQUIRED)
39-
include_directories(${WTL_INCLUDE_DIRS})
40-
else()
41-
include_directories(wtl/Include)
42-
set(INCLUDE_WTL ON)
57+
if(FOO_PPUI)
58+
if(FOO_SYSTEM_WTL)
59+
find_package(Wtl REQUIRED)
60+
include_directories(${WTL_INCLUDE_DIRS})
61+
else()
62+
include_directories(wtl/Include)
63+
set(INCLUDE_WTL ON)
64+
endif()
4365
endif()
4466
endif()
4567

@@ -51,22 +73,28 @@ function(option_dependency_check OPT1 OPT2)
5173
endif()
5274
endfunction()
5375

54-
option_dependency_check(FOO_SDK_HELPERS FOO_PPUI)
55-
option_dependency_check(FOO_SAMPLE FOO_SDK_HELPERS)
76+
if(OS_WINDOWS)
77+
option_dependency_check(FOO_SDK_HELPERS FOO_PPUI)
78+
endif()
5679

57-
include(FileLists)
80+
option_dependency_check(FOO_SAMPLE FOO_SDK_HELPERS)
5881

59-
if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "8")
60-
set(SHARED_LIBRARY sdk/foobar2000/shared/shared-x64.lib)
61-
else()
62-
set(SHARED_LIBRARY sdk/foobar2000/shared/shared-Win32.lib)
82+
set(SHARED_LIBRARY "")
83+
84+
if(OS_WINDOWS)
85+
if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "8")
86+
set(SHARED_LIBRARY sdk/foobar2000/shared/shared-x64.lib)
87+
else()
88+
set(SHARED_LIBRARY sdk/foobar2000/shared/shared-Win32.lib)
89+
endif()
6390
endif()
6491

6592
set(
6693
LIB_SOURCES
6794
${PFC_SOURCES} ${PFC_HEADERS}
95+
${SHARED_SOURCES} ${SHARED_HEADERS}
6896
${SDK_SOURCES} ${SDK_HEADERS}
69-
${COMPONENT_CLIENT_SOURCES}
97+
${COMPONENT_CLIENT_SOURCES} ${COMPONENT_CLIENT_HEADERS}
7098
)
7199

72100
if(INCLUDE_WTL)
@@ -88,11 +116,35 @@ add_library(foosdk STATIC ${LIB_SOURCES})
88116

89117
if(FOO_SAMPLE)
90118
add_library(foo_sample MODULE ${SAMPLE_SOURCES} ${SAMPLE_HEADERS})
91-
target_link_libraries(foo_sample foosdk "${CMAKE_CURRENT_SOURCE_DIR}/${SHARED_LIBRARY}")
119+
120+
target_include_directories(
121+
foo_sample PRIVATE
122+
sdk/foobar2000/foo_sample
123+
sdk/foobar2000/helpers-mac
124+
)
125+
126+
target_link_libraries(foo_sample foosdk)
127+
128+
if(SHARED_LIBRARY)
129+
target_link_libraries(foo_sample "${CMAKE_CURRENT_SOURCE_DIR}/${SHARED_LIBRARY}")
130+
endif()
131+
132+
if(OS_MAC)
133+
set_target_properties(
134+
foo_sample PROPERTIES
135+
BUNDLE ON
136+
BUNDLE_EXTENSION component
137+
)
138+
139+
target_link_libraries(foo_sample "-framework Cocoa")
140+
endif()
92141
endif()
93142

94143
install(TARGETS foosdk ARCHIVE DESTINATION lib)
95-
install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/${SHARED_LIBRARY}" DESTINATION lib)
144+
145+
if(SHARED_LIBRARY)
146+
install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/${SHARED_LIBRARY}" DESTINATION lib)
147+
endif()
96148

97149
install(FILES ${SHARED_HEADERS} DESTINATION include/foobar2000/shared)
98150
install(FILES ${PFC_HEADERS} DESTINATION include/pfc)

0 commit comments

Comments
 (0)