Skip to content

Commit

Permalink
Merge pull request #233 from fkaa/windows-cmake
Browse files Browse the repository at this point in the history
Fix CMake support for MinGW, MSVC, and others
  • Loading branch information
fkaa committed Jan 9, 2016
2 parents f9d1447 + 357d4d2 commit 4710371
Show file tree
Hide file tree
Showing 18 changed files with 251 additions and 112 deletions.
1 change: 1 addition & 0 deletions .gitignore
Expand Up @@ -12,6 +12,7 @@

# windows build crap
winlibs/
dist/
*.dll

# windows crap i mean why the hell does it do this crap
Expand Down
93 changes: 57 additions & 36 deletions CMakeLists.txt
Expand Up @@ -2,62 +2,83 @@
cmake_minimum_required (VERSION 2.8.4)
project (iceball)

#set(CMAKE_BINARY_DIR build)
set(CMAKE_SOURCE_DIR src)
set(OUTDIR ../build)

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-strict-aliasing -g -Wall -Wextra -Wno-unused-variable -Wno-unused-parameter")
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})

IF(CMAKE_BUILD_TOOL MATCHES "(msdev|devenv|nmake)")
add_definitions(/W4) # warning level
add_definitions(/TP) # compile as c++
ELSEIF(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX)
add_definitions(-Wall -g) # keep debugging symbols even in Release builds
ENDIF()
if (CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX)
add_definitions(-fno-strict-aliasing -Wall -Wextra -g) # keep debugging symbols even in Release builds
endif ()

include_directories(include)
if (WIN32)
if (MSVC)
set_source_files_properties(filename.c PROPERTIES LANGUAGE CXX )
endif (MSVC)

include_directories("${CMAKE_CURRENT_SOURCE_DIR}/winlibs")
include_directories("${CMAKE_CURRENT_SOURCE_DIR}/winlibs/glew")
include_directories("${CMAKE_CURRENT_SOURCE_DIR}/winlibs/lua")
include_directories("${CMAKE_CURRENT_SOURCE_DIR}/winlibs/SDL")
include_directories("${CMAKE_CURRENT_SOURCE_DIR}/winlibs/zlib")

link_directories("${CMAKE_CURRENT_SOURCE_DIR}/winlibs")

endif (WIN32)

# here be sackit
link_directories("${CMAKE_CURRENT_SOURCE_DIR}/xlibinc")
include_directories("${CMAKE_CURRENT_SOURCE_DIR}/xlibinc")
if (MINGW)
set(CMAKE_PREFIX_PATH "dist/mingw/enet;dist/mingw/sdl2;dist/mingw/lua51;dist/mingw/sackit;dist/mingw/zlib;dist/mingw/glew" CACHE PATH "" FORCE)
elseif (MSVC)
set(CMAKE_PREFIX_PATH "dist/msvc/enet;dist/msvc/sdl2;dist/msvc/lua51;dist/msvc/sackit;dist/msvc/zlib;dist/msvc/glew" CACHE PATH "" FORCE)
endif ()

# find the hidden treasures
find_package(ENet REQUIRED)
find_package(PNG REQUIRED)
find_package(SDL2 REQUIRED)
find_package(zlib REQUIRED)
find_package(Lua REQUIRED)
find_package(sackit REQUIRED)
find_package(GLEW REQUIRED)
find_package(OpenGL REQUIRED)

# include the outcasts
include_directories(
${PNG_INCLUDE_DIRS}
${ENet_INCLUDE_DIRS}
${SACKIT_INCLUDE_DIR}
${ZLIB_INCLUDE_DIRS}
${GLEW_INCLUDE_DIRS}
${SDL2_INCLUDE_DIR}
${LUA_INCLUDE_DIR}
${ENet_INCLUDE_DIRS}
${sackit_INCLUDE_DIRS}
${ZLIB_INCLUDE_DIRS}
${GLEW_INCLUDE_DIRS}
${SDL2_INCLUDE_DIR}
${LUA_INCLUDE_DIR}
)

file(GLOB LUA_FILES src/lua*)
set(MAIN_FILES
src/dsp.c
src/img.c
src/json.c
src/logtxt.c
src/main.c
src/map.c
src/model.c
src/network.c
src/path.c
src/vecmath.c
src/wav.c
src/png.c
)

set(GL_FILES
src/gl/render.c
src/gl/render_img.c
)

add_subdirectory(src)
source_group(gl FILES ${GL_FILES})

source_group(lua FILES ${LUA_FILES})

add_custom_command(TARGET iceball POST_BUILD # Adds a post-build event to MyTest
COMMAND ${CMAKE_COMMAND} -E copy_if_different # which executes "cmake - E copy_if_different..."
"${LUA_LIBRARY}" # <--this is in-file
$<TARGET_FILE_DIR:MyTest>) # <--this is out-file path

# iceball target
add_executable(iceball ${MAIN_FILES} ${LUA_FILES} ${GL_FILES})
message("${ENet_LIBRARIES}\n${sackit_LIBRARY}\n${LUA_LIBRARIES}\n${OPENGL_LIBRARIES}\n${GLEW_LIBRARIES}\n${SDL2_LIBRARIES}")
target_link_libraries(iceball ${ENet_LIBRARIES} ${ZLIB_LIBRARIES} ${sackit_LIBRARY} ${LUA_LIBRARIES} ${SDL2_LIBRARIES} ${OPENGL_LIBRARIES} ${GLEW_LIBRARIES})

set_target_properties(iceball PROPERTIES COMPILE_DEFINITIONS "USE_OPENGL")

# iceball-dedi target
add_executable(iceball-dedi EXCLUDE_FROM_ALL ${MAIN_FILES} ${LUA_FILES})
target_link_libraries(iceball-dedi ${ENet_LIBRARIES} ${ZLIB_LIBRARIES} ${LUA_LIBRARIES} ${SDL_LIBRARY})
set_target_properties(iceball-dedi PROPERTIES COMPILE_DEFINITIONS "DEDI")

2 changes: 0 additions & 2 deletions cmake/FindENet.cmake
Expand Up @@ -19,7 +19,6 @@ FIND_PATH(ENet_INCLUDE_DIRS enet/enet.h
$ENV{ENETDIR}
/usr/local
/usr
"${CMAKE_CURRENT_SOURCE_DIR}/winlibs"
PATH_SUFFIXES include
)

Expand All @@ -29,7 +28,6 @@ FIND_LIBRARY(ENet_LIBRARY
$ENV{ENETDIR}
/usr/local
/usr
"${CMAKE_CURRENT_SOURCE_DIR}/winlibs"
PATH_SUFFIXES lib
)

Expand Down
9 changes: 9 additions & 0 deletions cmake/FindSDL2.cmake
Expand Up @@ -249,6 +249,15 @@ IF(SDL2_LIBRARY_TEMP)
SET(SDL2_FOUND "YES")
ENDIF(SDL2_LIBRARY_TEMP)

IF(SDL2_FOUND)
IF(WIN32)
SET(WINDOWS_SDL2_DEPENDENCIES "user32;gdi32;winmm;imm32;ole32;oleaut32;version;uuid")
SET(SDL2_LIBRARIES ${SDL2_LIBRARY} ${WINDOWS_SDL2_DEPENDENCIES})
ELSE(WIN32)
SET(SDL2_LIBRARIES ${SDL2_LIBRARY})
ENDIF(WIN32)
ENDIF (SDL2_FOUND)

INCLUDE(FindPackageHandleStandardArgs)

FIND_PACKAGE_HANDLE_STANDARD_ARGS(SDL2 REQUIRED_VARS SDL2_LIBRARY SDL2_INCLUDE_DIR)
35 changes: 35 additions & 0 deletions cmake/Findsackit.cmake
@@ -0,0 +1,35 @@
# - Try to find sackit
# Once done this will define
#
# SACKIT_FOUND - system has sackit
# sackit_INCLUDE_DIRS - the sackit include directory
# sackit_LIBRARIES - the libraries needed to use sackit
#
# $SACKITDIR is an environment variable used for finding sackit.
#

FIND_PATH(sackit_INCLUDE_DIRS sackit.h
PATHS
$ENV{SACKITDIR}
/usr/local
/usr
PATH_SUFFIXES include
)

FIND_LIBRARY(sackit_LIBRARY
NAMES sackit
PATHS
$ENV{SACKITDIR}
/usr/local
/usr
PATH_SUFFIXES lib
)

# handle the QUIETLY and REQUIRED arguments and set SACKIT_FOUND to TRUE if
# all listed variables are TRUE
INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(sackit DEFAULT_MSG sackit_LIBRARY sackit_INCLUDE_DIRS)

SET(sackit_LIBRARIES ${sackit_LIBRARY})

MARK_AS_ADVANCED(sackit_LIBRARY sackit_LIBRARIES sackit_INCLUDE_DIRS)
68 changes: 46 additions & 22 deletions include/common.h
Expand Up @@ -44,6 +44,23 @@

//define RENDER_FACE_COUNT 2

#ifdef WIN32
//#define close(x) closesocket(x)

// TODO: remove?
#if _MSC_VER_
int bind(SOCKET s, void* name, int namelen)
{
return bind(s, (const sockaddr*)name, namelen);
}
int setsockopt(SOCKET s, int level, int optname, void* optval, int optlen)
{
return setsockopt(s, level, optname, (const char*)optval, optlen);
}

#endif
#endif

#ifndef _MSC_VER
#define PACK_START
#define PACK_END
Expand All @@ -58,7 +75,6 @@
#endif
#include <stdint.h>
#else
#define __attribute__(x)
#define PACK_START __pragma( pack(push, 1) )
#define PACK_END __pragma( pack(pop) )
typedef signed __int8 int8_t;
Expand All @@ -69,11 +85,23 @@ typedef signed __int32 int32_t;
typedef unsigned __int32 uint32_t;
typedef signed __int64 int64_t;
typedef unsigned __int64 uint64_t;
#if (_MSC_VER != 1900)
#define snprintf sprintf_s
#endif
#define _USE_MATH_DEFINES //M_PI and whatnot from math.h
#pragma warning( disable: 4200 4244 4996)
#endif

#if defined(_MSC_VER)
#define ALIGNED_(x) __declspec(align(x))
#else
#if defined(__GNUC__)
#define ALIGNED_(x) __attribute__ ((aligned(x)))
#endif
#endif

#define ALIGNED_TYPE_(t,x) typedef t ALIGNED_(x)

#ifdef _OPENMP
#include <omp.h>
#endif
Expand Down Expand Up @@ -183,28 +211,24 @@ enum
#define SCREEN_BSWAP_32_ENDIAN
#endif

#ifdef __SSE__
__attribute__((aligned(16)))
#endif
PACK_START
typedef union vec4f
#pragma pack(push, 1)
ALIGNED_TYPE_(union, 16) vec4f
{
struct { float x,y,z,w; } __attribute__((__packed__)) p;
struct { float x,y,z,w; } p;
float a[4];
#ifdef __SSE__
#if defined(__SSE__) && !defined(_MSC_VER)
float __attribute__ ((vector_size (16))) m;
#endif
} __attribute__((__packed__)) vec4f_t;
} vec4f_t;
#pragma pack(pop)

#ifdef __SSE__
__attribute__((aligned(16)))
#endif
typedef struct matrix
#pragma pack(push, 1)
ALIGNED_TYPE_(struct, 16) matrix
{
//column-major!
vec4f_t c[4];
} __attribute__((__packed__)) matrix_t;
PACK_END
} matrix_t;
#pragma pack(pop)

typedef struct camera
{
Expand All @@ -215,14 +239,14 @@ typedef struct camera
float mpx,mpy,mpz,mppad;
} camera_t;

PACK_START
#pragma pack(push, 1)
typedef struct model_point
{
uint16_t radius;
int16_t x,y,z;
uint8_t b,g,r,resv1;
} __attribute__((__packed__)) model_point_t;
PACK_END
} model_point_t;
#pragma pack(pop)

typedef struct model model_t;
typedef struct model_bone
Expand Down Expand Up @@ -293,8 +317,8 @@ typedef struct fbo
} fbo_t;


PACK_START
// source: http://paulbourke.net/dataformats/tga/
#pragma pack(push, 1)
typedef struct img_tgahead
{
uint8_t idlen;
Expand All @@ -309,8 +333,8 @@ typedef struct img_tgahead
uint16_t height;
uint8_t bpp;
uint8_t flags;
} __attribute__((__packed__)) img_tgahead_t;
PACK_END
} img_tgahead_t;
#pragma pack(pop)

typedef struct img
{
Expand Down Expand Up @@ -509,7 +533,7 @@ enum
// dsp.c
float interp_linear(float y0, float y1, float x);
float interp_cubic(float y0, float y1, float y2, float y3, float x);
float interp_hermite6p(float y0, float y1, float y2, float y3,
float interp_hermite6p(float y0, float y1, float y2, float y3,
float y4, float y5, float x);
float frequency2wavelength(int rate, float frequency);
float wavelength2frequency(int rate, float wavelength);
Expand Down
21 changes: 0 additions & 21 deletions src/CMakeLists.txt

This file was deleted.

2 changes: 1 addition & 1 deletion src/gl/render.c
Expand Up @@ -1730,7 +1730,7 @@ void render_vertex_array(uint32_t *pixels, int width, int height, int pitch, cam
{
glClientActiveTexture(GL_TEXTURE0 + i);
glActiveTexture(GL_TEXTURE0 + i);
glTexCoordPointer(va->texcoord_size[i%va->texcoord_count], GL_FLOAT, sizeof(float)*va->stride, ((void *)0+sizeof(float)*va->texcoord_offs[i%va->texcoord_count]));
glTexCoordPointer(va->texcoord_size[i%va->texcoord_count], GL_FLOAT, sizeof(float)*va->stride, (void *)(sizeof(float)*va->texcoord_offs[i%va->texcoord_count]));
}

if(gl_shaders)
Expand Down
6 changes: 5 additions & 1 deletion src/gl/render_img.c
Expand Up @@ -432,9 +432,13 @@ void render_blit_img_toimg(uint32_t *pixels, int width, int height, int pitch,
__m128i xmm_src1_alpha0 = _mm_unpackhi_epi16(xmm_src1_alpha,xmm_src1_alpha);
__m128i xmm_src1_alpha1 = _mm_unpacklo_epi16(xmm_src1_alpha,xmm_src1_alpha);

#ifdef _MSC_VER
xmm_src0_alpha = _mm_castps_si128(_mm_shuffle_ps(_mm_castsi128_ps(xmm_src0_alpha1),_mm_castsi128_ps(xmm_src0_alpha0),0xFF));
xmm_src1_alpha = _mm_castps_si128(_mm_shuffle_ps(_mm_castsi128_ps(xmm_src1_alpha1),_mm_castsi128_ps(xmm_src1_alpha0),0xFF));
#else
xmm_src0_alpha = (__m128i)_mm_shuffle_ps((__m128)xmm_src0_alpha1,(__m128)xmm_src0_alpha0,0xFF);
xmm_src1_alpha = (__m128i)_mm_shuffle_ps((__m128)xmm_src1_alpha1,(__m128)xmm_src1_alpha0,0xFF);

#endif

// Found some instructions which should speed this up.
// NOTE: actually runs at the same damn speed... maybe even worse.
Expand Down

0 comments on commit 4710371

Please sign in to comment.