فهرست منبع

added initial cmake config that can compiles libhl and hl

Andy Li 8 سال پیش
والد
کامیت
38ad4d1e01
4فایلهای تغییر یافته به همراه180 افزوده شده و 0 حذف شده
  1. 2 0
      .gitignore
  2. 101 0
      CMakeLists.txt
  3. 67 0
      cmake/FindTurboJPEG.cmake
  4. 10 0
      cmake/linux32.toolchain.cmake

+ 2 - 0
.gitignore

@@ -23,3 +23,5 @@ ReleaseStatic
 /other/benchs/bench.*
 /other/benchs/cpp
 /other/benchs/flashout.txt
+
+/bin*

+ 101 - 0
CMakeLists.txt

@@ -0,0 +1,101 @@
+cmake_minimum_required(VERSION 2.8.12)
+
+include(GNUInstallDirs)
+project(hashlink C)
+
+if (CMAKE_VERSION VERSION_LESS "3.1")
+    set (CMAKE_C_FLAGS "-std=c11 ${CMAKE_C_FLAGS}")
+else ()
+    set (CMAKE_C_STANDARD 11)
+endif ()
+
+# put output in "bin"
+
+set(OUTPUT_DIR ${CMAKE_BINARY_DIR}/bin)
+set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${OUTPUT_DIR})
+set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${OUTPUT_DIR})
+set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${OUTPUT_DIR})
+
+# avoid the extra "Debug", "Release" directories
+# http://stackoverflow.com/questions/7747857/in-cmake-how-do-i-work-around-the-debug-and-release-directories-visual-studio-2
+foreach( OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES} )
+	string( TOUPPER ${OUTPUTCONFIG} OUTPUTCONFIG )
+	set( CMAKE_RUNTIME_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${OUTPUT_DIR} )
+	set( CMAKE_LIBRARY_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${OUTPUT_DIR} )
+	set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${OUTPUT_DIR} )
+endforeach( OUTPUTCONFIG CMAKE_CONFIGURATION_TYPES )
+
+set(HL_VERSION_MAJOR 0)
+set(HL_VERSION_MINOR 1)
+set(HL_VERSION_PATCH 0)
+set(HL_VERSION ${HL_VERSION_MAJOR}.${HL_VERSION_MINOR}.${HL_VERSION_PATCH})
+
+include_directories(
+    src
+    include/pcre
+)
+
+file(GLOB pcre_srcs
+	include/pcre/*.c
+)
+file(GLOB std_srcs
+	src/std/array.c
+    src/std/buffer.c
+    src/std/bytes.c
+    src/std/cast.c
+    src/std/date.c
+    src/std/error.c
+	src/std/file.c
+    src/std/fun.c
+    src/std/maps.c
+    src/std/math.c
+    src/std/obj.c
+    src/std/random.c
+    src/std/regexp.c
+	src/std/socket.c
+    src/std/string.c
+    src/std/sys.c
+    src/std/types.c
+    src/std/ucs2.c
+)
+
+add_library(libhl SHARED
+    ${pcre_srcs}
+    src/alloc.c
+    ${std_srcs}
+)
+
+if(WIN32)
+    set_target_properties(libhl
+        PROPERTIES
+        OUTPUT_NAME std
+        SUFFIX .hdll
+    )
+else()
+    set_target_properties(libhl
+        PROPERTIES
+        OUTPUT_NAME hl
+    )
+endif()
+
+set_target_properties(libhl
+	PROPERTIES
+	VERSION ${HL_VERSION}
+	SOVERSION ${HL_VERSION_MAJOR}
+	COMPILE_DEFINITIONS "_USRDLL;HLDLL_EXPORTS"
+)
+
+add_executable(hl
+    src/callback.c
+    src/code.c
+    src/jit.c
+    src/main.c
+    src/module.c
+)
+
+target_link_libraries(hl libhl)
+
+if(WIN32)
+	target_link_libraries(libhl ws2_32 user32)
+	target_link_libraries(hl user32)
+endif()

+ 67 - 0
cmake/FindTurboJPEG.cmake

@@ -0,0 +1,67 @@
+# FindTurboJPEG.cmake
+# Uses environment variable TurboJPEG_ROOT as backup
+# - TurboJPEG_FOUND
+# - TurboJPEG_INCLUDE_DIRS
+# - TurboJPEG_LIBRARIES
+
+FIND_PATH(TurboJPEG_INCLUDE_DIRS
+  turbojpeg.h
+  DOC "Found TurboJPEG include directory"
+  PATHS
+    "${DEPENDS_DIR}/libjpeg_turbo"
+    "${DEPENDS_DIR}/libjpeg-turbo64"
+    "/usr/local/opt/jpeg-turbo" # homebrew
+    "/opt/local" # macports
+    "C:/libjpeg-turbo64"
+    "/opt/libjpeg-turbo"
+    ENV TurboJPEG_ROOT
+  PATH_SUFFIXES
+    include
+)
+
+#Library names:
+# debian sid,strech: libturbojpeg0
+# debian/ubuntu else: libturbojpeg1-dev #provided by libjpeg-turbo8-dev (ubuntu)
+FIND_LIBRARY(TurboJPEG_LIBRARIES
+  NAMES libturbojpeg.so.1 libturbojpeg.so.0 turbojpeg
+  DOC "Found TurboJPEG library path"
+  PATHS
+    "${DEPENDS_DIR}/libjpeg_turbo"
+    "${DEPENDS_DIR}/libjpeg-turbo64"
+    "/usr/local/opt/jpeg-turbo" # homebrew
+    "/opt/local" # macports
+    "C:/libjpeg-turbo64"
+    "/opt/libjpeg-turbo"
+    ENV TurboJPEG_ROOT
+  PATH_SUFFIXES
+    lib
+    lib64
+)
+
+IF(WIN32)
+FIND_FILE(TurboJPEG_DLL
+  turbojpeg.dll
+  DOC "Found TurboJPEG DLL path"
+  PATHS
+    "${DEPENDS_DIR}/libjpeg_turbo"
+    "${DEPENDS_DIR}/libjpeg-turbo64"
+    "C:/libjpeg-turbo64"
+    ENV TurboJPEG_ROOT
+  PATH_SUFFIXES
+    bin
+)
+ENDIF()
+
+IF(TurboJPEG_INCLUDE_DIRS AND TurboJPEG_LIBRARIES)
+INCLUDE(CheckCSourceCompiles)
+set(CMAKE_REQUIRED_INCLUDES ${TurboJPEG_INCLUDE_DIRS})
+set(CMAKE_REQUIRED_LIBRARIES ${TurboJPEG_LIBRARIES})
+check_c_source_compiles("#include <turbojpeg.h>\nint main(void) { tjhandle h=tjInitCompress(); return 0; }" TURBOJPEG_WORKS)
+set(CMAKE_REQUIRED_DEFINITIONS)
+set(CMAKE_REQUIRED_INCLUDES)
+set(CMAKE_REQUIRED_LIBRARIES)
+ENDIF()
+
+INCLUDE(FindPackageHandleStandardArgs)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(TurboJPEG FOUND_VAR TurboJPEG_FOUND
+  REQUIRED_VARS TurboJPEG_LIBRARIES TurboJPEG_INCLUDE_DIRS TURBOJPEG_WORKS)

+ 10 - 0
cmake/linux32.toolchain.cmake

@@ -0,0 +1,10 @@
+# Toolchain file for building a 32bit version on a 64bit host.
+#
+# Usage:
+# cmake -DCMAKE_TOOLCHAIN_FILE=cmake/linux32.toolchain.cmake <sourcedir>
+
+set(CMAKE_SYSTEM_NAME Linux)
+set(CMAKE_SYSTEM_VERSION 1)
+
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m32" CACHE STRING "c++ flags")
+set(CMAKE_C_FLAGS   "${CMAKE_C_FLAGS} -m32" CACHE STRING "c flags")