# HG changeset patch # User koda # Date 1275746878 0 # Node ID a6b4f351d40080c81df09ad158aaf10a7c18e254 # Parent 208c5671b202f3e7c5f9da6e6bd3e663f45b77c0 now engine can be optionally built as library, there's an example wrapper of how to use it building server is now disabled by default, saves users some headaches diff -r 208c5671b202 -r a6b4f351d400 CMakeLists.txt --- a/CMakeLists.txt Fri Jun 04 20:50:24 2010 +0000 +++ b/CMakeLists.txt Sat Jun 05 14:07:58 2010 +0000 @@ -39,6 +39,14 @@ # MESSAGE(FATAL_ERROR "In-tree-build detected!") #ENDIF (${CMAKE_SOURCE_DIR} MATCHES ${CMAKE_BINARY_DIR}) +#set some safe values +IF(NOT WITH_SERVER) + SET(WITH_SERVER 0) +ENDIF(NOT WITH_SERVER) +IF(NOT BUILD_ENGINE_LIBRARY) + SET(BUILD_ENGINE_LIBRARY 0) +ENDIF(NOT BUILD_ENGINE_LIBRARY) + if(APPLE) set(CMAKE_FIND_FRAMEWORK "FIRST") @@ -92,17 +100,18 @@ set(CMAKE_OSX_SYSROOT "/Developer/SDKs/MacOSX10.4u.sdk/") if(current_macosx_version MATCHES "10.4") find_package(SDL_mixer REQUIRED) - set(pascal_compiler_flags_cmn "-k-dylib_file @loader_path/Frameworks/smpeg.framework/Versions/A/smpeg:${SDLMIXER_LIBRARY}/Versions/A/Frameworks/smpeg.framework/Versions/A/smpeg" ${pascal_compiler_flags_cmn}) - set(pascal_compiler_flags_cmn "-k-dylib_file @loader_path/Frameworks/mikmod.framework/Versions/A/mikmod:${SDLMIXER_LIBRARY}/Versions/A/Frameworks/mikmod.framework/Versions/A/mikmod" ${pascal_compiler_flags_cmn}) + set(pascal_compiler_flags_cmn "-k-dylib_file @loader_path/Frameworks/smpeg.framework/Versions/A/smpeg:${SDLMIXER_LIBRARY}/Versions/A/Frameworks/smpeg.framework/Versions/A/smpeg" "-k-dylib_file @loader_path/Frameworks/mikmod.framework/Versions/A/mikmod:${SDLMIXER_LIBRARY}/Versions/A/Frameworks/mikmod.framework/Versions/A/mikmod" ${pascal_compiler_flags_cmn}) set(CMAKE_C_FLAGS "-dylib_file @loader_path/Frameworks/smpeg.framework/Versions/A/smpeg:${SDLMIXER_LIBRARY}/Versions/A/Frameworks/smpeg.framework/Versions/A/smpeg -dylib_file @loader_path/Frameworks/mikmod.framework/Versions/A/mikmod:${SDLMIXER_LIBRARY}/Versions/A/Frameworks/mikmod.framework/Versions/A/mikmod") endif() else() set(CMAKE_OSX_SYSROOT "/Developer/SDKs/MacOSX${minimum_macosx}.sdk/") endif() - #1.set deployment target; 2.link with libsdlmain.a; 3.link with liblua.a (which requires readline) + #1.set deployment target; 2.link with libsdlmain.a (when building an executable); 3.link with liblua.a (which requires readline) set(pascal_compiler_flags_cmn "-k-macosx_version_min" "-k${minimum_macosx}" "-XR${CMAKE_OSX_SYSROOT}" ${pascal_compiler_flags_cmn}) - set(pascal_compiler_flags_cmn "-k${CMAKE_BINARY_DIR}/bin/libSDLmain.a" ${pascal_compiler_flags_cmn}) + if(NOT BUILD_ENGINE_LIBRARY) + set(pascal_compiler_flags_cmn "-k${CMAKE_BINARY_DIR}/bin/libSDLmain.a" ${pascal_compiler_flags_cmn}) + endif() set(pascal_compiler_flags_cmn "-k${CMAKE_BINARY_DIR}/bin/liblua.a" "-k-lreadline" ${pascal_compiler_flags_cmn}) else(APPLE) set(target_dir "bin") @@ -161,6 +170,7 @@ set(HEDGEWARS_PROTO_VER 32) if(WITH_SERVER) + message(STATUS "Server is going to be built! Make sure you have GHC installed") set(HAVE_NETSERVER true) add_subdirectory(gameServer) else(WITH_SERVER) diff -r 208c5671b202 -r a6b4f351d400 cocoaTouch/GameSetup.m --- a/cocoaTouch/GameSetup.m Fri Jun 04 20:50:24 2010 +0000 +++ b/cocoaTouch/GameSetup.m Sat Jun 05 14:07:58 2010 +0000 @@ -397,7 +397,7 @@ CGRect screenBounds = [[UIScreen mainScreen] bounds]; NSString *wSize = [[NSString alloc] initWithFormat:@"%d", (int) screenBounds.size.width]; NSString *hSize = [[NSString alloc] initWithFormat:@"%d", (int) screenBounds.size.height]; - const char **gameArgs = (const char**) malloc(sizeof(char *) * 8); + const char **gameArgs = (const char**) malloc(sizeof(char *) * 9); /* size_t size; @@ -435,6 +435,7 @@ gameArgs[5] = [[[self.systemSettings objectForKey:@"alternate"] stringValue] UTF8String]; //cAltDamage gameArgs[6] = [wSize UTF8String]; //cScreenHeight gameArgs[7] = [hSize UTF8String]; //cScreenWidth + gameArgs[8] = NULL; //recordFileName [wSize release]; [hSize release]; diff -r 208c5671b202 -r a6b4f351d400 cocoaTouch/MapConfigViewController.h --- a/cocoaTouch/MapConfigViewController.h Fri Jun 04 20:50:24 2010 +0000 +++ b/cocoaTouch/MapConfigViewController.h Sat Jun 05 14:07:58 2010 +0000 @@ -65,6 +65,6 @@ -(void) setLabelText:(NSString *)str; -(void) setButtonImage:(UIImage *)img; --(uint8_t *)engineProtocol:(NSInteger) port; +-(const uint8_t *)engineProtocol:(NSInteger) port; @end diff -r 208c5671b202 -r a6b4f351d400 cocoaTouch/MapConfigViewController.m --- a/cocoaTouch/MapConfigViewController.m Fri Jun 04 20:50:24 2010 +0000 +++ b/cocoaTouch/MapConfigViewController.m Sat Jun 05 14:07:58 2010 +0000 @@ -33,10 +33,10 @@ return SDLNet_TCP_Send(csd, [string UTF8String], length); } --(uint8_t *)engineProtocol:(NSInteger) port { +-(const uint8_t *)engineProtocol:(NSInteger) port { IPaddress ip; BOOL serverQuit = NO; - uint8_t map[128*32]; + static uint8_t map[128*32]; if (SDLNet_Init() < 0) { NSLog(@"SDLNet_Init: %s", SDLNet_GetError()); @@ -93,7 +93,7 @@ // select the port for IPC and launch the preview generation through engineProtocol: int port = randomPort(); - uint8_t *map = [self engineProtocol:port]; + const uint8_t *map = [self engineProtocol:port]; uint8_t mapExp[128*32*8]; // draw the buffer (1 pixel per component, 0= transparent 1= color) diff -r 208c5671b202 -r a6b4f351d400 cocoaTouch/otherSrc/CommodityFunctions.m --- a/cocoaTouch/otherSrc/CommodityFunctions.m Fri Jun 04 20:50:24 2010 +0000 +++ b/cocoaTouch/otherSrc/CommodityFunctions.m Sat Jun 05 14:07:58 2010 +0000 @@ -7,7 +7,6 @@ // #import "CommodityFunctions.h" -#import "SDL_uikitappdelegate.h" #import #import diff -r 208c5671b202 -r a6b4f351d400 hedgewars/CMakeLists.txt --- a/hedgewars/CMakeLists.txt Fri Jun 04 20:50:24 2010 +0000 +++ b/hedgewars/CMakeLists.txt Sat Jun 05 14:07:58 2010 +0000 @@ -11,24 +11,24 @@ #if the headers are not installed, the newer apis won't be activated find_file(sdlmixer_h SDL_mixer.h ${SDLMIXER_INCLUDE_DIR}) if(sdlmixer_h) -file(STRINGS ${sdlmixer_h} sdlmixer_version_tmp REGEX "SDL_MIXER_PATCHLEVEL[\t' ']+[0-9]+") -string(REGEX MATCH ".([0-9]+)" sdlmixer_version "${sdlmixer_version_tmp}") + file(STRINGS ${sdlmixer_h} sdlmixer_version_tmp REGEX "SDL_MIXER_PATCHLEVEL[\t' ']+[0-9]+") + string(REGEX MATCH ".([0-9]+)" sdlmixer_version "${sdlmixer_version_tmp}") -if(sdlmixer_version GREATER 9) -message(STATUS "Enabling enhanced SDL_Mixer calls") -set(pascal_compiler_flags_cmn "-dSDL_MIXER_NEWER" ${pascal_compiler_flags_cmn}) -endif() + if(sdlmixer_version GREATER 9) + message(STATUS "Enabling enhanced SDL_Mixer calls") + set(pascal_compiler_flags_cmn "-dSDL_MIXER_NEWER" ${pascal_compiler_flags_cmn}) + endif() endif() find_file(sdlimage_h SDL_image.h ${SDLIMAGE_INCLUDE_DIR}) if(sdlimage_h) -file(STRINGS ${sdlimage_h} sdlimage_version_tmp REGEX "SDL_IMAGE_PATCHLEVEL[\t' ']+[0-9]+") -string(REGEX MATCH ".([0-9]+)" sdlimage_version "${sdlimage_version_tmp}") + file(STRINGS ${sdlimage_h} sdlimage_version_tmp REGEX "SDL_IMAGE_PATCHLEVEL[\t' ']+[0-9]+") + string(REGEX MATCH ".([0-9]+)" sdlimage_version "${sdlimage_version_tmp}") -if(sdlimage_version GREATER 7) -message(STATUS "Enabling enhanced SDL_Image calls") -set(pascal_compiler_flags_cmn "-dSDL_IMAGE_NEWER" ${pascal_compiler_flags_cmn}) -endif() + if(sdlimage_version GREATER 7) + message(STATUS "Enabling enhanced SDL_Image calls") + set(pascal_compiler_flags_cmn "-dSDL_IMAGE_NEWER" ${pascal_compiler_flags_cmn}) + endif() endif() #SOURCE AND PROGRAMS SECTION @@ -78,6 +78,14 @@ ${CMAKE_CURRENT_BINARY_DIR}/config.inc ) +if(BUILD_ENGINE_LIBRARY) + message(STATUS "Engine will be built as library (experimental)") + set(hwengine_project ${hedgewars_SOURCE_DIR}/hedgewars/hwLibrary.pas) + set(engine_sources ${hwengine_project} PascalExports.pas ${engine_sources}) + set(pascal_compiler_flags_cmn "-dHWLIBRARY" "-k-no_order_inits" ${pascal_compiler_flags_cmn}) +endif(BUILD_ENGINE_LIBRARY) + + find_program(fpc_executable ${fpc_tryexe}) if(fpc_executable) @@ -133,8 +141,8 @@ #DEPENDECIES AND EXECUTABLES SECTION -IF(NOT APPLE) -#here is the standard command for any system +IF(NOT APPLE OR BUILD_ENGINE_LIBRARY) + #here is the command for standard executables or for shared library add_custom_command(OUTPUT "${EXECUTABLE_OUTPUT_PATH}/hwengine${CMAKE_EXECUTABLE_SUFFIX}" COMMAND "${pascal_compiler}" ARGS ${pascal_compiler_flags} @@ -145,7 +153,6 @@ #let's build sdlmain, which is absent from the framework find_package(SDL REQUIRED) -# set(CMAKE_OSX_ARCHITECTURES "x86_64;i386;ppc7400") set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin) include_directories(${SDL_INCLUDE_DIR}) diff -r 208c5671b202 -r a6b4f351d400 hedgewars/hwengine.pas --- a/hedgewars/hwengine.pas Fri Jun 04 20:50:24 2010 +0000 +++ b/hedgewars/hwengine.pas Sat Jun 05 14:07:58 2010 +0000 @@ -73,7 +73,7 @@ var isTerminated: boolean = false; alsoShutdownFrontend: boolean = false; {$IFDEF HWLIBRARY} -type arrayofpchar = array[0..7] of PChar; +type arrayofpchar = array[0..8] of PChar; procedure initEverything; procedure freeEverything; @@ -265,6 +265,7 @@ val(gameArgs[7], cScreenWidth); cInitHeight:= cScreenHeight; cInitWidth:= cScreenWidth; + recordFileName:= gameArgs[8]; {$ENDIF} for p:= Succ(Low(TPathType)) to High(TPathType) do diff -r 208c5671b202 -r a6b4f351d400 misc/wrapper.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/misc/wrapper.c Sat Jun 05 14:07:58 2010 +0000 @@ -0,0 +1,32 @@ +/* + This is an experimental main to use with hwLibary + - create the library with `cmake . -DBUILD_ENGINE_LIBRARY=1' and `make hwengine' + - compile this file with `gcc libhwLibrary.dylib libSDLmain.a wrapper.c -o wrapper -framework Cocoa -framework SDL' + (in Mac OS X, but this command line shouldn't be much different in other OSes; make sure to set the correct files/paths) + - this executable expect a save file "Save.hws" and the data folder "Data" to be in the same launching directory + */ + +#import +#import + +extern void Game (const char **); + +int SDL_main (int argc, const char **argv) { + + const char **gameArgs = (const char**) malloc(sizeof(char *) * 9); + + gameArgs[0] = "wrapper"; //UserNick + gameArgs[1] = "0"; //ipcPort + gameArgs[2] = "0"; //isSoundEnabled + gameArgs[3] = "0"; //isMusicEnabled + gameArgs[4] = "en.txt"; //cLocaleFName + gameArgs[5] = "0"; //cAltDamage + gameArgs[6] = "768"; //cScreenHeight + gameArgs[7] = "1024"; //cScreenHeight + gameArgs[8] = "Save.hws"; //recordFileName + + Game(gameArgs); + free(gameArgs); + + return 0; +}