Below I've written some useful things to know about PCA and genomics. My apologies if you already know this or if too off topic.
Principle components analysis is an eigendecomposition (aka diagonalization) of a covariance matrix. Eigendecomposition is more general than PCA and for our purposes is the decomposition of a matrix of pair-wise relationships between measures (e.g., genetic variants) into independent vectors.
Decomposition on a covariance matrix gives you the independent vectors in variance space called principle components. (Note that often times the correlation matrix is used instead of the covariance matrix for PCA. This is to minimize bias among the measures in the decomposition.) Another popular method is independent component analysis (ICA), which decomposes a matrix of mutual information estimates between measures into independent vectors. Eigendecomposition is a popular function of many computing languages.
This said implementing PCA, ICA, etc. is highly accessible and there are many free ways to employ them. You should not pay for this. How you implement it depends on your time and programming expertise.
You can write your own code in for example FORTRAN, C, Python, R, MATLAB, etc. (one script to generate the relationship matrix using whatever comparison you are interested in and another to perform the decomposition).
Alternatively you can use popular free and open-source genomics platforms such as PLINK2, GCTA, EIGENSTRAT, etc. (links below).
Such decompositions are often used for dimensional reduction. Choosing the "top" components is a theoretical challenge. One method is to use a scree plot of the eigenvalues (aka loadings, weights) and choose those above the elbow. One can also choose vectors that only explain large proportions of the variance (based on the eigenvalues in PCA). Patterson, Price, and Reich have a nice paper on using the null hypothesis of a random (i.e., uncorrelated) matrix (Tracy-Widom theory) to choose non-random vectors; with applications to population stratification (see link). (Note that for population stratification, often LD pruning is performed prior to generating the correlation matrix. This is to minimize spurious correlations from the dual space. I have not looked into this much but that is my understanding.)