view foosdk/CMakeLists.txt @ 1:20d02a178406 default tip

*: check in everything else yay
author Paper <paper@tflc.us>
date Mon, 05 Jan 2026 02:15:46 -0500
parents
children
line wrap: on
line source

cmake_minimum_required(VERSION 3.10)

project(foosdk)

if(NOT WIN32)
    message(FATAL_ERROR "This project requires WIN32 target.")
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)

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(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()
endif()

set(CMAKE_CXX_STANDARD 17)
set(WINVER 0x0601)

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

set(INCLUDE_WTL OFF)

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

function(option_dependency_check OPT1 OPT2)
    if(${OPT1})
        if(NOT ${OPT2})
            message(SEND_ERROR "Option ${OPT1} requires option ${OPT2}")
        endif()
    endif()
endfunction()

option_dependency_check(FOO_SDK_HELPERS FOO_PPUI)
option_dependency_check(FOO_SAMPLE      FOO_SDK_HELPERS)

include(FileLists)

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()

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

if(INCLUDE_WTL)
    set(LIB_SOURCES ${LIB_SOURCES} ${WTL_HEADERS})
endif()

if(FOO_SDK_HELPERS)
    set(LIB_SOURCES ${LIB_SOURCES} ${SDK_HELPERS_SOURCES} ${SDK_HELPERS_HEADERS})
endif()

if(FOO_PPUI)
    set(LIB_SOURCES ${LIB_SOURCES} ${PPUI_SOURCES} ${PPUI_HEADERS})
endif()

add_library(foosdk STATIC ${LIB_SOURCES})

target_include_directories(foosdk PUBLIC sdk)
target_include_directories(foosdk PUBLIC sdk/foobar2000)
target_include_directories(foosdk PUBLIC ${WTL_INCLUDE_DIRS})
target_link_libraries(foosdk PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/${SHARED_LIBRARY}")

if(FOO_SAMPLE)
    add_library(foo_sample MODULE ${SAMPLE_SOURCES} ${SAMPLE_HEADERS})
    target_link_libraries(foo_sample foosdk)
endif()

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

install(FILES ${SHARED_HEADERS} DESTINATION include/foobar2000/shared)
install(FILES ${PFC_HEADERS} DESTINATION include/pfc)
install(FILES ${SDK_HEADERS} DESTINATION include/foobar2000/SDK)

if(INCLUDE_WTL)
    install(FILES ${WTL_HEADERS} DESTINATION include)
endif()

if(FOO_SDK_HELPERS)
    install(FILES ${SDK_HELPERS_HEADERS} DESTINATION include/foobar2000/helpers)
endif()

if(FOO_PPUI)
    install(FILES ${PPUI_HEADERS} DESTINATION include/libPPUI)
endif()