From e980595b5bf5e175fd8137d1daa519e9c3893489 Mon Sep 17 00:00:00 2001 From: Braden Obrzut Date: Fri, 18 Apr 2014 23:31:13 -0400 Subject: [PATCH] Added CMake project which works with at least Visual Studio 2005 - 2013 (I assume earlier versions work since it's fairly simple) and with a little bit of hacking MinGW. Defaults to building with NO_ASM since the ASM seems to only work with VC6 (either that or some flag is missing from this project, but I can't tell since I don't have VC6). --- CMakeLists.txt | 244 ++++++++++++++++++++++++++++++++++++++++ WinQuake/d_scan.c | 2 +- WinQuake/host.c | 2 +- WinQuake/mathlib.h | 2 +- WinQuake/net_wipx.c | 2 + WinQuake/quakedef.h | 2 +- WinQuake/sys_win.c | 11 +- WinQuake/vid_win.c | 2 +- gas2masm/CMakeLists.txt | 1 + midilib/midi.c | 4 +- 10 files changed, 264 insertions(+), 8 deletions(-) create mode 100644 CMakeLists.txt create mode 100644 gas2masm/CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..59e7509 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,244 @@ +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$" ) diff --git a/WinQuake/d_scan.c b/WinQuake/d_scan.c index 5df2076..cee1621 100644 --- a/WinQuake/d_scan.c +++ b/WinQuake/d_scan.c @@ -1450,7 +1450,7 @@ void D_DrawSpans16_C (espan_t *pspan) //qbism up it from 8 to 16. This + unroll // int fogcount, fogcount2; // leilei - fog int beep = 512; int boop = 512; - int feg; + int feg = 0; sstep = 0; // keep compiler happy tstep = 0; // ditto diff --git a/WinQuake/host.c b/WinQuake/host.c index bde0985..b343867 100644 --- a/WinQuake/host.c +++ b/WinQuake/host.c @@ -1168,7 +1168,7 @@ byte colorthis; void Palette_Init (void) { loadedfile_t *fileinfo; // 2001-09-12 Returning information about loaded file by Maddes - int pre100; + int pre100 = 0; diff --git a/WinQuake/mathlib.h b/WinQuake/mathlib.h index 1d481da..0c59b3b 100644 --- a/WinQuake/mathlib.h +++ b/WinQuake/mathlib.h @@ -92,7 +92,7 @@ float anglemod(float a); int _mathlib_temp_int1, _mathlib_temp_int2, _mathlib_temp_int3; float _mathlib_temp_float1, _mathlib_temp_float2, _mathlib_temp_float3; vec3_t _mathlib_temp_vec1, _mathlib_temp_vec2, _mathlib_temp_vec3; -#ifndef _WIN32 +#if !defined _WIN32 || defined __MINGW32__ #define min(val1,val2) (val2 < val1 ? val2 : val1) #define max(val1,val2) (val2 > val1 ? val2 : val1) #endif diff --git a/WinQuake/net_wipx.c b/WinQuake/net_wipx.c index e494cb9..19fe573 100644 --- a/WinQuake/net_wipx.c +++ b/WinQuake/net_wipx.c @@ -24,6 +24,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include #include "net_wipx.h" +#define errno errorno + extern cvar_t *hostname; #define MAXHOSTNAMELEN 256 diff --git a/WinQuake/quakedef.h b/WinQuake/quakedef.h index d64608e..d30050b 100644 --- a/WinQuake/quakedef.h +++ b/WinQuake/quakedef.h @@ -212,7 +212,7 @@ void VID_UnlockBuffer (void); #endif -#if defined __i386__ // && !defined __sun__ +#if defined __i386__ && !defined NOASM // && !defined __sun__ #define id386 1 #define id386poly 0 #define id386rgb 0 diff --git a/WinQuake/sys_win.c b/WinQuake/sys_win.c index 718f542..dfb9f24 100644 --- a/WinQuake/sys_win.c +++ b/WinQuake/sys_win.c @@ -283,7 +283,7 @@ void Sys_MakeCodeWriteable (unsigned long startaddr, unsigned long length) } -#ifndef _M_IX86 +#ifdef NOASM void Sys_SetFPCW (void) { @@ -616,6 +616,15 @@ void Sys_InitFloatTime (void) lastcurtime = curtime; } +#if !id386 +void Sys_HighFPPrecision (void) +{ +} + +void Sys_LowFPPrecision (void) +{ +} +#endif char *Sys_ConsoleInput (void) { diff --git a/WinQuake/vid_win.c b/WinQuake/vid_win.c index cfa67ad..4f0a150 100644 --- a/WinQuake/vid_win.c +++ b/WinQuake/vid_win.c @@ -360,7 +360,7 @@ void VID_ForceLockState (int lk) {} #define MAX_MODE_LIST 36 #define VID_ROW_SIZE 3 -extern int Minimized; +extern qboolean Minimized; HWND WINAPI InitializeWindow (HINSTANCE hInstance, int nCmdShow); diff --git a/gas2masm/CMakeLists.txt b/gas2masm/CMakeLists.txt new file mode 100644 index 0000000..a61e0d8 --- /dev/null +++ b/gas2masm/CMakeLists.txt @@ -0,0 +1 @@ +add_executable( gas2masm gas2masm.c ) diff --git a/midilib/midi.c b/midilib/midi.c index 2522300..4cbf9dd 100644 --- a/midilib/midi.c +++ b/midilib/midi.c @@ -819,7 +819,7 @@ static void _MIDI_SetChannelVolume Sets the volume of the specified midi channel. ---------------------------------------------------------------------*/ -int USRHOOKS_GetMem(char **ptr, unsigned long size ) +int USRHOOKS_GetMem(void **ptr, unsigned long size ) { *ptr = malloc(size); @@ -830,7 +830,7 @@ int USRHOOKS_GetMem(char **ptr, unsigned long size ) } -int USRHOOKS_FreeMem(char *ptr) +int USRHOOKS_FreeMem(void *ptr) { free(ptr); return( USRHOOKS_Ok);