Skip to content

Commit

Permalink
Add initial CMake support
Browse files Browse the repository at this point in the history
  • Loading branch information
saghul committed Nov 9, 2023
1 parent e449cb0 commit 0973b64
Show file tree
Hide file tree
Showing 3 changed files with 180 additions and 1 deletion.
61 changes: 61 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,19 @@ jobs:
- name: test
run: |
make -j$(getconf _NPROCESSORS_ONLN) CONFIG_WERROR=y CONFIG_UBSAN=y UBSAN_OPTIONS="halt_on_error=1" test
linux-cmake:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: build
run: |
mkdir build
cd build
cmake ..
make -j$(getconf _NPROCESSORS_ONLN)
- name: stats
run: |
./build/qjs -qd
macos:
runs-on: macos-latest
Expand Down Expand Up @@ -77,6 +90,19 @@ jobs:
- name: test
run: |
make -j$(getconf _NPROCESSORS_ONLN) CONFIG_WERROR=y CONFIG_UBSAN=y UBSAN_OPTIONS="halt_on_error=1" test
macos-cmake:
runs-on: macos-latest
steps:
- uses: actions/checkout@v3
- name: build
run: |
mkdir build
cd build
cmake ..
make -j$(getconf _NPROCESSORS_ONLN)
- name: stats
run: |
./build/qjs -qd
windows-mingw:
runs-on: windows-latest
Expand Down Expand Up @@ -112,3 +138,38 @@ jobs:
- name: test
run: |
make -j$(getconf _NPROCESSORS_ONLN) CONFIG_WERROR=y CONFIG_MINGW=y test
windows-mingw-cmake:
runs-on: windows-latest
strategy:
fail-fast: false
matrix:
sys:
- mingw64
- ucrt64
defaults:
run:
shell: msys2 {0}
steps:
- uses: actions/checkout@v3
with:
submodules: true
- name: Setup MSYS2
uses: msys2/setup-msys2@v2
with:
msystem: ${{matrix.sys}}
install: >-
cmake
git
make
pacboy: >-
toolchain:p
- name: build
run: |
mkdir build
cd build
cmake ..
make -j$(getconf _NPROCESSORS_ONLN)
- name: stats
run: |
./build/qjs -qd
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@

*.a
*.orig
.obj/
build/
examples/hello
examples/hello_module
examples/point.so
Expand Down
118 changes: 118 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
cmake_minimum_required(VERSION 3.4)

project(quickjs LANGUAGES C)

# TODO:
# - LTO
# - Support cross-compilation
# - ASAN / MSAN / UBSAN
# - Install targets

set(CMAKE_C_STANDARD_REQUIRED ON)
set(CMAKE_C_EXTENSIONS ON)
set(CMAKE_C_STANDARD 11)

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Werror")
if(CMAKE_C_COMPILER_ID MATCHES "AppleClang|Clang")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wextra -Wno-sign-compare -Wno-missing-field-initializers -Wno-unused-parameter -Wno-unused-variable -Wno-unused-but-set-variable -funsigned-char")
else()
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-array-bounds -Wno-format-truncation -Wno-unused-variable -Wno-unused-but-set-variable")
endif()

if(NOT CMAKE_BUILD_TYPE)
message(STATUS "No build type selected, default to Release")
set(CMAKE_BUILD_TYPE "Release")
endif()

set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -g")
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -ggdb -O0 -fno-omit-frame-pointer")
string(REPLACE "-O3" "-O2" CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}")

message(STATUS "Building in ${CMAKE_BUILD_TYPE} mode")
message(STATUS "Building with ${CMAKE_C_COMPILER_ID} ${CMAKE_C_COMPILER_VERSION} on ${CMAKE_SYSTEM}")
if(CMAKE_BUILD_TYPE MATCHES "Debug")
message(STATUS "Building with flags ${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_DEBUG}")
else()
message(STATUS "Building with flags ${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_RELEASE}")
endif()

#set(CMAKE_VERBOSE_MAKEFILE TRUE)


# QuickJS library
#

set(qjs_sources
cutils.c
libregexp.c
libunicode.c
quickjs.c
)

list(APPEND qjs_defines _GNU_SOURCE)

file(STRINGS "VERSION" QJS_VERSION_STR)
list(APPEND qjs_defines CONFIG_VERSION="${QJS_VERSION_STR}")

option(CONFIG_BIGNUM "Enable BigNum extensions" ON)
if(CONFIG_BIGNUM)
list(APPEND qjs_defines CONFIG_BIGNUM=1)
list(APPEND qjs_sources libbf.c)
endif()

add_library(qjs STATIC ${qjs_sources})
target_compile_definitions(qjs PUBLIC
QJS_VERSION_STR="${QJS_VERSION_STR}"
)
target_compile_definitions(qjs PRIVATE ${qjs_defines})
if (CMAKE_BUILD_TYPE MATCHES Debug)
target_compile_definitions(qjs PRIVATE
DUMP_LEAKS
)
endif()


# QuickJS bytecode compiler
#

add_custom_command(
OUTPUT repl.c
COMMAND "${CMAKE_BINARY_DIR}/qjsc" -c -o ./repl.c -m ${CMAKE_CURRENT_SOURCE_DIR}/repl.js
DEPENDS qjsc
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
COMMENT "Compile repl.js to bytecode"
SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/repl.js
)

add_executable(qjsc
qjsc.c
quickjs-libc.c
)
target_compile_definitions(qjsc PRIVATE ${qjs_defines})
target_link_libraries(qjsc qjs m pthread dl)


# QuickJS CLI
#

add_executable(qjs_exe
qjs.c
quickjs-libc.c
${CMAKE_BINARY_DIR}/repl.c
)
set_target_properties(qjs_exe PROPERTIES
OUTPUT_NAME "qjs"
)
target_compile_definitions(qjs_exe PRIVATE ${qjs_defines})
target_link_libraries(qjs_exe qjs m pthread dl)


# Test262 runner
#

add_executable(run-test262
quickjs-libc.c
run-test262.c
)
target_compile_definitions(run-test262 PRIVATE ${qjs_defines})
target_link_libraries(run-test262 qjs m pthread dl)

0 comments on commit 0973b64

Please sign in to comment.