Skip to content

Commit

Permalink
SDL compiles and runs on Linux
Browse files Browse the repository at this point in the history
  • Loading branch information
xLAva committed Aug 3, 2017
1 parent 4837546 commit 9527e50
Show file tree
Hide file tree
Showing 13 changed files with 7,319 additions and 165 deletions.
75 changes: 71 additions & 4 deletions CMakeLists.txt
Expand Up @@ -12,6 +12,8 @@ cmake_minimum_required(VERSION 2.6)

project(jk2)

set(USE_SDL2 1)

set(PLATFORM_WIN32 0)
set(PLATFORM_MACOS 0)
set(PLATFORM_LINUX 0)
Expand Down Expand Up @@ -110,12 +112,77 @@ set(STARWARS_SOURCE_FILES
)


if(PLATFORM_LINUX)
file(GLOB SRC_LINUX ${PROJECT_SOURCE_DIR}/code/linux/*.cpp ${PROJECT_SOURCE_DIR}/code/linux/*.h)
source_group(linux FILES ${SRC_LINUX})

# now handle platfom specific stuff
if(USE_SDL2)

# platform independend sdl stuff
set(SSF_SDL2 ${SSF_SDL2}
${PROJECT_SOURCE_DIR}/code/sdl/sdl_local.h
${PROJECT_SOURCE_DIR}/code/sdl/sdl_glw.h
${PROJECT_SOURCE_DIR}/code/sdl/sdl_gamma.cpp
${PROJECT_SOURCE_DIR}/code/sdl/sdl_glimp.cpp
${PROJECT_SOURCE_DIR}/code/sdl/sdl_qgl.cpp
${PROJECT_SOURCE_DIR}/code/sdl/sdl_snddma.cpp
)

source_group(sdl FILES ${SSF_SDL2})
set(STARWARS_SOURCE_FILES ${STARWARS_SOURCE_FILES} ${SSF_SDL2})

set(CUSTOM_COMPILE_FLAGS_ALL "${CUSTOM_COMPILE_FLAGS_ALL} -DUSE_SDL2")

if(PLATFORM_WIN32)

set(SSF_WIN32 ${SSF_WIN32}
${PROJECT_SOURCE_DIR}/code/win32/win_main.cpp
${PROJECT_SOURCE_DIR}/code/win32/win_shared.cpp
${PROJECT_SOURCE_DIR}/code/win32/win_syscon.cpp
)

include_directories("${EXTERNAL_LIB_PATH}/SDL2-2.0.3/include")

add_library(imp_sdl2 STATIC IMPORTED)
set_property(TARGET imp_sdl2 PROPERTY IMPORTED_LOCATION "${EXTERNAL_LIB_PATH}/SDL2-2.0.3/lib/x86/SDL2.lib")

set(EXTRA_LIBS ${EXTRA_LIBS} imp_sdl2)
elseif(PLATFORM_MACOS)
# mac sdl

set(SSF_MACOS ${SSF_MACOS}
${PROJECT_SOURCE_DIR}/code/sdl/sdl_console.cpp
${PROJECT_SOURCE_DIR}/code/mac/mac_main_sdl.cpp
)


include_directories( /Library/Frameworks )
FIND_LIBRARY(SDL2_LIBRARY SDL2)
MARK_AS_ADVANCED (SDL2_LIBRARY)
set(EXTRA_LIBS ${EXTRA_LIBS} ${SDL2_LIBRARY})

else()
# linux sdl

set(SSF_LINUX ${SSF_LINUX}
${PROJECT_SOURCE_DIR}/code/sdl/sdl_console.cpp
${PROJECT_SOURCE_DIR}/code/linux/linux_main.cpp
)

set(EXTRA_LIBS ${EXTRA_LIBS} SDL2)
endif()
else()
if(PLATFORM_LINUX)
file(GLOB SRC_LINUX ${PROJECT_SOURCE_DIR}/code/linux/*.cpp ${PROJECT_SOURCE_DIR}/code/linux/*.h)
source_group(linux FILES ${SRC_LINUX})
endif()
endif()



# add platform specific files
source_group(win32 FILES ${SSF_WIN32})
source_group(linux FILES ${SSF_LINUX})
source_group(mac FILES ${SSF_MACOS})
set(STARWARS_SOURCE_FILES ${STARWARS_SOURCE_FILES} ${SSF_WIN32} ${SSF_LINUX} ${SSF_MACOS})
set(STARWARS_SOURCE_FILES ${STARWARS_SOURCE_FILES} ${SRC_WIN32} ${SRC_LINUX})

if(MSVC)
Expand All @@ -140,7 +207,7 @@ else()
set(CUSTOM_COMPILE_FLAGS_ALL "${CUSTOM_COMPILE_FLAGS_ALL} -DLINUX -DNDEBUG")

set(DISABLE_WARNINGS_C "${DISABLE_WARNINGS_C} -Wno-cpp")
set(DISABLE_WARNINGS_CXX "${DISABLE_WARNINGS_CXX} -Wno-cpp")
set(DISABLE_WARNINGS_CXX "${DISABLE_WARNINGS_CXX} -Wno-cpp -std=c++98")

endif()

Expand Down
98 changes: 0 additions & 98 deletions code/linux/linux_glimp.cpp
Expand Up @@ -1205,104 +1205,6 @@ SMP acceleration
===========================================================
*/

sem_t renderCommandsEvent;
sem_t renderCompletedEvent;
sem_t renderActiveEvent;

void (*glimpRenderThread)( void );

void* GLimp_RenderThreadWrapper( void *stub ) {
glimpRenderThread();

#if 0
// unbind the context before we die
qglXMakeCurrent(dpy, None, NULL);
#endif
}
/*
=======================
GLimp_SpawnRenderThread
=======================
*/
pthread_t renderThreadHandle;
qboolean GLimp_SpawnRenderThread( void (*function)( void ) ) {

sem_init( &renderCommandsEvent, 0, 0 );
sem_init( &renderCompletedEvent, 0, 0 );
sem_init( &renderActiveEvent, 0, 0 );

glimpRenderThread = function;

if (pthread_create( &renderThreadHandle, NULL,
GLimp_RenderThreadWrapper, NULL)) {
return qfalse;
}

return qtrue;
}

static void *smpData;
static int glXErrors;

void *GLimp_RendererSleep( void ) {
void *data;

#if 0
if ( !qglXMakeCurrent(dpy, None, NULL) ) {
glXErrors++;
}
#endif

// ResetEvent( renderActiveEvent );

// after this, the front end can exit GLimp_FrontEndSleep
sem_post ( &renderCompletedEvent );

sem_wait ( &renderCommandsEvent );

#if 0
if ( !qglXMakeCurrent(dpy, win, ctx) ) {
glXErrors++;
}
#endif

// ResetEvent( renderCompletedEvent );
// ResetEvent( renderCommandsEvent );

data = smpData;

// after this, the main thread can exit GLimp_WakeRenderer
sem_post ( &renderActiveEvent );

return data;
}


void GLimp_FrontEndSleep( void ) {
sem_wait ( &renderCompletedEvent );

#if 0
if ( !qglXMakeCurrent(dpy, win, ctx) ) {
glXErrors++;
}
#endif
}


void GLimp_WakeRenderer( void *data ) {
smpData = data;

#if 0
if ( !qglXMakeCurrent(dpy, None, NULL) ) {
glXErrors++;
}
#endif

// after this, the renderer can continue through GLimp_RendererSleep
sem_post( &renderCommandsEvent );

sem_wait( &renderActiveEvent );
}



Expand Down
132 changes: 116 additions & 16 deletions code/linux/linux_main.cpp
Expand Up @@ -23,7 +23,7 @@
#include <sys/vt.h>
#include <stdarg.h>
#include <pthread.h>
#include <semaphore.h>
#include <semaphore.h>
#include <algorithm>

#include <dlfcn.h>
Expand Down Expand Up @@ -238,21 +238,21 @@ cvar_t *sys_waitNextEvent;
DIRECTORY SCANNING
==============================================================
*/


int alphasortIgnoreCase(const struct dirent ** a, const struct dirent **b)
{
std::string aName = (*a)->d_name;
std::string bName = (*b)->d_name;

std::transform(aName.begin(), aName.end(), aName.begin(), ::tolower);
std::transform(bName.begin(), bName.end(), bName.begin(), ::tolower);

return aName.compare(bName);

}

*/


int alphasortIgnoreCase(const struct dirent ** a, const struct dirent **b)
{
std::string aName = (*a)->d_name;
std::string bName = (*b)->d_name;

std::transform(aName.begin(), aName.end(), aName.begin(), ::tolower);
std::transform(bName.begin(), bName.end(), bName.begin(), ::tolower);

return aName.compare(bName);

}


#define MAX_FOUND_FILES 0x1000

Expand Down Expand Up @@ -380,6 +380,106 @@ char *Sys_GetClipboardData(void)
}



sem_t renderCommandsEvent;
sem_t renderCompletedEvent;
sem_t renderActiveEvent;

void (*glimpRenderThread)( void );

void* GLimp_RenderThreadWrapper( void *stub ) {
glimpRenderThread();

#if 0
// unbind the context before we die
qglXMakeCurrent(dpy, None, NULL);
#endif
}
/*
=======================
GLimp_SpawnRenderThread
=======================
*/
pthread_t renderThreadHandle;
qboolean GLimp_SpawnRenderThread( void (*function)( void ) ) {

sem_init( &renderCommandsEvent, 0, 0 );
sem_init( &renderCompletedEvent, 0, 0 );
sem_init( &renderActiveEvent, 0, 0 );

glimpRenderThread = function;

if (pthread_create( &renderThreadHandle, NULL,
GLimp_RenderThreadWrapper, NULL)) {
return qfalse;
}

return qtrue;
}

static void *smpData;
static int glXErrors;

void *GLimp_RendererSleep( void ) {
void *data;

#if 0
if ( !qglXMakeCurrent(dpy, None, NULL) ) {
glXErrors++;
}
#endif

// ResetEvent( renderActiveEvent );

// after this, the front end can exit GLimp_FrontEndSleep
sem_post ( &renderCompletedEvent );

sem_wait ( &renderCommandsEvent );

#if 0
if ( !qglXMakeCurrent(dpy, win, ctx) ) {
glXErrors++;
}
#endif

// ResetEvent( renderCompletedEvent );
// ResetEvent( renderCommandsEvent );

data = smpData;

// after this, the main thread can exit GLimp_WakeRenderer
sem_post ( &renderActiveEvent );

return data;
}


void GLimp_FrontEndSleep( void ) {
sem_wait ( &renderCompletedEvent );

#if 0
if ( !qglXMakeCurrent(dpy, win, ctx) ) {
glXErrors++;
}
#endif
}


void GLimp_WakeRenderer( void *data ) {
smpData = data;

#if 0
if ( !qglXMakeCurrent(dpy, None, NULL) ) {
glXErrors++;
}
#endif

// after this, the renderer can continue through GLimp_RendererSleep
sem_post( &renderCommandsEvent );

sem_wait( &renderActiveEvent );
}

/*
========================================================================
Expand Down

0 comments on commit 9527e50

Please sign in to comment.