gear/src/CMakeLists.txt
2024-09-08 18:03:02 +12:00

524 lines
12 KiB
CMake

function(ApplySDL2NetOptions TARGET)
if(SDL2_NET_FOUND)
target_include_directories(${TARGET} PRIVATE ${SDL2_NET_INCLUDE_DIRS})
target_link_libraries(${TARGET} PRIVATE ${SDL2_NET_LIBRARIES})
endif()
endfunction()
# PrBoom main executable
set(COMMON_SRC
am_map.c
am_map.h
doomdata.h
doomdef.c
doomdef.h
doomstat.c
doomstat.h
doomtype.h
dstrings.c
dstrings.h
d_deh.c
d_deh.h
d_englsh.h
d_event.h
d_items.c
d_items.h
d_main.c
d_main.h
d_net.h
d_player.h
d_think.h
d_ticcmd.h
e6y.c
e6y.h
f_finale.c
f_finale.h
f_finale2.c
f_wipe.c
f_wipe.h
g_game.c
g_game.h
g_overflow.c
g_overflow.h
hu_lib.c
hu_lib.h
hu_stuff.c
hu_stuff.h
hu_tracers.c
hu_tracers.h
info.c
info.h
i_capture.c
i_capture.h
i_glob.c
i_glob.h
i_joy.h
i_main.h
i_network.h
i_pcsound.c
i_pcsound.h
i_sound.h
i_system.h
i_video.h
lprintf.c
lprintf.h
md5.c
md5.h
m_argv.c
m_argv.h
m_bbox.c
m_bbox.h
m_cheat.c
m_cheat.h
m_fixed.h
m_menu.c
m_menu.h
m_misc.c
m_misc.h
m_io.c
m_io.h
m_random.c
m_random.h
m_swap.h
protocol.h
p_ceilng.c
p_checksum.c
p_checksum.h
p_doors.c
p_enemy.c
p_enemy.h
p_floor.c
p_genlin.c
p_inter.c
p_inter.h
p_lights.c
p_map.c
p_map.h
p_maputl.c
p_maputl.h
p_mobj.c
p_mobj.h
p_plats.c
p_pspr.c
p_pspr.h
p_saveg.c
p_saveg.h
p_setup.c
p_setup.h
p_sight.c
p_spec.c
p_spec.h
p_switch.c
p_telept.c
p_tick.c
p_tick.h
p_user.c
p_user.h
r_bsp.c
r_bsp.h
r_data.c
r_data.h
r_defs.h
r_demo.c
r_demo.h
r_draw.c
r_draw.h
r_filter.c
r_filter.h
r_fps.c
r_fps.h
r_main.c
r_main.h
r_patch.c
r_patch.h
r_plane.c
r_plane.h
r_segs.c
r_segs.h
r_sky.c
r_sky.h
r_state.h
r_things.c
r_things.h
scanner.cpp
scanner.h
sc_man.c
sc_man.h
sounds.c
sounds.h
statdump.c
statdump.h
st_lib.c
st_lib.h
st_stuff.c
st_stuff.h
s_advsound.c
s_advsound.h
s_sound.c
s_sound.h
tables.c
tables.h
umapinfo.cpp
umapinfo.h
version.c
version.h
v_video.c
v_video.h
wi_stuff.c
wi_stuff.h
w_wad.c
w_wad.h
z_bmalloc.c
z_bmalloc.h
z_zone.c
z_zone.h
)
set(NET_CLIENT_SRC
d_client.c
)
if(HAVE_MMAP OR HAVE_CREATE_FILE_MAPPING)
set(WAD_SRC w_mmap.c)
else()
set(WAD_SRC w_memcache.c)
endif()
set(MUS2MID_SRC
memio.c
memio.h
mus2mid.c
mus2mid.h
)
set(SDLDOOM_SOURCES
SDL/i_joy.c
SDL/i_main.c
SDL/i_network.c
SDL/i_sound.c
SDL/i_sshot.c
SDL/i_system.c
SDL/i_video.c
)
set(PCSOUND_SOURCES
PCSOUND/pcsound.c
PCSOUND/pcsound.h
PCSOUND/pcsound_linux.c
PCSOUND/pcsound_sdl.c
PCSOUND/pcsound_win32.c
)
set(TEXTSCREEN_SOURCES
TEXTSCREEN/doomkeys.h
TEXTSCREEN/txt_main.h
TEXTSCREEN/txt_font.h
TEXTSCREEN/txt_largefont.h
TEXTSCREEN/txt_sdl.c
TEXTSCREEN/txt_sdl.h
TEXTSCREEN/txt_smallfont.h
)
set(DOOMMUSIC_SOURCES
MUSIC/dbopl.c
MUSIC/dbopl.h
MUSIC/dumbplayer.c
MUSIC/dumbplayer.h
MUSIC/flplayer.c
MUSIC/flplayer.h
MUSIC/madplayer.c
MUSIC/madplayer.h
MUSIC/midifile.c
MUSIC/midifile.h
MUSIC/musicplayer.h
MUSIC/opl.c
MUSIC/opl.h
MUSIC/oplplayer.c
MUSIC/oplplayer.h
MUSIC/opl_queue.c
MUSIC/opl_queue.h
MUSIC/portmidiplayer.c
MUSIC/portmidiplayer.h
MUSIC/alsaplayer.c
MUSIC/alsaplayer.h
MUSIC/vorbisplayer.c
MUSIC/vorbisplayer.h
)
set(EXTRA_FILES
r_drawcolpipeline.inl
r_drawcolumn.inl
r_drawflush.inl
r_drawspan.inl
)
set(PRBOOM_PLUS_SOURCES
${COMMON_SRC}
${NET_CLIENT_SRC}
${WAD_SRC}
${MUS2MID_SRC}
${SDLDOOM_SOURCES}
${PCSOUND_SOURCES}
${TEXTSCREEN_SOURCES}
${DOOMMUSIC_SOURCES}
${EXTRA_FILES}
)
function(AddGameExecutable TARGET SOURCES)
if(OPENGL_FOUND AND OPENGL_GLU_FOUND)
set(SOURCES
${SOURCES}
gl_clipper.c
gl_detail.c
gl_drawinfo.c
gl_fbo.c
gl_gamma.c
gl_hires.c
gl_hqresize.c
gl_intern.h
gl_light.c
gl_main.c
gl_map.c
gl_missingtexture.c
gl_opengl.c
gl_opengl.h
gl_preprocess.c
gl_shader.c
gl_shadow.c
gl_sky.c
gl_struct.h
gl_texture.c
gl_vertex.c
gl_wipe.c
)
endif()
if(WIN32)
add_definitions("-DUSE_WIN32_PCSOUND_DRIVER -DUSE_WINDOWS_LAUNCHER")
set(SOURCES
${SOURCES}
../ICONS/icons.rc
e6y_launcher.c
e6y_launcher.h
SDL/SDL_windows_main.c
)
if(MSVC)
set(SOURCES
${SOURCES}
WIN/win_opendir.c
WIN/win_opendir.h
)
endif()
endif()
add_definitions("-DUSE_EXPERIMENTAL_MUSIC")
add_executable(${TARGET} WIN32 ${SOURCES})
target_include_directories(${TARGET} PRIVATE
${SDL2_INCLUDE_DIRS}
${CMAKE_BINARY_DIR}
${CMAKE_CURRENT_SOURCE_DIR}
)
target_link_libraries(${TARGET} PRIVATE
${SDL2_LIBRARIES}
)
if(WIN32)
target_link_libraries(${TARGET} PRIVATE
winmm
comctl32
)
endif()
set_target_properties(${TARGET} PROPERTIES
RUNTIME_OUTPUT_DIRECTORY ${PRBOOM_OUTPUT_PATH}
)
if(SDL2_IMAGE_FOUND)
target_include_directories(${TARGET} PRIVATE ${SDL2_IMAGE_INCLUDE_DIRS})
target_link_libraries(${TARGET} PRIVATE ${SDL2_IMAGE_LIBRARIES})
endif()
if(SDL2_MIXER_FOUND)
target_include_directories(${TARGET} PRIVATE ${SDL2_MIXER_INCLUDE_DIRS})
target_link_libraries(${TARGET} PRIVATE ${SDL2_MIXER_LIBRARIES})
endif()
if(PCREPOSIX_FOUND)
target_include_directories(${TARGET} PRIVATE ${PCRE_INCLUDE_DIR})
target_link_libraries(${TARGET} PRIVATE ${PCREPOSIX_LIBRARIES})
endif()
ApplySDL2NetOptions(${TARGET})
if(ZLIB_FOUND)
target_include_directories(${TARGET} PRIVATE ${ZLIB_INCLUDE_DIRS})
target_link_libraries(${TARGET} PRIVATE ${ZLIB_LIBRARIES})
endif()
if(LIBMAD_FOUND)
target_include_directories(${TARGET} PRIVATE ${LIBMAD_INCLUDE_DIRS})
target_link_libraries(${TARGET} PRIVATE ${LIBMAD_LIBRARIES})
endif()
if(FLUIDSYNTH_FOUND)
target_include_directories(${TARGET} PRIVATE ${FLUIDSYNTH_INCLUDE_DIR})
target_link_libraries(${TARGET} PRIVATE ${FLUIDSYNTH_LIBRARIES})
endif()
if(DUMB_FOUND)
target_include_directories(${TARGET} PRIVATE ${DUMB_INCLUDE_DIR})
target_link_libraries(${TARGET} PRIVATE ${DUMB_LIBRARY})
endif()
if(VORBIS_FOUND)
target_include_directories(${TARGET} PRIVATE ${VORBIS_INCLUDE_DIR})
target_link_libraries(${TARGET} PRIVATE ${VORBISFILE_LIBRARY})
endif()
if(PortMidi_FOUND)
target_include_directories(${TARGET} PRIVATE ${PORTMIDI_INCLUDE_DIR})
target_link_libraries(${TARGET} PRIVATE ${PORTMIDI_LIBRARIES})
endif()
if(ALSA_FOUND)
target_include_directories(${TARGET} PRIVATE ${ALSA_INCLUDE_DIR})
target_link_libraries(${TARGET} PRIVATE ${ASOUND_LIBRARY})
endif()
add_dependencies(${TARGET} prboomwad)
if(MSVC)
set_target_properties(${TARGET} PROPERTIES
LINK_FLAGS "/MANIFEST:NO"
)
add_custom_command(TARGET ${TARGET} POST_BUILD
COMMAND "mt.exe" -manifest \"${CMAKE_CURRENT_SOURCE_DIR}\\..\\ICONS\\prboom-plus.exe.manifest\" -outputresource:\"$<TARGET_FILE:prboom-plus>\"\;\#1
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${WAD_DATA_PATH} $<TARGET_FILE_DIR:prboom-plus>
)
endif()
install(TARGETS ${TARGET} COMPONENT "Game executable" RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}")
if(OPENGL_FOUND AND OPENGL_GLU_FOUND)
target_compile_definitions(${TARGET} PRIVATE
GL_DOOM
USE_SHADERS
USE_FBO_TECHNIQUE
USE_GLU_IMAGESCALE
USE_GLU_MIPMAP
USE_GLU_TESS
)
target_link_libraries(${TARGET} PRIVATE
${OPENGL_gl_LIBRARY}
${OPENGL_glu_LIBRARY}
)
endif()
endfunction()
AddGameExecutable(prboom-plus "${PRBOOM_PLUS_SOURCES}")
# PrBoom-Plus server executable
option(BUILD_SERVER "Build PrBoom-Plus server executable" ON)
if(BUILD_SERVER AND SDL2_NET_FOUND)
set(PRBOOM_PLUS_GAME_SERVER_SOURCES
d_server.c
protocol.h
SDL/i_network.c
)
if(MSVC)
set(PRBOOM_PLUS_GAME_SERVER_SOURCES
${PRBOOM_PLUS_GAME_SERVER_SOURCES}
SDL/i_system.c
)
else()
set(PRBOOM_PLUS_GAME_SERVER_SOURCES
${PRBOOM_PLUS_GAME_SERVER_SOURCES}
POSIX/i_system.c
)
endif()
add_executable(prboom-plus-game-server ${PRBOOM_PLUS_GAME_SERVER_SOURCES})
target_include_directories(prboom-plus-game-server PRIVATE
${SDL2_INCLUDE_DIRS}
${CMAKE_BINARY_DIR}
${CMAKE_CURRENT_SOURCE_DIR}
)
target_link_libraries(prboom-plus-game-server PRIVATE
${SDL2_LIBRARIES}
)
set_target_properties(prboom-plus-game-server PROPERTIES
COMPILE_DEFINITIONS PRBOOM_SERVER
RUNTIME_OUTPUT_DIRECTORY ${PRBOOM_OUTPUT_PATH}
)
ApplySDL2NetOptions(prboom-plus-game-server)
install(TARGETS prboom-plus-game-server COMPONENT "Game server executable" RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}")
endif()
# PrBoom-Plus macOS launcher
if(APPLE)
set(LAUNCHER_SOURCES
MAC/ANSIString.m
MAC/ConsoleController.h
MAC/ConsoleController.m
MAC/DrawerButton.h
MAC/DrawerButton.m
MAC/FileButtonController.h
MAC/FileButtonController.m
MAC/LauncherApp.h
MAC/LauncherApp.m
MAC/LauncherMain.m
MAC/ResolutionDataSource.h
MAC/ResolutionDataSource.m
MAC/UKFileWatcher.h
MAC/UKKQueue.h
MAC/UKKQueue.m
MAC/UKMainThreadProxy.h
MAC/UKMainThreadProxy.m
MAC/WadViewController.h
MAC/WadViewController.m
)
set(LAUNCHER_RESOURCES
MAC/Launcher.icns
MAC/PrBoom.icns
MAC/PrBoom.sdef
)
set_source_files_properties(${LAUNCHER_RESOURCES} PROPERTIES
MACOSX_PACKAGE_LOCATION Resources
)
set(LAUNCHER_MAINMENU_RESOURCES
MAC/English.lproj/MainMenu.nib/classes.nib
MAC/English.lproj/MainMenu.nib/info.nib
MAC/English.lproj/MainMenu.nib/keyedobjects.nib
)
set_source_files_properties(${LAUNCHER_MAINMENU_RESOURCES} PROPERTIES
MACOSX_PACKAGE_LOCATION Resources/English.lproj/MainMenu.nib
)
add_executable(prboom-plus-launcher MACOSX_BUNDLE
${LAUNCHER_SOURCES}
${LAUNCHER_RESOURCES}
${LAUNCHER_MAINMENU_RESOURCES}
)
target_include_directories(prboom-plus-launcher PRIVATE
${CMAKE_BINARY_DIR}
${CMAKE_CURRENT_SOURCE_DIR}
)
set_target_properties(prboom-plus-launcher PROPERTIES
LINK_FLAGS "-framework Cocoa"
MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/MAC/Info.plist"
OUTPUT_NAME "Launcher"
RUNTIME_OUTPUT_DIRECTORY ${PRBOOM_OUTPUT_PATH}
XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY ""
)
add_dependencies(prboom-plus-launcher prboom-plus)
set(BUNDLE_GAME_EXECUTABLE prboom-plus)
add_custom_command(TARGET prboom-plus-launcher POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different $<TARGET_FILE:${BUNDLE_GAME_EXECUTABLE}> $<TARGET_FILE_DIR:prboom-plus-launcher>/PrBoom-Plus
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${WAD_DATA_PATH} $<TARGET_FILE_DIR:prboom-plus-launcher>
)
if(BUILD_SERVER AND SDL2_NET_FOUND)
add_dependencies(prboom-plus-launcher prboom-plus-game-server)
add_custom_command(TARGET prboom-plus-launcher POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different $<TARGET_FILE:prboom-plus-game-server> $<TARGET_FILE_DIR:prboom-plus-launcher>
)
endif()
endif()