ngunix/CMakeLists.txt

245 lines
7.6 KiB
Text
Raw Normal View History

cmake_minimum_required(VERSION 2.8)
project(Engoo)
if( MSVC )
# Statically link the run time and disable run time checks in debug mode.
string(REPLACE "/MD " " " CMAKE_CXX_FLAGS_RELEASE ${CMAKE_CXX_FLAGS_RELEASE} )
string(REPLACE "/MD " " " CMAKE_CXX_FLAGS_MINSIZEREL ${CMAKE_CXX_FLAGS_MINSIZEREL} )
string(REPLACE "/MD " " " CMAKE_CXX_FLAGS_RELWITHDEBINFO ${CMAKE_CXX_FLAGS_RELWITHDEBINFO} )
string(REPLACE "/MDd " " " CMAKE_CXX_FLAGS_DEBUG ${CMAKE_CXX_FLAGS_DEBUG} )
string(REPLACE "/MD " " " CMAKE_C_FLAGS_RELEASE ${CMAKE_C_FLAGS_RELEASE} )
string(REPLACE "/MD " " " CMAKE_C_FLAGS_MINSIZEREL ${CMAKE_C_FLAGS_MINSIZEREL} )
string(REPLACE "/MD " " " CMAKE_C_FLAGS_RELWITHDEBINFO ${CMAKE_C_FLAGS_RELWITHDEBINFO} )
string(REPLACE "/MDd " " " CMAKE_C_FLAGS_DEBUG ${CMAKE_C_FLAGS_DEBUG} )
string(REPLACE "/RTC1" "" CMAKE_CXX_FLAGS_DEBUG ${CMAKE_CXX_FLAGS_DEBUG} )
string(REPLACE "/RTC1" "" CMAKE_C_FLAGS_DEBUG ${CMAKE_C_FLAGS_DEBUG} )
set( CMAKE_C_FLAGS_RELEASE "/MT ${CMAKE_C_FLAGS_RELEASE}" )
set( CMAKE_C_FLAGS_MINSIZEREL "/MT ${CMAKE_C_FLAGS_MINSIZEREL}" )
set( CMAKE_C_FLAGS_RELWITHDEBINFO "/MT ${CMAKE_C_FLAGS_RELWITHDEBINFO}" )
set( CMAKE_C_FLAGS_DEBUG "/MTd ${CMAKE_C_FLAGS_DEBUG}" )
set( CMAKE_CXX_FLAGS_RELEASE "/MT ${CMAKE_CXX_FLAGS_RELEASE}" )
set( CMAKE_CXX_FLAGS_MINSIZEREL "/MT ${CMAKE_CXX_FLAGS_MINSIZEREL}" )
set( CMAKE_CXX_FLAGS_RELWITHDEBINFO "/MT ${CMAKE_CXX_FLAGS_RELWITHDEBINFO}" )
set( CMAKE_CXX_FLAGS_DEBUG "/MTd ${CMAKE_CXX_FLAGS_DEBUG}" )
add_definitions("/D_CRT_SECURE_NO_WARNINGS")
endif( MSVC )
# On for now until the ASM is made to work on newer compilers
option( NO_ASM "Disable assembly code" ON )
if( NOT NO_ASM )
if( MSVC )
add_subdirectory( gas2masm )
endif( MSVC )
set( ASM_SOURCE_EXTENSION .s )
if( UNIX )
set( ASM_OUTPUT_EXTENSION .o )
else( UNIX )
set( ASM_OUTPUT_EXTENSION .obj )
endif( UNIX )
MACRO( ADD_ASM_FILE indir infile )
set( ASM_OUTPUT_${infile} "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/Engoo.dir/${indir}/${infile}${ASM_OUTPUT_EXTENSION}" )
set( ASM_TEMP_${infile} "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/Engoo.dir/${indir}/${infile}.spp" )
set( ASM_TEMP2_${infile} "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/Engoo.dir/${indir}/${infile}.asm" )
if( MSVC )
add_custom_command( OUTPUT ${ASM_OUTPUT_${infile}}
COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/Engoo.dir/${indir}
COMMAND cl /EP "${CMAKE_CURRENT_SOURCE_DIR}/${indir}/${infile}${ASM_SOURCE_EXTENSION}" > "${ASM_TEMP_${infile}}"
COMMAND gas2masm < "${ASM_TEMP_${infile}}" > "${ASM_TEMP2_${infile}}"
COMMAND ml /c /Cp /coff "/Fo${ASM_OUTPUT_${infile}}" /Zm /Zi "${ASM_TEMP2_${infile}}"
MAIN_DEPENDENCY gas2masm )
else( MSVC )
add_custom_command( OUTPUT ${ASM_OUTPUT_${infile}}
COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/Engoo.dir/${indir}
COMMAND mingw32-gcc -x assembler-with-cpp -o "${ASM_OUTPUT_${infile}}" -c "${CMAKE_CURRENT_SOURCE_DIR}/${indir}/${infile}${ASM_SOURCE_EXTENSION}" )
endif( MSVC )
set( ASM_SOURCES ${ASM_SOURCES} "${ASM_OUTPUT_${infile}}" )
ENDMACRO( ADD_ASM_FILE )
endif( NOT NO_ASM )
if( WIN32 )
if( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" )
# CMake is not set up to compile and link rc files with GCC. :(
add_custom_command( OUTPUT WinQuake_vc.o
COMMAND windres -o WinQuake_vc.o -i ${CMAKE_CURRENT_SOURCE_DIR}/WinQuake/WinQuake_vc.rc
DEPENDS WinQuake/WinQuake_vc.rc )
set( SYSTEM_SOURCES ${SYSTEM_SOURCES} WinQuake_vc.o )
else( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" )
set( SYSTEM_SOURCES ${SYSTEM_SOURCES} WinQuake/WinQuake_vc.rc )
endif( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" )
find_path( DINPUT_INCLUDE_DIR dinput.h
PATHS ENV DXSDK_DIR
PATH_SUFFIXES Include )
if( NOT DINPUT_INCLUDE_DIR )
message( SEND_ERROR "Could not find DirectX header files" )
else( NOT DINPUT_INCLUDE_DIR )
include_directories( ${DINPUT_INCLUDE_DIR} )
endif( NOT DINPUT_INCLUDE_DIR )
endif( WIN32 )
include_directories("${CMAKE_CURRENT_SOURCE_DIR}/SciTech/include")
if( NOT NO_ASM )
ADD_ASM_FILE( asm d_draw )
ADD_ASM_FILE( asm d_draw16 )
ADD_ASM_FILE( asm d_parta )
ADD_ASM_FILE( asm d_polysa )
ADD_ASM_FILE( asm d_scana )
ADD_ASM_FILE( asm d_spr8 )
ADD_ASM_FILE( asm d_varsa )
ADD_ASM_FILE( asm math )
ADD_ASM_FILE( asm r_aclipa )
ADD_ASM_FILE( asm r_aliasa )
ADD_ASM_FILE( asm r_drawa )
ADD_ASM_FILE( asm r_edgea )
ADD_ASM_FILE( asm r_varsa )
ADD_ASM_FILE( asm snd_mixa )
ADD_ASM_FILE( asm surf16 )
ADD_ASM_FILE( asm surf8 )
ADD_ASM_FILE( asm surf8b )
ADD_ASM_FILE( asm surf8fst )
ADD_ASM_FILE( asm surf8g )
ADD_ASM_FILE( asm surf8r )
ADD_ASM_FILE( asm surf8rgb )
ADD_ASM_FILE( asm sys_wina )
ADD_ASM_FILE( asm worlda )
else( NOT NO_ASM )
add_definitions( -DNOASM )
endif( NOT NO_ASM )
set( NOT_COMPILED_SOURCE_FILES
# ASM files are included here so they show up in the project
asm/d_draw.s
asm/d_draw16.s
asm/d_parta.s
asm/d_polysa.s
asm/d_scana.s
asm/d_spr8.s
asm/d_varsa.s
asm/math.s
asm/r_aclipa.s
asm/r_aliasa.s
asm/r_drawa.s
asm/r_edgea.s
asm/r_varsa.s
asm/snd_mixa.s
asm/surf16.s
asm/surf8.s
asm/surf8b.s
asm/surf8fst.s
asm/surf8g.s
asm/surf8r.s
asm/surf8rgb.s
asm/sys_wina.s
asm/worlda.s
)
# Headers usually correspond to c files so we might as well just glob them
file( GLOB HEADER_SOURCES asm/*.h WinQuake/*.h midilib/*.h )
add_executable(engoo WIN32
${ASM_SOURCES}
${SYSTEM_SOURCES}
${HEADER_SOURCES}
${NOT_COMPILED_SOURCE_FILES}
midilib/midi.c
midilib/mpu401.c
midilib/music.c
WinQuake/bot.c
WinQuake/cd_win.c
WinQuake/chase.c
WinQuake/cl_demo.c
WinQuake/cl_input.c
WinQuake/cl_main.c
WinQuake/cl_parse.c
WinQuake/cl_tent.c
WinQuake/cmd.c
WinQuake/common.c
WinQuake/conproc.c
WinQuake/console.c
WinQuake/crc.c
WinQuake/cvar.c
WinQuake/d_edge.c
WinQuake/d_fill.c
WinQuake/d_init.c
WinQuake/d_modech.c
WinQuake/d_part.c
WinQuake/d_polyse.c
WinQuake/d_scan.c
WinQuake/d_sky.c
WinQuake/d_sprite.c
WinQuake/d_surf.c
WinQuake/d_vars.c
WinQuake/d_zpoint.c
WinQuake/draw.c
WinQuake/host.c
WinQuake/host_cmd.c
WinQuake/in_win.c
WinQuake/keys.c
WinQuake/mathlib.c
WinQuake/menu.c
WinQuake/model.c
WinQuake/model_common.c
WinQuake/net_dgrm.c
WinQuake/net_loop.c
WinQuake/net_main.c
WinQuake/net_vcr.c
WinQuake/net_win.c
WinQuake/net_wins.c
WinQuake/net_wipx.c
WinQuake/nvs_client.c
WinQuake/nvs_common.c
WinQuake/nvs_server.c
WinQuake/nvs_server_data.c
WinQuake/pr_cmds.c
WinQuake/pr_edict.c
WinQuake/pr_exec.c
WinQuake/r_aclip.c
WinQuake/r_alias.c
WinQuake/r_bsp.c
WinQuake/r_draw.c
WinQuake/r_edge.c
WinQuake/r_efrag.c
WinQuake/r_light.c
WinQuake/r_main.c
WinQuake/r_misc.c
WinQuake/r_part.c
WinQuake/r_sky.c
WinQuake/r_sprite.c
WinQuake/r_surf.c
WinQuake/r_vars.c
WinQuake/sbar.c
WinQuake/screen.c
WinQuake/snd_dma.c
WinQuake/snd_mem.c
WinQuake/snd_mix.c
WinQuake/snd_win.c
WinQuake/sv_main.c
WinQuake/sv_move.c
WinQuake/sv_phys.c
WinQuake/sv_user.c
WinQuake/sys_win.c
WinQuake/vid_win.c
WinQuake/view.c
WinQuake/wad.c
WinQuake/world.c
WinQuake/zone.c
)
set_source_files_properties( ${NOT_COMPILED_SOURCE_FILES} PROPERTIES HEADER_FILE_ONLY TRUE )
target_link_libraries( engoo "${CMAKE_CURRENT_SOURCE_DIR}/SciTech/lib/win32/vc/mgllt.lib" dxguid winmm wsock32 )
source_group("Assembler Files" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/asm/.+$" )
source_group("Midi" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/midilib/.+$" )
source_group("Resources Files" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/WinQuake/.+.rc$" )