diff --git a/Tuprules.tup b/Tuprules.tup index 664af91be..5c86076b5 100644 --- a/Tuprules.tup +++ b/Tuprules.tup @@ -20,6 +20,7 @@ CC_MARCH = -march=armv8-a endif GENODE_DIR = $(TUP_CWD)/upstream +STUB_DIR = $(TUP_CWD)/stub export NIX_PATH NIX_BUILD = nix-build --option substitute false @@ -162,7 +163,7 @@ PKG_CONFIG = PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) pkg-config !cc = | $(GENODE_DIR)/ |> ^o CC %f^ @(CC_WRAPPER) $(CC) $(DEFINES) $(CFLAGS) $(CFLAGS_%e) $(CFLAGS_%f) `$(PKG_CONFIG) --cflags $(LIBS) $(LIBS_CFLAGS)` $(INCLUDES) -c %f -o %o |> %B.o -!cc_port = | $(GENODE_DIR)/ |> ^o CC %o^ @(CC_WRAPPER) $(CC) -c $(DEFINES) $(CFLAGS) $(CFLAGS_%f) $(INCLUDES) `$(PKG_CONFIG) --cflags $(LIBS) $(LIBS_CFLAGS)` -o %o |> %B.o +!cc_port = | $(GENODE_DIR)/ |> ^o CC %o^ @(CC_WRAPPER) $(CC) -c $(DEFINES) $(CFLAGS) $(CFLAGS_%o) $(INCLUDES) `$(PKG_CONFIG) --cflags $(LIBS) $(LIBS_CFLAGS)` -o %o |> %B.o !cxx = | $(GENODE_DIR)/ |> ^o CXX %b^ @(CC_WRAPPER) $(CXX) $(DEFINES) $(CXXFLAGS) $(CXXFLAGS_%e) $(CXXFLAGS_%f) `$(PKG_CONFIG) --cflags $(LIBS)` $(INCLUDES) -c %f -o %o |> %B.o @@ -171,3 +172,29 @@ PKG_CONFIG = PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) pkg-config !ld = | $(GENODE_DIR)/ $(GENODE_DIR)/ |> ^o LD %o^ $(LD) $(LDFLAGS) `$(PKG_CONFIG) --libs $(LIBS)` %f -o %o |> !strip = |> strip -o %o %f |> + +&LD_SCRIPT_SO = upstream/repos/base/src/ld/genode_rel.ld + +ifeq (@(TUP_ARCH),x86_64) + ASM_SYM_DEPENDENCY = movq \1@GOTPCREL(%rip), %rax +else + ASM_SYM_DEPENDENCY = .long \1 +endif + +!abi_stub = |> ^ STUB %o^\ + sed \ + -e "s/^\(\w\+\) D \(\w\+\)\$/.data; .global \1; .type \1,%%object; .size \1,\2; \1:/p" \ + -e "s/^\(\w\+\) V/.data; .weak \1; .type \1,%%object; \1:/p" \ + -e "s/^\(\w\+\) T/.text; .global \1; .type \1,%%function; \1:/p" \ + -e "s/^\(\w\+\) R \(\w\+\)\$/.section .rodata; .global \1; .type \1,%%object; .size \1,\2; \1:/p" \ + -e "s/^\(\w\+\) W/.text; .weak \1; .type \1,%%function; \1:/p" \ + -e "s/^\(\w\+\) B \(\w\+\)\$/.bss; .global \1; .type \1,%%object; .size \1,\2; \1:/p" \ + -e "s/^\(\w\+\) U/.text; .global \1; $(ASM_SYM_DEPENDENCY)/p" \ + %f \ + | $(CC) -x assembler -c - -o tmp.o; \ + $(LD) -o %o \ + -shared \ + -T &(LD_SCRIPT_SO) \ + tmp.o; \ + rm tmp.o; \ +|> $(STUB_DIR)/%B.lib.so $(GENODE_DIR)/ diff --git a/ports/chuck/Tupfile b/ports/chuck/Tupfile index ab79e9b81..4888076c5 100644 --- a/ports/chuck/Tupfile +++ b/ports/chuck/Tupfile @@ -1,7 +1,39 @@ +TARGET_NAME = chuck +LIBS += sndfile stdcxx libc posix + +LEX=flex +YACC=bison include_rules -: |> $(NIX_BUILD) .. --out-link port \ - --attr source --attr include |> port-source port-include {port} +SOURCE_LINK = port-source +# : |> $(NIX_BUILD) .. --out-link port --attr %d.source |> $(SOURCE_LINK) {port} +: |> ln -s /home/repo/chuck/src %o |> $(SOURCE_LINK) {port} -: port-source |> cp %f/%d.pc %o \ - |> $(PKG_CONFIG_DIR)/%d.pc $(GENODE_DIR)/ +DEFINES += \ + -D__PLATFORM_GENODE__ \ + -D__GENODE_AUDIO__ \ + -D__DISABLE_MIDI__ \ + -DCPU_IS_LITTLE_ENDIAN=1 \ + -D__CK_SNDFILE_NATIVE__ \ + -DHAVE_SYS_SOCKET_H \ + -DHAVE_POLL \ + -Dloff_t=off_t \ + -DPATH_MAX=1024 \ + -DHAVE_UNISTD_H \ + -DMAX_PATH=1024 \ + +INCLUDES += -I. +INCLUDES += -I$(SOURCE_LINK)/core + +: $(SOURCE_LINK) |> \ + $(YACC) -dv -b chuck %f/core/chuck.y \ +|> chuck.output chuck.tab.c chuck.tab.h {port} + +run ./port_rules.sh $(SOURCE_LINK) core.files +run ./port_rules.sh $(SOURCE_LINK) host.files + +LDFLAGS += -L$(STUB_DIR) +: {obj} |> !prg |> %d {bin} + +: {bin} |> !collect_bin |> +include &(BIN_RULES) diff --git a/ports/chuck/core.files b/ports/chuck/core.files new file mode 100644 index 000000000..edfd2e944 --- /dev/null +++ b/ports/chuck/core.files @@ -0,0 +1,133 @@ +core/ugen_osc.cpp +core/chuck_symbol.h +core/util_buffers.cpp +core/lo/lo_lowlevel.h +core/lo/lo_throw.h +core/lo/blob.c +core/lo/message.c +core/lo/lo_types_internal.h +core/lo/lo_macros.h +core/lo/lo_types.h +core/lo/lo_osc_types.h +core/lo/send.c +core/lo/bundle.c +core/lo/timetag.c +core/lo/lo_errors.h +core/lo/config.h +core/lo/pattern_match.c +core/lo/server_thread.c +core/lo/lo_endian.h +core/lo/address.c +core/lo/lo_internal.h +core/lo/lo.h +core/lo/server.c +core/lo/method.c +core/chuck_utils.cpp +core/chuck_lang.cpp +core/util_network.h +core/util_sndfile.h +core/ulib_regex.cpp +core/chuck_table.h +core/util_opsc.cpp +core/rtmidi.h +core/chuck_frame.cpp +core/ugen_stk.h +core/util_serial.h +core/chuck_ugen.h +core/util_raw.h +core/makefile +core/ulib_machine.cpp +core/chuck_compile.h +core/ulib_opsc.cpp +core/dirent_win32.h +core/chuck_symbol.cpp +core/ulib_math.cpp +core/util_opsc.h +core/chuck_oo.cpp +core/util_math.c +core/util_hid.cpp +core/ulib_math.h +core/chuck_parse.h +core/ugen_xxx.cpp +core/util_thread.h +core/chuck_vm.cpp +core/chuck_errmsg.h +core/chuck_stats.cpp +core/chuck_scan.cpp +core/util_string.h +core/ulib_regex.h +core/util_hid.h +core/ugen_xxx.h +core/rtmidi.cpp +core/uana_extract.cpp +core/chuck_instr.h +core/chuck_otf.cpp +core/chuck_carrier.cpp +core/chuck_dl.h +core/ugen_osc.h +core/chuck_type.h +core/chuck_dl.cpp +core/ugen_filter.cpp +core/makefile.x/makefile.alsa +core/makefile.x/makefile.jack +core/makefile.x/makefile.audicle +core/makefile.x/makefile.rl +core/makefile.x/makefile.osx +core/makefile.x/makefile.pulse +core/makefile.x/makefile.win32 +core/util_network.c +core/chuck_emit.h +core/util_console.cpp +core/chuck_win32.c +core/chuck_absyn.cpp +core/chuck_stats.h +core/ugen_stk.cpp +core/ulib_std.cpp +#core/util_console.h +core/chuck.y +core/util_sndfile.c +core/ulib_opsc.h +core/midiio_rtmidi.h +core/chuck_instr.cpp +core/chuck_carrier.h +core/chuck_absyn.h +core/uana_xform.h +core/util_string.cpp +core/util_xforms.h +core/chuck_otf.h +core/util_xforms.c +core/chuck.cpp +core/util_math.h +core/chuck_parse.cpp +core/chuck_errmsg.cpp +core/util_buffers.h +core/chuck.lex +core/chuck_ugen.cpp +core/chuck_oo.h +core/ulib_machine.h +core/midiio_rtmidi.cpp +core/ugen_filter.h +core/chuck_win32.h +core/chuck.h +core/hidio_sdl.cpp +core/chuck_scan.h +core/chuck_table.cpp +core/chuck_shell.h +core/chuck_type.cpp +core/chuck_emit.cpp +core/chuck_def.h +core/uana_extract.h +core/util_serial.cpp +core/ulib_std.h +core/chuck_io.h +core/chuck_frame.h +core/util_thread.cpp +core/chuck_compile.cpp +core/hidio_sdl.h +core/chuck_io.cpp +core/chuck_vm.h +core/chuck_lang.h +core/chuck_shell.cpp +core/chuck_utils.h +core/uana_xform.cpp +core/util_raw.c diff --git a/ports/chuck/default.nix b/ports/chuck/default.nix index 496472b51..905898f24 100644 --- a/ports/chuck/default.nix +++ b/ports/chuck/default.nix @@ -1,10 +1,18 @@ -{ preparePort, chuck }: +{ preparePort, fetchFromGitHub }: preparePort rec { - inherit (chuck) name version src; + name = "chuck"; + + src = fetchFromGitHub { + owner = "ccrma"; + repo = "chuck"; + rev = "cedce61a1218bd165dfc6b9e9b32413a89f51014"; + sha256 = "1hxxh3rin76mbl2gymcb8z7v7s66vsl92g38s56i8ygcy1gr5lkw"; + }; + outputs = [ "source" ]; - sourceRoot = "${name}/src"; + sourceRoot = "source/src"; installPhase = '' diff --git a/ports/chuck/host.files b/ports/chuck/host.files new file mode 100644 index 000000000..8e5d0e0d0 --- /dev/null +++ b/ports/chuck/host.files @@ -0,0 +1,4 @@ +host/RtAudio/RtAudio.cpp +host/chuck_audio.cpp +host/chuck_console.cpp +host/chuck_main.cpp diff --git a/ports/chuck/port_rules.sh b/ports/chuck/port_rules.sh new file mode 100755 index 000000000..8ac7132a2 --- /dev/null +++ b/ports/chuck/port_rules.sh @@ -0,0 +1,16 @@ +#!/bin/sh + +LINK=$1 +shift + +for LIST in $@ +do + grep '[[:alnum:]].*\.c$' ${LIST} | while read f + do + echo ": {port} |> !cc_port ${LINK}/${f} |> ${f}.o {obj}" + done + grep '[[:alnum:]].*\.cpp$' ${LIST} | while read f + do + echo ": {port} |> !cxx_port ${LINK}/${f} |> ${f}.o {obj}" + done +done diff --git a/ports/chuck/regex.files b/ports/chuck/regex.files new file mode 100644 index 000000000..0e4a03f40 --- /dev/null +++ b/ports/chuck/regex.files @@ -0,0 +1,28 @@ +core/regex/tre-ast.c +core/regex/tre-match-backtrack.c +core/regex/tre-match-parallel.c +core/regex/tre-mem.c +core/regex/tre-compile.c +core/regex/tre-stack.c +core/regex/tre-internal.h +core/regex/regex.h +core/regex/tre-compile.h +core/regex/tre-filter.h +core/regex/tre-config.h +core/regex/LICENSE.txt +core/regex/xmalloc.h +core/regex/tre-match-approx.c +core/regex/config.h +core/regex/tre-parse.c +core/regex/tre-ast.h +core/regex/tre-match-utils.h +core/regex/regcomp.c +core/regex/tre-parse.h +core/regex/tre-mem.h +core/regex/tre-stack.h +core/regex/tre-filter.c +core/regex/regexec.c +core/regex/regerror.c +core/regex/tre.h +core/regex/README.txt +core/regex/xmalloc.c diff --git a/ports/libsndfile/Tupfile b/ports/libsndfile/Tupfile new file mode 100644 index 000000000..7a254992a --- /dev/null +++ b/ports/libsndfile/Tupfile @@ -0,0 +1,9 @@ +include_rules + +: |> $(NIX_BUILD) .. --out-link port \ + --attr %d.source --attr %d.include |> port-source port-include {port} + +: port-source |> cp %f/sndfile.pc %o \ + |> $(PKG_CONFIG_DIR)/sndfile.pc $(GENODE_DIR)/ + +: sndfile.symbols |> !abi_stub |> diff --git a/ports/libsndfile/default.nix b/ports/libsndfile/default.nix new file mode 100644 index 000000000..de389f397 --- /dev/null +++ b/ports/libsndfile/default.nix @@ -0,0 +1,25 @@ +{ preparePort, libsndfile }: + +preparePort rec { + inherit (libsndfile) name src; + outputs = [ "source" "include" ]; + buildPhase = + '' + sed \ + -e "s|@includedir@|$include|" \ + -e 's/@VERSION@/${(builtins.parseDrvName name).version}/' \ + -e 's/^Libs:.*/Libs: -l:sndfile.lib.so/' \ + -e '/@/d' \ + < sndfile.pc.in > src/sndfile.pc + sed \ + -e 's/@TYPEOF_SF_COUNT_T@/size_t/' \ + -e 's/@SF_COUNT_MAX@/9223372036854775807/' \ + < src/sndfile.h.in > src/sndfile.h + ''; + installPhase = + '' + cp -rv src $source + mkdir $include + cp src/sndfile.h $include/ + ''; +} diff --git a/ports/libsndfile/sndfile.symbols b/ports/libsndfile/sndfile.symbols new file mode 100644 index 000000000..c5a01f4e3 --- /dev/null +++ b/ports/libsndfile/sndfile.symbols @@ -0,0 +1,316 @@ +BitBufferAdvance T +BitBufferByteAlign T +BitBufferGetPosition T +BitBufferInit T +BitBufferPeek T +BitBufferPeekOne T +BitBufferRead T +BitBufferReadOne T +BitBufferReadSmall T +BitBufferReset T +BitBufferRewind T +BitBufferUnpackBERSize T +BitBufferWrite T +Gsm_Coder T +Gsm_Decoder T +Gsm_LPC_Analysis T +Gsm_Long_Term_Predictor T +Gsm_Long_Term_Synthesis_Filtering T +Gsm_Preprocess T +Gsm_RPE_Decoding T +Gsm_RPE_Encoding T +Gsm_Short_Term_Analysis_Filter T +Gsm_Short_Term_Synthesis_Filter T +adpcm_decode T +adpcm_encode T +aiff_caf_find_channel_layout_tag T +aiff_caf_of_channel_layout_tag T +aiff_ima_init T +aiff_open T +alac_decode T +alac_decoder_init T +alac_encode T +alac_encoder_init T +alac_get_desc_chunk_items T +alac_get_magic_cookie T +alac_get_magic_cookie_size T +alac_get_source_format T +alac_init T +alac_set_fastmode T +alaw_init T +append_snprintf T +au_open T +audio_detect T +avr_open T +broadcast_var_alloc T +broadcast_var_get T +broadcast_var_set T +caf_open T +cart_var_alloc T +cart_var_get T +cart_var_set T +copyPredictorTo20 T +copyPredictorTo24 T +copyPredictorTo24Shift T +copyPredictorTo32 T +copyPredictorTo32Shift T +copy_coefs T +dither_init T +double64_be_read T +double64_be_write T +double64_init T +double64_le_read T +double64_le_write T +dwd_open T +dwvw_init T +dyn_comp T +dyn_decomp T +flac_init T +flac_open T +float32_be_read T +float32_be_write T +float32_init T +float32_le_read T +float32_le_write T +g721_decoder T +g721_encoder T +g723_16_decoder T +g723_16_encoder T +g723_24_decoder T +g723_24_encoder T +g723_40_decoder T +g723_40_encoder T +g72x_decode_block T +g72x_encode_block T +g72x_init T +g72x_reader_init T +g72x_writer_init T +gsm610_init T +gsm_A D 16 +gsm_B D 16 +gsm_DLB D 8 +gsm_FAC D 16 +gsm_H D 22 +gsm_INVA D 16 +gsm_L_add T +gsm_L_asl T +gsm_L_asr T +gsm_L_mult T +gsm_L_sub T +gsm_MAC D 16 +gsm_MIC D 16 +gsm_NRFAC D 16 +gsm_QLB D 8 +gsm_abs T +gsm_add T +gsm_asl T +gsm_asr T +gsm_create T +gsm_decode T +gsm_destroy T +gsm_div T +gsm_encode T +gsm_init T +gsm_mult T +gsm_mult_r T +gsm_norm T +gsm_option T +gsm_sub T +htk_open T +id3_skip T +ima_oki_adpcm_decode_block T +ima_oki_adpcm_encode_block T +ima_oki_adpcm_init T +init_coefs T +interleave_init T +ircam_open T +kALACEncoderMagic R 4 +kDefaultMixBits R 4 +kDefaultMixRes R 4 +kDefaultNumUV R 4 +kMaxBitDepth R 4 +kMaxRes R 4 +kMaxSampleSize R 4 +kMaxUV R 4 +kMinUV R 4 +macos_guess_file_type T +mat4_open T +mat5_open T +mix16 T +mix20 T +mix24 T +mix32 T +mpc2k_open T +nist_open T +ogg_open T +ogg_opus_open T +ogg_pcm_open T +ogg_speex_open T +ogg_vorbis_open T +paf_open T +pc_block T +pcm_init T +predictor_pole T +predictor_zero T +private_init_state T +psf_allocate T +psf_asciiheader_printf T +psf_binheader_readf T +psf_binheader_writef T +psf_calc_max_all_channels T +psf_calc_signal_max T +psf_close_rsrc T +psf_cues_alloc T +psf_cues_dup T +psf_d2i_array T +psf_d2i_clip_array T +psf_d2s_array T +psf_d2s_clip_array T +psf_decode_frame_count T +psf_default_seek T +psf_f2i_array T +psf_f2i_clip_array T +psf_f2s_array T +psf_f2s_clip_array T +psf_fclose T +psf_fgets T +psf_file_valid T +psf_find_read_chunk_iterator T +psf_find_read_chunk_m32 T +psf_find_read_chunk_str T +psf_fopen T +psf_fread T +psf_fseek T +psf_fsync T +psf_ftell T +psf_ftruncate T +psf_fwrite T +psf_get_chunk_iterator T +psf_get_cues T +psf_get_date_str T +psf_get_filelen T +psf_get_format_info T +psf_get_format_major T +psf_get_format_major_count T +psf_get_format_simple T +psf_get_format_simple_count T +psf_get_format_subtype T +psf_get_format_subtype_count T +psf_get_max_all_channels T +psf_get_signal_max T +psf_get_string T +psf_hexdump T +psf_init_files T +psf_instrument_alloc T +psf_is_pipe T +psf_location_string_count T +psf_log_SF_INFO T +psf_log_printf T +psf_memset T +psf_next_chunk_iterator T +psf_open_file T +psf_open_rsrc T +psf_open_tmpfile T +psf_rand_int32 T +psf_sanitize_string T +psf_save_write_chunk T +psf_set_file T +psf_set_stdio T +psf_set_string T +psf_store_read_chunk_str T +psf_store_read_chunk_u32 T +psf_store_string T +psf_strlcpy_crlf T +psf_use_rsrc T +pvf_open T +quantize T +raw_open T +reconstruct T +rf64_open T +rx2_open T +s_bitwidth_to_subformat T +sd2_open T +sds_open T +set_ag_params T +set_standard_ag_params T +sf_close T +sf_command T +sf_current_byterate T +sf_errno B 4 +sf_error T +sf_error_number T +sf_error_str T +sf_format_check T +sf_get_chunk_data T +sf_get_chunk_iterator T +sf_get_chunk_size T +sf_get_string T +sf_next_chunk_iterator T +sf_open T +sf_open_fd T +sf_open_virtual T +sf_perror T +sf_read_double T +sf_read_float T +sf_read_int T +sf_read_raw T +sf_read_short T +sf_readf_double T +sf_readf_float T +sf_readf_int T +sf_readf_short T +sf_seek T +sf_set_chunk T +sf_set_string T +sf_strerror T +sf_version_string T +sf_write_double T +sf_write_float T +sf_write_int T +sf_write_raw T +sf_write_short T +sf_write_sync T +sf_writef_double T +sf_writef_float T +sf_writef_int T +sf_writef_short T +step_size T +str_of_endianness T +str_of_major_format T +str_of_minor_format T +str_of_open_mode T +subformat_to_bytewidth T +svx_open T +txw_open T +u_bitwidth_to_subformat T +ulaw_init T +unmix16 T +unmix20 T +unmix24 T +unmix32 T +unpc_block T +update T +voc_open T +vox_adpcm_init T +w64_open T +wav_open T +wavlike_analyze T +wavlike_format_str T +wavlike_gen_channel_mask T +wavlike_ima_init T +wavlike_msadpcm_init T +wavlike_msadpcm_write_adapt_coeffs T +wavlike_read_bext_chunk T +wavlike_read_cart_chunk T +wavlike_read_fmt_chunk T +wavlike_read_peak_chunk T +wavlike_srate2blocksize T +wavlike_subchunk_parse T +wavlike_write_bext_chunk T +wavlike_write_cart_chunk T +wavlike_write_custom_chunks T +wavlike_write_guid T +wavlike_write_peak_chunk T +wavlike_write_strings T +wve_open T +xi_open T diff --git a/ports/rtaudio/Tupfile b/ports/rtaudio/Tupfile index ab79e9b81..6838bf428 100644 --- a/ports/rtaudio/Tupfile +++ b/ports/rtaudio/Tupfile @@ -1,7 +1,7 @@ include_rules : |> $(NIX_BUILD) .. --out-link port \ - --attr source --attr include |> port-source port-include {port} + --attr %d.source --attr %d.include |> port-source port-include {port} : port-source |> cp %f/%d.pc %o \ |> $(PKG_CONFIG_DIR)/%d.pc $(GENODE_DIR)/