Skip to content
Merged
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
27 changes: 23 additions & 4 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ on:

jobs:

build:
build_windows:

runs-on: windows-2022

Expand Down Expand Up @@ -43,6 +43,25 @@ jobs:
- name: Build
run: |
mkdir build
cd build
cmake -A ${{ matrix.arch }} -DFOO_SAMPLE=ON ..
msbuild -v:m -p:Configuration=Release -p:Platform=${{ matrix.arch }} foosdk.sln
cmake -A ${{ matrix.arch }} -DFOO_SAMPLE=ON -S . -B build
msbuild -v:m -p:Configuration=Release -p:Platform=${{ matrix.arch }} build\foosdk.sln

build_macos:

strategy:
matrix:
os:
- macos-26
- macos-15-intel

runs-on: ${{ matrix.os }}

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Build
run: |
mkdir build
cmake -DFOO_SAMPLE=ON -DCMAKE_BUILD_TYPE=Release -S . -B build
cmake --build build --parallel
122 changes: 87 additions & 35 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,44 +2,66 @@ cmake_minimum_required(VERSION 3.10)

project(foosdk)

if(NOT WIN32)
message(FATAL_ERROR "This project requires WIN32 target.")
set(CMAKE_CXX_STANDARD 17)

list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")

set(OS_WINDOWS OFF)
set(OS_MAC OFF)

if(CMAKE_SYSTEM_NAME STREQUAL Windows)
set(OS_WINDOWS ON)
include(SourcesWindows)
elseif(CMAKE_SYSTEM_NAME STREQUAL Darwin)
set(OS_MAC ON)
include(SourcesMacOs)
enable_language(OBJC)
else()
message(FATAL_ERROR "Target OS is not Windows or Mac")
endif()

option(FOO_PPUI "Include libPPUI (adds usage of ATL/WTL)" ON)
option(FOO_SDK_HELPERS "Include SDK helpers (requires FOO_PPUI)" ON)
option(FOO_STATIC_STDLIB "Use static standard libraries" OFF)
option(FOO_SYSTEM_WTL "Use system WTL library" OFF)
option(FOO_SAMPLE "Build foo_sample component" OFF)
option(FOO_SAMPLE "Build foo_sample component" OFF)
option(FOO_SDK_HELPERS "Include SDK helpers (requires FOO_PPUI on Windows)" ON)

if(OS_WINDOWS)
option(FOO_PPUI "Include libPPUI (adds usage of ATL/WTL)" ON)
option(FOO_SYSTEM_WTL "Use system WTL library" OFF)
else()
set(FOO_PPUI OFF)
endif()

set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake;${CMAKE_MODULE_PATH}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP /wd4302 /wd4838 /wd4996 /d2notypeopt")
if(MSVC)
option(FOO_STATIC_STDLIB "Use static standard libraries" OFF)

if(FOO_STATIC_STDLIB)
foreach(FLAGS CMAKE_CXX_FLAGS_DEBUG
if(FOO_STATIC_STDLIB)
foreach(FLAGS CMAKE_CXX_FLAGS_DEBUG
CMAKE_CXX_FLAGS_RELEASE
CMAKE_CXX_FLAGS_MINSIZEREL
CMAKE_CXX_FLAGS_RELWITHDEBINFO)
string(REPLACE "/MD" "/MT" ${FLAGS} "${${FLAGS}}")
endforeach()
endforeach()
endif()

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP /wd4302 /wd4838 /wd4996 /d2notypeopt")
endif()

set(CMAKE_CXX_STANDARD 17)
set(WINVER 0x0601)
set(INCLUDE_WTL OFF) # WTL not WTF

add_definitions(
-D_UNICODE -DUNICODE -DSTRICT -DWINVER=${WINVER} -D_WIN32_WINNT=${WINVER}
)
if(OS_WINDOWS)
set(WINVER 0x0601)

set(INCLUDE_WTL OFF)
add_definitions(
-D_UNICODE -DUNICODE -DSTRICT -DWINVER=${WINVER} -D_WIN32_WINNT=${WINVER}
)

if(FOO_PPUI)
if(FOO_SYSTEM_WTL)
find_package(Wtl REQUIRED)
include_directories(${WTL_INCLUDE_DIRS})
else()
include_directories(wtl/Include)
set(INCLUDE_WTL ON)
if(FOO_PPUI)
if(FOO_SYSTEM_WTL)
find_package(Wtl REQUIRED)
include_directories(${WTL_INCLUDE_DIRS})
else()
include_directories(wtl/Include)
set(INCLUDE_WTL ON)
endif()
endif()
endif()

Expand All @@ -51,22 +73,28 @@ function(option_dependency_check OPT1 OPT2)
endif()
endfunction()

option_dependency_check(FOO_SDK_HELPERS FOO_PPUI)
option_dependency_check(FOO_SAMPLE FOO_SDK_HELPERS)
if(OS_WINDOWS)
option_dependency_check(FOO_SDK_HELPERS FOO_PPUI)
endif()

include(FileLists)
option_dependency_check(FOO_SAMPLE FOO_SDK_HELPERS)

if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "8")
set(SHARED_LIBRARY sdk/foobar2000/shared/shared-x64.lib)
else()
set(SHARED_LIBRARY sdk/foobar2000/shared/shared-Win32.lib)
set(SHARED_LIBRARY "")

if(OS_WINDOWS)
if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "8")
set(SHARED_LIBRARY sdk/foobar2000/shared/shared-x64.lib)
else()
set(SHARED_LIBRARY sdk/foobar2000/shared/shared-Win32.lib)
endif()
endif()

set(
LIB_SOURCES
${PFC_SOURCES} ${PFC_HEADERS}
${SHARED_SOURCES} ${SHARED_HEADERS}
${SDK_SOURCES} ${SDK_HEADERS}
${COMPONENT_CLIENT_SOURCES}
${COMPONENT_CLIENT_SOURCES} ${COMPONENT_CLIENT_HEADERS}
)

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

if(FOO_SAMPLE)
add_library(foo_sample MODULE ${SAMPLE_SOURCES} ${SAMPLE_HEADERS})
target_link_libraries(foo_sample foosdk "${CMAKE_CURRENT_SOURCE_DIR}/${SHARED_LIBRARY}")

target_include_directories(
foo_sample PRIVATE
sdk/foobar2000/foo_sample
sdk/foobar2000/helpers-mac
)

target_link_libraries(foo_sample foosdk)

if(SHARED_LIBRARY)
target_link_libraries(foo_sample "${CMAKE_CURRENT_SOURCE_DIR}/${SHARED_LIBRARY}")
endif()

if(OS_MAC)
set_target_properties(
foo_sample PROPERTIES
BUNDLE ON
BUNDLE_EXTENSION component
)

target_link_libraries(foo_sample "-framework Cocoa")
endif()
endif()

install(TARGETS foosdk ARCHIVE DESTINATION lib)
install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/${SHARED_LIBRARY}" DESTINATION lib)

if(SHARED_LIBRARY)
install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/${SHARED_LIBRARY}" DESTINATION lib)
endif()

install(FILES ${SHARED_HEADERS} DESTINATION include/foobar2000/shared)
install(FILES ${PFC_HEADERS} DESTINATION include/pfc)
Expand Down
Loading