mirror of
https://github.com/janet-lang/janet
synced 2024-11-28 02:59:54 +00:00
Add example file for compiling native modules (hello.so).
This commit is contained in:
parent
8b9bd41205
commit
99709a68fd
1
.gitignore
vendored
1
.gitignore
vendored
@ -2,6 +2,7 @@
|
||||
dst
|
||||
!*/**/dst
|
||||
/build
|
||||
/Build
|
||||
/Release
|
||||
/Debug
|
||||
/Emscripten
|
||||
|
@ -113,6 +113,7 @@ src/include/dst/dsttypes.h
|
||||
# Build the executable
|
||||
add_executable(${TARGET_NAME} ${REPL_SOURCES})
|
||||
if (UNIX AND NOT EMSCRIPTEN)
|
||||
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -rdynamic")
|
||||
target_link_libraries(${TARGET_NAME} m dl)
|
||||
endif (UNIX AND NOT EMSCRIPTEN)
|
||||
set_target_properties(${TARGET_NAME} PROPERTIES PUBLIC_HEADER "${DST_PUBLIC_HEADERS}")
|
||||
|
6
Makefile
6
Makefile
@ -25,7 +25,11 @@
|
||||
PREFIX?=/usr/local
|
||||
BINDIR=$(PREFIX)/bin
|
||||
|
||||
CFLAGS=-std=c99 -Wall -Wextra -Isrc/include -s -O3
|
||||
# CFLAGS=-std=c99 -Wall -Wextra -Isrc/include -Wl,--dynamic-list=src/exported.list -s -O3
|
||||
# TODO - when api is finalized, only export public symbols instead of using rdynamic
|
||||
# which exports all symbols.
|
||||
|
||||
CFLAGS=-std=c99 -Wall -Wextra -Isrc/include -rdynamic -s -O3
|
||||
CLIBS=-lm -ldl
|
||||
PREFIX=/usr/local
|
||||
DST_TARGET=dst
|
||||
|
32
natives/hello/Makefile
Normal file
32
natives/hello/Makefile
Normal file
@ -0,0 +1,32 @@
|
||||
# Copyright (c) 2018 Calvin Rose
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documentation files (the "Software"), to
|
||||
# deal in the Software without restriction, including without limitation the
|
||||
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
# sell copies of the Software, and to permit persons to whom the Software is
|
||||
# furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
# IN THE SOFTWARE.
|
||||
|
||||
CFLAGS=-std=c99 -Wall -Wextra -I../../src/include -s -O3
|
||||
TARGET=hello.so
|
||||
|
||||
SOURCES=main.c
|
||||
|
||||
$(TARGET): $(SOURCES)
|
||||
$(CC) $(CFLAGS) -shared -fpic -o $@ $<
|
||||
|
||||
clean:
|
||||
rm $(TARGET)
|
||||
|
||||
.PHONY: clean
|
42
natives/hello/main.c
Normal file
42
natives/hello/main.c
Normal file
@ -0,0 +1,42 @@
|
||||
/*
|
||||
* Copyright (c) 2017 Calvin Rose
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to
|
||||
* deal in the Software without restriction, including without limitation the
|
||||
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
* sell copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
* IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include <dst/dst.h>
|
||||
|
||||
static int hello(DstArgs args) {
|
||||
(void) args;
|
||||
printf("Hello, world!\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
static const DstReg cfuns[] = {
|
||||
{"hello", hello},
|
||||
{NULL, NULL}
|
||||
};
|
||||
|
||||
int _dst_init(DstArgs args) {
|
||||
DstTable *env = dst_env_arg(args);
|
||||
dst_env_cfuns(env, cfuns);
|
||||
return 0;
|
||||
}
|
3
script.dst
Normal file
3
script.dst
Normal file
@ -0,0 +1,3 @@
|
||||
(import "natives/hello/hello.so" :prefix "h/")
|
||||
|
||||
(h/hello)
|
@ -917,15 +917,18 @@ onvalue."
|
||||
(error (string "circular dependency: module " path " is loading")))
|
||||
(def check (get cache path))
|
||||
(if check check (do
|
||||
(def newenv (make-env))
|
||||
(put cache path newenv)
|
||||
(put loading path true)
|
||||
(def f (file-open path))
|
||||
(defn chunks [buf] (file-read f 1024 buf))
|
||||
(run-context newenv chunks identity default-error-handler)
|
||||
(file-close f)
|
||||
(put loading path nil)
|
||||
newenv)))))
|
||||
(if (= ".so" (string-slice path -3 -1))
|
||||
((native path))
|
||||
(do
|
||||
(def newenv (make-env))
|
||||
(put cache path newenv)
|
||||
(put loading path true)
|
||||
(def f (file-open path))
|
||||
(defn chunks [buf] (file-read f 1024 buf))
|
||||
(run-context newenv chunks identity default-error-handler)
|
||||
(file-close f)
|
||||
(put loading path nil)
|
||||
newenv)))))))
|
||||
|
||||
(defn import* [env path & args]
|
||||
(def newenv (require path))
|
||||
|
@ -37,7 +37,7 @@ typedef HINSTANCE Clib;
|
||||
typedef int Clib;
|
||||
#define load_clib(name) 0
|
||||
#define symbol_clib(lib, sym) 0
|
||||
#define error_clib() "could not load dynamic library"
|
||||
#define error_clib() "dynamic libraries not supported"
|
||||
#else
|
||||
#include <dlfcn.h>
|
||||
typedef void *Clib;
|
||||
|
33
src/core/os.h
Normal file
33
src/core/os.h
Normal file
@ -0,0 +1,33 @@
|
||||
/*
|
||||
* Copyright (c) 2017 Calvin Rose
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to
|
||||
* deal in the Software without restriction, including without limitation the
|
||||
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
* sell copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
* IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef DST_OS_H
|
||||
#define DST_OS_H
|
||||
|
||||
#include <dst/dst.h>
|
||||
|
||||
int dst_os_execute(DstArgs args);
|
||||
int dst_os_getenv(DstArgs args);
|
||||
int dst_os_setenv(DstArgs args);
|
||||
int dst_os_exit(DstArgs args);
|
||||
|
||||
#endif
|
240
src/exported.list
Normal file
240
src/exported.list
Normal file
@ -0,0 +1,240 @@
|
||||
{
|
||||
dst_array;
|
||||
dst_array_init;
|
||||
dst_array_deinit;
|
||||
dst_array_ensure;
|
||||
dst_array_setcount;
|
||||
dst_array_push;
|
||||
dst_array_pop;
|
||||
dst_array_peek;
|
||||
|
||||
dst_buffer;
|
||||
dst_buffer_init;
|
||||
dst_buffer_deinit;
|
||||
dst_buffer_ensure;
|
||||
dst_buffer_extra;
|
||||
dst_buffer_push_bytes;
|
||||
dst_buffer_push_cstring;
|
||||
dst_buffer_push_u8;
|
||||
dst_buffer_push_u16;
|
||||
dst_buffer_push_u32;
|
||||
dst_buffer_push_u64;
|
||||
|
||||
dst_tuple_begin;
|
||||
dst_tuple_end;
|
||||
dst_tuple_n;
|
||||
dst_tuple_equal;
|
||||
dst_tuple_compare;
|
||||
|
||||
dst_string_begin;
|
||||
dst_string_end;
|
||||
dst_string;
|
||||
dst_cstring;
|
||||
dst_string_compare;
|
||||
dst_string_equal;
|
||||
dst_string_equalconst;
|
||||
dst_string_unique;
|
||||
dst_cstring_unique;
|
||||
dst_description;
|
||||
dst_to_string;
|
||||
dst_to_zerostring;
|
||||
dst_formatc;
|
||||
dst_puts;
|
||||
|
||||
dst_symbol;
|
||||
dst_symbol_from_string;
|
||||
dst_csymbol;
|
||||
dst_symbol_gen;
|
||||
|
||||
dst_struct_begin;
|
||||
dst_struct_put;
|
||||
dst_struct_end;
|
||||
dst_struct_get;
|
||||
dst_struct_next;
|
||||
dst_struct_to_table;
|
||||
dst_struct_equal;
|
||||
dst_struct_compare;
|
||||
dst_struct_find;
|
||||
|
||||
dst_table;
|
||||
dst_table_init;
|
||||
dst_table_deinit;
|
||||
dst_table_get;
|
||||
dst_table_rawget;
|
||||
dst_table_remove;
|
||||
dst_table_put;
|
||||
dst_table_next;
|
||||
dst_table_to_struct;
|
||||
dst_table_merge_table;
|
||||
dst_table_merge_struct;
|
||||
dst_table_find;
|
||||
|
||||
dst_fiber;
|
||||
|
||||
dst_seq_view;
|
||||
dst_chararray_view;
|
||||
dst_hashtable_view;
|
||||
|
||||
dst_abstract;
|
||||
|
||||
dst_native;
|
||||
|
||||
dst_mark;
|
||||
dst_sweep;
|
||||
dst_collect;
|
||||
dst_clear_memory;
|
||||
dst_gcroot;
|
||||
dst_gcunroot;
|
||||
dst_gcunrootall;
|
||||
dst_gclock;
|
||||
dst_gcunlock;
|
||||
|
||||
dst_funcdef_alloc;
|
||||
dst_thunk;
|
||||
dst_verify;
|
||||
dst_quick_asm;
|
||||
|
||||
dst_equals;
|
||||
dst_hash;
|
||||
dst_compare;
|
||||
dst_get;
|
||||
dst_put;
|
||||
dst_next;
|
||||
dst_length;
|
||||
dst_getindex;
|
||||
dst_setindex;
|
||||
dst_cstrcmp;
|
||||
|
||||
dst_init;
|
||||
dst_deinit;
|
||||
dst_run;
|
||||
dst_resume;
|
||||
|
||||
dst_env_def;
|
||||
dst_env_var;
|
||||
dst_env_cfuns;
|
||||
dst_env_resolve;
|
||||
dst_env_arg;
|
||||
|
||||
dst_stl_env;
|
||||
|
||||
dst_asm;
|
||||
dst_disasm;
|
||||
dst_asm_decode_instruction;
|
||||
dst_asm_cfun;
|
||||
dst_disasm_cfun;
|
||||
|
||||
dst_lib_asm;
|
||||
|
||||
dst_compile;
|
||||
|
||||
dst_compile_cfun;
|
||||
dst_lib_compile;
|
||||
|
||||
dst_stl_env;
|
||||
|
||||
dst_dobytes;
|
||||
dst_dostring;
|
||||
|
||||
dst_core_native;
|
||||
|
||||
dst_int;
|
||||
dst_real;
|
||||
dst_add;
|
||||
dst_subtract;
|
||||
dst_multiply;
|
||||
dst_divide;
|
||||
dst_modulo;
|
||||
dst_rand;
|
||||
dst_srand;
|
||||
dst_strict_equal;
|
||||
dst_strict_notequal;
|
||||
dst_ascending;
|
||||
dst_descending;
|
||||
dst_notdescending;
|
||||
dst_notascending;
|
||||
dst_numeric_eq;
|
||||
dst_numeric_neq;
|
||||
dst_numeric_gt;
|
||||
dst_numeric_lt;
|
||||
dst_numeric_gte;
|
||||
dst_numeric_lte;
|
||||
dst_bor;
|
||||
dst_band;
|
||||
dst_bxor;
|
||||
dst_bnot;
|
||||
dst_lshift;
|
||||
dst_rshift;
|
||||
dst_lshiftu;
|
||||
dst_not;
|
||||
|
||||
dst_cos;
|
||||
dst_sin;
|
||||
dst_tan;
|
||||
dst_acos;
|
||||
dst_asin;
|
||||
dst_atan;
|
||||
dst_exp;
|
||||
dst_log;
|
||||
dst_log10;
|
||||
dst_sqrt;
|
||||
dst_floor;
|
||||
dst_ceil;
|
||||
dst_pow;
|
||||
|
||||
dst_core_print;
|
||||
dst_core_describe;
|
||||
dst_core_string;
|
||||
dst_core_symbol;
|
||||
dst_core_buffer;
|
||||
dst_core_tuple;
|
||||
dst_core_array;
|
||||
dst_core_table;
|
||||
dst_core_struct;
|
||||
dst_core_buffer;
|
||||
dst_core_gensym;
|
||||
dst_core_length;
|
||||
dst_core_get;
|
||||
dst_core_rawget;
|
||||
dst_core_getproto;
|
||||
dst_core_setproto;
|
||||
dst_core_put;
|
||||
dst_core_type;
|
||||
dst_core_next;
|
||||
dst_core_hash;
|
||||
dst_core_string_slice;
|
||||
|
||||
dst_core_gccollect;
|
||||
dst_core_gcsetinterval;
|
||||
dst_core_gcinterval;
|
||||
|
||||
dst_lib_io;
|
||||
dst_lib_math;
|
||||
dst_lib_array;
|
||||
dst_lib_tuple;
|
||||
dst_lib_buffer;
|
||||
dst_lib_table;
|
||||
dst_lib_fiber;
|
||||
dst_lib_os;
|
||||
|
||||
dst_ast_wrap;
|
||||
dst_ast_node;
|
||||
dst_ast_unwrap1;
|
||||
dst_ast_unwrap;
|
||||
|
||||
dst_scan_number;
|
||||
dst_scan_integer;
|
||||
dst_scan_real;
|
||||
|
||||
dst_parser_init;
|
||||
dst_parser_deinit;
|
||||
dst_parser_consume;
|
||||
dst_parser_status;
|
||||
dst_parser_produce;
|
||||
dst_parser_error;
|
||||
|
||||
dst_parse_cfun;
|
||||
|
||||
dst_lib_parse;
|
||||
|
||||
};
|
Loading…
Reference in New Issue
Block a user