From 551ed00a32f93d28f5174b089d521cdb39280cd8 Mon Sep 17 00:00:00 2001 From: sam Date: Mon, 28 Oct 2024 13:03:37 +1300 Subject: [PATCH] first commit --- .gitignore | 8 + examples/helloworld/main.c | 5 + include/platforms/linux-amd64/syscall.h | 333 ++++++++++++++++++++++++ include/platforms/linux-arm64/syscall.h | 276 ++++++++++++++++++++ include/syscall.h | 12 + src/platforms/linux-amd64/entry.s | 4 + src/platforms/linux-amd64/syscall.s | 12 + src/platforms/linux-arm64/entry.s | 5 + src/platforms/linux-arm64/syscall.s | 12 + src/stdlib.c | 5 + xmake.lua | 33 +++ 11 files changed, 705 insertions(+) create mode 100644 .gitignore create mode 100644 examples/helloworld/main.c create mode 100644 include/platforms/linux-amd64/syscall.h create mode 100644 include/platforms/linux-arm64/syscall.h create mode 100644 include/syscall.h create mode 100644 src/platforms/linux-amd64/entry.s create mode 100644 src/platforms/linux-amd64/syscall.s create mode 100644 src/platforms/linux-arm64/entry.s create mode 100644 src/platforms/linux-arm64/syscall.s create mode 100644 src/stdlib.c create mode 100644 xmake.lua diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1521057 --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +# Xmake cache +.xmake/ +build/ + +# MacOS Cache +.DS_Store + + diff --git a/examples/helloworld/main.c b/examples/helloworld/main.c new file mode 100644 index 0000000..3de34ec --- /dev/null +++ b/examples/helloworld/main.c @@ -0,0 +1,5 @@ +#include + +int main() { + exit(10); +} diff --git a/include/platforms/linux-amd64/syscall.h b/include/platforms/linux-amd64/syscall.h new file mode 100644 index 0000000..175c336 --- /dev/null +++ b/include/platforms/linux-amd64/syscall.h @@ -0,0 +1,333 @@ +#define sys_read 0 +#define sys_write 1 +#define sys_open 2 +#define sys_close 3 +#define sys_stat 4 +#define sys_fstat 5 +#define sys_lstat 6 +#define sys_poll 7 +#define sys_lseek 8 +#define sys_mmap 9 +#define sys_mprotect 10 +#define sys_munmap 11 +#define sys_brk 12 +#define sys_rt_sigaction 13 +#define sys_rt_sigprocmask 14 +#define sys_rt_sigreturn 15 +#define sys_ioctl 16 +#define sys_pread64 17 +#define sys_pwrite64 18 +#define sys_readv 19 +#define sys_writev 20 +#define sys_access 21 +#define sys_pipe 22 +#define sys_select 23 +#define sys_sched_yield 24 +#define sys_mremap 25 +#define sys_msync 26 +#define sys_mincore 27 +#define sys_madvise 28 +#define sys_shmget 29 +#define sys_shmat 30 +#define sys_shmctl 31 +#define sys_dup 32 +#define sys_dup2 33 +#define sys_pause 34 +#define sys_nanosleep 35 +#define sys_getitimer 36 +#define sys_alarm 37 +#define sys_setitimer 38 +#define sys_getpid 39 +#define sys_sendfile 40 +#define sys_socket 41 +#define sys_connect 42 +#define sys_accept 43 +#define sys_sendto 44 +#define sys_recvfrom 45 +#define sys_sendmsg 46 +#define sys_recvmsg 47 +#define sys_shutdown 48 +#define sys_bind 49 +#define sys_listen 50 +#define sys_getsockname 51 +#define sys_getpeername 52 +#define sys_socketpair 53 +#define sys_setsockopt 54 +#define sys_getsockopt 55 +#define sys_clone 56 +#define sys_fork 57 +#define sys_vfork 58 +#define sys_execve 59 +#define sys_exit 60 +#define sys_wait4 61 +#define sys_kill 62 +#define sys_uname 63 +#define sys_semget 64 +#define sys_semop 65 +#define sys_semctl 66 +#define sys_shmdt 67 +#define sys_msgget 68 +#define sys_msgsnd 69 +#define sys_msgrcv 70 +#define sys_msgctl 71 +#define sys_fcntl 72 +#define sys_flock 73 +#define sys_fsync 74 +#define sys_fdatasync 75 +#define sys_truncate 76 +#define sys_ftruncate 77 +#define sys_getdents 78 +#define sys_getcwd 79 +#define sys_chdir 80 +#define sys_fchdir 81 +#define sys_rename 82 +#define sys_mkdir 83 +#define sys_rmdir 84 +#define sys_creat 85 +#define sys_link 86 +#define sys_unlink 87 +#define sys_symlink 88 +#define sys_readlink 89 +#define sys_chmod 90 +#define sys_fchmod 91 +#define sys_chown 92 +#define sys_fchown 93 +#define sys_lchown 94 +#define sys_umask 95 +#define sys_gettimeofday 96 +#define sys_getrlimit 97 +#define sys_getrusage 98 +#define sys_sysinfo 99 +#define sys_times 100 +#define sys_ptrace 101 +#define sys_getuid 102 +#define sys_syslog 103 +#define sys_getgid 104 +#define sys_setuid 105 +#define sys_setgid 106 +#define sys_geteuid 107 +#define sys_getegid 108 +#define sys_setpgid 109 +#define sys_getppid 110 +#define sys_getpgrp 111 +#define sys_setsid 112 +#define sys_setreuid 113 +#define sys_setregid 114 +#define sys_getgroups 115 +#define sys_setgroups 116 +#define sys_setresuid 117 +#define sys_getresuid 118 +#define sys_setresgid 119 +#define sys_getresgid 120 +#define sys_getpgid 121 +#define sys_setfsuid 122 +#define sys_setfsgid 123 +#define sys_getsid 124 +#define sys_capget 125 +#define sys_capset 126 +#define sys_rt_sigpending 127 +#define sys_rt_sigtimedwait 128 +#define sys_rt_sigqueueinfo 129 +#define sys_rt_sigsuspend 130 +#define sys_sigaltstack 131 +#define sys_utime 132 +#define sys_mknod 133 +#define sys_uselib 134 +#define sys_personality 135 +#define sys_ustat 136 +#define sys_statfs 137 +#define sys_fstatfs 138 +#define sys_sysfs 139 +#define sys_getpriority 140 +#define sys_setpriority 141 +#define sys_sched_setparam 142 +#define sys_sched_getparam 143 +#define sys_sched_setscheduler 144 +#define sys_sched_getscheduler 145 +#define sys_sched_get_priority_max 146 +#define sys_sched_get_priority_min 147 +#define sys_sched_rr_get_interval 148 +#define sys_mlock 149 +#define sys_munlock 150 +#define sys_mlockall 151 +#define sys_munlockall 152 +#define sys_vhangup 153 +#define sys_modify_ldt 154 +#define sys_pivot_root 155 +#define sys__sysctl 156 +#define sys_prctl 157 +#define sys_arch_prctl 158 +#define sys_adjtimex 159 +#define sys_setrlimit 160 +#define sys_chroot 161 +#define sys_sync 162 +#define sys_acct 163 +#define sys_settimeofday 164 +#define sys_mount 165 +#define sys_umount2 166 +#define sys_swapon 167 +#define sys_swapoff 168 +#define sys_reboot 169 +#define sys_sethostname 170 +#define sys_setdomainname 171 +#define sys_iopl 172 +#define sys_ioperm 173 +#define sys_create_module 174 +#define sys_init_module 175 +#define sys_delete_module 176 +#define sys_get_kernel_syms 177 +#define sys_query_module 178 +#define sys_quotactl 179 +#define sys_nfsservctl 180 +#define sys_getpmsg 181 +#define sys_putpmsg 182 +#define sys_afs_syscall 183 +#define sys_tuxcall 184 +#define sys_security 185 +#define sys_gettid 186 +#define sys_readahead 187 +#define sys_setxattr 188 +#define sys_lsetxattr 189 +#define sys_fsetxattr 190 +#define sys_getxattr 191 +#define sys_lgetxattr 192 +#define sys_fgetxattr 193 +#define sys_listxattr 194 +#define sys_llistxattr 195 +#define sys_flistxattr 196 +#define sys_removexattr 197 +#define sys_lremovexattr 198 +#define sys_fremovexattr 199 +#define sys_tkill 200 +#define sys_time 201 +#define sys_futex 202 +#define sys_sched_setaffinity 203 +#define sys_sched_getaffinity 204 +#define sys_set_thread_area 205 +#define sys_io_setup 206 +#define sys_io_destroy 207 +#define sys_io_getevents 208 +#define sys_io_submit 209 +#define sys_io_cancel 210 +#define sys_get_thread_area 211 +#define sys_lookup_dcookie 212 +#define sys_epoll_create 213 +#define sys_epoll_ctl_old 214 +#define sys_epoll_wait_old 215 +#define sys_remap_file_pages 216 +#define sys_getdents64 217 +#define sys_set_tid_address 218 +#define sys_restart_syscall 219 +#define sys_semtimedop 220 +#define sys_fadvise64 221 +#define sys_timer_create 222 +#define sys_timer_settime 223 +#define sys_timer_gettime 224 +#define sys_timer_getoverrun 225 +#define sys_timer_delete 226 +#define sys_clock_settime 227 +#define sys_clock_gettime 228 +#define sys_clock_getres 229 +#define sys_clock_nanosleep 230 +#define sys_exit_group 231 +#define sys_epoll_wait 232 +#define sys_epoll_ctl 233 +#define sys_tgkill 234 +#define sys_utimes 235 +#define sys_vserver 236 +#define sys_mbind 237 +#define sys_set_mempolicy 238 +#define sys_get_mempolicy 239 +#define sys_mq_open 240 +#define sys_mq_unlink 241 +#define sys_mq_timedsend 242 +#define sys_mq_timedreceive 243 +#define sys_mq_notify 244 +#define sys_mq_getsetattr 245 +#define sys_kexec_load 246 +#define sys_waitid 247 +#define sys_add_key 248 +#define sys_request_key 249 +#define sys_keyctl 250 +#define sys_ioprio_set 251 +#define sys_ioprio_get 252 +#define sys_inotify_init 253 +#define sys_inotify_add_watch 254 +#define sys_inotify_rm_watch 255 +#define sys_migrate_pages 256 +#define sys_openat 257 +#define sys_mkdirat 258 +#define sys_mknodat 259 +#define sys_fchownat 260 +#define sys_futimesat 261 +#define sys_newfstatat 262 +#define sys_unlinkat 263 +#define sys_renameat 264 +#define sys_linkat 265 +#define sys_symlinkat 266 +#define sys_readlinkat 267 +#define sys_fchmodat 268 +#define sys_faccessat 269 +#define sys_pselect6 270 +#define sys_ppoll 271 +#define sys_unshare 272 +#define sys_set_robust_list 273 +#define sys_get_robust_list 274 +#define sys_splice 275 +#define sys_tee 276 +#define sys_sync_file_range 277 +#define sys_vmsplice 278 +#define sys_move_pages 279 +#define sys_utimensat 280 +#define sys_epoll_pwait 281 +#define sys_signalfd 282 +#define sys_timerfd_create 283 +#define sys_eventfd 284 +#define sys_fallocate 285 +#define sys_timerfd_settime 286 +#define sys_timerfd_gettime 287 +#define sys_accept4 288 +#define sys_signalfd4 289 +#define sys_eventfd2 290 +#define sys_epoll_create1 291 +#define sys_dup3 292 +#define sys_pipe2 293 +#define sys_inotify_init1 294 +#define sys_preadv 295 +#define sys_pwritev 296 +#define sys_rt_tgsigqueueinfo 297 +#define sys_perf_event_open 298 +#define sys_recvmmsg 299 +#define sys_fanotify_init 300 +#define sys_fanotify_mark 301 +#define sys_prlimit64 302 +#define sys_name_to_handle_at 303 +#define sys_open_by_handle_at 304 +#define sys_clock_adjtime 305 +#define sys_syncfs 306 +#define sys_sendmmsg 307 +#define sys_setns 308 +#define sys_getcpu 309 +#define sys_process_vm_readv 310 +#define sys_process_vm_writev 311 +#define sys_kcmp 312 +#define sys_finit_module 313 +#define sys_sched_setattr 314 +#define sys_sched_getattr 315 +#define sys_renameat2 316 +#define sys_seccomp 317 +#define sys_getrandom 318 +#define sys_memfd_create 319 +#define sys_kexec_file_load 320 +#define sys_bpf 321 +#define sys_execveat 322 +#define sys_userfaultfd 323 +#define sys_membarrier 324 +#define sys_mlock2 325 +#define sys_copy_file_range 326 +#define sys_preadv2 327 +#define sys_pwritev2 328 +#define sys_pkey_mprotect 329 +#define sys_pkey_alloc 330 +#define sys_pkey_free 331 +#define sys_statx 332 diff --git a/include/platforms/linux-arm64/syscall.h b/include/platforms/linux-arm64/syscall.h new file mode 100644 index 0000000..590c625 --- /dev/null +++ b/include/platforms/linux-arm64/syscall.h @@ -0,0 +1,276 @@ +#define sys_io_setup 0 +#define sys_io_destroy 1 +#define sys_io_submit 2 +#define sys_io_cancel 3 +#define sys_io_getevents 4 +#define sys_setxattr 5 +#define sys_lsetxattr 6 +#define sys_fsetxattr 7 +#define sys_getxattr 8 +#define sys_lgetxattr 9 +#define sys_fgetxattr 10 +#define sys_listxattr 11 +#define sys_llistxattr 12 +#define sys_flistxattr 13 +#define sys_removexattr 14 +#define sys_lremovexattr 15 +#define sys_fremovexattr 16 +#define sys_getcwd 17 +#define sys_lookup_dcookie 18 +#define sys_eventfd2 19 +#define sys_epoll_create1 20 +#define sys_epoll_ctl 21 +#define sys_epoll_pwait 22 +#define sys_dup 23 +#define sys_dup3 24 +#define sys_fcntl 25 +#define sys_inotify_init1 26 +#define sys_inotify_add_watch 27 +#define sys_inotify_rm_watch 28 +#define sys_ioctl 29 +#define sys_ioprio_set 30 +#define sys_ioprio_get 31 +#define sys_flock 32 +#define sys_mknodat 33 +#define sys_mkdirat 34 +#define sys_unlinkat 35 +#define sys_symlinkat 36 +#define sys_linkat 37 +#define sys_renameat 38 +#define sys_umount2 39 +#define sys_mount 40 +#define sys_pivot_root 41 +#define sys_nfsservctl 42 +#define sys_statfs 43 +#define sys_fstatfs 44 +#define sys_truncate 45 +#define sys_ftruncate 46 +#define sys_fallocate 47 +#define sys_faccessat 48 +#define sys_chdir 49 +#define sys_fchdir 50 +#define sys_chroot 51 +#define sys_fchmod 52 +#define sys_fchmodat 53 +#define sys_fchownat 54 +#define sys_fchown 55 +#define sys_openat 56 +#define sys_close 57 +#define sys_vhangup 58 +#define sys_pipe2 59 +#define sys_quotactl 60 +#define sys_getdents64 61 +#define sys_lseek 62 +#define sys_read 63 +#define sys_write 64 +#define sys_readv 65 +#define sys_writev 66 +#define sys_pread64 67 +#define sys_pwrite64 68 +#define sys_preadv 69 +#define sys_pwritev 70 +#define sys_sendfile 71 +#define sys_pselect6 72 +#define sys_ppoll 73 +#define sys_signalfd4 74 +#define sys_vmsplice 75 +#define sys_splice 76 +#define sys_tee 77 +#define sys_readlinkat 78 +#define sys_newfstatat 79 +#define sys_fstat 80 +#define sys_sync 81 +#define sys_fsync 82 +#define sys_fdatasync 83 +#define sys_sync_file_range 84 +#define sys_timerfd_create 85 +#define sys_timerfd_settime 86 +#define sys_timerfd_gettime 87 +#define sys_utimensat 88 +#define sys_acct 89 +#define sys_capget 90 +#define sys_capset 91 +#define sys_personality 92 +#define sys_exit 93 +#define sys_exit_group 94 +#define sys_waitid 95 +#define sys_set_tid_address 96 +#define sys_unshare 97 +#define sys_futex 98 +#define sys_set_robust_list 99 +#define sys_get_robust_list 100 +#define sys_nanosleep 101 +#define sys_getitimer 102 +#define sys_setitimer 103 +#define sys_kexec_load 104 +#define sys_init_module 105 +#define sys_delete_module 106 +#define sys_timer_create 107 +#define sys_timer_gettime 108 +#define sys_timer_getoverrun 109 +#define sys_timer_settime 110 +#define sys_timer_delete 111 +#define sys_clock_settime 112 +#define sys_clock_gettime 113 +#define sys_clock_getres 114 +#define sys_clock_nanosleep 115 +#define sys_syslog 116 +#define sys_ptrace 117 +#define sys_sched_setparam 118 +#define sys_sched_setscheduler 119 +#define sys_sched_getscheduler 120 +#define sys_sched_getparam 121 +#define sys_sched_setaffinity 122 +#define sys_sched_getaffinity 123 +#define sys_sched_yield 124 +#define sys_sched_get_priority_max 125 +#define sys_sched_get_priority_min 126 +#define sys_sched_rr_get_interval 127 +#define sys_restart_syscall 128 +#define sys_kill 129 +#define sys_tkill 130 +#define sys_tgkill 131 +#define sys_sigaltstack 132 +#define sys_rt_sigsuspend 133 +#define sys_rt_sigaction 134 +#define sys_rt_sigprocmask 135 +#define sys_rt_sigpending 136 +#define sys_rt_sigtimedwait 137 +#define sys_rt_sigqueueinfo 138 +#define sys_rt_sigreturn 139 +#define sys_setpriority 140 +#define sys_getpriority 141 +#define sys_reboot 142 +#define sys_setregid 143 +#define sys_setgid 144 +#define sys_setreuid 145 +#define sys_setuid 146 +#define sys_setresuid 147 +#define sys_getresuid 148 +#define sys_setresgid 149 +#define sys_getresgid 150 +#define sys_setfsuid 151 +#define sys_setfsgid 152 +#define sys_times 153 +#define sys_setpgid 154 +#define sys_getpgid 155 +#define sys_getsid 156 +#define sys_setsid 157 +#define sys_getgroups 158 +#define sys_setgroups 159 +#define sys_uname 160 +#define sys_sethostname 161 +#define sys_setdomainname 162 +#define sys_getrlimit 163 +#define sys_setrlimit 164 +#define sys_getrusage 165 +#define sys_umask 166 +#define sys_prctl 167 +#define sys_getcpu 168 +#define sys_gettimeofday 169 +#define sys_settimeofday 170 +#define sys_adjtimex 171 +#define sys_getpid 172 +#define sys_getppid 173 +#define sys_getuid 174 +#define sys_geteuid 175 +#define sys_getgid 176 +#define sys_getegid 177 +#define sys_gettid 178 +#define sys_sysinfo 179 +#define sys_mq_open 180 +#define sys_mq_unlink 181 +#define sys_mq_timedsend 182 +#define sys_mq_timedreceive 183 +#define sys_mq_notify 184 +#define sys_mq_getsetattr 185 +#define sys_msgget 186 +#define sys_msgctl 187 +#define sys_msgrcv 188 +#define sys_msgsnd 189 +#define sys_semget 190 +#define sys_semctl 191 +#define sys_semtimedop 192 +#define sys_semop 193 +#define sys_shmget 194 +#define sys_shmctl 195 +#define sys_shmat 196 +#define sys_shmdt 197 +#define sys_socket 198 +#define sys_socketpair 199 +#define sys_bind 200 +#define sys_listen 201 +#define sys_accept 202 +#define sys_connect 203 +#define sys_getsockname 204 +#define sys_getpeername 205 +#define sys_sendto 206 +#define sys_recvfrom 207 +#define sys_setsockopt 208 +#define sys_getsockopt 209 +#define sys_shutdown 210 +#define sys_sendmsg 211 +#define sys_recvmsg 212 +#define sys_readahead 213 +#define sys_brk 214 +#define sys_munmap 215 +#define sys_mremap 216 +#define sys_add_key 217 +#define sys_request_key 218 +#define sys_keyctl 219 +#define sys_clone 220 +#define sys_execve 221 +#define sys_mmap 222 +#define sys_fadvise64 223 +#define sys_swapon 224 +#define sys_swapoff 225 +#define sys_mprotect 226 +#define sys_msync 227 +#define sys_mlock 228 +#define sys_munlock 229 +#define sys_mlockall 230 +#define sys_munlockall 231 +#define sys_mincore 232 +#define sys_madvise 233 +#define sys_remap_file_pages 234 +#define sys_mbind 235 +#define sys_get_mempolicy 236 +#define sys_set_mempolicy 237 +#define sys_migrate_pages 238 +#define sys_move_pages 239 +#define sys_rt_tgsigqueueinfo 240 +#define sys_perf_event_open 241 +#define sys_accept4 242 +#define sys_recvmmsg 243 +#define sys_wait4 260 +#define sys_prlimit64 261 +#define sys_fanotify_init 262 +#define sys_fanotify_mark 263 +#define sys_name_to_handle_at 264 +#define sys_open_by_handle_at 265 +#define sys_clock_adjtime 266 +#define sys_syncfs 267 +#define sys_setns 268 +#define sys_sendmmsg 269 +#define sys_process_vm_readv 270 +#define sys_process_vm_writev 271 +#define sys_kcmp 272 +#define sys_finit_module 273 +#define sys_sched_setattr 274 +#define sys_sched_getattr 275 +#define sys_renameat2 276 +#define sys_seccomp 277 +#define sys_getrandom 278 +#define sys_memfd_create 279 +#define sys_bpf 280 +#define sys_execveat 281 +#define sys_userfaultfd 282 +#define sys_membarrier 283 +#define sys_mlock2 284 +#define sys_copy_file_range 285 +#define sys_preadv2 286 +#define sys_pwritev2 287 +#define sys_pkey_mprotect 288 +#define sys_pkey_alloc 289 +#define sys_pkey_free 290 +#define sys_statx 291 diff --git a/include/syscall.h b/include/syscall.h new file mode 100644 index 0000000..2c4e014 --- /dev/null +++ b/include/syscall.h @@ -0,0 +1,12 @@ +#ifndef __SYSCALL_H__ +#define __SYSCALL_H__ + +#if defined(__linux__) && defined(__aarch64__) +#include "platforms/linux-arm64/syscall.h" +#elif defined(__linux__) && defined(__amd64__) +#include "platforms/linux-amd64/syscall.h" +#endif + +extern int syscall(int nr, ...); + +#endif diff --git a/src/platforms/linux-amd64/entry.s b/src/platforms/linux-amd64/entry.s new file mode 100644 index 0000000..cc262a1 --- /dev/null +++ b/src/platforms/linux-amd64/entry.s @@ -0,0 +1,4 @@ +.globl _start + +_start: + jmp main diff --git a/src/platforms/linux-amd64/syscall.s b/src/platforms/linux-amd64/syscall.s new file mode 100644 index 0000000..20109b1 --- /dev/null +++ b/src/platforms/linux-amd64/syscall.s @@ -0,0 +1,12 @@ +.globl syscall + +syscall: + mov rax, rdi + mov rdi, rsi + mov rsi, rdx + mov rdx, rcx + mov r10, r8 + mov r8, r9 + mov r9, [rsp + 8] + syscall + ret diff --git a/src/platforms/linux-arm64/entry.s b/src/platforms/linux-arm64/entry.s new file mode 100644 index 0000000..5183473 --- /dev/null +++ b/src/platforms/linux-arm64/entry.s @@ -0,0 +1,5 @@ +.globl _start + +_start: + ldp x0, x1, [sp], #16 + b main diff --git a/src/platforms/linux-arm64/syscall.s b/src/platforms/linux-arm64/syscall.s new file mode 100644 index 0000000..e89cea0 --- /dev/null +++ b/src/platforms/linux-arm64/syscall.s @@ -0,0 +1,12 @@ +.globl syscall + +syscall: + mov x8, x0 + mov x0, x1 + mov x1, x2 + mov x2, x3 + mov x3, x4 + mov x4, x5 + mov x5, x6 + svc #0 + ret diff --git a/src/stdlib.c b/src/stdlib.c new file mode 100644 index 0000000..c3ad5b6 --- /dev/null +++ b/src/stdlib.c @@ -0,0 +1,5 @@ +#include + +void exit(int status) { + syscall(sys_exit, status); +} diff --git a/xmake.lua b/xmake.lua new file mode 100644 index 0000000..8a2b422 --- /dev/null +++ b/xmake.lua @@ -0,0 +1,33 @@ +add_rules("mode.debug", "mode.release") + +local cflags = { "-fno-builtin" } +local ldflags = { "-nostdlib" } +local includedirs = { "include" } + +target("slibc") + set_kind("static") + add_files("src/*.c") + add_includedirs(includedirs) + add_cflags(cflags) + + local plat_name + if is_plat("linux") and is_arch("arm64") then + plat_name = "linux-arm64" + elseif is_plat("linux") and is_arch("amd64") then + plat_name = "linux-amd64" + end + + if plat_name ~= nil then + local plat_path = "src/platforms/" .. plat_name .. "/" + add_files(plat_path .. "**.s") + end + +for _, dir in ipairs(os.dirs("examples/*")) do + target(path.basename(dir)) + set_kind("binary") + add_files(dir .. "/*.c") + add_includedirs(includedirs) + add_cflags(cflags) + add_ldflags(ldflags) + add_deps("slibc") +end