Skip to content

v.cflag: support #flag $when_first_existing(libABC.a, /some/path/libABC.a, ...), without panicing (unlike #flag $first_existing(...)) - #23780

Merged
spytheman merged 3 commits into
vlang:masterfrom
spytheman:support_flag_when_first_existing
Feb 21, 2025
Merged

spytheman merged 3 commits into
vlang:masterfrom
spytheman:support_flag_when_first_existing

Conversation

@spytheman

@spytheman spytheman commented Feb 21, 2025 •

Copy link
Copy Markdown
Contributor

This PR provides a way to cleanup vlib/sync/stdatomic/1.declarations.c.v later.
It will look like this:

$if linux {
	$if tinyc {
		$if amd64 {
			// most Linux distributions have /usr/lib/libatomic.so,
			// but Ubuntu uses gcc version specific dir
			#flag $when_first_existing('/usr/lib/gcc/x86_64-linux-gnu/6/libatomic.a','/usr/lib/gcc/x86_64-linux-gnu/7/libatomic.a','/usr/lib/gcc/x86_64-linux-gnu/8/libatomic.a','/usr/lib/gcc/x86_64-linux-gnu/9/libatomic.a','/usr/lib/gcc/x86_64-linux-gnu/10/libatomic.a','/usr/lib/gcc/x86_64-linux-gnu/11/libatomic.a','/usr/lib/gcc/x86_64-linux-gnu/12/libatomic.a','/usr/lib/gcc/x86_64-linux-gnu/13/libatomic.a','/usr/lib/gcc/x86_64-linux-gnu/14/libatomic.a')
			// Redhat/CentOS paths:
			#flag $when_first_existing('/usr/lib/gcc/x86_64-redhat-linux/6/libatomic.a','/usr/lib/gcc/x86_64-redhat-linux/7/libatomic.a','/usr/lib/gcc/x86_64-redhat-linux/8/libatomic.a','/usr/lib/gcc/x86_64-redhat-linux/9/libatomic.a','/usr/lib/gcc/x86_64-redhat-linux/10/libatomic.a','/usr/lib/gcc/x86_64-redhat-linux/11/libatomic.a','/usr/lib/gcc/x86_64-redhat-linux/12/libatomic.a','/usr/lib/gcc/x86_64-redhat-linux/13/libatomic.a','/usr/lib/gcc/x86_64-redhat-linux/14/libatomic.a')
			// Gentoo paths:
			#flag $when_first_existing('/usr/lib/gcc/x86_64-pc-linux-gnu/6/libatomic.a','/usr/lib/gcc/x86_64-pc-linux-gnu/7/libatomic.a','/usr/lib/gcc/x86_64-pc-linux-gnu/8/libatomic.a','/usr/lib/gcc/x86_64-pc-linux-gnu/9/libatomic.a','/usr/lib/gcc/x86_64-pc-linux-gnu/10/libatomic.a','/usr/lib/gcc/x86_64-pc-linux-gnu/11/libatomic.a','/usr/lib/gcc/x86_64-pc-linux-gnu/12/libatomic.a','/usr/lib/gcc/x86_64-pc-linux-gnu/13/libatomic.a','/usr/lib/gcc/x86_64-pc-linux-gnu/14/libatomic.a')
			// OpenSUSE paths:
			#flag $when_first_existing('/usr/lib64/gcc/x86_64-suse-linux/6/libatomic.a','/usr/lib64/gcc/x86_64-suse-linux/7/libatomic.a','/usr/lib64/gcc/x86_64-suse-linux/8/libatomic.a','/usr/lib64/gcc/x86_64-suse-linux/9/libatomic.a','/usr/lib64/gcc/x86_64-suse-linux/10/libatomic.a','/usr/lib64/gcc/x86_64-suse-linux/11/libatomic.a','/usr/lib64/gcc/x86_64-suse-linux/12/libatomic.a','/usr/lib64/gcc/x86_64-suse-linux/13/libatomic.a','/usr/lib64/gcc/x86_64-suse-linux/14/libatomic.a')
			// ALT Linux paths:
			#flag $when_first_existing('/usr/lib64/gcc/x86_64-alt-linux/6/libatomic.a','/usr/lib64/gcc/x86_64-alt-linux/7/libatomic.a','/usr/lib64/gcc/x86_64-alt-linux/8/libatomic.a','/usr/lib64/gcc/x86_64-alt-linux/9/libatomic.a','/usr/lib64/gcc/x86_64-alt-linux/10/libatomic.a','/usr/lib64/gcc/x86_64-alt-linux/11/libatomic.a','/usr/lib64/gcc/x86_64-alt-linux/12/libatomic.a','/usr/lib64/gcc/x86_64-alt-linux/13/libatomic.a','/usr/lib64/gcc/x86_64-alt-linux/14/libatomic.a')
			$if musl ? {
				#flag $when_first_existing('/usr/lib/gcc/x86_64-pc-linux-musl/6/libatomic.a','/usr/lib/gcc/x86_64-pc-linux-musl/7/libatomic.a','/usr/lib/gcc/x86_64-pc-linux-musl/8/libatomic.a','/usr/lib/gcc/x86_64-pc-linux-musl/9/libatomic.a','/usr/lib/gcc/x86_64-pc-linux-musl/10/libatomic.a','/usr/lib/gcc/x86_64-pc-linux-musl/11/libatomic.a','/usr/lib/gcc/x86_64-pc-linux-musl/12/libatomic.a','/usr/lib/gcc/x86_64-pc-linux-musl/13/libatomic.a','/usr/lib/gcc/x86_64-pc-linux-musl/14/libatomic.a')
			}
		}
	} $else {
		#flag -latomic
	}
}

With it, the passed arguments to tcc will not be as long anymore, since they will not include paths for linux distros that are != the current one.

Here is an example of the generated command passed to tcc, with #flag $when_first_existing():

#0 13:39:49 ^ support_flag_when_first_existing ~/code/v>./v -no-retry-compilation -cc tcc -showcc /home/delian/code/misc/2025_02_21__13/x.c.v
> C compiler cmd: '/home/delian/code/v/thirdparty/tcc/tcc.exe' '@/tmp/v_1000/x.01JMM50PDMPJTAZZRW71EKJ6T0.tmp.c.rsp'
> C compiler response file "/tmp/v_1000/x.01JMM50PDMPJTAZZRW71EKJ6T0.tmp.c.rsp":
  -fwrapv -o "/home/delian/code/misc/2025_02_21__13/x" -D GC_THREADS=1 -D GC_BUILTIN_ATOMIC=1 -I "/home/delian/code/v/thirdparty/libgc/include" "/tmp/v_1000/x.01JMM50PDMPJTAZZRW71EKJ6T0.tmp.c" -std=gnu99 -D_DEFAULT_SOURCE -bt25 "/home/delian/code/v/thirdparty/tcc/lib/libgc.a" -ldl -lpthread "/usr/lib/gcc/x86_64-linux-gnu/6/libatomic.a"
#0 13:41:49 ^ support_flag_when_first_existing ~/code/v>

…ABC.a, ...)`, without panicing (unlike `#flag $first_existing(...)`)
@huly-for-github

Copy link
Copy Markdown

Connected to Huly®: V_0.6-22191

@spytheman
spytheman merged commit b766900 into vlang:master Feb 21, 2025
@spytheman
spytheman deleted the support_flag_when_first_existing branch February 21, 2025 19:07
spytheman added a commit that referenced this pull request Feb 21, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant