Skip to content

Commit

Permalink
CMake|Windows: Configuring the build for 32-bit Windows
Browse files Browse the repository at this point in the history
Modified dependency finders to work on Windows.
  • Loading branch information
skyjake committed Feb 22, 2015
1 parent f8c6e74 commit ca840c0
Show file tree
Hide file tree
Showing 21 changed files with 255 additions and 69 deletions.
26 changes: 16 additions & 10 deletions doomsday/apps/client/CMakeLists.txt
Expand Up @@ -28,16 +28,22 @@ if (APPLE)
include_directories (include/macx)
list (APPEND HEADERS include/macx/MusicPlayer.h)
list (APPEND SOURCES src/macx/MusicPlayer.mm)

set (readme "${CMAKE_CURRENT_BINARY_DIR}/Read Me.rtf")
deng_add_amedoc (RTF ${readme} ${DENG_SOURCE_DIR}/doc/readme readme.ame)
install (FILES ${readme} DESTINATION .)
list (APPEND SOURCES ${readme})
else ()
# Plain text readme for other platforms.
set (readme "${CMAKE_CURRENT_BINARY_DIR}/readme.txt")
deng_add_amedoc (TXT ${readme} ${DENG_SOURCE_DIR}/doc/readme readme.ame)
list (APPEND SOURCES ${readme})
elseif (WIN32)
include_directories (include/windows)
endif ()

if (AMETHYST_FOUND)
if (APPLE)
set (readme "${CMAKE_CURRENT_BINARY_DIR}/Read Me.rtf")
deng_add_amedoc (RTF ${readme} ${DENG_SOURCE_DIR}/doc/readme readme.ame)
install (FILES ${readme} DESTINATION .)
list (APPEND SOURCES ${readme})
else ()
# Plain text readme for other platforms.
set (readme "${CMAKE_CURRENT_BINARY_DIR}/readme.txt")
deng_add_amedoc (TXT ${readme} ${DENG_SOURCE_DIR}/doc/readme readme.ame)
list (APPEND SOURCES ${readme})
endif ()
endif ()

deng_filter_platform_sources (src ${SOURCES} ${HEADERS} ${API_HEADERS})
Expand Down
2 changes: 2 additions & 0 deletions doomsday/apps/libdoomsday/CMakeLists.txt
Expand Up @@ -8,6 +8,7 @@ include (../../cmake/Config.cmake)
find_package (DengCore QUIET)
find_package (DengLegacy QUIET)
find_package (DengShell QUIET)
include (ZLIB)

# Definitions.
add_definitions (
Expand All @@ -34,6 +35,7 @@ relaxed_warnings (libdoomsday)
target_link_libraries (libdoomsday
PUBLIC Deng::libcore Deng::liblegacy Deng::libshell
)
target_include_directories (libdoomsday PRIVATE ${ZLIB_INCLUDE_DIR})

install (DIRECTORY include/doomsday DESTINATION include)
deng_deploy_library (libdoomsday DengDoomsday)
9 changes: 9 additions & 0 deletions doomsday/apps/plugins/directsound/CMakeLists.txt
@@ -0,0 +1,9 @@
cmake_minimum_required (VERSION 3.0)
project (DENG_DIRECTSOUND)
include (../PluginConfig.cmake)

include_directories (include)
file (GLOB SOURCES src/*.cpp include/*.h)

deng_add_plugin (audio_directsound ${SOURCES} api/dsdirectsound.def)

10 changes: 10 additions & 0 deletions doomsday/apps/plugins/winmm/CMakeLists.txt
@@ -0,0 +1,10 @@
cmake_minimum_required (VERSION 3.0)
project (DENG_WINMM)
include (../PluginConfig.cmake)

include_directories (include)
file (GLOB SOURCES src/*.cpp include/*.h)

deng_add_plugin (audio_winmm ${SOURCES} api/dswinmm.def)

target_link_libraries (audio_winmm PRIVATE winmm)
4 changes: 4 additions & 0 deletions doomsday/apps/server/CMakeLists.txt
Expand Up @@ -16,6 +16,10 @@ find_package (Amethyst QUIET)

include_directories (include ../client/include ${DENG_API_DIR})

if (WIN32)
include_directories (../client/include/windows)
endif ()

add_definitions (-D__DOOMSDAY__ -D__SERVER__)

file (GLOB API_HEADERS ../api/*.h)
Expand Down
7 changes: 6 additions & 1 deletion doomsday/cmake/Arch.cmake
@@ -1,4 +1,9 @@
math (EXPR _bits "8*${CMAKE_SIZEOF_VOID_P}")
if (NOT WIN32)
math (EXPR _bits "8*${CMAKE_SIZEOF_VOID_P}")
else ()
# Only 32-bit Windows builds supported.
set (_bits 32)
endif ()
set (ARCH_BITS "${_bits}" CACHE STRING "CPU architecture bits (32/64)")
set (_bits)

Expand Down
21 changes: 16 additions & 5 deletions doomsday/cmake/FindAmethyst.cmake
@@ -1,11 +1,22 @@
if (NOT DEFINED AMETHYST_COMMAND)
if (NOT AMETHYST_COMMAND)
find_program (AMETHYST_COMMAND amethyst
HINTS
/usr/local/bin
/usr/bin
${AMETHYST_DIR}
ENV PATH
ENV HOME
ENV HOMEPATH
PATH_SUFFIXES
bin
amethyst/bin
Amethyst/bin
DOC "Amethyst document processor executable"
)
mark_as_advanced (AMETHYST_COMMAND)
message (STATUS "Found Amethyst: ${AMETHYST_COMMAND}")
endif ()

if (NOT AMETHYST_COMMAND STREQUAL AMETHYST_COMMAND-NOTFOUND)
if (AMETHYST_COMMAND)
message (STATUS "Found Amethyst: ${AMETHYST_COMMAND}")
endif ()
else ()
set (AMETHYST_FOUND YES)
endif ()
44 changes: 32 additions & 12 deletions doomsday/cmake/FindAssimp.cmake
@@ -1,17 +1,26 @@
find_package (PkgConfig)
find_package (PkgConfig QUIET)

set (_oldPath ${LIBASSIMP})

if (NOT TARGET assimp)
pkg_check_modules (ASSIMP QUIET assimp)
if (NOT ASSIMP_LIBRARIES)
set (ASSIMP_LIBRARIES assimp)
if (PKG_CONFIG_FOUND)
# Try to find assimp using pkg-config.
pkg_check_modules (ASSIMP QUIET assimp)
if (NOT ASSIMP_LIBRARIES)
set (ASSIMP_LIBRARIES assimp)
endif ()
find_library (LIBASSIMP ${ASSIMP_LIBRARIES}
HINTS
${ASSIMP_LIBRARY_DIRS}
/usr/local/lib
)
else ()
# Try to find assimp manually.
find_library (LIBASSIMP assimp
HINTS ${DENG_EXTERNAL_SOURCE_DIR}/assimp
PATH_SUFFIXES lib/Release lib/Debug lib
)
endif ()
find_library (LIBASSIMP ${ASSIMP_LIBRARIES}
HINTS
${ASSIMP_LIBRARY_DIRS}
/usr/local/lib
)
mark_as_advanced (LIBASSIMP)

if (NOT LIBASSIMP)
Expand All @@ -25,10 +34,12 @@ if (NOT TARGET assimp)
else ()
# Try to deduce include dir from the library location.
get_filename_component (_assimpBase ${LIBASSIMP} DIRECTORY)
get_filename_component (_assimpBase ${_assimpBase} DIRECTORY)
find_file (LIBASSIMP_IMPORTER_HPP assimp/Importer.hpp
find_file (LIBASSIMP_IMPORTER_HPP
assimp/Importer.hpp
HINTS /usr/include /usr/local/include
${_assimpBase}/include
${_assimpBase}/../include
${_assimpBase}/../../include
)
mark_as_advanced (LIBASSIMP_IMPORTER_HPP)
if (NOT LIBASSIMP_IMPORTER_HPP)
Expand All @@ -41,7 +52,16 @@ if (NOT TARGET assimp)

target_link_libraries (assimp INTERFACE ${LIBASSIMP})

deng_install_library (${LIBASSIMP})
if (NOT WIN32)
deng_install_library (${LIBASSIMP})
else ()
# Locate the DLL.
find_file (LIBASSIMP_DLL assimp.dll HINTS ${_assimpBase}/..
PATH_SUFFIXES bin ../bin/Release ../bin/Debug
)
get_filename_component (LIBASSIMP_DLL ${LIBASSIMP_DLL} REALPATH)
deng_install_library (${LIBASSIMP_DLL})
endif ()
endif ()

if (NOT _oldPath STREQUAL ${LIBASSIMP})
Expand Down
8 changes: 7 additions & 1 deletion doomsday/cmake/FindFMOD.cmake
Expand Up @@ -5,6 +5,7 @@ set (_oldPath ${FMOD_FMOD_H})
find_file (FMOD_FMOD_H api/inc/fmod.h
PATHS
"${FMOD_DIR}"
"${FMOD_DIR}/FMOD"
"${FMOD_DIR}/FMOD Programmers API"
NO_DEFAULT_PATH
)
Expand All @@ -26,14 +27,19 @@ if (NOT FMOD_FMOD_H STREQUAL "FMOD_FMOD_H-NOTFOUND" AND NOT TARGET fmodex)
target_include_directories (fmodex INTERFACE ${fmodInc})
if (APPLE)
set (fmodLib "${fmodApi}/lib/libfmodex.dylib")
set (fmodInstLib ${fmodLib})
elseif (MSVC)
set (fmodLib "${fmodApi}/lib/fmodex_vc.lib")
set (fmodInstLib "${fmodApi}/fmodex.dll")
elseif (UNIX)
if (ARCH_BITS EQUAL 64)
set (fmodLib ${fmodApi}/lib/libfmodex64.so)
else ()
set (fmodLib ${fmodApi}/lib/libfmodex.so)
endif ()
set (fmodInstLib ${fmodLib})
endif ()
target_link_libraries (fmodex INTERFACE ${fmodLib})
deng_install_library (${fmodLib})
deng_install_library (${fmodInstLib})
endif ()

27 changes: 5 additions & 22 deletions doomsday/cmake/FindLZSS.cmake
Expand Up @@ -9,30 +9,13 @@ if (WIN32)
add_library (lzss INTERFACE)
target_include_directories (lzss INTERFACE "${DENG_LZSS_DIR}/portable/include")
target_link_libraries (lzss INTERFACE "${DENG_LZSS_DIR}/win32/lzss.lib")
deng_install_library ("${DENG_LZSS_DIR}/win32/lzss.dll")
else ()
add_library (lzss STATIC EXCLUDE_FROM_ALL ${DENG_LZSS_DIR}/unix/src/lzss.c)
target_include_directories (lzss PUBLIC "${DENG_LZSS_DIR}/portable/include")
target_link_libraries (lzss PRIVATE Deng::liblegacy)
set_property (TARGET lzss PROPERTY AUTOMOC OFF)
set_target_properties (lzss PROPERTIES
AUTOMOC OFF
FOLDER Libraries
)
endif ()

set_property (TARGET lzss PROPERTY FOLDER Libraries)


# INCLUDEPATH += $$DENG_LZSS_DIR/portable/include
#
# HEADERS += \
# $$DENG_LZSS_DIR/portable/include/lzss.h
#
# win32 {
# LIBS += -L$$DENG_LZSS_DIR/win32 -llzss
#
# # Installed shared libs.
# INSTALLS += lzsslibs
# lzsslibs.files = $$DENG_LZSS_DIR/win32/lzss.dll
# lzsslibs.path = $$DENG_LIB_DIR
# }
# else {
# SOURCES += \
# $$DENG_LZSS_DIR/unix/src/lzss.c
# }
6 changes: 6 additions & 0 deletions doomsday/cmake/FindOculusVR.cmake
Expand Up @@ -34,6 +34,12 @@ if (NOT LIBOVR_OVR_H STREQUAL "LIBOVR_OVR_H-NOTFOUND")
)
link_framework (LibOVR INTERFACE Cocoa)
link_framework (LibOVR INTERFACE IOKit)
elseif (MSVC12)
target_link_libraries (LibOVR INTERFACE
debug "${ovrDir}/Lib/Win32/VS2013/libovrd.lib"
optimized "${ovrDir}/Lib/Win32/VS2013/libovr.lib"
general winmm shell32 ws2_32
)
endif ()
endif ()
endif ()
8 changes: 6 additions & 2 deletions doomsday/cmake/FindQt.cmake
Expand Up @@ -20,7 +20,9 @@ function (qmake_query result qtvar)
endfunction (qmake_query)

# Check Qt version.
if (NOT DEFINED QT_PREFIX_DIR)
if (NOT DEFINED QT_PREFIX_DIR OR
(WIN32 AND NOT WINDEPLOYQT_COMMAND) OR
(APPLE AND NOT MACDEPLOYQT_COMMAND))
message (STATUS "QMake path: ${QMAKE}")

qmake_query (QT_VERSION "QT_VERSION")
Expand All @@ -36,8 +38,10 @@ if (NOT DEFINED QT_PREFIX_DIR)
message (STATUS " Qt install prefix: ${QT_PREFIX}")
set (QT_PREFIX_DIR "${QT_PREFIX}" CACHE PATH "Qt install prefix")

qmake_query (QT_BINS "QT_INSTALL_BINS")
if (APPLE)
qmake_query (QT_BINS "QT_INSTALL_BINS")
set (MACDEPLOYQT_COMMAND "${QT_BINS}/macdeployqt" CACHE PATH "Qt's macdeployqt executable path")
elseif (WIN32)
set (WINDEPLOYQT_COMMAND "${QT_BINS}/windeployqt" CACHE PATH "Qt's windeployqt executable path")
endif ()
endif ()
57 changes: 54 additions & 3 deletions doomsday/cmake/FindSDL2.cmake
@@ -1,11 +1,62 @@
find_package (PkgConfig)
find_package (PkgConfig QUIET)

add_pkgconfig_interface_library (SDL2 OPTIONAL sdl2)
add_pkgconfig_interface_library (SDL2_mixer OPTIONAL SDL2_mixer)
if (PKG_CONFIG_FOUND)
add_pkgconfig_interface_library (SDL2 OPTIONAL sdl2)
add_pkgconfig_interface_library (SDL2_mixer OPTIONAL SDL2_mixer)
elseif (WIN32)
# Try to locate SDL2 from the local system (assuming Windows).
set (_oldPath ${SDL2_LIBRARY})
find_library (SDL2_LIBRARY SDL2 HINTS ${SDL2_DIR} PATH_SUFFIXES lib/x86 lib)
if (NOT SDL2_LIBRARY)
message (FATAL_ERROR "SDL2 not found. Set the SDL2_DIR variable to help locate it.\n")
endif ()
if (NOT _oldPath STREQUAL SDL2_LIBRARY)
message (STATUS "Found SDL2: ${SDL2_LIBRARY}")
endif ()

# Define the target.
add_library (SDL2 INTERFACE)
target_link_libraries (SDL2 INTERFACE ${SDL2_LIBRARY})

# Deduce the include directory.
get_filename_component (_libDir ${SDL2_LIBRARY} DIRECTORY)
get_filename_component (_incDir ${_libDir}/../../include REALPATH)

target_include_directories (SDL2 INTERFACE ${_incDir})
deng_install_library (${_libDir}/SDL2.dll)

# Also attempt to locate SLD2_mixer.
set (_oldPath ${SDL_MIXER_LIBRARY})
find_library (SDL2_MIXER_LIBRARY SDL2_mixer
HINTS ${SDL2_DIR} ${SDL2_MIXER_DIR}
PATH_SUFFIXES lib/x86 lib
)
if (NOT _oldPath STREQUAL SDL2_MIXER_LIBRARY)
message (STATUS "Found SDL2_mixer: ${SDL2_MIXER_LIBRARY}")
endif ()

# Define the target.
add_library (SDL2_mixer INTERFACE)
target_link_libraries (SDL2_mixer INTERFACE ${SDL2_MIXER_LIBRARY})

# Deduce the include directory.
get_filename_component (_libDir ${SDL2_MIXER_LIBRARY} DIRECTORY)
get_filename_component (_incDir ${_libDir}/../../include REALPATH)

target_include_directories (SDL2_mixer INTERFACE ${_incDir})

# There are multiple DLLs needed for deployment.
file (GLOB _mixLibs ${_libDir}/*.dll)
foreach (_lib IN LISTS _mixLibs)
deng_install_library (${_lib})
endforeach (_lib)
endif ()

if (NOT TARGET SDL2)
add_definitions (-DDENG_NO_SDL)
message (STATUS "SDL2 disabled (not found).")
endif ()
if (NOT TARGET SDL2_mixer)
add_definitions (-DDENG_DISABLE_SDLMIXER)
message (STATUS "SDL2_mixer disabled (not found).")
endif ()

0 comments on commit ca840c0

Please sign in to comment.