From 6393955683a4b687770d93f838b79b96f4f6dba8 Mon Sep 17 00:00:00 2001 From: Andrew D'Addesio Date: Sat, 20 Oct 2012 13:23:42 -0500 Subject: [PATCH] Fixed the build system for Linux --- .gitignore | 8 +++--- CMakeLists.txt | 42 +++++++++++++++++++++------- Client/CMakeLists.txt | 5 ++-- Client/Client.cpp | 6 ++-- Libraries/FileHandler/CMakeLists.txt | 13 +++++---- Libraries/FileHandler/Image.cpp | 42 ++++++++++++++++++++++++---- Libraries/libgldemo/wgl.c | 5 ++-- Libraries/libvitaboy/CMakeLists.txt | 17 +++++------ Tools/FARDive/CMakeLists.txt | 2 +- Tools/iff2html/CMakeLists.txt | 4 +-- Tools/tsoscan/CMakeLists.txt | 2 +- 11 files changed, 103 insertions(+), 43 deletions(-) diff --git a/.gitignore b/.gitignore index ff95014..34366a0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,9 +1,9 @@ -# build system +# Build system _build/ _deps/ _dist/ -# objects +# Objects *.o *.lo *.slo @@ -12,7 +12,7 @@ _dist/ *.pch *.gch -# libraries +# Libraries *.a *.la *.lai @@ -22,7 +22,7 @@ _dist/ *.so.* *.dylib -# binaries +# Binaries *.exe *.app diff --git a/CMakeLists.txt b/CMakeLists.txt index 6a4c6d2..0b0483e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -111,24 +111,46 @@ set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/_dist/${DIST_NAME}") set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/_dist/${DIST_NAME}") if(WIN32) - set(FREETYPE_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/_deps/freetype/include ${CMAKE_SOURCE_DIR}/_deps/freetype/include/freetype/config) - set(LIBJPEGTURBO_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/_deps/libjpeg-turbo) - set(LIBMPG123_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/_deps/libmpg123) - set(LIBPNG_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/_deps/libpng) - set(LIBPQ_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/_deps/libpq ${CMAKE_SOURCE_DIR}/_deps/libpq/include ${CMAKE_SOURCE_DIR}/_deps/libpq/include/port/win32 ${CMAKE_SOURCE_DIR}/_deps/libpq/include/port) - set(ZLIB_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/_deps/zlib) - + set(FREETYPE_INCLUDE ${CMAKE_SOURCE_DIR}/_deps/freetype/include ${CMAKE_SOURCE_DIR}/_deps/freetype/include/freetype/config) + set(LIBJPEGTURBO_INCLUDE ${CMAKE_SOURCE_DIR}/_deps/libjpeg-turbo) + set(LIBMPG123_INCLUDE ${CMAKE_SOURCE_DIR}/_deps/libmpg123) + set(LIBPNG_INCLUDE ${CMAKE_SOURCE_DIR}/_deps/libpng) + set(LIBPQ_INCLUDE ${CMAKE_SOURCE_DIR}/_deps/libpq ${CMAKE_SOURCE_DIR}/_deps/libpq/include ${CMAKE_SOURCE_DIR}/_deps/libpq/include/port/win32 ${CMAKE_SOURCE_DIR}/_deps/libpq/include/port) + set(ZLIB_INCLUDE ${CMAKE_SOURCE_DIR}/_deps/zlib) + add_subdirectory(_deps/freetype) add_subdirectory(_deps/libjpeg-turbo) add_subdirectory(_deps/libmpg123) add_subdirectory(_deps/libpng) add_subdirectory(_deps/libpq) add_subdirectory(_deps/zlib) + + set(FREETYPE_LINK freetype_shared) + set(LIBJPEG_LINK jpegturbo_static) + set(LIBMPG123_LINK libmpg123_static) + set(LIBPNG_LINK libpng_static) + set(LIBPQ_LINK libpq_shared) + set(ZLIB_LINK zlib_static) +else() + set(FREETYPE_LINK freetype) + set(LIBJPEG_LINK jpeg) + set(LIBMPG123_LINK mpg123) + set(LIBPNG_LINK png) + set(LIBPQ_LINK pq) + set(ZLIB_LINK z) endif() -set(FILEHANDLER_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/Libraries/FileHandler) -set(LIBGLDEMO_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/Libraries/libgldemo) -set(LIBVITABOY_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/Libraries/libvitaboy) +set(FILEHANDLER_INCLUDE ${CMAKE_SOURCE_DIR}/Libraries/FileHandler) +set(LIBGLDEMO_INCLUDE ${CMAKE_SOURCE_DIR}/Libraries/libgldemo) +set(LIBVITABOY_INCLUDE ${CMAKE_SOURCE_DIR}/Libraries/libvitaboy) + +if(WIN32) + set(GLDEMO_EXE WIN32) + set(GLDEMO_LINK mingw32 libgldemo_static opengl32 glu32) +else() + set(GLDEMO_EXE "") + set(GLDEMO_LINK libgldemo_static Xxf86vm rt Xext X11 GL GLU) +endif() add_subdirectory(Client) add_subdirectory(Libraries) diff --git a/Client/CMakeLists.txt b/Client/CMakeLists.txt index 178804d..e5b5155 100644 --- a/Client/CMakeLists.txt +++ b/Client/CMakeLists.txt @@ -1,7 +1,7 @@ cmake_minimum_required(VERSION 2.6) project(NiotsoClient) -include_directories(${FILEHANDLER_INCLUDE_DIR} ${FREETYPE_INCLUDE_DIR}) +include_directories(${FILEHANDLER_INCLUDE} ${FREETYPE_INCLUDE}) if(WIN32) set(NIOTSOCLIENT_SOURCES @@ -17,5 +17,6 @@ if(WIN32) Window/Window.cpp ) add_executable(TSO WIN32 ${NIOTSOCLIENT_SOURCES}) - target_link_libraries(TSO FileHandler_shared freetype_shared ole32 opengl32) + target_link_libraries(TSO ole32 opengl32) + target_link_libraries(TSO FileHandler_shared ${FREETYPE_LINK}) endif() \ No newline at end of file diff --git a/Client/Client.cpp b/Client/Client.cpp index 6a66b06..15c8d70 100644 --- a/Client/Client.cpp +++ b/Client/Client.cpp @@ -92,10 +92,9 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int) LARGE_INTEGER CurrentTime; QueryPerformanceCounter(&CurrentTime); float TimeDelta = (float)(CurrentTime.QuadPart-PreviousTime.QuadPart)/System::ClockFreq.QuadPart; - if(TimeDelta < 0 || TimeDelta >= 5){ //Invalid TimeDelta - PreviousTime.QuadPart = CurrentTime.QuadPart; + PreviousTime = CurrentTime; + if(TimeDelta < 0 || TimeDelta >= 5) //Safe-guard in case of system delay continue; - } memcpy(&System::UserInput, (const void*) &System::UserInput_v, sizeof(System::UserInput_t)); @@ -108,6 +107,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int) SwapBuffers(Graphics::hDC); } + //Sleep for the remainder of the frame PreviousTime.QuadPart = CurrentTime.QuadPart; QueryPerformanceCounter(&CurrentTime); float SleepDuration = diff --git a/Libraries/FileHandler/CMakeLists.txt b/Libraries/FileHandler/CMakeLists.txt index 8a708bf..cb02914 100644 --- a/Libraries/FileHandler/CMakeLists.txt +++ b/Libraries/FileHandler/CMakeLists.txt @@ -28,7 +28,7 @@ if(WIN32) set(FILEHANDLER_SOURCES ${FILEHANDLER_SOURCES} resource.rc) endif() -include_directories(${FILEHANDLER_INCLUDE_DIR} ${LIBMPG123_INCLUDE_DIR} ${LIBJPEGTURBO_INCLUDE_DIR} ${LIBPNG_INCLUDE_DIR}) +include_directories(${FILEHANDLER_INCLUDE} ${LIBMPG123_INCLUDE} ${LIBJPEGTURBO_INCLUDE} ${LIBPNG_INCLUDE}) #### Static library (uncomment to build) #add_library(FileHandler_static STATIC ${FILEHANDLER_SOURCES}) @@ -38,12 +38,15 @@ include_directories(${FILEHANDLER_INCLUDE_DIR} ${LIBMPG123_INCLUDE_DIR} ${LIBJPE # CLEAN_DIRECT_OUTPUT 1) add_library(FileHandler_shared SHARED ${FILEHANDLER_SOURCES}) +if(WIN32) + set_target_properties(FileHandler_shared PROPERTIES OUTPUT_NAME "FileHandler${FILEHANDLER_SERIES}") +else() + set_target_properties(FileHandler_shared PROPERTIES OUTPUT_NAME "FileHandler") +endif() set_target_properties(FileHandler_shared PROPERTIES - OUTPUT_NAME "FileHandler${FILEHANDLER_SERIES}" - VERSION ${FILEHANDLER_SERIES}${FILEHANDLER_MAJOR}.${FILEHANDLER_MINOR}.0 - SOVERSION ${FILEHANDLER_SERIES}${FILEHANDLER_MAJOR} + VERSION ${FILEHANDLER_SERIES}.${FILEHANDLER_MAJOR}.${FILEHANDLER_MINOR} PREFIX "" IMPORT_PREFIX "" CLEAN_DIRECT_OUTPUT 1) -target_link_libraries(FileHandler_shared far_static iff_static jpegturbo_static libmpg123_static libpng_static zlib_static m) +target_link_libraries(FileHandler_shared far_static iff_static ${LIBJPEG_LINK} ${LIBMPG123_LINK} ${LIBPNG_LINK} ${ZLIB_LINK} m) diff --git a/Libraries/FileHandler/Image.cpp b/Libraries/FileHandler/Image.cpp index 762443c..c06feae 100644 --- a/Libraries/FileHandler/Image.cpp +++ b/Libraries/FileHandler/Image.cpp @@ -17,8 +17,9 @@ */ #include "FileHandler.hpp" -#include //Used by libpng +#include //Used for libpng #include +#include #include #include "bmp/read_bmp.h" @@ -117,13 +118,44 @@ static uint8_t * ReadBMP(Image_t * Image, const uint8_t * InData, size_t FileSiz return OutData; } + +// libjpeg-turbo v6 doesn't support jpeg_mem_src, so we have to implement it here +static void term_source(j_decompress_ptr){} +static int fill_mem_input_buffer(j_decompress_ptr cinfo){ + ERREXIT(cinfo, JERR_FILE_READ); + return FALSE; +} +static void skip_input_data(j_decompress_ptr cinfo, long bytes) +{ + struct jpeg_source_mgr * src = cinfo->src; + + if(bytes > (long) src->bytes_in_buffer){ + ERREXIT(cinfo, JERR_FILE_READ); + return; + } + src->next_input_byte += bytes; + src->bytes_in_buffer -= bytes; +} static uint8_t * ReadJPG(Image_t * Image, const uint8_t * InData, size_t FileSize){ //Initialize jpeg_decompress_struct cinfo; jpeg_error_mgr jerr; cinfo.err = jpeg_std_error(&jerr); jpeg_create_decompress(&cinfo); - jpeg_mem_src(&cinfo, (unsigned char*) InData, FileSize); + + if (cinfo.src == NULL) + cinfo.src = (jpeg_source_mgr *) + (*cinfo.mem->alloc_small)((j_common_ptr) &cinfo, JPOOL_PERMANENT, sizeof(jpeg_source_mgr)); + + jpeg_source_mgr *src = cinfo.src; + src->init_source = term_source; + src->fill_input_buffer = fill_mem_input_buffer; + src->skip_input_data = skip_input_data; + src->resync_to_restart = jpeg_resync_to_restart; + src->term_source = term_source; + src->bytes_in_buffer = FileSize; + src->next_input_byte = InData; + if(jpeg_read_header(&cinfo, TRUE) != JPEG_HEADER_OK){ jpeg_destroy_decompress(&cinfo); return NULL; @@ -174,8 +206,8 @@ struct pngdata_t { static void user_read_data(png_structp png_ptr, png_bytep data, png_size_t length){ pngdata_t *pngdata = (pngdata_t *) png_get_io_ptr(png_ptr); if(length > pngdata->size) png_error(png_ptr, ""); - memcpy(data, pngdata->buffer, length); - pngdata->buffer += length; + memcpy(data, pngdata->buffer, length); + pngdata->buffer += length; pngdata->size -= length; } static uint8_t * ReadPNG(Image_t * Image, const uint8_t * InData, size_t FileSize){ @@ -230,4 +262,4 @@ static uint8_t * ReadCUR(Image_t * Image, const uint8_t * InData, size_t FileSiz return NULL; } -} \ No newline at end of file +} diff --git a/Libraries/libgldemo/wgl.c b/Libraries/libgldemo/wgl.c index e1408d2..afcdb39 100644 --- a/Libraries/libgldemo/wgl.c +++ b/Libraries/libgldemo/wgl.c @@ -264,8 +264,9 @@ int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLi /* Find the timedelta */ QueryPerformanceCounter(&CurrentTime); TimeDelta = (float)(CurrentTime.QuadPart-PreviousTime.QuadPart)/ClockFreq.QuadPart; - if(TimeDelta < 0) TimeDelta = 0; /* Safe-guard in case of system delay */ PreviousTime = CurrentTime; + if(TimeDelta < 0 || TimeDelta > 5) /* Safe-guard in case of system delay */ + continue; /* Draw */ Demo.DrawScene(TimeDelta, keys); @@ -275,6 +276,6 @@ int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLi QueryPerformanceCounter(&CurrentTime); TimeDelta = (float)(CurrentTime.QuadPart-PreviousTime.QuadPart)/ClockFreq.QuadPart; TimeDelta = (FramePeriod - TimeDelta) * 1000; - if(TimeDelta > 1) Sleep((unsigned) TimeDelta); + if(TimeDelta > 1 && TimeDelta < 100) Sleep((unsigned) TimeDelta); } } diff --git a/Libraries/libvitaboy/CMakeLists.txt b/Libraries/libvitaboy/CMakeLists.txt index 5a0becb..9c85db2 100644 --- a/Libraries/libvitaboy/CMakeLists.txt +++ b/Libraries/libvitaboy/CMakeLists.txt @@ -23,8 +23,7 @@ else() add_definitions(-Dstricmp=strcasecmp) endif() -include_directories(${LIBGLDEMO_INCLUDE_DIR}) -include_directories(${FILEHANDLER_INCLUDE_DIR}) +include_directories(${LIBGLDEMO_INCLUDE} ${FILEHANDLER_INCLUDE}) #### Static library (uncomment to build) #add_library(libvitaboy_static STATIC ${LIBVITABOY_SOURCES}) @@ -33,18 +32,20 @@ include_directories(${FILEHANDLER_INCLUDE_DIR}) # CLEAN_DIRECT_OUTPUT 1) add_library(libvitaboy_shared SHARED ${LIBVITABOY_SOURCES}) +if(WIN32) + set_target_properties(libvitaboy_shared PROPERTIES OUTPUT_NAME "vitaboy${LIBVITABOY_SERIES}") +else() + set_target_properties(libvitaboy_shared PROPERTIES OUTPUT_NAME "vitaboy") +endif() set_target_properties(libvitaboy_shared PROPERTIES COMPILE_FLAGS "-fvisibility=default" - OUTPUT_NAME "vitaboy${LIBVITABOY_SERIES}" VERSION ${LIBVITABOY_SERIES}.${LIBVITABOY_MAJOR}.${LIBVITABOY_MINOR} - SOVERSION ${LIBVITABOY_SERIES} - # msvc does not prepend 'lib' - do it here to have consistent name - PREFIX "lib" - IMPORT_PREFIX "lib" + PREFIX "lib" + IMPORT_PREFIX "lib" CLEAN_DIRECT_OUTPUT 1) add_executable(vbparse vbparse.cpp) target_link_libraries(vbparse libvitaboy_shared FileHandler_shared) add_executable(Renderer ${GLDEMO_EXE} Renderer.cpp) -target_link_libraries(Renderer libvitaboy_shared ${GLDEMO_LIBS} FileHandler_shared m) +target_link_libraries(Renderer libvitaboy_shared ${GLDEMO_LINK} FileHandler_shared m) diff --git a/Tools/FARDive/CMakeLists.txt b/Tools/FARDive/CMakeLists.txt index 8d7b1aa..b31d59e 100644 --- a/Tools/FARDive/CMakeLists.txt +++ b/Tools/FARDive/CMakeLists.txt @@ -12,7 +12,7 @@ if(WIN32) windows/Dialog/AddToArchive.cpp windows/Dialog/NewArchive.cpp ) - include_directories(${LIBPNG_INCLUDE_DIR}) + include_directories(${LIBPNG_INCLUDE}) add_executable(FARDive WIN32 ${FARDIVE_SOURCES}) target_link_libraries(FARDive ole32 uxtheme FileHandler_shared) endif() \ No newline at end of file diff --git a/Tools/iff2html/CMakeLists.txt b/Tools/iff2html/CMakeLists.txt index fc1ac5e..3772bfd 100644 --- a/Tools/iff2html/CMakeLists.txt +++ b/Tools/iff2html/CMakeLists.txt @@ -9,7 +9,7 @@ set(IFF2HTML_SOURCES ../../Libraries/FileHandler/bmp/read_bmp.c ) -include_directories(${FILEHANDLER_INCLUDE_DIR} ${LIBPNG_INCLUDE_DIR}) +include_directories(${FILEHANDLER_INCLUDE} ${LIBPNG_INCLUDE}) add_executable(iff2html ${IFF2HTML_SOURCES}) -target_link_libraries(iff2html iff_static libpng_static zlib_static m) +target_link_libraries(iff2html iff_static ${LIBPNG_LINK} ${ZLIB_LINK} m) diff --git a/Tools/tsoscan/CMakeLists.txt b/Tools/tsoscan/CMakeLists.txt index 4a602f7..e9adf88 100644 --- a/Tools/tsoscan/CMakeLists.txt +++ b/Tools/tsoscan/CMakeLists.txt @@ -7,7 +7,7 @@ set(TSOSCAN_SOURCES stats.c ) -include_directories(${FILEHANDLER_INCLUDE_DIR}) +include_directories(${FILEHANDLER_INCLUDE}) add_executable(tsoscan ${TSOSCAN_SOURCES}) target_link_libraries(tsoscan iff_static) \ No newline at end of file