Re: Include SQLite3 source upon buildworld
- Reply: Archimedes Gaviola : "Re: Include SQLite3 source upon buildworld"
- In reply to: Archimedes Gaviola : "Re: Include SQLite3 source upon buildworld"
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sat, 26 Nov 2022 09:24:15 UTC
On Wed, Nov 16, 2022 at 10:06 AM Archimedes Gaviola < archimedes.gaviola@gmail.com> wrote: > > > On Wed, Nov 16, 2022 at 1:48 AM Xin LI <delphij@gmail.com> wrote: > >> >> >> On Tue, Nov 15, 2022 at 5:16 AM Archimedes Gaviola < >> archimedes.gaviola@gmail.com> wrote: >> >>> Hi, >>> >>> There's an SQLite3 source located in the /usr/src/contrib/sqlite3. Is >>> there a way to include this upon buildworld so that I can run the binary >>> after compiling? >>> >> > Hi Xin Li, > > >> Yes and no. >> >> Yes -- you can always compile shell.c source and link against the >> library; the code is there, just the BSD make build glues are missing. >> > > Okay, nice! I'm so glad that it can be done. My goal is to make SQLite3 be > part of the base system in a customized FreeBSD build to make it embedded. > I am checking the version and it's updated 3.93.3 as I'm using the > 14.0-CURRENT. I need to figure-out this BSD make and glues you've mentioned > to make this happen. > > No -- the omission is intentional: the library is meant to be used by the >> base system as a "private library", which gives us the flexibility to not >> give a stable API/ABI promise and to only build with options that the base >> system needed (to reduce attack surface), so that when we make an update, >> it will be a "wholesale" update and user applications are not broken, even >> if sqlite3 update have introduced one. Users who want sqlite3 should >> really install it from ports (databases/sqlite3) or package. >> > > Oh I see, now I know its purpose. Currently, I have my system installed > with SQLite3 via package install 'pkg install sqlite3' and it works very > well but because this time I want something embeddable. It so happened that > I was checking the source and surprisingly found sqlite3. Anyway, let me > explore and try. > > Thanks and best regards, > Archimedes > Hi Xin LI, I added the new sqlite3 folder in the /usr/src/usr.bin/sqlite3 with the Makefile file as content and then reference the /usr/src/contrib/sqlite3 directory as source. root@generic:/usr/src/usr.bin/sqlite3 # ls -la total 16 drwxr-xr-x 2 root wheel 512 Nov 26 12:46 . drwxr-xr-x 279 root wheel 5120 Nov 26 12:46 .. -rw-r--r-- 1 root wheel 295 Nov 26 16:50 Makefile root@generic:/usr/src/usr.bin/sqlite3 # cat Makefile # $FreeBSD$ .include <src.opts.mk> SQLITE= ${SRCTOP}/contrib/sqlite3 .PATH: ${SQLITE} PROG= sqlite3 MK_MAN=no SRCS= sqlite3.c INCS= shell.c sqlite3.h WARNS?= 3 CFLAGS+= -I${SQLITE} \ -DSQLITE_THREADSAFE=0 \ -DSQLITE_OMIT_LOAD_EXTENSION .include <bsd.prog.mk> and perform the 'make' command. However, I encountered this error -> ld: error: undefined symbol: main as referenced to the crt1_c.c:72 (/usr/src/lib/csu/aarch64/crt1_c.c:72) file. root@generic:/usr/src/usr.bin/sqlite3 # make cc -O2 -pipe -fno-common -I/usr/src/contrib/sqlite3 -DSQLITE_THREADSAFE=1 -DSQLITE_OMIT_LOAD_EXTENSION -fPIE -g -gz=zlib -MD -MF.depend.sqlite3.o -MTsqlite3.o -std=gnu99 -Wno-format-zero-length -fstack-protector-strong -Wsystem-headers -Werror -Wall -Wno-format-y2k -W -Wno-unused-parameter -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wno-uninitialized -Wno-pointer-sign -Wno-empty-body -Wno-string-plus-int -Wno-unused-const-variable -Wno-error=unused-but-set-variable -Wno-tautological-compare -Wno-unused-value -Wno-parentheses-equality -Wno-unused-function -Wno-enum-conversion -Wno-unused-local-typedef -Wno-address-of-packed-member -Qunused-arguments -c /usr/src/contrib/sqlite3/sqlite3.c -o sqlite3.o cc -O2 -pipe -fno-common -I/usr/src/contrib/sqlite3 -DSQLITE_THREADSAFE=1 -DSQLITE_OMIT_LOAD_EXTENSION -fPIE -g -gz=zlib -std=gnu99 -Wno-format-zero-length -fstack-protector-strong -Wsystem-headers -Werror -Wall -Wno-format-y2k -W -Wno-unused-parameter -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wno-uninitialized -Wno-pointer-sign -Wno-empty-body -Wno-string-plus-int -Wno-unused-const-variable -Wno-error=unused-but-set-variable -Wno-tautological-compare -Wno-unused-value -Wno-parentheses-equality -Wno-unused-function -Wno-enum-conversion -Wno-unused-local-typedef -Wno-address-of-packed-member -Qunused-arguments -Wl,-zrelro -pie -o sqlite3.full sqlite3.o -L/usr/obj/usr/src/arm64.aarch64/lib/libthr -lpthread ld: error: undefined symbol: main >>> referenced by crt1_c.c:72 (/usr/src/lib/csu/aarch64/crt1_c.c:72) >>> /usr/lib/Scrt1.o:(__start) cc: error: linker command failed with exit code 1 (use -v to see invocation) *** Error code 1 Stop. make: stopped in /usr/src/usr.bin/sqlite3 Not sure if I missed something or if something goes wrong with my Makefile content construction. I basically followed from here https://www.sqlite.org/howtocompile.html and then proved the source to compile successfully. root@generic:/usr/src/contrib/sqlite3 # pwd /usr/src/contrib/sqlite3 root@generic:/usr/src/contrib/sqlite3 # ls -lah total 11364 drwxr-xr-x 3 root wheel 1.0K Oct 27 08:06 . drwxr-xr-x 89 root wheel 2.0K Nov 26 13:01 .. -rw-r--r-- 1 root wheel 15K Oct 27 08:06 INSTALL -rw-r--r-- 1 root wheel 729B Oct 27 08:06 Makefile.am -rw-r--r-- 1 root wheel 547B Oct 27 08:06 Makefile.fallback -rw-r--r-- 1 root wheel 37K Oct 27 08:06 Makefile.in -rw-r--r-- 1 root wheel 28K Oct 27 08:06 Makefile.msc -rw-r--r-- 1 root wheel 3.5K Oct 27 08:06 README.txt -rw-r--r-- 1 root wheel 7.1K Oct 27 08:06 Replace.cs -rw-r--r-- 1 root wheel 365K Oct 27 08:06 aclocal.m4 -rwxr-xr-x 1 root wheel 7.2K Oct 27 08:06 compile -rwxr-xr-x 1 root wheel 48K Oct 27 08:06 config.guess -rwxr-xr-x 1 root wheel 35K Oct 27 08:06 config.sub -rwxr-xr-x 1 root wheel 485K Oct 27 08:06 configure -rw-r--r-- 1 root wheel 8.5K Oct 27 08:06 configure.ac -rwxr-xr-x 1 root wheel 23K Oct 27 08:06 depcomp -rwxr-xr-x 1 root wheel 15K Oct 27 08:06 install-sh -rwxr-xr-x 1 root wheel 320K Oct 27 08:06 ltmain.sh -rwxr-xr-x 1 root wheel 6.7K Oct 27 08:06 missing -rw-r--r-- 1 root wheel 717K Oct 27 08:06 shell.c -rw-r--r-- 1 root wheel 8.7K Oct 27 08:06 sqlite3.1 -rw-r--r-- 1 root wheel 8.2M Oct 27 08:06 sqlite3.c -rw-r--r-- 1 root wheel 599K Oct 27 08:06 sqlite3.h -rw-r--r-- 1 root wheel 267B Oct 27 08:06 sqlite3.pc.in -rw-r--r-- 1 root wheel 1.9K Oct 27 08:06 sqlite3.rc -rw-r--r-- 1 root wheel 36K Oct 27 08:06 sqlite3ext.h -rw-r--r-- 1 root wheel 78B Oct 27 08:06 sqlite3rc.h drwxr-xr-x 6 root wheel 512B Oct 27 08:06 tea root@generic:/usr/src/contrib/sqlite3 # cc -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION shell.c sqlite3.c -o sqlite3 I've manually invoked the first compilation command inside the sqlite3 source directory and it works just fine as seen below. root@generic:/usr/src/contrib/sqlite3 # cc -O2 -pipe -fno-common -I/usr/src/contrib/sqlite3 -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION -fPIE -g -gz=zlib -MD -MF.depend.sqlite3.o -MTsqlite3.o -std=gnu99 -Wno-format-zero-length -fstack-protector-strong -Wsystem-headers -Werror -Wall -Wno-format-y2k -W -Wno-unused-parameter -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wno-uninitialized -Wno-pointer-sign -Wno-empty-body -Wno-string-plus-int -Wno-unused-const-variable -Wno-error=unused-but-set-variable -Wno-tautological-compare -Wno-unused-value -Wno-parentheses-equality -Wno-unused-function -Wno-enum-conversion -Wno-unused-local-typedef -Wno-address-of-packed-member -Qunused-arguments -c /usr/src/contrib/sqlite3/sqlite3.c -o sqlite3.o The second compilation command below seems to break even when compiled manually. cc -O2 -pipe -fno-common -I/usr/src/contrib/sqlite3 -DSQLITE_THREADSAFE=1 -DSQLITE_OMIT_LOAD_EXTENSION -fPIE -g -gz=zlib -std=gnu99 -Wno-format-zero-length -fstack-protector-strong -Wsystem-headers -Werror -Wall -Wno-format-y2k -W -Wno-unused-parameter -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wno-uninitialized -Wno-pointer-sign -Wno-empty-body -Wno-string-plus-int -Wno-unused-const-variable -Wno-error=unused-but-set-variable -Wno-tautological-compare -Wno-unused-value -Wno-parentheses-equality -Wno-unused-function -Wno-enum-conversion -Wno-unused-local-typedef -Wno-address-of-packed-member -Qunused-arguments -Wl,-zrelro -pie -o sqlite3.full sqlite3.o -L/usr/obj/usr/src/arm64.aarch64/lib/libthr -lpthread ld: error: undefined symbol: main >>> referenced by crt1_c.c:72 (/usr/src/lib/csu/aarch64/crt1_c.c:72) >>> /usr/lib/Scrt1.o:(__start) cc: error: linker command failed with exit code 1 (use -v to see invocation) *** Error code 1 Stop. make: stopped in /usr/src/usr.bin/sqlite3 Just want to solicit if you have an idea of this particular problem or you might have encountered this problem before? Thanks and best regards, Archimedes > >