Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Merged
merged 3 commits into from
Feb 21, 2025

Conversation

spytheman
Copy link
Member

@spytheman spytheman commented Feb 21, 2025

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(...)`)
Copy link

Connected to Huly®: V_0.6-22191

@spytheman spytheman merged commit b766900 into vlang:master Feb 21, 2025
72 checks passed
@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