Skip to content

Commit

Permalink
feat(iOS): Support to build static/shared libs (#193)
Browse files Browse the repository at this point in the history
  • Loading branch information
naqvis authored Aug 19, 2024
1 parent ef365e9 commit fd2e345
Show file tree
Hide file tree
Showing 3 changed files with 73 additions and 35 deletions.
38 changes: 32 additions & 6 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ endif()

project(pipy)

option(PIPY_STATICLIB "Build Pipy as static library" OFF)
option(PIPY_SHARED "Build Pipy as dynamic library" OFF)
option(PIPY_GUI "include builtin GUI" OFF)
option(PIPY_CODEBASES "include builtin codebases in the executable" OFF)
Expand Down Expand Up @@ -172,7 +173,7 @@ if(PIPY_BROTLI)
set(BROTLI_INC_DIR ${PIPY_BROTLI}/include)
set(BROTLI_LIB ${PIPY_BROTLI}/lib/${LIB_BROTLI})
else()
set(BROTLI_BUNDLED_MODE OFF CACHE BOOL "" FORCE)
set(BROTLI_BUNDLED_MODE ON CACHE BOOL "" FORCE)
set(BROTLI_DISABLE_TESTS ON CACHE BOOL "" FORCE)
add_subdirectory(deps/brotli-1.0.9)
set(BROTLI_INC_DIR "${CMAKE_SOURCE_DIR}/deps/brotli-1.0.9/c/include")
Expand Down Expand Up @@ -367,11 +368,18 @@ SET(PIPY_SRC
deps/sqlite-3.43.2/sqlite3.c
)

if(NOT PIPY_SHARED)
add_executable(pipy ${PIPY_SRC})
else()
if(IOS)
add_definitions(-D__APPLE__ -DTARGET_OS_IOS)
endif(IOS)

if(PIPY_SHARED)
add_definitions(-DPIPY_SHARED)
add_library(pipy SHARED ${PIPY_SRC})
elseif(PIPY_STATICLIB)
add_definitions(-DPIPY_SHARED)
add_library(pipy STATIC ${PIPY_SRC})
else()
add_executable(pipy ${PIPY_SRC})
endif()

execute_process(
Expand All @@ -387,12 +395,26 @@ if(NOT PIPY_USE_SYSTEM_ZLIB)
add_dependencies(pipy ${ZLIB_LIB})
endif()

find_program(NODEJS_EXECUTABLE NAMES node nodejs
HINTS
$ENV{NODE_DIR}
PATH_SUFFIXES bin $ENV{HOMEBREW_PREFIX}
DOC "Node.js interpreter")

if(NODEJS_EXECUTABLE)
message("NodeJS found at: ${NODEJS_EXECUTABLE}")
endif()

if(PIPY_GUI)
add_definitions(-DPIPY_USE_GUI)

if(NOT NODEJS_EXECUTABLE)
message(FATAL_ERROR "Nodejs installation not found.")
endif()

add_custom_command(
OUTPUT ${CMAKE_BINARY_DIR}/deps/gui.tar.h
COMMAND node
COMMAND ${NODEJS_EXECUTABLE}
ARGS pack-gui.js ${CMAKE_BINARY_DIR}/deps/gui.tar.h
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/gui
DEPENDS gui/pack-gui.js ${CMAKE_SOURCE_DIR}/public/index.html
Expand All @@ -404,9 +426,13 @@ endif()
if(PIPY_CODEBASES)
add_definitions(-DPIPY_USE_CODEBASES)

if(NOT NODEJS_EXECUTABLE)
message(FATAL_ERROR "Nodejs installation not found.")
endif()

add_custom_command(
OUTPUT ${CMAKE_BINARY_DIR}/deps/codebases.tar.gz.h
COMMAND node
COMMAND ${NODEJS_EXECUTABLE}
ARGS pack-codebases.js ${CMAKE_BINARY_DIR}/deps/codebases.tar.gz.h ${PIPY_CUSTOM_CODEBASES}
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/gui
DEPENDS gui/pack-codebases.js ${CMAKE_SOURCE_DIR}/tutorial ${CMAKE_SOURCE_DIR}/samples
Expand Down
61 changes: 32 additions & 29 deletions deps/yajl-2.1.0/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -16,66 +16,69 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.6)

PROJECT(YetAnotherJSONParser C)

SET (YAJL_MAJOR 2)
SET (YAJL_MINOR 1)
SET (YAJL_MICRO 0)
SET(YAJL_MAJOR 2)
SET(YAJL_MINOR 1)
SET(YAJL_MICRO 0)

SET (YAJL_DIST_NAME "yajl-${YAJL_MAJOR}.${YAJL_MINOR}.${YAJL_MICRO}")
SET(YAJL_DIST_NAME "yajl-${YAJL_MAJOR}.${YAJL_MINOR}.${YAJL_MICRO}")

IF (NOT CMAKE_BUILD_TYPE)
IF(NOT CMAKE_BUILD_TYPE)
SET(CMAKE_BUILD_TYPE "Release")
ENDIF (NOT CMAKE_BUILD_TYPE)
ENDIF(NOT CMAKE_BUILD_TYPE)

SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")

IF (WIN32)
IF(WIN32)
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W4")
ADD_DEFINITIONS(-DWIN32)
SET(linkFlags "/PDB:NONE /INCREMENTAL:NO /OPT:NOREF /OPT:NOICF")
SET(CMAKE_EXE_LINKER_FLAGS "${linkFlags}"
CACHE STRING "YAJL linker flags" FORCE)
SET(CMAKE_EXE_LINKER_FLAGS "${linkFlags}"
CACHE STRING "YAJL linker flags" FORCE)
SET(CMAKE_EXE_LINKER_FLAGS_DEBUG ""
CACHE STRING "YAJL debug linker flags" FORCE)
CACHE STRING "YAJL debug linker flags" FORCE)
SET(CMAKE_EXE_LINKER_FLAGS_RELEASE
CACHE STRING "YAJL release linker flags" FORCE)
CACHE STRING "YAJL release linker flags" FORCE)
SET(CMAKE_SHARED_LINKER_FLAGS "${linkFlags}"
CACHE STRING "YAJL shared linker flags" FORCE)
CACHE STRING "YAJL shared linker flags" FORCE)
SET(CMAKE_MODULE_LINKER_FLAGS "${linkFlags}"
CACHE STRING "YAJL module linker flags" FORCE)
CACHE STRING "YAJL module linker flags" FORCE)

SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /wd4996 /wd4255 /wd4130 /wd4100 /wd4711")
SET(CMAKE_C_FLAGS_DEBUG "/D DEBUG /Od /Z7")
SET(CMAKE_C_FLAGS_RELEASE "/D NDEBUG /O2")
ELSE (WIN32)
ELSE(WIN32)
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall")

IF(CMAKE_COMPILER_IS_GNUCC)
INCLUDE(CheckCCompilerFlag)
CHECK_C_COMPILER_FLAG(-fvisibility=hidden HAVE_GCC_VISIBILITY)

IF(HAVE_GCC_VISIBILITY)
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden")
ENDIF(HAVE_GCC_VISIBILITY)
ENDIF(CMAKE_COMPILER_IS_GNUCC)

SET(CMAKE_C_FLAGS
"${CMAKE_C_FLAGS} -std=c99 -pedantic -Wpointer-arith -Wno-format-y2k -Wstrict-prototypes -Wmissing-declarations -Wnested-externs -Wextra -Wundef -Wwrite-strings -Wold-style-definition -Wredundant-decls -Wno-unused-parameter -Wno-sign-compare -Wmissing-prototypes")
"${CMAKE_C_FLAGS} -std=c99 -pedantic -Wpointer-arith -Wno-format-y2k -Wstrict-prototypes -Wmissing-declarations -Wnested-externs -Wextra -Wundef -Wwrite-strings -Wold-style-definition -Wredundant-decls -Wno-unused-parameter -Wno-sign-compare -Wmissing-prototypes")

SET(CMAKE_C_FLAGS_DEBUG "-DDEBUG -g")
SET(CMAKE_C_FLAGS_RELEASE "-DNDEBUG -O2 -Wuninitialized")
ENDIF (WIN32)

ENDIF(WIN32)

ADD_SUBDIRECTORY(src)
ADD_SUBDIRECTORY(test)
ADD_SUBDIRECTORY(reformatter)
ADD_SUBDIRECTORY(verify)
ADD_SUBDIRECTORY(example)
ADD_SUBDIRECTORY(perf)

INCLUDE(YAJLDoc.cmake)
# ADD_SUBDIRECTORY(test)
# ADD_SUBDIRECTORY(reformatter)
# ADD_SUBDIRECTORY(verify)
# ADD_SUBDIRECTORY(example)
# ADD_SUBDIRECTORY(perf)

# INCLUDE(YAJLDoc.cmake)

# a test target
ADD_CUSTOM_TARGET(test
./run_tests.sh ${CMAKE_CURRENT_BINARY_DIR}/test/parsing/yajl_test
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/test/parsing)
# # a test target
# ADD_CUSTOM_TARGET(test
# ./run_tests.sh ${CMAKE_CURRENT_BINARY_DIR}/test/parsing/yajl_test
# WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/test/parsing)

ADD_CUSTOM_TARGET(test-api ${CMAKE_CURRENT_SOURCE_DIR}/test/api/run_tests.sh
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/test/api)
# ADD_CUSTOM_TARGET(test-api ${CMAKE_CURRENT_SOURCE_DIR}/test/api/run_tests.sh
# WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/test/api)
9 changes: 9 additions & 0 deletions src/fs.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -63,8 +63,17 @@ inline static auto ts2secs(const struct timespec &ts) -> double {
}

auto home() -> std::string {
#ifdef TARGET_OS_IOS
char* home = getenv("HOME");
if (home != nullptr) {
return std::string(home);
} else {
return std::string(); // Return an empty string if getenv fails
}
#else
auto pw = getpwuid(getuid());
return pw->pw_dir;
#endif
}

auto abs_path(const std::string &filename) -> std::string {
Expand Down

0 comments on commit fd2e345

Please sign in to comment.